diff --git a/.gitignore b/.gitignore
index 64fb33a..b66c295 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,6 +6,22 @@ SOURCES/7.4.064
 SOURCES/7.4.085
 SOURCES/7.4.131
 SOURCES/7.4.147
+SOURCES/7.4.184
+SOURCES/7.4.241
+SOURCES/7.4.243
+SOURCES/7.4.249
+SOURCES/7.4.269
+SOURCES/7.4.399
+SOURCES/7.4.467
+SOURCES/7.4.492
+SOURCES/7.4.530
+SOURCES/7.4.563
+SOURCES/7.4.569
+SOURCES/7.4.573
+SOURCES/7.4.598
+SOURCES/7.4.608
+SOURCES/7.4.612
+SOURCES/7.4.616
 SOURCES/Changelog.rpm
 SOURCES/gvim64.png
 SOURCES/vim-7.4.tar.bz2
diff --git a/.vim.metadata b/.vim.metadata
index c3279d5..90bd371 100644
--- a/.vim.metadata
+++ b/.vim.metadata
@@ -6,6 +6,22 @@ d317d8d98c8d9e5b82311cdebbe641e49769acd3 SOURCES/7.4.045
 06eec99738521488b4d08d6c9160ba3d2d3456f9 SOURCES/7.4.085
 e75488de78a1174eb10f993b76f62d91633b9181 SOURCES/7.4.131
 feebf1c35bd31622a16b6f91c70d9380ff1ef268 SOURCES/7.4.147
+9c8aedb4f282f4cc68dd8b198588309dce0413ad SOURCES/7.4.184
+623cd83b9cbf0e5eea8a5396c4a7de05c974dfb2 SOURCES/7.4.241
+06f65815eefec5d6ad4ebd73732c82ef77014e67 SOURCES/7.4.243
+7ab307fa27b4dc125b19bb871a2414945c062f97 SOURCES/7.4.249
+827d39f0e6ac104af4b4f598a3ec1162be55b5db SOURCES/7.4.269
+b8d2e20259ed477a557909e226ac232f8b06d986 SOURCES/7.4.399
+e05fdb6e3b231c66cc853a67d020cfe7ff8b2878 SOURCES/7.4.467
+4801f379d5452b2fefdb305bbbeddffef7eddaf2 SOURCES/7.4.492
+0aec9c9c3116e4b7ef8d5bd653805829824e6592 SOURCES/7.4.530
+aa25161167430793fd933e2a1f46d03f36382fd6 SOURCES/7.4.563
+4de7b50156f2bb862d93a751c69d74ece9f2f943 SOURCES/7.4.569
+e3ea314176a88fd1afe0c317370e6bf906763ce6 SOURCES/7.4.573
+136cf59f1de080cc1b0b91b7e2b9f7c04c0848f6 SOURCES/7.4.598
+42662ad6caea9620f3492a276cea3bcedd4c6f84 SOURCES/7.4.608
+f43aaa9078697b0a5577252c16cf84d682fa29eb SOURCES/7.4.612
+9c637238c6902c0b395d7f8dd277386e81ead87c SOURCES/7.4.616
 5ea81545fc28b57c490d25bda67a63a2838dd25b SOURCES/Changelog.rpm
 c32bd520a1498b71ee9bbcddc7ad05df1565d085 SOURCES/gvim64.png
 601abf7cc2b5ab186f40d8790e542f86afca86b7 SOURCES/vim-7.4.tar.bz2
diff --git a/SOURCES/7.4.161 b/SOURCES/7.4.161
new file mode 100644
index 0000000..0487264
--- /dev/null
+++ b/SOURCES/7.4.161
@@ -0,0 +1,75 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.161
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.161
+Problem:    Crash in Python exception handling.
+Solution:   Only use exception variables if did_throw is set. (ZyX)
+Files:	    if_py_both.h
+
+
+*** ../vim-7.4.160/src/if_py_both.h	2014-01-14 19:35:49.000000000 +0100
+--- src/if_py_both.h	2014-01-31 14:46:20.455526607 +0100
+***************
+*** 564,573 ****
+      /* Keyboard interrupt should be preferred over anything else */
+      if (got_int)
+      {
+! 	if (current_exception != NULL)
+  	    discard_current_exception();
+- 	else
+- 	    need_rethrow = did_throw = FALSE;
+  	got_int = FALSE;
+  	PyErr_SetNone(PyExc_KeyboardInterrupt);
+  	return -1;
+--- 564,571 ----
+      /* Keyboard interrupt should be preferred over anything else */
+      if (got_int)
+      {
+! 	if (did_throw)
+  	    discard_current_exception();
+  	got_int = FALSE;
+  	PyErr_SetNone(PyExc_KeyboardInterrupt);
+  	return -1;
+***************
+*** 599,608 ****
+      /* Python exception is preferred over vim one; unlikely to occur though */
+      else if (PyErr_Occurred())
+      {
+! 	if (current_exception != NULL)
+! 	    discard_current_exception();
+! 	else
+! 	    need_rethrow = did_throw = FALSE;
+  	return -1;
+      }
+      /* Finally transform VimL exception to python one */
+--- 597,603 ----
+      /* Python exception is preferred over vim one; unlikely to occur though */
+      else if (PyErr_Occurred())
+      {
+! 	discard_current_exception();
+  	return -1;
+      }
+      /* Finally transform VimL exception to python one */
+*** ../vim-7.4.160/src/version.c	2014-01-24 19:55:33.078220735 +0100
+--- src/version.c	2014-01-31 14:46:39.127526894 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     161,
+  /**/
+
+-- 
+Eagles may soar, but weasels don't get sucked into jet engines.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.162 b/SOURCES/7.4.162
new file mode 100644
index 0000000..0687e88
--- /dev/null
+++ b/SOURCES/7.4.162
@@ -0,0 +1,45 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.162
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.162
+Problem:    Running tests in shadow dir doesn't work.
+Solution:   Add testdir/sautest to the shadow target. (James McCoy)
+Files:	    src/Makefile
+
+
+*** ../vim-7.4.161/src/Makefile	2013-11-07 03:25:51.000000000 +0100
+--- src/Makefile	2014-02-05 12:34:00.214024436 +0100
+***************
+*** 2381,2386 ****
+--- 2381,2387 ----
+  				 ../../testdir/*.in \
+  				 ../../testdir/*.vim \
+  				 ../../testdir/python* \
++ 				 ../../testdir/sautest \
+  				 ../../testdir/test83-tags? \
+  				 ../../testdir/*.ok .
+  
+*** ../vim-7.4.161/src/version.c	2014-01-31 14:53:59.715533645 +0100
+--- src/version.c	2014-02-05 12:34:19.766024736 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     162,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+263. You have more e-mail addresses than shorts.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.163 b/SOURCES/7.4.163
new file mode 100644
index 0000000..b04e91d
--- /dev/null
+++ b/SOURCES/7.4.163
@@ -0,0 +1,75 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.163
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.163 (after 7.4.142)
+Problem:    MS-Windows input doesn't work properly on Windows 7 and earlier.
+Solution:   Add a check for Windows 8. (Yasuhiro Matsumoto)
+Files:	    src/os_win32.c
+
+
+*** ../vim-7.4.162/src/os_win32.c	2014-01-24 19:55:33.078220735 +0100
+--- src/os_win32.c	2014-02-05 13:33:03.758078734 +0100
+***************
+*** 232,237 ****
+--- 232,239 ----
+  
+  static char_u *exe_path = NULL;
+  
++ static BOOL win8_or_later = FALSE;
++ 
+  /*
+   * Version of ReadConsoleInput() that works with IME.
+   * Works around problems on Windows 8.
+***************
+*** 252,257 ****
+--- 254,266 ----
+      static DWORD s_dwMax = 0;
+      DWORD dwEvents;
+  
++     if (!win8_or_later)
++     {
++ 	if (nLength == -1)
++ 	    return PeekConsoleInput(hInput, lpBuffer, 1, lpEvents);
++ 	return ReadConsoleInput(hInput, lpBuffer, 1, &dwEvents);
++     }
++ 
+      if (s_dwMax == 0)
+      {
+  	if (nLength == -1)
+***************
+*** 617,622 ****
+--- 626,635 ----
+  
+  	g_PlatformId = ovi.dwPlatformId;
+  
++ 	if ((ovi.dwMajorVersion == 6 && ovi.dwMinorVersion >= 2)
++ 		|| ovi.dwMajorVersion > 6)
++ 	    win8_or_later = TRUE;
++ 
+  #ifdef HAVE_ACL
+  	/*
+  	 * Load the ADVAPI runtime if we are on anything
+*** ../vim-7.4.162/src/version.c	2014-02-05 12:36:36.622026833 +0100
+--- src/version.c	2014-02-05 13:31:31.618077322 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     163,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+266. You hear most of your jokes via e-mail instead of in person.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.164 b/SOURCES/7.4.164
new file mode 100644
index 0000000..b35deba
--- /dev/null
+++ b/SOURCES/7.4.164
@@ -0,0 +1,78 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.164
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.164 (after 7.4.163)
+Problem:    Problem with event handling on Windows 8.
+Solution:   Ignore duplicate WINDOW_BUFFER_SIZE_EVENTs. (Nobuhiro Takasaki)
+Files:	    src/os_win32.c
+
+
+*** ../vim-7.4.163/src/os_win32.c	2014-02-05 13:36:50.846082213 +0100
+--- src/os_win32.c	2014-02-05 14:01:13.350104623 +0100
+***************
+*** 253,258 ****
+--- 253,261 ----
+      static DWORD s_dwIndex = 0;
+      static DWORD s_dwMax = 0;
+      DWORD dwEvents;
++     int head;
++     int tail;
++     int i;
+  
+      if (!win8_or_later)
+      {
+***************
+*** 274,280 ****
+--- 277,305 ----
+  	    *lpEvents = 0;
+  	    return TRUE;
+  	}
++ 
++ 	if (s_dwMax > 1)
++ 	{
++ 	    head = 0;
++ 	    tail = s_dwMax - 1;
++ 	    while (head != tail)
++ 	    {
++ 		if (s_irCache[head].EventType == WINDOW_BUFFER_SIZE_EVENT
++ 			&& s_irCache[head + 1].EventType
++ 						  == WINDOW_BUFFER_SIZE_EVENT)
++ 		{
++ 		    /* Remove duplicate event to avoid flicker. */
++ 		    for (i = head; i < tail; ++i)
++ 			s_irCache[i] = s_irCache[i + 1];
++ 		    --tail;
++ 		    continue;
++ 		}
++ 		head++;
++ 	    }
++ 	    s_dwMax = tail + 1;
++ 	}
+      }
++ 
+      *lpBuffer = s_irCache[s_dwIndex];
+      if (nLength != -1 && ++s_dwIndex >= s_dwMax)
+  	s_dwMax = 0;
+*** ../vim-7.4.163/src/version.c	2014-02-05 13:36:50.850082213 +0100
+--- src/version.c	2014-02-05 13:54:15.570098222 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     164,
+  /**/
+
+-- 
+XML is a nice language for computers.  Not for humans.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.165 b/SOURCES/7.4.165
new file mode 100644
index 0000000..ab42f73
--- /dev/null
+++ b/SOURCES/7.4.165
@@ -0,0 +1,71 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.165
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.165
+Problem:    By default, after closing a buffer changes can't be undone.
+Solution:   In the example vimrc file set 'undofile'.
+Files:	    runtime/vimrc_example.vim
+
+
+*** ../vim-7.4.164/runtime/vimrc_example.vim	2011-04-15 20:58:36.000000000 +0200
+--- runtime/vimrc_example.vim	2014-02-05 21:59:40.534544501 +0100
+***************
+*** 1,7 ****
+  " An example for a vimrc file.
+  "
+  " Maintainer:	Bram Moolenaar <Bram@vim.org>
+! " Last change:	2011 Apr 15
+  "
+  " To use it, copy it to
+  "     for Unix and OS/2:  ~/.vimrc
+--- 1,7 ----
+  " An example for a vimrc file.
+  "
+  " Maintainer:	Bram Moolenaar <Bram@vim.org>
+! " Last change:	2014 Feb 05
+  "
+  " To use it, copy it to
+  "     for Unix and OS/2:  ~/.vimrc
+***************
+*** 24,30 ****
+  if has("vms")
+    set nobackup		" do not keep a backup file, use versions instead
+  else
+!   set backup		" keep a backup file
+  endif
+  set history=50		" keep 50 lines of command line history
+  set ruler		" show the cursor position all the time
+--- 24,31 ----
+  if has("vms")
+    set nobackup		" do not keep a backup file, use versions instead
+  else
+!   set backup		" keep a backup file (restore to previous version)
+!   set undofile		" keep an undo file (undo changes after closing)
+  endif
+  set history=50		" keep 50 lines of command line history
+  set ruler		" show the cursor position all the time
+*** ../vim-7.4.164/src/version.c	2014-02-05 14:02:23.590105699 +0100
+--- src/version.c	2014-02-05 21:59:47.774544612 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     165,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+269. You wonder how you can make your dustbin produce Sesame Street's
+     Oscar's the Garbage Monster song when you empty it.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.166 b/SOURCES/7.4.166
new file mode 100644
index 0000000..16f51b4
--- /dev/null
+++ b/SOURCES/7.4.166
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.166
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.166
+Problem:    Auto-loading a function for code that won't be executed.
+Solution:   Do not auto-load when evaluation is off. (Yasuhiro Matsumoto)
+Files:	    src/eval.c
+
+
+*** ../vim-7.4.165/src/eval.c	2014-01-23 20:09:29.523869260 +0100
+--- src/eval.c	2014-02-05 22:04:21.110548800 +0100
+***************
+*** 5159,5165 ****
+  	    {
+  		/* If "s" is the name of a variable of type VAR_FUNC
+  		 * use its contents. */
+! 		s = deref_func_name(s, &len, FALSE);
+  
+  		/* Invoke the function. */
+  		ret = get_func_tv(s, len, rettv, arg,
+--- 5159,5165 ----
+  	    {
+  		/* If "s" is the name of a variable of type VAR_FUNC
+  		 * use its contents. */
+! 		s = deref_func_name(s, &len, !evaluate);
+  
+  		/* Invoke the function. */
+  		ret = get_func_tv(s, len, rettv, arg,
+*** ../vim-7.4.165/src/version.c	2014-02-05 22:01:56.690546587 +0100
+--- src/version.c	2014-02-05 22:06:18.610550600 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     166,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+270. You are subscribed to a mailing list for every piece of software
+     you use.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.167 b/SOURCES/7.4.167
new file mode 100644
index 0000000..c3ad074
--- /dev/null
+++ b/SOURCES/7.4.167
@@ -0,0 +1,195 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.167
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.167 (after 7.4.149)
+Problem:    Fixes are not tested.
+Solution:   Add a test for not autoloading on assignment. (Yukihiro Nakadaira)
+Files:      src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
+            src/testdir/Make_ming.mak, src/testdir/Make_os2.mak,
+            src/testdir/Make_vms.mms, src/testdir/Makefile,
+            src/testdir/sautest/autoload/Test104.vim, src/testdir/test104.in,
+            src/testdir/test104.ok
+
+
+*** ../vim-7.4.166/src/testdir/Make_amiga.mak	2013-11-21 14:21:25.000000000 +0100
+--- src/testdir/Make_amiga.mak	2014-02-05 22:16:46.654560224 +0100
+***************
+*** 34,40 ****
+  		test81.out test82.out test83.out test84.out test88.out \
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test97.out test98.out \
+! 		test99.out test100.out test101.out test102.out test103.out
+  
+  .SUFFIXES: .in .out
+  
+--- 34,41 ----
+  		test81.out test82.out test83.out test84.out test88.out \
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test97.out test98.out \
+! 		test99.out test100.out test101.out test102.out test103.out \
+! 		test104.out
+  
+  .SUFFIXES: .in .out
+  
+***************
+*** 154,156 ****
+--- 155,158 ----
+  test101.out: test101.in
+  test102.out: test102.in
+  test103.out: test103.in
++ test104.out: test104.in
+*** ../vim-7.4.166/src/testdir/Make_dos.mak	2013-11-21 14:21:25.000000000 +0100
+--- src/testdir/Make_dos.mak	2014-02-05 22:16:46.654560224 +0100
+***************
+*** 33,39 ****
+  		test84.out test85.out test86.out test87.out test88.out \
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test98.out test99.out \
+! 		test100.out test101.out test102.out test103.out
+  
+  SCRIPTS32 =	test50.out test70.out
+  
+--- 33,39 ----
+  		test84.out test85.out test86.out test87.out test88.out \
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test98.out test99.out \
+! 		test100.out test101.out test102.out test103.out test104.out
+  
+  SCRIPTS32 =	test50.out test70.out
+  
+*** ../vim-7.4.166/src/testdir/Make_ming.mak	2014-01-06 15:51:46.000000000 +0100
+--- src/testdir/Make_ming.mak	2014-02-05 22:16:46.654560224 +0100
+***************
+*** 53,59 ****
+  		test84.out test85.out test86.out test87.out test88.out \
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test98.out test99.out \
+! 		test100.out test101.out test102.out test103.out
+  
+  SCRIPTS32 =	test50.out test70.out
+  
+--- 53,59 ----
+  		test84.out test85.out test86.out test87.out test88.out \
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test98.out test99.out \
+! 		test100.out test101.out test102.out test103.out test104.out
+  
+  SCRIPTS32 =	test50.out test70.out
+  
+*** ../vim-7.4.166/src/testdir/Make_os2.mak	2013-11-21 14:21:25.000000000 +0100
+--- src/testdir/Make_os2.mak	2014-02-05 22:16:46.654560224 +0100
+***************
+*** 35,41 ****
+  		test81.out test82.out test83.out test84.out test88.out \
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test98.out test99.out \
+! 		test100.out test101.out test102.out test103.out
+  
+  .SUFFIXES: .in .out
+  
+--- 35,41 ----
+  		test81.out test82.out test83.out test84.out test88.out \
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test98.out test99.out \
+! 		test100.out test101.out test102.out test103.out test104.out
+  
+  .SUFFIXES: .in .out
+  
+*** ../vim-7.4.166/src/testdir/Make_vms.mms	2013-11-21 14:21:25.000000000 +0100
+--- src/testdir/Make_vms.mms	2014-02-05 22:16:46.658560224 +0100
+***************
+*** 79,85 ****
+  	 test82.out test83.out test84.out test88.out test89.out \
+  	 test90.out test91.out test92.out test93.out test94.out \
+  	 test95.out test96.out test97.out test98.out test99.out \
+! 	 test100.out test101.out test102.out test103.out
+  
+  # Known problems:
+  # Test 30: a problem around mac format - unknown reason
+--- 79,85 ----
+  	 test82.out test83.out test84.out test88.out test89.out \
+  	 test90.out test91.out test92.out test93.out test94.out \
+  	 test95.out test96.out test97.out test98.out test99.out \
+! 	 test100.out test101.out test102.out test103.out test104.out
+  
+  # Known problems:
+  # Test 30: a problem around mac format - unknown reason
+*** ../vim-7.4.166/src/testdir/Makefile	2013-11-21 14:21:25.000000000 +0100
+--- src/testdir/Makefile	2014-02-05 22:16:46.658560224 +0100
+***************
+*** 30,36 ****
+  		test84.out test85.out test86.out test87.out test88.out \
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test97.out test98.out \
+! 		test99.out test100.out test101.out test102.out test103.out
+  
+  SCRIPTS_GUI = test16.out
+  
+--- 30,37 ----
+  		test84.out test85.out test86.out test87.out test88.out \
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test97.out test98.out \
+! 		test99.out test100.out test101.out test102.out test103.out \
+! 		test104.out
+  
+  SCRIPTS_GUI = test16.out
+  
+*** ../vim-7.4.166/src/testdir/sautest/autoload/Test104.vim	2014-02-05 22:25:12.050567968 +0100
+--- src/testdir/sautest/autoload/Test104.vim	2014-02-05 22:16:46.658560224 +0100
+***************
+*** 0 ****
+--- 1 ----
++ let Test104#numvar = 123
+*** ../vim-7.4.166/src/testdir/test104.in	2014-02-05 22:25:12.062567968 +0100
+--- src/testdir/test104.in	2014-02-05 22:24:07.706566982 +0100
+***************
+*** 0 ****
+--- 1,16 ----
++ Tests for autoload.  vim: set ft=vim ts=8 :
++ 
++ STARTTEST
++ :so small.vim
++ :set runtimepath+=./sautest
++ :" Test to not autoload when assigning.  It causes internal error.
++ :try
++ :  let Test104#numvar = function('tr')
++ :  $put ='OK: ' . string(Test104#numvar)
++ :catch
++ :  $put ='FAIL: ' . v:exception
++ :endtry
++ :/^Results/,$wq! test.out
++ ENDTEST
++ 
++ Results of test104:
+*** ../vim-7.4.166/src/testdir/test104.ok	2014-02-05 22:25:12.070567968 +0100
+--- src/testdir/test104.ok	2014-02-05 22:16:46.658560224 +0100
+***************
+*** 0 ****
+--- 1,2 ----
++ Results of test104:
++ OK: function('tr')
+*** ../vim-7.4.166/src/version.c	2014-02-05 22:13:02.366556787 +0100
+--- src/version.c	2014-02-05 22:18:05.506561432 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     167,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+271. You collect hilarious signatures from all 250 mailing lists you
+     are subscribed to.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.168 b/SOURCES/7.4.168
new file mode 100644
index 0000000..ac57dc4
--- /dev/null
+++ b/SOURCES/7.4.168
@@ -0,0 +1,91 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.168
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.168
+Problem:    Can't compile with Ruby 2.1.0.
+Solution:   Add support for new GC. (Kohei Suzuki)
+Files:	    src/if_ruby.c
+
+
+*** ../vim-7.4.167/src/if_ruby.c	2013-05-20 12:47:48.000000000 +0200
+--- src/if_ruby.c	2014-02-05 22:35:17.378577243 +0100
+***************
+*** 96,101 ****
+--- 96,107 ----
+  # define rb_num2int rb_num2int_stub
+  #endif
+  
++ # if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 21
++ /* Ruby 2.1 adds new GC called RGenGC and RARRAY_PTR uses
++  * rb_gc_writebarrier_unprotect_promoted if USE_RGENGC  */
++ #  define rb_gc_writebarrier_unprotect_promoted rb_gc_writebarrier_unprotect_promoted_stub
++ # endif
++ 
+  #include <ruby.h>
+  #ifdef RUBY19_OR_LATER
+  # include <ruby/encoding.h>
+***************
+*** 373,378 ****
+--- 379,388 ----
+  static void* (*ruby_process_options)(int, char**);
+  # endif
+  
++ # if defined(USE_RGENGC) && USE_RGENGC
++ static void (*dll_rb_gc_writebarrier_unprotect_promoted)(VALUE);
++ # endif
++ 
+  # if defined(RUBY19_OR_LATER) && !defined(PROTO)
+  SIGNED_VALUE rb_num2long_stub(VALUE x)
+  {
+***************
+*** 406,411 ****
+--- 416,428 ----
+  #  endif
+  # endif
+  
++ # if defined(USE_RGENGC) && USE_RGENGC
++ void rb_gc_writebarrier_unprotect_promoted_stub(VALUE obj)
++ {
++     return dll_rb_gc_writebarrier_unprotect_promoted(obj);
++ }
++ # endif
++ 
+  static HINSTANCE hinstRuby = NULL; /* Instance of ruby.dll */
+  
+  /*
+***************
+*** 521,526 ****
+--- 538,546 ----
+  #  endif
+      {"ruby_init_stack", (RUBY_PROC*)&dll_ruby_init_stack},
+  # endif
++ # if defined(USE_RGENGC) && USE_RGENGC
++     {"rb_gc_writebarrier_unprotect_promoted", (RUBY_PROC*)&dll_rb_gc_writebarrier_unprotect_promoted},
++ # endif
+      {"", NULL},
+  };
+  
+*** ../vim-7.4.167/src/version.c	2014-02-05 22:25:29.982568243 +0100
+--- src/version.c	2014-02-05 22:36:14.010578111 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     168,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+10E. You start counting in hex.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.169 b/SOURCES/7.4.169
new file mode 100644
index 0000000..bfb4c16
--- /dev/null
+++ b/SOURCES/7.4.169
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.169
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.169
+Problem:    ":sleep" puts cursor in the wrong column. (Liang Li)
+Solution:   Add the window offset. (Christian Brabandt)
+Files:	    src/ex_docmd.c
+
+
+*** ../vim-7.4.168/src/ex_docmd.c	2014-01-10 15:53:09.000000000 +0100
+--- src/ex_docmd.c	2014-02-05 22:45:39.318586773 +0100
+***************
+*** 8371,8377 ****
+      {
+  	n = W_WINROW(curwin) + curwin->w_wrow - msg_scrolled;
+  	if (n >= 0)
+! 	    windgoto((int)n, curwin->w_wcol);
+      }
+  
+      len = eap->line2;
+--- 8371,8377 ----
+      {
+  	n = W_WINROW(curwin) + curwin->w_wrow - msg_scrolled;
+  	if (n >= 0)
+! 	    windgoto((int)n, W_WINCOL(curwin) + curwin->w_wcol);
+      }
+  
+      len = eap->line2;
+*** ../vim-7.4.168/src/version.c	2014-02-05 22:41:11.430582669 +0100
+--- src/version.c	2014-02-05 22:44:51.458586040 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     169,
+  /**/
+
+-- 
+ARTHUR: This new learning amazes me, Sir Bedevere.  Explain again how sheep's
+        bladders may be employed to prevent earthquakes.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.170 b/SOURCES/7.4.170
new file mode 100644
index 0000000..17de640
--- /dev/null
+++ b/SOURCES/7.4.170
@@ -0,0 +1,90 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.170
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.170
+Problem:    Some help tags don't work with ":help". (Tim Chase)
+Solution:   Add exceptions.
+Files:	    src/ex_cmds.c
+
+
+*** ../vim-7.4.169/src/ex_cmds.c	2013-11-09 03:31:45.000000000 +0100
+--- src/ex_cmds.c	2014-02-11 12:10:43.905946437 +0100
+***************
+*** 5936,5949 ****
+  			       "?", ":?", "?<CR>", "g?", "g?g?", "g??", "z?",
+  			       "/\\?", "/\\z(\\)", "\\=", ":s\\=",
+  			       "[count]", "[quotex]", "[range]",
+! 			       "[pattern]", "\\|", "\\%$"};
+      static char *(rtable[]) = {"star", "gstar", "[star", "]star", ":star",
+  			       "/star", "/\\\\star", "quotestar", "starstar",
+  			       "cpo-star", "/\\\\(\\\\)", "/\\\\%(\\\\)",
+  			       "?", ":?", "?<CR>", "g?", "g?g?", "g??", "z?",
+  			       "/\\\\?", "/\\\\z(\\\\)", "\\\\=", ":s\\\\=",
+  			       "\\[count]", "\\[quotex]", "\\[range]",
+! 			       "\\[pattern]", "\\\\bar", "/\\\\%\\$"};
+      int flags;
+  
+      d = IObuff;		    /* assume IObuff is long enough! */
+--- 5936,5953 ----
+  			       "?", ":?", "?<CR>", "g?", "g?g?", "g??", "z?",
+  			       "/\\?", "/\\z(\\)", "\\=", ":s\\=",
+  			       "[count]", "[quotex]", "[range]",
+! 			       "[pattern]", "\\|", "\\%$",
+! 			       "s/\\~", "s/\\U", "s/\\L",
+! 			       "s/\\1", "s/\\2", "s/\\3", "s/\\9"};
+      static char *(rtable[]) = {"star", "gstar", "[star", "]star", ":star",
+  			       "/star", "/\\\\star", "quotestar", "starstar",
+  			       "cpo-star", "/\\\\(\\\\)", "/\\\\%(\\\\)",
+  			       "?", ":?", "?<CR>", "g?", "g?g?", "g??", "z?",
+  			       "/\\\\?", "/\\\\z(\\\\)", "\\\\=", ":s\\\\=",
+  			       "\\[count]", "\\[quotex]", "\\[range]",
+! 			       "\\[pattern]", "\\\\bar", "/\\\\%\\$",
+!                                "s/\\\\\\~", "s/\\\\U", "s/\\\\L",
+! 			       "s/\\\\1", "s/\\\\2", "s/\\\\3", "s/\\\\9"};
+      int flags;
+  
+      d = IObuff;		    /* assume IObuff is long enough! */
+***************
+*** 5982,5988 ****
+  	  /* Replace:
+  	   * "[:...:]" with "\[:...:]"
+  	   * "[++...]" with "\[++...]"
+! 	   * "\{" with "\\{"
+  	   */
+  	    if ((arg[0] == '[' && (arg[1] == ':'
+  			 || (arg[1] == '+' && arg[2] == '+')))
+--- 5986,5992 ----
+  	  /* Replace:
+  	   * "[:...:]" with "\[:...:]"
+  	   * "[++...]" with "\[++...]"
+! 	   * "\{" with "\\{"               -- matching "} \}"
+  	   */
+  	    if ((arg[0] == '[' && (arg[1] == ':'
+  			 || (arg[1] == '+' && arg[2] == '+')))
+*** ../vim-7.4.169/src/version.c	2014-02-05 22:46:49.062587842 +0100
+--- src/version.c	2014-02-11 11:41:50.433919875 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     170,
+  /**/
+
+-- 
+   GALAHAD turns back.  We see from his POV the lovely ZOOT standing by him
+   smiling enchantingly and a number of equally delectable GIRLIES draped
+   around in the seductively poulticed room.  They look at him smilingly and
+   wave.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.171 b/SOURCES/7.4.171
new file mode 100644
index 0000000..cfd3906
--- /dev/null
+++ b/SOURCES/7.4.171
@@ -0,0 +1,841 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.171
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.171
+Problem:    Redo does not set v:count and v:count1.
+Solution:   Use a separate buffer for redo, so that we can set the counts when
+	    performing redo.
+Files:	    src/getchar.c, src/globals.h, src/normal.c, src/proto/getchar.pro,
+	    src/structs.h
+
+
+*** ../vim-7.4.170/src/getchar.c	2013-06-29 13:43:27.000000000 +0200
+--- src/getchar.c	2014-02-11 14:54:46.830097259 +0100
+***************
+*** 40,52 ****
+  
+  #define MINIMAL_SIZE 20			/* minimal size for b_str */
+  
+! static struct buffheader redobuff = {{NULL, {NUL}}, NULL, 0, 0};
+! static struct buffheader old_redobuff = {{NULL, {NUL}}, NULL, 0, 0};
+  #if defined(FEAT_AUTOCMD) || defined(FEAT_EVAL) || defined(PROTO)
+! static struct buffheader save_redobuff = {{NULL, {NUL}}, NULL, 0, 0};
+! static struct buffheader save_old_redobuff = {{NULL, {NUL}}, NULL, 0, 0};
+  #endif
+! static struct buffheader recordbuff = {{NULL, {NUL}}, NULL, 0, 0};
+  
+  static int typeahead_char = 0;		/* typeahead char that's not flushed */
+  
+--- 40,52 ----
+  
+  #define MINIMAL_SIZE 20			/* minimal size for b_str */
+  
+! static buffheader_T redobuff = {{NULL, {NUL}}, NULL, 0, 0};
+! static buffheader_T old_redobuff = {{NULL, {NUL}}, NULL, 0, 0};
+  #if defined(FEAT_AUTOCMD) || defined(FEAT_EVAL) || defined(PROTO)
+! static buffheader_T save_redobuff = {{NULL, {NUL}}, NULL, 0, 0};
+! static buffheader_T save_old_redobuff = {{NULL, {NUL}}, NULL, 0, 0};
+  #endif
+! static buffheader_T recordbuff = {{NULL, {NUL}}, NULL, 0, 0};
+  
+  static int typeahead_char = 0;		/* typeahead char that's not flushed */
+  
+***************
+*** 112,122 ****
+  
+  static int	last_recorded_len = 0;	/* number of last recorded chars */
+  
+! static char_u	*get_buffcont __ARGS((struct buffheader *, int));
+! static void	add_buff __ARGS((struct buffheader *, char_u *, long n));
+! static void	add_num_buff __ARGS((struct buffheader *, long));
+! static void	add_char_buff __ARGS((struct buffheader *, int));
+! static int	read_stuff __ARGS((int advance));
+  static void	start_stuff __ARGS((void));
+  static int	read_redo __ARGS((int, int));
+  static void	copy_redo __ARGS((int));
+--- 112,123 ----
+  
+  static int	last_recorded_len = 0;	/* number of last recorded chars */
+  
+! static char_u	*get_buffcont __ARGS((buffheader_T *, int));
+! static void	add_buff __ARGS((buffheader_T *, char_u *, long n));
+! static void	add_num_buff __ARGS((buffheader_T *, long));
+! static void	add_char_buff __ARGS((buffheader_T *, int));
+! static int	read_readbuffers __ARGS((int advance));
+! static int	read_readbuf __ARGS((buffheader_T *buf, int advance));
+  static void	start_stuff __ARGS((void));
+  static int	read_redo __ARGS((int, int));
+  static void	copy_redo __ARGS((int));
+***************
+*** 137,145 ****
+   */
+      void
+  free_buff(buf)
+!     struct buffheader	*buf;
+  {
+!     struct buffblock	*p, *np;
+  
+      for (p = buf->bh_first.b_next; p != NULL; p = np)
+      {
+--- 138,146 ----
+   */
+      void
+  free_buff(buf)
+!     buffheader_T	*buf;
+  {
+!     buffblock_T	*p, *np;
+  
+      for (p = buf->bh_first.b_next; p != NULL; p = np)
+      {
+***************
+*** 155,168 ****
+   */
+      static char_u *
+  get_buffcont(buffer, dozero)
+!     struct buffheader	*buffer;
+      int			dozero;	    /* count == zero is not an error */
+  {
+      long_u	    count = 0;
+      char_u	    *p = NULL;
+      char_u	    *p2;
+      char_u	    *str;
+!     struct buffblock *bp;
+  
+      /* compute the total length of the string */
+      for (bp = buffer->bh_first.b_next; bp != NULL; bp = bp->b_next)
+--- 156,169 ----
+   */
+      static char_u *
+  get_buffcont(buffer, dozero)
+!     buffheader_T	*buffer;
+      int			dozero;	    /* count == zero is not an error */
+  {
+      long_u	    count = 0;
+      char_u	    *p = NULL;
+      char_u	    *p2;
+      char_u	    *str;
+!     buffblock_T *bp;
+  
+      /* compute the total length of the string */
+      for (bp = buffer->bh_first.b_next; bp != NULL; bp = bp->b_next)
+***************
+*** 230,240 ****
+   */
+      static void
+  add_buff(buf, s, slen)
+!     struct buffheader	*buf;
+      char_u		*s;
+      long		slen;	/* length of "s" or -1 */
+  {
+!     struct buffblock *p;
+      long_u	    len;
+  
+      if (slen < 0)
+--- 231,241 ----
+   */
+      static void
+  add_buff(buf, s, slen)
+!     buffheader_T	*buf;
+      char_u		*s;
+      long		slen;	/* length of "s" or -1 */
+  {
+!     buffblock_T *p;
+      long_u	    len;
+  
+      if (slen < 0)
+***************
+*** 270,276 ****
+  	    len = MINIMAL_SIZE;
+  	else
+  	    len = slen;
+! 	p = (struct buffblock *)lalloc((long_u)(sizeof(struct buffblock) + len),
+  									TRUE);
+  	if (p == NULL)
+  	    return; /* no space, just forget it */
+--- 271,277 ----
+  	    len = MINIMAL_SIZE;
+  	else
+  	    len = slen;
+! 	p = (buffblock_T *)lalloc((long_u)(sizeof(buffblock_T) + len),
+  									TRUE);
+  	if (p == NULL)
+  	    return; /* no space, just forget it */
+***************
+*** 289,295 ****
+   */
+      static void
+  add_num_buff(buf, n)
+!     struct buffheader *buf;
+      long	      n;
+  {
+      char_u	number[32];
+--- 290,296 ----
+   */
+      static void
+  add_num_buff(buf, n)
+!     buffheader_T *buf;
+      long	      n;
+  {
+      char_u	number[32];
+***************
+*** 304,310 ****
+   */
+      static void
+  add_char_buff(buf, c)
+!     struct buffheader	*buf;
+      int			c;
+  {
+  #ifdef FEAT_MBYTE
+--- 305,311 ----
+   */
+      static void
+  add_char_buff(buf, c)
+!     buffheader_T	*buf;
+      int			c;
+  {
+  #ifdef FEAT_MBYTE
+***************
+*** 354,399 ****
+  #endif
+  }
+  
+  /*
+!  * Get one byte from the stuff buffer.
+   * If advance == TRUE go to the next char.
+   * No translation is done K_SPECIAL and CSI are escaped.
+   */
+      static int
+! read_stuff(advance)
+      int		advance;
+  {
+!     char_u		c;
+!     struct buffblock	*curr;
+  
+!     if (stuffbuff.bh_first.b_next == NULL)  /* buffer is empty */
+  	return NUL;
+  
+!     curr = stuffbuff.bh_first.b_next;
+!     c = curr->b_str[stuffbuff.bh_index];
+  
+      if (advance)
+      {
+! 	if (curr->b_str[++stuffbuff.bh_index] == NUL)
+  	{
+! 	    stuffbuff.bh_first.b_next = curr->b_next;
+  	    vim_free(curr);
+! 	    stuffbuff.bh_index = 0;
+  	}
+      }
+      return c;
+  }
+  
+  /*
+!  * Prepare the stuff buffer for reading (if it contains something).
+   */
+      static void
+  start_stuff()
+  {
+!     if (stuffbuff.bh_first.b_next != NULL)
+      {
+! 	stuffbuff.bh_curr = &(stuffbuff.bh_first);
+! 	stuffbuff.bh_space = 0;
+      }
+  }
+  
+--- 355,425 ----
+  #endif
+  }
+  
++ /* First read ahead buffer. Used for translated commands. */
++ static buffheader_T readbuf1 = {{NULL, {NUL}}, NULL, 0, 0};
++ 
++ /* Second read ahead buffer. Used for redo. */
++ static buffheader_T readbuf2 = {{NULL, {NUL}}, NULL, 0, 0};
++ 
+  /*
+!  * Get one byte from the read buffers.  Use readbuf1 one first, use readbuf2
+!  * if that one is empty.
+   * If advance == TRUE go to the next char.
+   * No translation is done K_SPECIAL and CSI are escaped.
+   */
+      static int
+! read_readbuffers(advance)
+      int		advance;
+  {
+!     int c;
+! 
+!     c = read_readbuf(&readbuf1, advance);
+!     if (c == NUL)
+! 	c = read_readbuf(&readbuf2, advance);
+!     return c;
+! }
+! 
+!     static int
+! read_readbuf(buf, advance)
+!     buffheader_T    *buf;
+!     int		    advance;
+! {
+!     char_u	c;
+!     buffblock_T	*curr;
+  
+!     if (buf->bh_first.b_next == NULL)  /* buffer is empty */
+  	return NUL;
+  
+!     curr = buf->bh_first.b_next;
+!     c = curr->b_str[buf->bh_index];
+  
+      if (advance)
+      {
+! 	if (curr->b_str[++buf->bh_index] == NUL)
+  	{
+! 	    buf->bh_first.b_next = curr->b_next;
+  	    vim_free(curr);
+! 	    buf->bh_index = 0;
+  	}
+      }
+      return c;
+  }
+  
+  /*
+!  * Prepare the read buffers for reading (if they contains something).
+   */
+      static void
+  start_stuff()
+  {
+!     if (readbuf1.bh_first.b_next != NULL)
+      {
+! 	readbuf1.bh_curr = &(readbuf1.bh_first);
+! 	readbuf1.bh_space = 0;
+!     }
+!     if (readbuf2.bh_first.b_next != NULL)
+!     {
+! 	readbuf2.bh_curr = &(readbuf2.bh_first);
+! 	readbuf2.bh_space = 0;
+      }
+  }
+  
+***************
+*** 403,409 ****
+      int
+  stuff_empty()
+  {
+!     return (stuffbuff.bh_first.b_next == NULL);
+  }
+  
+  /*
+--- 429,446 ----
+      int
+  stuff_empty()
+  {
+!     return (readbuf1.bh_first.b_next == NULL
+! 	 && readbuf2.bh_first.b_next == NULL);
+! }
+! 
+! /*
+!  * Return TRUE if readbuf1 is empty.  There may still be redo characters in
+!  * redbuf2.
+!  */
+!     int
+! readbuf1_empty()
+! {
+!     return (readbuf1.bh_first.b_next == NULL);
+  }
+  
+  /*
+***************
+*** 428,434 ****
+      init_typebuf();
+  
+      start_stuff();
+!     while (read_stuff(TRUE) != NUL)
+  	;
+  
+      if (flush_typeahead)	    /* remove all typeahead */
+--- 465,471 ----
+      init_typebuf();
+  
+      start_stuff();
+!     while (read_readbuffers(TRUE) != NUL)
+  	;
+  
+      if (flush_typeahead)	    /* remove all typeahead */
+***************
+*** 483,489 ****
+  	redobuff = old_redobuff;
+  	old_redobuff.bh_first.b_next = NULL;
+  	start_stuff();
+! 	while (read_stuff(TRUE) != NUL)
+  	    ;
+      }
+  }
+--- 520,526 ----
+  	redobuff = old_redobuff;
+  	old_redobuff.bh_first.b_next = NULL;
+  	start_stuff();
+! 	while (read_readbuffers(TRUE) != NUL)
+  	    ;
+      }
+  }
+***************
+*** 638,644 ****
+  stuffReadbuff(s)
+      char_u	*s;
+  {
+!     add_buff(&stuffbuff, s, -1L);
+  }
+  
+      void
+--- 675,681 ----
+  stuffReadbuff(s)
+      char_u	*s;
+  {
+!     add_buff(&readbuf1, s, -1L);
+  }
+  
+      void
+***************
+*** 646,652 ****
+      char_u	*s;
+      long	len;
+  {
+!     add_buff(&stuffbuff, s, len);
+  }
+  
+  #if defined(FEAT_EVAL) || defined(PROTO)
+--- 683,689 ----
+      char_u	*s;
+      long	len;
+  {
+!     add_buff(&readbuf1, s, len);
+  }
+  
+  #if defined(FEAT_EVAL) || defined(PROTO)
+***************
+*** 692,698 ****
+  stuffcharReadbuff(c)
+      int		   c;
+  {
+!     add_char_buff(&stuffbuff, c);
+  }
+  
+  /*
+--- 729,735 ----
+  stuffcharReadbuff(c)
+      int		   c;
+  {
+!     add_char_buff(&readbuf1, c);
+  }
+  
+  /*
+***************
+*** 702,708 ****
+  stuffnumReadbuff(n)
+      long    n;
+  {
+!     add_num_buff(&stuffbuff, n);
+  }
+  
+  /*
+--- 739,745 ----
+  stuffnumReadbuff(n)
+      long    n;
+  {
+!     add_num_buff(&readbuf1, n);
+  }
+  
+  /*
+***************
+*** 718,730 ****
+      int		init;
+      int		old_redo;
+  {
+!     static struct buffblock	*bp;
+!     static char_u		*p;
+!     int				c;
+  #ifdef FEAT_MBYTE
+!     int				n;
+!     char_u			buf[MB_MAXBYTES + 1];
+!     int				i;
+  #endif
+  
+      if (init)
+--- 755,767 ----
+      int		init;
+      int		old_redo;
+  {
+!     static buffblock_T	*bp;
+!     static char_u	*p;
+!     int			c;
+  #ifdef FEAT_MBYTE
+!     int			n;
+!     char_u		buf[MB_MAXBYTES + 1];
+!     int			i;
+  #endif
+  
+      if (init)
+***************
+*** 795,805 ****
+      int	    c;
+  
+      while ((c = read_redo(FALSE, old_redo)) != NUL)
+! 	stuffcharReadbuff(c);
+  }
+  
+  /*
+!  * Stuff the redo buffer into the stuffbuff.
+   * Insert the redo count into the command.
+   * If "old_redo" is TRUE, the last but one command is repeated
+   * instead of the last command (inserting text). This is used for
+--- 832,842 ----
+      int	    c;
+  
+      while ((c = read_redo(FALSE, old_redo)) != NUL)
+! 	add_char_buff(&readbuf2, c);
+  }
+  
+  /*
+!  * Stuff the redo buffer into readbuf2.
+   * Insert the redo count into the command.
+   * If "old_redo" is TRUE, the last but one command is repeated
+   * instead of the last command (inserting text). This is used for
+***************
+*** 823,835 ****
+      /* copy the buffer name, if present */
+      if (c == '"')
+      {
+! 	add_buff(&stuffbuff, (char_u *)"\"", 1L);
+  	c = read_redo(FALSE, old_redo);
+  
+  	/* if a numbered buffer is used, increment the number */
+  	if (c >= '1' && c < '9')
+  	    ++c;
+! 	add_char_buff(&stuffbuff, c);
+  	c = read_redo(FALSE, old_redo);
+      }
+  
+--- 860,872 ----
+      /* copy the buffer name, if present */
+      if (c == '"')
+      {
+! 	add_buff(&readbuf2, (char_u *)"\"", 1L);
+  	c = read_redo(FALSE, old_redo);
+  
+  	/* if a numbered buffer is used, increment the number */
+  	if (c >= '1' && c < '9')
+  	    ++c;
+! 	add_char_buff(&readbuf2, c);
+  	c = read_redo(FALSE, old_redo);
+      }
+  
+***************
+*** 850,867 ****
+      {
+  	while (VIM_ISDIGIT(c))	/* skip "old" count */
+  	    c = read_redo(FALSE, old_redo);
+! 	add_num_buff(&stuffbuff, count);
+      }
+  
+      /* copy from the redo buffer into the stuff buffer */
+!     add_char_buff(&stuffbuff, c);
+      copy_redo(old_redo);
+      return OK;
+  }
+  
+  /*
+   * Repeat the last insert (R, o, O, a, A, i or I command) by stuffing
+!  * the redo buffer into the stuffbuff.
+   * return FAIL for failure, OK otherwise
+   */
+      int
+--- 887,904 ----
+      {
+  	while (VIM_ISDIGIT(c))	/* skip "old" count */
+  	    c = read_redo(FALSE, old_redo);
+! 	add_num_buff(&readbuf2, count);
+      }
+  
+      /* copy from the redo buffer into the stuff buffer */
+!     add_char_buff(&readbuf2, c);
+      copy_redo(old_redo);
+      return OK;
+  }
+  
+  /*
+   * Repeat the last insert (R, o, O, a, A, i or I command) by stuffing
+!  * the redo buffer into readbuf2.
+   * return FAIL for failure, OK otherwise
+   */
+      int
+***************
+*** 879,885 ****
+  	if (vim_strchr((char_u *)"AaIiRrOo", c) != NULL)
+  	{
+  	    if (c == 'O' || c == 'o')
+! 		stuffReadbuff(NL_STR);
+  	    break;
+  	}
+      }
+--- 916,922 ----
+  	if (vim_strchr((char_u *)"AaIiRrOo", c) != NULL)
+  	{
+  	    if (c == 'O' || c == 'o')
+! 		add_buff(&readbuf2, NL_STR, -1L);
+  	    break;
+  	}
+      }
+***************
+*** 1360,1367 ****
+      tp->old_mod_mask = old_mod_mask;
+      old_char = -1;
+  
+!     tp->save_stuffbuff = stuffbuff;
+!     stuffbuff.bh_first.b_next = NULL;
+  # ifdef USE_INPUT_BUF
+      tp->save_inputbuf = get_input_buf();
+  # endif
+--- 1397,1406 ----
+      tp->old_mod_mask = old_mod_mask;
+      old_char = -1;
+  
+!     tp->save_readbuf1 = readbuf1;
+!     readbuf1.bh_first.b_next = NULL;
+!     tp->save_readbuf2 = readbuf2;
+!     readbuf2.bh_first.b_next = NULL;
+  # ifdef USE_INPUT_BUF
+      tp->save_inputbuf = get_input_buf();
+  # endif
+***************
+*** 1384,1391 ****
+      old_char = tp->old_char;
+      old_mod_mask = tp->old_mod_mask;
+  
+!     free_buff(&stuffbuff);
+!     stuffbuff = tp->save_stuffbuff;
+  # ifdef USE_INPUT_BUF
+      set_input_buf(tp->save_inputbuf);
+  # endif
+--- 1423,1432 ----
+      old_char = tp->old_char;
+      old_mod_mask = tp->old_mod_mask;
+  
+!     free_buff(&readbuf1);
+!     readbuf1 = tp->save_readbuf1;
+!     free_buff(&readbuf2);
+!     readbuf2 = tp->save_readbuf2;
+  # ifdef USE_INPUT_BUF
+      set_input_buf(tp->save_inputbuf);
+  # endif
+***************
+*** 1992,1998 ****
+  		typeahead_char = 0;
+  	}
+  	else
+! 	    c = read_stuff(advance);
+  	if (c != NUL && !got_int)
+  	{
+  	    if (advance)
+--- 2033,2039 ----
+  		typeahead_char = 0;
+  	}
+  	else
+! 	    c = read_readbuffers(advance);
+  	if (c != NUL && !got_int)
+  	{
+  	    if (advance)
+*** ../vim-7.4.170/src/globals.h	2013-11-09 03:31:45.000000000 +0100
+--- src/globals.h	2014-02-11 14:17:44.070063200 +0100
+***************
+*** 979,989 ****
+  EXTERN int	readonlymode INIT(= FALSE); /* Set to TRUE for "view" */
+  EXTERN int	recoverymode INIT(= FALSE); /* Set to TRUE for "-r" option */
+  
+- EXTERN struct buffheader stuffbuff	/* stuff buffer */
+- #ifdef DO_INIT
+- 		    = {{NULL, {NUL}}, NULL, 0, 0}
+- #endif
+- 		    ;
+  EXTERN typebuf_T typebuf		/* typeahead buffer */
+  #ifdef DO_INIT
+  		    = {NULL, NULL, 0, 0, 0, 0, 0, 0, 0}
+--- 979,984 ----
+*** ../vim-7.4.170/src/normal.c	2014-01-14 13:18:53.000000000 +0100
+--- src/normal.c	2014-02-11 14:53:54.246096453 +0100
+***************
+*** 655,662 ****
+  #ifdef FEAT_EVAL
+      /* Set v:count here, when called from main() and not a stuffed
+       * command, so that v:count can be used in an expression mapping
+!      * when there is no count. */
+!     if (toplevel && stuff_empty())
+  	set_vcount_ca(&ca, &set_prevcount);
+  #endif
+  
+--- 655,662 ----
+  #ifdef FEAT_EVAL
+      /* Set v:count here, when called from main() and not a stuffed
+       * command, so that v:count can be used in an expression mapping
+!      * when there is no count. Do set it for redo. */
+!     if (toplevel && readbuf1_empty())
+  	set_vcount_ca(&ca, &set_prevcount);
+  #endif
+  
+***************
+*** 736,743 ****
+  #ifdef FEAT_EVAL
+  	    /* Set v:count here, when called from main() and not a stuffed
+  	     * command, so that v:count can be used in an expression mapping
+! 	     * right after the count. */
+! 	    if (toplevel && stuff_empty())
+  		set_vcount_ca(&ca, &set_prevcount);
+  #endif
+  	    if (ctrl_w)
+--- 736,743 ----
+  #ifdef FEAT_EVAL
+  	    /* Set v:count here, when called from main() and not a stuffed
+  	     * command, so that v:count can be used in an expression mapping
+! 	     * right after the count. Do set it for redo. */
+! 	    if (toplevel && readbuf1_empty())
+  		set_vcount_ca(&ca, &set_prevcount);
+  #endif
+  	    if (ctrl_w)
+***************
+*** 819,826 ****
+  #ifdef FEAT_EVAL
+      /*
+       * Only set v:count when called from main() and not a stuffed command.
+       */
+!     if (toplevel && stuff_empty())
+  	set_vcount(ca.count0, ca.count1, set_prevcount);
+  #endif
+  
+--- 819,827 ----
+  #ifdef FEAT_EVAL
+      /*
+       * Only set v:count when called from main() and not a stuffed command.
++      * Do set it for redo.
+       */
+!     if (toplevel && readbuf1_empty())
+  	set_vcount(ca.count0, ca.count1, set_prevcount);
+  #endif
+  
+*** ../vim-7.4.170/src/proto/getchar.pro	2013-08-10 13:37:12.000000000 +0200
+--- src/proto/getchar.pro	2014-02-11 14:55:14.806097687 +0100
+***************
+*** 1,8 ****
+  /* getchar.c */
+! void free_buff __ARGS((struct buffheader *buf));
+  char_u *get_recorded __ARGS((void));
+  char_u *get_inserted __ARGS((void));
+  int stuff_empty __ARGS((void));
+  void typeahead_noflush __ARGS((int c));
+  void flush_buffers __ARGS((int flush_typeahead));
+  void ResetRedobuff __ARGS((void));
+--- 1,9 ----
+  /* getchar.c */
+! void free_buff __ARGS((buffheader_T *buf));
+  char_u *get_recorded __ARGS((void));
+  char_u *get_inserted __ARGS((void));
+  int stuff_empty __ARGS((void));
++ int readbuf1_empty __ARGS((void));
+  void typeahead_noflush __ARGS((int c));
+  void flush_buffers __ARGS((int flush_typeahead));
+  void ResetRedobuff __ARGS((void));
+*** ../vim-7.4.170/src/structs.h	2013-11-12 04:43:57.000000000 +0100
+--- src/structs.h	2014-02-11 14:35:43.606079741 +0100
+***************
+*** 471,483 ****
+      blocknr_T	nt_new_bnum;		/* new, positive, number */
+  };
+  
+  /*
+   * structure used to store one block of the stuff/redo/recording buffers
+   */
+  struct buffblock
+  {
+!     struct buffblock	*b_next;	/* pointer to next buffblock */
+!     char_u		b_str[1];	/* contents (actually longer) */
+  };
+  
+  /*
+--- 471,487 ----
+      blocknr_T	nt_new_bnum;		/* new, positive, number */
+  };
+  
++ 
++ typedef struct buffblock buffblock_T;
++ typedef struct buffheader buffheader_T;
++ 
+  /*
+   * structure used to store one block of the stuff/redo/recording buffers
+   */
+  struct buffblock
+  {
+!     buffblock_T	*b_next;	/* pointer to next buffblock */
+!     char_u	b_str[1];	/* contents (actually longer) */
+  };
+  
+  /*
+***************
+*** 485,494 ****
+   */
+  struct buffheader
+  {
+!     struct buffblock	bh_first;	/* first (dummy) block of list */
+!     struct buffblock	*bh_curr;	/* buffblock for appending */
+!     int			bh_index;	/* index for reading */
+!     int			bh_space;	/* space in bh_curr for appending */
+  };
+  
+  /*
+--- 489,498 ----
+   */
+  struct buffheader
+  {
+!     buffblock_T	bh_first;	/* first (dummy) block of list */
+!     buffblock_T	*bh_curr;	/* buffblock for appending */
+!     int		bh_index;	/* index for reading */
+!     int		bh_space;	/* space in bh_curr for appending */
+  };
+  
+  /*
+***************
+*** 964,970 ****
+      int			typebuf_valid;	    /* TRUE when save_typebuf valid */
+      int			old_char;
+      int			old_mod_mask;
+!     struct buffheader	save_stuffbuff;
+  #ifdef USE_INPUT_BUF
+      char_u		*save_inputbuf;
+  #endif
+--- 968,975 ----
+      int			typebuf_valid;	    /* TRUE when save_typebuf valid */
+      int			old_char;
+      int			old_mod_mask;
+!     buffheader_T	save_readbuf1;
+!     buffheader_T	save_readbuf2;
+  #ifdef USE_INPUT_BUF
+      char_u		*save_inputbuf;
+  #endif
+*** ../vim-7.4.170/src/version.c	2014-02-11 12:15:39.781950970 +0100
+--- src/version.c	2014-02-11 15:05:17.306106920 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     171,
+  /**/
+
+-- 
+Linux is just like a wigwam: no Windows, no Gates and an Apache inside.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.172 b/SOURCES/7.4.172
new file mode 100644
index 0000000..8ad9fca
--- /dev/null
+++ b/SOURCES/7.4.172
@@ -0,0 +1,346 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.172
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.172
+Problem:    The blowfish code mentions output feedback, but the code is
+	    actually doing cipher feedback.
+Solution:   Adjust names and comments.
+Files:	    src/blowfish.c, src/fileio.c, src/proto/blowfish.pro,
+	    src/memline.c
+
+
+*** ../vim-7.4.171/src/blowfish.c	2010-12-17 19:58:18.000000000 +0100
+--- src/blowfish.c	2014-02-11 15:18:12.882118804 +0100
+***************
+*** 6,12 ****
+   * Do ":help credits" in Vim to see a list of people who contributed.
+   * See README.txt for an overview of the Vim source code.
+   *
+!  * Blowfish encryption for Vim; in Blowfish output feedback mode.
+   * Contributed by Mohsin Ahmed, http://www.cs.albany.edu/~mosh
+   * Based on http://www.schneier.com/blowfish.html by Bruce Schneier.
+   */
+--- 6,12 ----
+   * Do ":help credits" in Vim to see a list of people who contributed.
+   * See README.txt for an overview of the Vim source code.
+   *
+!  * Blowfish encryption for Vim; in Blowfish cipher feedback mode.
+   * Contributed by Mohsin Ahmed, http://www.cs.albany.edu/~mosh
+   * Based on http://www.schneier.com/blowfish.html by Bruce Schneier.
+   */
+***************
+*** 19,25 ****
+  
+  #define BF_BLOCK    8
+  #define BF_BLOCK_MASK 7
+! #define BF_OFB_LEN  (8*(BF_BLOCK))
+  
+  typedef union {
+      UINT32_T ul[2];
+--- 19,25 ----
+  
+  #define BF_BLOCK    8
+  #define BF_BLOCK_MASK 7
+! #define BF_CFB_LEN  (8*(BF_BLOCK))
+  
+  typedef union {
+      UINT32_T ul[2];
+***************
+*** 554,595 ****
+      return err > 0 ? FAIL : OK;
+  }
+  
+! /* Output feedback mode. */
+  static int randbyte_offset = 0;
+  static int update_offset = 0;
+! static char_u ofb_buffer[BF_OFB_LEN]; /* 64 bytes */
+  
+  /*
+   * Initialize with seed "iv[iv_len]".
+   */
+      void
+! bf_ofb_init(iv, iv_len)
+      char_u *iv;
+      int    iv_len;
+  {
+      int i, mi;
+  
+      randbyte_offset = update_offset = 0;
+!     vim_memset(ofb_buffer, 0, BF_OFB_LEN);
+      if (iv_len > 0)
+      {
+! 	mi = iv_len > BF_OFB_LEN ? iv_len : BF_OFB_LEN;
+  	for (i = 0; i < mi; i++)
+! 	    ofb_buffer[i % BF_OFB_LEN] ^= iv[i % iv_len];
+      }
+  }
+  
+! #define BF_OFB_UPDATE(c) { \
+!     ofb_buffer[update_offset] ^= (char_u)c; \
+!     if (++update_offset == BF_OFB_LEN) \
+  	update_offset = 0; \
+  }
+  
+  #define BF_RANBYTE(t) { \
+      if ((randbyte_offset & BF_BLOCK_MASK) == 0) \
+! 	bf_e_cblock(&ofb_buffer[randbyte_offset]); \
+!     t = ofb_buffer[randbyte_offset]; \
+!     if (++randbyte_offset == BF_OFB_LEN) \
+  	randbyte_offset = 0; \
+  }
+  
+--- 554,595 ----
+      return err > 0 ? FAIL : OK;
+  }
+  
+! /* Cipher feedback mode. */
+  static int randbyte_offset = 0;
+  static int update_offset = 0;
+! static char_u cfb_buffer[BF_CFB_LEN]; /* 64 bytes */
+  
+  /*
+   * Initialize with seed "iv[iv_len]".
+   */
+      void
+! bf_cfb_init(iv, iv_len)
+      char_u *iv;
+      int    iv_len;
+  {
+      int i, mi;
+  
+      randbyte_offset = update_offset = 0;
+!     vim_memset(cfb_buffer, 0, BF_CFB_LEN);
+      if (iv_len > 0)
+      {
+! 	mi = iv_len > BF_CFB_LEN ? iv_len : BF_CFB_LEN;
+  	for (i = 0; i < mi; i++)
+! 	    cfb_buffer[i % BF_CFB_LEN] ^= iv[i % iv_len];
+      }
+  }
+  
+! #define BF_CFB_UPDATE(c) { \
+!     cfb_buffer[update_offset] ^= (char_u)c; \
+!     if (++update_offset == BF_CFB_LEN) \
+  	update_offset = 0; \
+  }
+  
+  #define BF_RANBYTE(t) { \
+      if ((randbyte_offset & BF_BLOCK_MASK) == 0) \
+! 	bf_e_cblock(&cfb_buffer[randbyte_offset]); \
+!     t = cfb_buffer[randbyte_offset]; \
+!     if (++randbyte_offset == BF_CFB_LEN) \
+  	randbyte_offset = 0; \
+  }
+  
+***************
+*** 610,616 ****
+      {
+  	ztemp = from[i];
+  	BF_RANBYTE(t);
+! 	BF_OFB_UPDATE(ztemp);
+  	to[i] = t ^ ztemp;
+      }
+  }
+--- 610,616 ----
+      {
+  	ztemp = from[i];
+  	BF_RANBYTE(t);
+! 	BF_CFB_UPDATE(ztemp);
+  	to[i] = t ^ ztemp;
+      }
+  }
+***************
+*** 630,636 ****
+      {
+  	BF_RANBYTE(t);
+  	*p ^= t;
+! 	BF_OFB_UPDATE(*p);
+      }
+  }
+  
+--- 630,636 ----
+      {
+  	BF_RANBYTE(t);
+  	*p ^= t;
+! 	BF_CFB_UPDATE(*p);
+      }
+  }
+  
+***************
+*** 646,658 ****
+  
+      for (p = passwd; *p != NUL; ++p)
+      {
+! 	BF_OFB_UPDATE(*p);
+      }
+  }
+  
+  static int save_randbyte_offset;
+  static int save_update_offset;
+! static char_u save_ofb_buffer[BF_OFB_LEN];
+  static UINT32_T save_pax[18];
+  static UINT32_T save_sbx[4][256];
+  
+--- 646,658 ----
+  
+      for (p = passwd; *p != NUL; ++p)
+      {
+! 	BF_CFB_UPDATE(*p);
+      }
+  }
+  
+  static int save_randbyte_offset;
+  static int save_update_offset;
+! static char_u save_cfb_buffer[BF_CFB_LEN];
+  static UINT32_T save_pax[18];
+  static UINT32_T save_sbx[4][256];
+  
+***************
+*** 665,671 ****
+  {
+      save_randbyte_offset = randbyte_offset;
+      save_update_offset = update_offset;
+!     mch_memmove(save_ofb_buffer, ofb_buffer, BF_OFB_LEN);
+      mch_memmove(save_pax, pax, 4 * 18);
+      mch_memmove(save_sbx, sbx, 4 * 4 * 256);
+  }
+--- 665,671 ----
+  {
+      save_randbyte_offset = randbyte_offset;
+      save_update_offset = update_offset;
+!     mch_memmove(save_cfb_buffer, cfb_buffer, BF_CFB_LEN);
+      mch_memmove(save_pax, pax, 4 * 18);
+      mch_memmove(save_sbx, sbx, 4 * 4 * 256);
+  }
+***************
+*** 679,685 ****
+  {
+      randbyte_offset = save_randbyte_offset;
+      update_offset = save_update_offset;
+!     mch_memmove(ofb_buffer, save_ofb_buffer, BF_OFB_LEN);
+      mch_memmove(pax, save_pax, 4 * 18);
+      mch_memmove(sbx, save_sbx, 4 * 4 * 256);
+  }
+--- 679,685 ----
+  {
+      randbyte_offset = save_randbyte_offset;
+      update_offset = save_update_offset;
+!     mch_memmove(cfb_buffer, save_cfb_buffer, BF_CFB_LEN);
+      mch_memmove(pax, save_pax, 4 * 18);
+      mch_memmove(sbx, save_sbx, 4 * 4 * 256);
+  }
+*** ../vim-7.4.171/src/fileio.c	2013-11-28 18:53:47.000000000 +0100
+--- src/fileio.c	2014-02-11 15:16:57.546117649 +0100
+***************
+*** 2973,2979 ****
+  	    else
+  	    {
+  		bf_key_init(cryptkey, ptr + CRYPT_MAGIC_LEN, salt_len);
+! 		bf_ofb_init(ptr + CRYPT_MAGIC_LEN + salt_len, seed_len);
+  	    }
+  
+  	    /* Remove magic number from the text */
+--- 2973,2979 ----
+  	    else
+  	    {
+  		bf_key_init(cryptkey, ptr + CRYPT_MAGIC_LEN, salt_len);
+! 		bf_cfb_init(ptr + CRYPT_MAGIC_LEN + salt_len, seed_len);
+  	    }
+  
+  	    /* Remove magic number from the text */
+***************
+*** 3025,3031 ****
+  	if (fread(buffer, salt_len + seed_len, 1, fp) != 1)
+  	    return FAIL;
+  	bf_key_init(curbuf->b_p_key, buffer, salt_len);
+! 	bf_ofb_init(buffer + salt_len, seed_len);
+      }
+      return OK;
+  }
+--- 3025,3031 ----
+  	if (fread(buffer, salt_len + seed_len, 1, fp) != 1)
+  	    return FAIL;
+  	bf_key_init(curbuf->b_p_key, buffer, salt_len);
+! 	bf_cfb_init(buffer + salt_len, seed_len);
+      }
+      return OK;
+  }
+***************
+*** 3064,3070 ****
+  	    seed = salt + salt_len;
+  	    sha2_seed(salt, salt_len, seed, seed_len);
+  	    bf_key_init(buf->b_p_key, salt, salt_len);
+! 	    bf_ofb_init(seed, seed_len);
+  	}
+      }
+      *lenp = CRYPT_MAGIC_LEN + salt_len + seed_len;
+--- 3064,3070 ----
+  	    seed = salt + salt_len;
+  	    sha2_seed(salt, salt_len, seed, seed_len);
+  	    bf_key_init(buf->b_p_key, salt, salt_len);
+! 	    bf_cfb_init(seed, seed_len);
+  	}
+      }
+      *lenp = CRYPT_MAGIC_LEN + salt_len + seed_len;
+*** ../vim-7.4.171/src/proto/blowfish.pro	2013-08-10 13:37:06.000000000 +0200
+--- src/proto/blowfish.pro	2014-02-11 15:18:20.382118919 +0100
+***************
+*** 1,6 ****
+  /* blowfish.c */
+  void bf_key_init __ARGS((char_u *password, char_u *salt, int salt_len));
+! void bf_ofb_init __ARGS((char_u *iv, int iv_len));
+  void bf_crypt_encode __ARGS((char_u *from, size_t len, char_u *to));
+  void bf_crypt_decode __ARGS((char_u *ptr, long len));
+  void bf_crypt_init_keys __ARGS((char_u *passwd));
+--- 1,6 ----
+  /* blowfish.c */
+  void bf_key_init __ARGS((char_u *password, char_u *salt, int salt_len));
+! void bf_cfb_init __ARGS((char_u *iv, int iv_len));
+  void bf_crypt_encode __ARGS((char_u *from, size_t len, char_u *to));
+  void bf_crypt_decode __ARGS((char_u *ptr, long len));
+  void bf_crypt_init_keys __ARGS((char_u *passwd));
+*** ../vim-7.4.171/src/memline.c	2013-11-28 17:41:41.000000000 +0100
+--- src/memline.c	2014-02-11 15:17:02.190117720 +0100
+***************
+*** 4914,4920 ****
+  	 * block for the salt. */
+  	vim_snprintf((char *)salt, sizeof(salt), "%ld", (long)offset);
+  	bf_key_init(key, salt, (int)STRLEN(salt));
+! 	bf_ofb_init(seed, MF_SEED_LEN);
+      }
+  }
+  
+--- 4914,4920 ----
+  	 * block for the salt. */
+  	vim_snprintf((char *)salt, sizeof(salt), "%ld", (long)offset);
+  	bf_key_init(key, salt, (int)STRLEN(salt));
+! 	bf_cfb_init(seed, MF_SEED_LEN);
+      }
+  }
+  
+*** ../vim-7.4.171/src/version.c	2014-02-11 15:10:38.138111836 +0100
+--- src/version.c	2014-02-11 15:16:01.206116786 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     172,
+  /**/
+
+-- 
+GALAHAD: No look, really, this isn't nescess ...
+PIGLET:  We must examine you.
+GALAHAD: There's nothing wrong with ... that.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.173 b/SOURCES/7.4.173
new file mode 100644
index 0000000..1756bdc
--- /dev/null
+++ b/SOURCES/7.4.173
@@ -0,0 +1,61 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.173
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.173
+Problem:    When using scrollbind the cursor can end up below the last line.
+	    (mvxxc)
+Solution:   Reset w_botfill when scrolling up. (Christian Brabandt)
+Files:	    src/move.c
+
+
+*** ../vim-7.4.172/src/move.c	2012-11-28 18:15:42.000000000 +0100
+--- src/move.c	2014-02-11 15:39:24.758138292 +0100
+***************
+*** 2101,2106 ****
+--- 2101,2107 ----
+      int		used;
+      lineoff_T	loff;
+      lineoff_T	boff;
++     linenr_T	old_topline = curwin->w_topline;
+  
+      loff.lnum = boff.lnum = curwin->w_cursor.lnum;
+  #ifdef FEAT_FOLDING
+***************
+*** 2156,2161 ****
+--- 2157,2164 ----
+  	curwin->w_topline = topline;
+  #ifdef FEAT_DIFF
+      curwin->w_topfill = topfill;
++     if (old_topline > curwin->w_topline + curwin->w_height)
++ 	curwin->w_botfill = FALSE;
+      check_topfill(curwin, FALSE);
+  #endif
+      curwin->w_valid &= ~(VALID_WROW|VALID_CROW|VALID_BOTLINE|VALID_BOTLINE_AP);
+*** ../vim-7.4.172/src/version.c	2014-02-11 15:23:27.942123631 +0100
+--- src/version.c	2014-02-11 15:38:34.562137523 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     173,
+  /**/
+
+-- 
+   GALAHAD hurries to the door and pushes through it.  As he leaves the room
+   we CUT TO the reverse to show that he is now in a room full of bathing
+   and romping GIRLIES, all innocent, wide-eyed and beautiful.  They smile
+   enchantingly at him as he tries to keep walking without being diverted by
+   the lovely sights assaulting his eyeballs.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.174 b/SOURCES/7.4.174
new file mode 100644
index 0000000..827e65c
--- /dev/null
+++ b/SOURCES/7.4.174
@@ -0,0 +1,94 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.174
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.174
+Problem:    Compiler warnings for Python interface. (Tony Mechelynck)
+Solution:   Add type casts, initialize variable.
+Files:	    src/if_py_both.h
+
+
+*** ../vim-7.4.173/src/if_py_both.h	2014-01-31 14:53:59.715533645 +0100
+--- src/if_py_both.h	2014-02-11 15:57:30.678154932 +0100
+***************
+*** 2368,2374 ****
+      PyInt	numreplaced = 0;
+      PyInt	numadded = 0;
+      PyInt	size;
+!     listitem_T	**lis;
+  
+      size = ListLength(self);
+  
+--- 2368,2374 ----
+      PyInt	numreplaced = 0;
+      PyInt	numadded = 0;
+      PyInt	size;
+!     listitem_T	**lis = NULL;
+  
+      size = ListLength(self);
+  
+***************
+*** 2503,2510 ****
+  	{
+  	    Py_DECREF(iterator);
+  	    PyErr_FORMAT(PyExc_ValueError,
+! 		    N_("attempt to assign sequence of size greater then %d "
+! 			"to extended slice"), slicelen);
+  	    list_restore(numadded, numreplaced, slicelen, l, lis, lastaddedli);
+  	    PyMem_Free(lis);
+  	    return -1;
+--- 2503,2510 ----
+  	{
+  	    Py_DECREF(iterator);
+  	    PyErr_FORMAT(PyExc_ValueError,
+! 		    N_("attempt to assign sequence of size greater then %ld "
+! 			"to extended slice"), (long)slicelen);
+  	    list_restore(numadded, numreplaced, slicelen, l, lis, lastaddedli);
+  	    PyMem_Free(lis);
+  	    return -1;
+***************
+*** 2516,2523 ****
+      if (step != 1 && i != slicelen)
+      {
+  	PyErr_FORMAT2(PyExc_ValueError,
+! 		N_("attempt to assign sequence of size %d to extended slice "
+! 		    "of size %d"), i, slicelen);
+  	list_restore(numadded, numreplaced, slicelen, l, lis, lastaddedli);
+  	PyMem_Free(lis);
+  	return -1;
+--- 2516,2523 ----
+      if (step != 1 && i != slicelen)
+      {
+  	PyErr_FORMAT2(PyExc_ValueError,
+! 		N_("attempt to assign sequence of size %ld to extended slice "
+! 		    "of size %ld"), (long)i, (long)slicelen);
+  	list_restore(numadded, numreplaced, slicelen, l, lis, lastaddedli);
+  	PyMem_Free(lis);
+  	return -1;
+*** ../vim-7.4.173/src/version.c	2014-02-11 15:47:41.382145902 +0100
+--- src/version.c	2014-02-11 15:59:04.646156372 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     174,
+  /**/
+
+-- 
+DINGO:   You must spank her well and after you have spanked her you
+         may deal with her as you like and then ... spank me.
+AMAZING: And spank me!
+STUNNER: And me.
+LOVELY:  And me.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.175 b/SOURCES/7.4.175
new file mode 100644
index 0000000..99ca390
--- /dev/null
+++ b/SOURCES/7.4.175
@@ -0,0 +1,180 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.175
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.175
+Problem:    When a wide library function fails, falling back to the non-wide
+	    function may do the wrong thing.
+Solution:   Check the platform, when the wide function is supported don't fall
+	    back to the non-wide function. (Ken Takata)
+Files:	    src/os_mswin.c, src/os_win32.c
+
+
+*** ../vim-7.4.174/src/os_mswin.c	2014-01-14 12:18:41.000000000 +0100
+--- src/os_mswin.c	2014-02-11 17:02:03.002214267 +0100
+***************
+*** 648,654 ****
+  	{
+  	    n = wstat_symlink_aware(wp, (struct _stat *)stp);
+  	    vim_free(wp);
+! 	    if (n >= 0)
+  		return n;
+  	    /* Retry with non-wide function (for Windows 98). Can't use
+  	     * GetLastError() here and it's unclear what errno gets set to if
+--- 648,654 ----
+  	{
+  	    n = wstat_symlink_aware(wp, (struct _stat *)stp);
+  	    vim_free(wp);
+! 	    if (n >= 0 || g_PlatformId == VER_PLATFORM_WIN32_NT)
+  		return n;
+  	    /* Retry with non-wide function (for Windows 98). Can't use
+  	     * GetLastError() here and it's unclear what errno gets set to if
+***************
+*** 815,822 ****
+  	{
+  	    n = _wchdir(p);
+  	    vim_free(p);
+! 	    if (n == 0)
+! 		return 0;
+  	    /* Retry with non-wide function (for Windows 98). */
+  	}
+      }
+--- 815,822 ----
+  	{
+  	    n = _wchdir(p);
+  	    vim_free(p);
+! 	    if (n == 0 || g_PlatformId == VER_PLATFORM_WIN32_NT)
+! 		return n;
+  	    /* Retry with non-wide function (for Windows 98). */
+  	}
+      }
+***************
+*** 1942,1949 ****
+  
+  shortcut_errorw:
+  		vim_free(p);
+! 		if (hr == S_OK)
+! 		    goto shortcut_end;
+  	    }
+  	}
+  	/* Retry with non-wide function (for Windows 98). */
+--- 1942,1948 ----
+  
+  shortcut_errorw:
+  		vim_free(p);
+! 		goto shortcut_end;
+  	    }
+  	}
+  	/* Retry with non-wide function (for Windows 98). */
+*** ../vim-7.4.174/src/os_win32.c	2014-02-05 14:02:23.590105699 +0100
+--- src/os_win32.c	2014-02-11 16:59:26.810211874 +0100
+***************
+*** 2877,2882 ****
+--- 2877,2884 ----
+  		return OK;
+  	    }
+  	}
++ 	else if (GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
++ 	    return FAIL;
+  	/* Retry with non-wide function (for Windows 98). */
+      }
+  #endif
+***************
+*** 2917,2922 ****
+--- 2919,2926 ----
+  		return;
+  	    }
+  	}
++ 	else if (GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
++ 	    return;
+  	/* Retry with non-wide function (for Windows 98). */
+      }
+  #endif
+***************
+*** 2966,2971 ****
+--- 2970,2977 ----
+  		return OK;
+  	    }
+  	}
++ 	else if (GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
++ 	    return FAIL;
+  	/* Retry with non-wide function (for Windows 98). */
+      }
+  #endif
+***************
+*** 3006,3012 ****
+  	{
+  	    n = _wchmod(p, perm);
+  	    vim_free(p);
+! 	    if (n == -1 && GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
+  		return FAIL;
+  	    /* Retry with non-wide function (for Windows 98). */
+  	}
+--- 3012,3018 ----
+  	{
+  	    n = _wchmod(p, perm);
+  	    vim_free(p);
+! 	    if (n == -1 && g_PlatformId == VER_PLATFORM_WIN32_NT)
+  		return FAIL;
+  	    /* Retry with non-wide function (for Windows 98). */
+  	}
+***************
+*** 6048,6054 ****
+  	{
+  	    f = _wopen(wn, flags, mode);
+  	    vim_free(wn);
+! 	    if (f >= 0)
+  		return f;
+  	    /* Retry with non-wide function (for Windows 98). Can't use
+  	     * GetLastError() here and it's unclear what errno gets set to if
+--- 6054,6060 ----
+  	{
+  	    f = _wopen(wn, flags, mode);
+  	    vim_free(wn);
+! 	    if (f >= 0 || g_PlatformId == VER_PLATFORM_WIN32_NT)
+  		return f;
+  	    /* Retry with non-wide function (for Windows 98). Can't use
+  	     * GetLastError() here and it's unclear what errno gets set to if
+***************
+*** 6099,6105 ****
+  	_set_fmode(oldMode);
+  # endif
+  
+! 	if (f != NULL)
+  	    return f;
+  	/* Retry with non-wide function (for Windows 98). Can't use
+  	 * GetLastError() here and it's unclear what errno gets set to if
+--- 6105,6111 ----
+  	_set_fmode(oldMode);
+  # endif
+  
+! 	if (f != NULL || g_PlatformId == VER_PLATFORM_WIN32_NT)
+  	    return f;
+  	/* Retry with non-wide function (for Windows 98). Can't use
+  	 * GetLastError() here and it's unclear what errno gets set to if
+*** ../vim-7.4.174/src/version.c	2014-02-11 16:00:31.198157698 +0100
+--- src/version.c	2014-02-11 16:33:10.002187713 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     175,
+  /**/
+
+-- 
+DINGO:   And after the spanking ... the oral sex.
+GALAHAD: Oh, dear! Well, I...
+GIRLS:   The oral sex ...  The oral sex.
+GALAHAD: Well, I suppose I could stay a BIT longer.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.176 b/SOURCES/7.4.176
new file mode 100644
index 0000000..ccde6b6
--- /dev/null
+++ b/SOURCES/7.4.176
@@ -0,0 +1,91 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.176
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.176
+Problem:    Dictionary.update() thows an error when used without arguments.
+	    Python programmers don't expect that.
+Solution:   Make Dictionary.update() without arguments do nothing. (ZyX)
+Files:	    src/if_py_both.h, src/testdir/test86.in, src/testdir/test87.in
+
+
+*** ../vim-7.4.175/src/if_py_both.h	2014-02-11 16:00:31.198157698 +0100
+--- src/if_py_both.h	2014-02-11 18:41:12.774305435 +0100
+***************
+*** 1918,1928 ****
+      }
+      else
+      {
+! 	PyObject	*obj;
+  
+! 	if (!PyArg_ParseTuple(args, "O", &obj))
+  	    return NULL;
+  
+  	if (PyObject_HasAttrString(obj, "keys"))
+  	    return DictionaryUpdate(self, NULL, obj);
+  	else
+--- 1919,1935 ----
+      }
+      else
+      {
+! 	PyObject	*obj = NULL;
+  
+! 	if (!PyArg_ParseTuple(args, "|O", &obj))
+  	    return NULL;
+  
++ 	if (obj == NULL)
++ 	{
++ 	    Py_INCREF(Py_None);
++ 	    return Py_None;
++ 	}
++ 
+  	if (PyObject_HasAttrString(obj, "keys"))
+  	    return DictionaryUpdate(self, NULL, obj);
+  	else
+*** ../vim-7.4.175/src/testdir/test86.in	2014-01-14 16:54:53.000000000 +0100
+--- src/testdir/test86.in	2014-02-11 17:25:08.414235496 +0100
+***************
+*** 39,44 ****
+--- 39,45 ----
+  py << EOF
+  d=vim.bindeval('d')
+  d['1']='asd'
++ d.update()  # Must not do anything, including throwing errors
+  d.update(b=[1, 2, f])
+  d.update((('-1', {'a': 1}),))
+  d.update({'0': -1})
+*** ../vim-7.4.175/src/testdir/test87.in	2014-01-14 16:54:53.000000000 +0100
+--- src/testdir/test87.in	2014-02-11 17:25:12.602235560 +0100
+***************
+*** 33,38 ****
+--- 33,39 ----
+  py3 << EOF
+  d=vim.bindeval('d')
+  d['1']='asd'
++ d.update()  # Must not do anything, including throwing errors
+  d.update(b=[1, 2, f])
+  d.update((('-1', {'a': 1}),))
+  d.update({'0': -1})
+*** ../vim-7.4.175/src/version.c	2014-02-11 17:05:57.282217857 +0100
+--- src/version.c	2014-02-11 18:46:37.518310411 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     176,
+  /**/
+
+-- 
+"Intelligence has much less practical application than you'd think."
+		  -- Scott Adams, Dilbert.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.177 b/SOURCES/7.4.177
new file mode 100644
index 0000000..b943a19
--- /dev/null
+++ b/SOURCES/7.4.177
@@ -0,0 +1,48 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.177
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.177
+Problem:    Compiler warning for unused variable. (Tony Mechelynck)
+Solution:   Add #ifdef.
+Files:	    src/move.c
+
+
+*** ../vim-7.4.176/src/move.c	2014-02-11 15:47:41.382145902 +0100
+--- src/move.c	2014-02-11 18:13:57.378280376 +0100
+***************
+*** 2101,2107 ****
+--- 2101,2109 ----
+      int		used;
+      lineoff_T	loff;
+      lineoff_T	boff;
++ #ifdef FEAT_DIFF
+      linenr_T	old_topline = curwin->w_topline;
++ #endif
+  
+      loff.lnum = boff.lnum = curwin->w_cursor.lnum;
+  #ifdef FEAT_FOLDING
+*** ../vim-7.4.176/src/version.c	2014-02-11 18:47:18.682311042 +0100
+--- src/version.c	2014-02-11 18:57:55.110320794 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     177,
+  /**/
+
+-- 
+The psychic said, "God bless you."  I said, "I didn't sneeze."  She
+looked deep into my eyes and said, "You will, eventually."  And, damn
+if she wasn't right.  Two days later, I sneezed.  --Ellen Degeneres
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.178 b/SOURCES/7.4.178
new file mode 100644
index 0000000..36e2eec
--- /dev/null
+++ b/SOURCES/7.4.178
@@ -0,0 +1,62 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.178
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.178
+Problem:    The J command does not update '[ and '] marks. (William Gardner)
+Solution:   Set the marks. (Christian Brabandt)
+Files:	    src/ops.c
+
+
+*** ../vim-7.4.177/src/ops.c	2014-01-14 12:33:32.000000000 +0100
+--- src/ops.c	2014-02-11 19:22:46.538343647 +0100
+***************
+*** 4452,4457 ****
+--- 4452,4463 ----
+      for (t = 0; t < count; ++t)
+      {
+  	curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t));
++ 	if (t == 0)
++ 	{
++ 	    /* Set the '[ mark. */
++ 	    curwin->w_buffer->b_op_start.lnum = curwin->w_cursor.lnum;
++ 	    curwin->w_buffer->b_op_start.col  = (colnr_T)STRLEN(curr);
++ 	}
+  #if defined(FEAT_COMMENTS) || defined(PROTO)
+  	if (remove_comments)
+  	{
+***************
+*** 4568,4573 ****
+--- 4574,4583 ----
+      }
+      ml_replace(curwin->w_cursor.lnum, newp, FALSE);
+  
++     /* Set the '] mark. */
++     curwin->w_buffer->b_op_end.lnum = curwin->w_cursor.lnum;
++     curwin->w_buffer->b_op_end.col  = (colnr_T)STRLEN(newp);
++ 
+      /* Only report the change in the first line here, del_lines() will report
+       * the deleted line. */
+      changed_lines(curwin->w_cursor.lnum, currsize,
+*** ../vim-7.4.177/src/version.c	2014-02-11 18:58:05.102320947 +0100
+--- src/version.c	2014-02-11 19:23:59.722344768 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     178,
+  /**/
+
+-- 
+Eight Megabytes And Continually Swapping.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.179 b/SOURCES/7.4.179
new file mode 100644
index 0000000..29b366e
--- /dev/null
+++ b/SOURCES/7.4.179
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.179
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.179
+Problem:    Warning for type-punned pointer. (Tony Mechelynck)
+Solution:   Use intermediate variable.
+Files:	    src/if_py_both.h
+
+
+*** ../vim-7.4.178/src/if_py_both.h	2014-02-11 18:47:18.678311042 +0100
+--- src/if_py_both.h	2014-02-11 18:41:12.774305435 +0100
+***************
+*** 1617,1624 ****
+      }
+      else if (flags & DICT_FLAG_RETURN_BOOL)
+      {
+! 	Py_INCREF(Py_True);
+! 	return Py_True;
+      }
+  
+      di = dict_lookup(hi);
+--- 1617,1625 ----
+      }
+      else if (flags & DICT_FLAG_RETURN_BOOL)
+      {
+! 	ret = Py_True;
+! 	Py_INCREF(ret);
+! 	return ret;
+      }
+  
+      di = dict_lookup(hi);
+*** ../vim-7.4.178/src/version.c	2014-02-11 19:33:03.358353098 +0100
+--- src/version.c	2014-02-12 22:08:16.795819706 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     179,
+  /**/
+
+-- 
+Luxury. We used to have to get out of the lake at three o'clock in the 
+morning, clean the lake, eat a handful of hot gravel, go to work at the 
+mill every day for tuppence a month, come home, and Dad would beat us 
+around the head and neck with a broken bottle, if we were LUCKY!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.180 b/SOURCES/7.4.180
new file mode 100644
index 0000000..4fa0769
--- /dev/null
+++ b/SOURCES/7.4.180
@@ -0,0 +1,76 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.180
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.180 (after 7.4.174)
+Problem:    Older Python versions don't support %ld.
+Solution:   Use %d instead. (ZyX)
+Files:	    src/if_py_both.h
+
+
+*** ../vim-7.4.179/src/if_py_both.h	2014-02-12 22:08:46.055820155 +0100
+--- src/if_py_both.h	2014-02-15 15:56:44.133904982 +0100
+***************
+*** 2510,2517 ****
+  	{
+  	    Py_DECREF(iterator);
+  	    PyErr_FORMAT(PyExc_ValueError,
+! 		    N_("attempt to assign sequence of size greater then %ld "
+! 			"to extended slice"), (long)slicelen);
+  	    list_restore(numadded, numreplaced, slicelen, l, lis, lastaddedli);
+  	    PyMem_Free(lis);
+  	    return -1;
+--- 2510,2517 ----
+  	{
+  	    Py_DECREF(iterator);
+  	    PyErr_FORMAT(PyExc_ValueError,
+! 		    N_("attempt to assign sequence of size greater then %d "
+! 			"to extended slice"), (int) slicelen);
+  	    list_restore(numadded, numreplaced, slicelen, l, lis, lastaddedli);
+  	    PyMem_Free(lis);
+  	    return -1;
+***************
+*** 2523,2530 ****
+      if (step != 1 && i != slicelen)
+      {
+  	PyErr_FORMAT2(PyExc_ValueError,
+! 		N_("attempt to assign sequence of size %ld to extended slice "
+! 		    "of size %ld"), (long)i, (long)slicelen);
+  	list_restore(numadded, numreplaced, slicelen, l, lis, lastaddedli);
+  	PyMem_Free(lis);
+  	return -1;
+--- 2523,2530 ----
+      if (step != 1 && i != slicelen)
+      {
+  	PyErr_FORMAT2(PyExc_ValueError,
+! 		N_("attempt to assign sequence of size %d to extended slice "
+! 		    "of size %d"), (int) i, (int) slicelen);
+  	list_restore(numadded, numreplaced, slicelen, l, lis, lastaddedli);
+  	PyMem_Free(lis);
+  	return -1;
+*** ../vim-7.4.179/src/version.c	2014-02-12 22:08:46.059820155 +0100
+--- src/version.c	2014-02-15 15:58:13.877904839 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     180,
+  /**/
+
+-- 
+   LAUNCELOT leaps into SHOT with a mighty cry and runs the GUARD through and
+   hacks him to the floor.  Blood.  Swashbuckling music (perhaps).
+   LAUNCELOT races through into the castle screaming.
+SECOND SENTRY: Hey!
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.181 b/SOURCES/7.4.181
new file mode 100644
index 0000000..3668d08
--- /dev/null
+++ b/SOURCES/7.4.181
@@ -0,0 +1,68 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.181
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.181
+Problem:    When using 'pastetoggle' the status lines are not updated. (Samuel
+	    Ferencik, Jan Christoph Ebersbach)
+Solution:   Update the status lines. (Nobuhiro Takasaki)
+Files:	    src/getchar.c
+
+
+*** ../vim-7.4.180/src/getchar.c	2014-02-11 15:10:38.130111835 +0100
+--- src/getchar.c	2014-02-15 16:14:34.249903278 +0100
+***************
+*** 406,412 ****
+  }
+  
+  /*
+!  * Prepare the read buffers for reading (if they contains something).
+   */
+      static void
+  start_stuff()
+--- 406,412 ----
+  }
+  
+  /*
+!  * Prepare the read buffers for reading (if they contain something).
+   */
+      static void
+  start_stuff()
+***************
+*** 2302,2307 ****
+--- 2302,2311 ----
+  				msg_row = Rows - 1;
+  				msg_clr_eos();		/* clear ruler */
+  			    }
++ #ifdef FEAT_WINDOWS
++ 			    status_redraw_all();
++ 			    redraw_statuslines();
++ #endif
+  			    showmode();
+  			    setcursor();
+  			    continue;
+*** ../vim-7.4.180/src/version.c	2014-02-15 15:58:55.081904773 +0100
+--- src/version.c	2014-02-15 16:12:22.329903488 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     181,
+  /**/
+
+-- 
+FIRST GUARD: Ah!  Now ... we're not allowed to ...
+   SIR LAUNCELOT runs him through,  grabs his spear and stabs the other
+   guard who collapses in a heap.  Hiccoughs quietly.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.182 b/SOURCES/7.4.182
new file mode 100644
index 0000000..72b4148
--- /dev/null
+++ b/SOURCES/7.4.182
@@ -0,0 +1,56 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.182
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.182
+Problem:    Building with mzscheme and racket does not work. (David Chimay)
+Solution:   Adjust autoconf. (Sergey Khorev)
+Files:	    src/configure.in, src/auto/configure
+
+
+*** ../vim-7.4.181/src/configure.in	2013-11-21 12:17:46.000000000 +0100
+--- src/configure.in	2014-02-15 16:21:41.705902597 +0100
+***************
+*** 802,810 ****
+--- 802,820 ----
+      AC_MSG_CHECKING(for mzscheme_base.c)
+      if test -f "${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
+        MZSCHEME_EXTRA="mzscheme_base.c"
++       MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
++       MZSCHEME_MOD="++lib scheme/base"
+      else
+        if test -f "${SCHEME_COLLECTS}collects/scheme/base.rkt" ; then
+  	MZSCHEME_EXTRA="mzscheme_base.c"
++ 	MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
++ 	MZSCHEME_MOD="++lib scheme/base"
++       else
++ 	if test -f "${SCHEME_COLLECTS}collects/racket/base.rkt" ; then
++ 	  MZSCHEME_EXTRA="mzscheme_base.c"
++ 	  MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/raco ctool"
++ 	  MZSCHEME_MOD=""
++ 	fi
+        fi
+      fi
+      if test "X$MZSCHEME_EXTRA" != "X" ; then
+*** ../vim-7.4.181/src/version.c	2014-02-15 16:17:02.213903042 +0100
+--- src/version.c	2014-02-15 16:23:42.505902405 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     182,
+  /**/
+
+-- 
+Overflow on /dev/null, please empty the bit bucket.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.183 b/SOURCES/7.4.183
new file mode 100644
index 0000000..f23061c
--- /dev/null
+++ b/SOURCES/7.4.183
@@ -0,0 +1,49 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.183
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.183
+Problem:    MSVC Visual Studio update not supported.
+Solution:   Add version number. (Mike William)
+Files:	    src/Make_mvc.mak
+
+
+*** ../vim-7.4.182/src/Make_mvc.mak	2013-12-14 11:50:28.000000000 +0100
+--- src/Make_mvc.mak	2014-02-15 19:25:27.333885042 +0100
+***************
+*** 424,429 ****
+--- 424,432 ----
+  !if "$(_NMAKE_VER)" == "11.00.60610.1"
+  MSVCVER = 11.0
+  !endif
++ !if "$(_NMAKE_VER)" == "11.00.61030.0"
++ MSVCVER = 11.0
++ !endif
+  !if "$(_NMAKE_VER)" == "12.00.21005.1"
+  MSVCVER = 12.0
+  !endif
+*** ../vim-7.4.182/src/version.c	2014-02-15 17:18:56.953897128 +0100
+--- src/version.c	2014-02-15 19:31:11.337884494 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     183,
+  /**/
+
+-- 
+FATHER:    Did you kill all those guards?
+LAUNCELOT: Yes ...  I'm very sorry ...
+FATHER:    They cost fifty pounds each!
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.185 b/SOURCES/7.4.185
new file mode 100644
index 0000000..b326a16
--- /dev/null
+++ b/SOURCES/7.4.185
@@ -0,0 +1,64 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.185
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.185
+Problem:    Clang gives warnings.
+Solution:   Adjust how bigness is set. (Dominique Pelle)
+Files:      src/ex_cmds.c
+
+
+*** ../vim-7.4.184/src/ex_cmds.c	2014-02-11 12:15:39.781950970 +0100
+--- src/ex_cmds.c	2014-02-22 22:25:45.800904843 +0100
+***************
+*** 4099,4110 ****
+       * 'scroll' */
+      if (eap->forceit)
+  	bigness = curwin->w_height;
+-     else if (firstwin == lastwin)
+- 	bigness = curwin->w_p_scr * 2;
+  #ifdef FEAT_WINDOWS
+!     else
+  	bigness = curwin->w_height - 3;
+  #endif
+      if (bigness < 1)
+  	bigness = 1;
+  
+--- 4099,4110 ----
+       * 'scroll' */
+      if (eap->forceit)
+  	bigness = curwin->w_height;
+  #ifdef FEAT_WINDOWS
+!     else if (firstwin != lastwin)
+  	bigness = curwin->w_height - 3;
+  #endif
++     else
++ 	bigness = curwin->w_p_scr * 2;
+      if (bigness < 1)
+  	bigness = 1;
+  
+*** ../vim-7.4.184/src/version.c	2014-02-22 22:18:39.536905522 +0100
+--- src/version.c	2014-02-22 22:22:51.912905120 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     185,
+  /**/
+
+-- 
+There are 2 kinds of people in my world: those who know Unix, Perl, Vim, GNU,
+Linux, etc, and those who know COBOL.  It gets very difficult for me at
+parties, not knowing which group to socialise with :-)
+						Sitaram Chamarty
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.186 b/SOURCES/7.4.186
new file mode 100644
index 0000000..84f0a31
--- /dev/null
+++ b/SOURCES/7.4.186
@@ -0,0 +1,164 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.186
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.186 (after 7.4.085)
+Problem:    Insert in Visual mode sometimes gives incorrect results.
+            (Dominique Pelle)
+Solution:   Remember the original insert start position. (Christian Brabandt,
+            Dominique Pelle)
+Files:      src/edit.c, src/globals.h, src/ops.c, src/structs.h
+
+
+*** ../vim-7.4.185/src/edit.c	2014-01-23 22:45:54.608127182 +0100
+--- src/edit.c	2014-02-22 22:43:52.820903112 +0100
+***************
+*** 264,269 ****
+--- 264,270 ----
+  
+  static colnr_T	Insstart_textlen;	/* length of line when insert started */
+  static colnr_T	Insstart_blank_vcol;	/* vcol for first inserted blank */
++ static int	update_Insstart_orig = TRUE; /* set Insstart_orig to Insstart */
+  
+  static char_u	*last_insert = NULL;	/* the text of the previous insert,
+  					   K_SPECIAL and CSI are escaped */
+***************
+*** 340,345 ****
+--- 341,349 ----
+       * error message */
+      check_for_delay(TRUE);
+  
++     /* set Insstart_orig to Insstart */
++     update_Insstart_orig = TRUE;
++ 
+  #ifdef HAVE_SANDBOX
+      /* Don't allow inserting in the sandbox. */
+      if (sandbox != 0)
+***************
+*** 631,636 ****
+--- 635,643 ----
+  	if (arrow_used)	    /* don't repeat insert when arrow key used */
+  	    count = 0;
+  
++ 	if (update_Insstart_orig)
++ 	    Insstart_orig = Insstart;
++ 
+  	if (stop_insert_mode)
+  	{
+  	    /* ":stopinsert" used or 'insertmode' reset */
+***************
+*** 6923,6928 ****
+--- 6930,6936 ----
+      if (end_insert_pos != NULL)
+      {
+  	curbuf->b_op_start = Insstart;
++ 	curbuf->b_op_start_orig = Insstart_orig;
+  	curbuf->b_op_end = *end_insert_pos;
+      }
+  }
+***************
+*** 8257,8262 ****
+--- 8265,8271 ----
+  
+  		  /* Need to reset Insstart, esp. because a BS that joins
+  		   * a line to the previous one must save for undo. */
++ 		  update_Insstart_orig = FALSE;
+  		  Insstart = curwin->w_cursor;
+  		  break;
+  
+*** ../vim-7.4.185/src/globals.h	2014-02-11 15:10:38.130111835 +0100
+--- src/globals.h	2014-02-22 23:02:01.644901378 +0100
+***************
+*** 752,757 ****
+--- 752,763 ----
+   */
+  EXTERN pos_T	Insstart;		/* This is where the latest
+  					 * insert/append mode started. */
++ 
++ /* This is where the latest insert/append mode started. In contrast to
++  * Insstart, this won't be reset by certain keys and is needed for
++  * op_insert(), to detect correctly where inserting by the user started. */
++ EXTERN pos_T	Insstart_orig;
++ 
+  #ifdef FEAT_VREPLACE
+  /*
+   * Stuff for VREPLACE mode.
+*** ../vim-7.4.185/src/ops.c	2014-02-11 19:33:03.358353098 +0100
+--- src/ops.c	2014-02-22 22:39:47.588903502 +0100
+***************
+*** 2643,2662 ****
+  
+  	/* The user may have moved the cursor before inserting something, try
+  	 * to adjust the block for that. */
+! 	if (oap->start.lnum == curbuf->b_op_start.lnum && !bd.is_MAX)
+  	{
+  	    if (oap->op_type == OP_INSERT
+! 		    && oap->start.col != curbuf->b_op_start.col)
+  	    {
+! 		oap->start.col = curbuf->b_op_start.col;
+  		pre_textlen -= getviscol2(oap->start.col, oap->start.coladd)
+  							    - oap->start_vcol;
+  		oap->start_vcol = getviscol2(oap->start.col, oap->start.coladd);
+  	    }
+  	    else if (oap->op_type == OP_APPEND
+! 		    && oap->end.col >= curbuf->b_op_start.col)
+  	    {
+! 		oap->start.col = curbuf->b_op_start.col;
+  		/* reset pre_textlen to the value of OP_INSERT */
+  		pre_textlen += bd.textlen;
+  		pre_textlen -= getviscol2(oap->start.col, oap->start.coladd)
+--- 2643,2662 ----
+  
+  	/* The user may have moved the cursor before inserting something, try
+  	 * to adjust the block for that. */
+! 	if (oap->start.lnum == curbuf->b_op_start_orig.lnum && !bd.is_MAX)
+  	{
+  	    if (oap->op_type == OP_INSERT
+! 		    && oap->start.col != curbuf->b_op_start_orig.col)
+  	    {
+! 		oap->start.col = curbuf->b_op_start_orig.col;
+  		pre_textlen -= getviscol2(oap->start.col, oap->start.coladd)
+  							    - oap->start_vcol;
+  		oap->start_vcol = getviscol2(oap->start.col, oap->start.coladd);
+  	    }
+  	    else if (oap->op_type == OP_APPEND
+! 		    && oap->end.col >= curbuf->b_op_start_orig.col)
+  	    {
+! 		oap->start.col = curbuf->b_op_start_orig.col;
+  		/* reset pre_textlen to the value of OP_INSERT */
+  		pre_textlen += bd.textlen;
+  		pre_textlen -= getviscol2(oap->start.col, oap->start.coladd)
+*** ../vim-7.4.185/src/structs.h	2014-02-11 15:10:38.138111836 +0100
+--- src/structs.h	2014-02-22 22:39:47.588903502 +0100
+***************
+*** 1449,1454 ****
+--- 1449,1455 ----
+       * start and end of an operator, also used for '[ and ']
+       */
+      pos_T	b_op_start;
++     pos_T	b_op_start_orig;  /* used for Insstart_orig */
+      pos_T	b_op_end;
+  
+  #ifdef FEAT_VIMINFO
+*** ../vim-7.4.185/src/version.c	2014-02-22 22:27:20.772904692 +0100
+--- src/version.c	2014-02-22 22:39:08.932903564 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     186,
+  /**/
+
+-- 
+Individualists unite!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.187 b/SOURCES/7.4.187
new file mode 100644
index 0000000..122056e
--- /dev/null
+++ b/SOURCES/7.4.187
@@ -0,0 +1,136 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.187
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.187
+Problem:    Delete that crosses line break splits multi-byte character.
+Solution:   Advance a character instead of a byte. (Cade Foster)
+Files:      src/normal.c, src/testdir/test69.in, src/testdir/test69.ok
+
+
+*** ../vim-7.4.186/src/normal.c	2014-02-11 15:10:38.134111836 +0100
+--- src/normal.c	2014-02-22 23:41:12.472897635 +0100
+***************
+*** 21,27 ****
+  static int	resel_VIsual_mode = NUL;	/* 'v', 'V', or Ctrl-V */
+  static linenr_T	resel_VIsual_line_count;	/* number of lines */
+  static colnr_T	resel_VIsual_vcol;		/* nr of cols or end col */
+! static int	VIsual_mode_orig = NUL;         /* type of Visual mode, that user entered */
+  
+  static int	restart_VIsual_select = 0;
+  #endif
+--- 21,27 ----
+  static int	resel_VIsual_mode = NUL;	/* 'v', 'V', or Ctrl-V */
+  static linenr_T	resel_VIsual_line_count;	/* number of lines */
+  static colnr_T	resel_VIsual_vcol;		/* nr of cols or end col */
+! static int	VIsual_mode_orig = NUL;		/* saved Visual mode */
+  
+  static int	restart_VIsual_select = 0;
+  #endif
+***************
+*** 6202,6209 ****
+  			    || cap->oap->op_type == OP_CHANGE)
+  			&& !lineempty(curwin->w_cursor.lnum))
+  		{
+! 		    if (*ml_get_cursor() != NUL)
+! 			++curwin->w_cursor.col;
+  		    cap->retval |= CA_NO_ADJ_OP_END;
+  		}
+  		continue;
+--- 6202,6218 ----
+  			    || cap->oap->op_type == OP_CHANGE)
+  			&& !lineempty(curwin->w_cursor.lnum))
+  		{
+! 		    char_u *cp = ml_get_cursor();
+! 
+! 		    if (*cp != NUL)
+! 		    {
+! #ifdef FEAT_MBYTE
+! 			if (has_mbyte)
+! 			    curwin->w_cursor.col += (*mb_ptr2len)(cp);
+! 			else
+! #endif
+! 			    ++curwin->w_cursor.col;
+! 		    }
+  		    cap->retval |= CA_NO_ADJ_OP_END;
+  		}
+  		continue;
+***************
+*** 9482,9488 ****
+  # ifdef FEAT_CLIPBOARD
+  	    adjust_clip_reg(&regname);
+  # endif
+!            if (regname == 0 || regname == '"'
+  				     || VIM_ISDIGIT(regname) || regname == '-'
+  # ifdef FEAT_CLIPBOARD
+  		    || (clip_unnamed && (regname == '*' || regname == '+'))
+--- 9491,9497 ----
+  # ifdef FEAT_CLIPBOARD
+  	    adjust_clip_reg(&regname);
+  # endif
+! 	   if (regname == 0 || regname == '"'
+  				     || VIM_ISDIGIT(regname) || regname == '-'
+  # ifdef FEAT_CLIPBOARD
+  		    || (clip_unnamed && (regname == '*' || regname == '+'))
+*** ../vim-7.4.186/src/testdir/test69.in	2013-11-02 23:29:17.000000000 +0100
+--- src/testdir/test69.in	2014-02-22 23:38:50.508897861 +0100
+***************
+*** 155,160 ****
+--- 155,170 ----
+  aab
+  
+  STARTTEST
++ :set whichwrap+=h
++ /^x
++ dh
++ :set whichwrap-=h
++ ENDTEST
++ 
++ á
++ x
++ 
++ STARTTEST
+  :let a = '.é.' " one char of two bytes
+  :let b = '.é.' " normal e with composing char
+  /^byteidx
+*** ../vim-7.4.186/src/testdir/test69.ok	2013-11-02 23:29:17.000000000 +0100
+--- src/testdir/test69.ok	2014-02-22 23:38:53.752897856 +0100
+***************
+*** 150,155 ****
+--- 150,158 ----
+  aaa
+  
+  
++ áx
++ 
++ 
+  byteidx
+  [0, 1, 3, 4, -1]
+  [0, 1, 4, 5, -1]
+*** ../vim-7.4.186/src/version.c	2014-02-22 23:03:48.716901208 +0100
+--- src/version.c	2014-02-22 23:30:24.412898667 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     187,
+  /**/
+
+-- 
+ARTHUR:  Then who is your lord?
+WOMAN:   We don't have a lord.
+ARTHUR:  What?
+DENNIS:  I told you.  We're an anarcho-syndicalist commune.  We take it in
+         turns to act as a sort of executive officer for the week.
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.188 b/SOURCES/7.4.188
new file mode 100644
index 0000000..b2b4fa1
--- /dev/null
+++ b/SOURCES/7.4.188
@@ -0,0 +1,617 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.188
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.188
+Problem:    SIZEOF_LONG clashes with similar defines in header files.
+Solution:   Rename to a name starting with VIM_.  Also for SIZEOF_INT.
+Files:      src/if_ruby.c, src/vim.h, src/configure.in, src/auto/configure,
+            src/config.h.in, src/fileio.c, src/if_python.c, src/message.c,
+            src/spell.c, src/feature.h, src/os_os2_cfg.h, src/os_vms_conf.h,
+            src/os_win16.h, src/structs.h
+
+
+*** ../vim-7.4.187/src/if_ruby.c	2014-02-05 22:41:11.430582669 +0100
+--- src/if_ruby.c	2014-02-23 21:55:03.516770208 +0100
+***************
+*** 89,97 ****
+  #endif
+  
+  #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20 \
+! 	&& SIZEOF_INT < SIZEOF_LONG
+  /* Ruby 2.0 defines a number of static functions which use rb_fix2int and
+!  * rb_num2int if SIZEOF_INT < SIZEOF_LONG (64bit) */
+  # define rb_fix2int rb_fix2int_stub
+  # define rb_num2int rb_num2int_stub
+  #endif
+--- 89,97 ----
+  #endif
+  
+  #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20 \
+! 	&& VIM_SIZEOF_INT < VIM_SIZEOF_LONG
+  /* Ruby 2.0 defines a number of static functions which use rb_fix2int and
+!  * rb_num2int if VIM_SIZEOF_INT < VIM_SIZEOF_LONG (64bit) */
+  # define rb_fix2int rb_fix2int_stub
+  # define rb_num2int rb_num2int_stub
+  #endif
+***************
+*** 202,208 ****
+  # define rb_hash_new			dll_rb_hash_new
+  # define rb_inspect			dll_rb_inspect
+  # define rb_int2inum			dll_rb_int2inum
+! # if SIZEOF_INT < SIZEOF_LONG /* 64 bits only */
+  #  define rb_fix2int			dll_rb_fix2int
+  #  define rb_num2int			dll_rb_num2int
+  #  define rb_num2uint			dll_rb_num2uint
+--- 202,208 ----
+  # define rb_hash_new			dll_rb_hash_new
+  # define rb_inspect			dll_rb_inspect
+  # define rb_int2inum			dll_rb_int2inum
+! # if VIM_SIZEOF_INT < VIM_SIZEOF_LONG /* 64 bits only */
+  #  define rb_fix2int			dll_rb_fix2int
+  #  define rb_num2int			dll_rb_num2int
+  #  define rb_num2uint			dll_rb_num2uint
+***************
+*** 310,316 ****
+  static VALUE (*dll_rb_hash_new) (void);
+  static VALUE (*dll_rb_inspect) (VALUE);
+  static VALUE (*dll_rb_int2inum) (long);
+! # if SIZEOF_INT < SIZEOF_LONG /* 64 bits only */
+  static long (*dll_rb_fix2int) (VALUE);
+  static long (*dll_rb_num2int) (VALUE);
+  static unsigned long (*dll_rb_num2uint) (VALUE);
+--- 310,316 ----
+  static VALUE (*dll_rb_hash_new) (void);
+  static VALUE (*dll_rb_inspect) (VALUE);
+  static VALUE (*dll_rb_int2inum) (long);
+! # if VIM_SIZEOF_INT < VIM_SIZEOF_LONG /* 64 bits only */
+  static long (*dll_rb_fix2int) (VALUE);
+  static long (*dll_rb_num2int) (VALUE);
+  static unsigned long (*dll_rb_num2uint) (VALUE);
+***************
+*** 393,399 ****
+      return dll_rb_int2big(x);
+  }
+  #  if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20 \
+! 	&& SIZEOF_INT < SIZEOF_LONG
+  long rb_fix2int_stub(VALUE x)
+  {
+      return dll_rb_fix2int(x);
+--- 393,399 ----
+      return dll_rb_int2big(x);
+  }
+  #  if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20 \
+! 	&& VIM_SIZEOF_INT < VIM_SIZEOF_LONG
+  long rb_fix2int_stub(VALUE x)
+  {
+      return dll_rb_fix2int(x);
+***************
+*** 466,472 ****
+      {"rb_hash_new", (RUBY_PROC*)&dll_rb_hash_new},
+      {"rb_inspect", (RUBY_PROC*)&dll_rb_inspect},
+      {"rb_int2inum", (RUBY_PROC*)&dll_rb_int2inum},
+! # if SIZEOF_INT < SIZEOF_LONG /* 64 bits only */
+      {"rb_fix2int", (RUBY_PROC*)&dll_rb_fix2int},
+      {"rb_num2int", (RUBY_PROC*)&dll_rb_num2int},
+      {"rb_num2uint", (RUBY_PROC*)&dll_rb_num2uint},
+--- 466,472 ----
+      {"rb_hash_new", (RUBY_PROC*)&dll_rb_hash_new},
+      {"rb_inspect", (RUBY_PROC*)&dll_rb_inspect},
+      {"rb_int2inum", (RUBY_PROC*)&dll_rb_int2inum},
+! # if VIM_SIZEOF_INT < VIM_SIZEOF_LONG /* 64 bits only */
+      {"rb_fix2int", (RUBY_PROC*)&dll_rb_fix2int},
+      {"rb_num2int", (RUBY_PROC*)&dll_rb_num2int},
+      {"rb_num2uint", (RUBY_PROC*)&dll_rb_num2uint},
+*** ../vim-7.4.187/src/vim.h	2014-01-14 16:54:53.000000000 +0100
+--- src/vim.h	2014-02-23 21:58:23.764769890 +0100
+***************
+*** 43,49 ****
+   * it becomes zero.  This is likely a problem of not being able to run the
+   * test program.  Other items from configure may also be wrong then!
+   */
+! # if (SIZEOF_INT == 0)
+      Error: configure did not run properly.  Check auto/config.log.
+  # endif
+  
+--- 43,49 ----
+   * it becomes zero.  This is likely a problem of not being able to run the
+   * test program.  Other items from configure may also be wrong then!
+   */
+! # if (VIM_SIZEOF_INT == 0)
+      Error: configure did not run properly.  Check auto/config.log.
+  # endif
+  
+***************
+*** 148,169 ****
+  #endif
+  
+  /*
+!  * SIZEOF_INT is used in feature.h, and the system-specific included files
+!  * need items from feature.h.  Therefore define SIZEOF_INT here.
+   */
+  #ifdef WIN3264
+! # define SIZEOF_INT 4
+  #endif
+  #ifdef MSDOS
+  # ifdef DJGPP
+  #  ifndef FEAT_GUI_GTK		/* avoid problems when generating prototypes */
+! #   define SIZEOF_INT 4		/* 32 bit ints */
+  #  endif
+  #  define DOS32
+  #  define FEAT_CLIPBOARD
+  # else
+  #  ifndef FEAT_GUI_GTK		/* avoid problems when generating prototypes */
+! #   define SIZEOF_INT 2		/* 16 bit ints */
+  #  endif
+  #  define SMALL_MALLOC		/* 16 bit storage allocation */
+  #  define DOS16
+--- 148,169 ----
+  #endif
+  
+  /*
+!  * VIM_SIZEOF_INT is used in feature.h, and the system-specific included files
+!  * need items from feature.h.  Therefore define VIM_SIZEOF_INT here.
+   */
+  #ifdef WIN3264
+! # define VIM_SIZEOF_INT 4
+  #endif
+  #ifdef MSDOS
+  # ifdef DJGPP
+  #  ifndef FEAT_GUI_GTK		/* avoid problems when generating prototypes */
+! #   define VIM_SIZEOF_INT 4	/* 32 bit ints */
+  #  endif
+  #  define DOS32
+  #  define FEAT_CLIPBOARD
+  # else
+  #  ifndef FEAT_GUI_GTK		/* avoid problems when generating prototypes */
+! #   define VIM_SIZEOF_INT 2	/* 16 bit ints */
+  #  endif
+  #  define SMALL_MALLOC		/* 16 bit storage allocation */
+  #  define DOS16
+***************
+*** 174,191 ****
+    /* Be conservative about sizeof(int). It could be 4 too. */
+  # ifndef FEAT_GUI_GTK	/* avoid problems when generating prototypes */
+  #  ifdef __GNUC__
+! #   define SIZEOF_INT	4
+  #  else
+! #   define SIZEOF_INT	2
+  #  endif
+  # endif
+  #endif
+  #ifdef MACOS
+  # if defined(__POWERPC__) || defined(MACOS_X) || defined(__fourbyteints__) \
+    || defined(__MRC__) || defined(__SC__) || defined(__APPLE_CC__)/* MPW Compilers */
+! #  define SIZEOF_INT 4
+  # else
+! #  define SIZEOF_INT 2
+  # endif
+  #endif
+  
+--- 174,191 ----
+    /* Be conservative about sizeof(int). It could be 4 too. */
+  # ifndef FEAT_GUI_GTK	/* avoid problems when generating prototypes */
+  #  ifdef __GNUC__
+! #   define VIM_SIZEOF_INT	4
+  #  else
+! #   define VIM_SIZEOF_INT	2
+  #  endif
+  # endif
+  #endif
+  #ifdef MACOS
+  # if defined(__POWERPC__) || defined(MACOS_X) || defined(__fourbyteints__) \
+    || defined(__MRC__) || defined(__SC__) || defined(__APPLE_CC__)/* MPW Compilers */
+! #  define VIM_SIZEOF_INT 4
+  # else
+! #  define VIM_SIZEOF_INT 2
+  # endif
+  #endif
+  
+***************
+*** 417,428 ****
+  #define PRINTF_DECIMAL_LONG_U SCANF_DECIMAL_LONG_U
+  
+  /*
+!  * Only systems which use configure will have SIZEOF_OFF_T and SIZEOF_LONG
+   * defined, which is ok since those are the same systems which can have
+   * varying sizes for off_t.  The other systems will continue to use "%ld" to
+   * print off_t since off_t is simply a typedef to long for them.
+   */
+! #if defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T > SIZEOF_LONG)
+  # define LONG_LONG_OFF_T
+  #endif
+  
+--- 417,428 ----
+  #define PRINTF_DECIMAL_LONG_U SCANF_DECIMAL_LONG_U
+  
+  /*
+!  * Only systems which use configure will have SIZEOF_OFF_T and VIM_SIZEOF_LONG
+   * defined, which is ok since those are the same systems which can have
+   * varying sizes for off_t.  The other systems will continue to use "%ld" to
+   * print off_t since off_t is simply a typedef to long for them.
+   */
+! #if defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T > VIM_SIZEOF_LONG)
+  # define LONG_LONG_OFF_T
+  #endif
+  
+***************
+*** 448,454 ****
+  # ifdef UNICODE16
+  typedef unsigned short u8char_T;    /* short should be 16 bits */
+  # else
+! #  if SIZEOF_INT >= 4
+  typedef unsigned int u8char_T;	    /* int is 32 bits */
+  #  else
+  typedef unsigned long u8char_T;	    /* long should be 32 bits or more */
+--- 448,454 ----
+  # ifdef UNICODE16
+  typedef unsigned short u8char_T;    /* short should be 16 bits */
+  # else
+! #  if VIM_SIZEOF_INT >= 4
+  typedef unsigned int u8char_T;	    /* int is 32 bits */
+  #  else
+  typedef unsigned long u8char_T;	    /* long should be 32 bits or more */
+***************
+*** 1608,1614 ****
+   * With this we restrict the maximum line length to 1073741823. I guess this is
+   * not a real problem. BTW:  Longer lines are split.
+   */
+! #if SIZEOF_INT >= 4
+  # ifdef __MVS__
+  #  define MAXCOL (0x3fffffffL)		/* maximum column number, 30 bits */
+  # else
+--- 1608,1614 ----
+   * With this we restrict the maximum line length to 1073741823. I guess this is
+   * not a real problem. BTW:  Longer lines are split.
+   */
+! #if VIM_SIZEOF_INT >= 4
+  # ifdef __MVS__
+  #  define MAXCOL (0x3fffffffL)		/* maximum column number, 30 bits */
+  # else
+*** ../vim-7.4.187/src/configure.in	2014-02-15 17:18:56.953897128 +0100
+--- src/configure.in	2014-02-23 22:37:40.080766138 +0100
+***************
+*** 3581,3586 ****
+--- 3581,3590 ----
+  AC_CHECK_SIZEOF([time_t])
+  AC_CHECK_SIZEOF([off_t])
+  
++ dnl Use different names to avoid clashing with other header files.
++ AC_DEFINE_UNQUOTED(VIM_SIZEOF_INT, [$ac_cv_sizeof_int])
++ AC_DEFINE_UNQUOTED(VIM_SIZEOF_LONG, [$ac_cv_sizeof_long])
++ 
+  dnl Make sure that uint32_t is really 32 bits unsigned.
+  AC_MSG_CHECKING([uint32_t is 32 bits])
+  AC_TRY_RUN([
+*** ../vim-7.4.187/src/auto/configure	2013-11-21 12:17:46.000000000 +0100
+--- src/auto/configure	2014-02-23 22:37:43.692766132 +0100
+***************
+*** 5199,5207 ****
+--- 5199,5217 ----
+  $as_echo_n "checking for mzscheme_base.c... " >&6; }
+      if test -f "${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
+        MZSCHEME_EXTRA="mzscheme_base.c"
++       MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
++       MZSCHEME_MOD="++lib scheme/base"
+      else
+        if test -f "${SCHEME_COLLECTS}collects/scheme/base.rkt" ; then
+  	MZSCHEME_EXTRA="mzscheme_base.c"
++ 	MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
++ 	MZSCHEME_MOD="++lib scheme/base"
++       else
++ 	if test -f "${SCHEME_COLLECTS}collects/racket/base.rkt" ; then
++ 	  MZSCHEME_EXTRA="mzscheme_base.c"
++ 	  MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/raco ctool"
++ 	  MZSCHEME_MOD=""
++ 	fi
+        fi
+      fi
+      if test "X$MZSCHEME_EXTRA" != "X" ; then
+***************
+*** 12323,12328 ****
+--- 12333,12347 ----
+  
+  
+  
++ cat >>confdefs.h <<_ACEOF
++ #define VIM_SIZEOF_INT $ac_cv_sizeof_int
++ _ACEOF
++ 
++ cat >>confdefs.h <<_ACEOF
++ #define VIM_SIZEOF_LONG $ac_cv_sizeof_long
++ _ACEOF
++ 
++ 
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking uint32_t is 32 bits" >&5
+  $as_echo_n "checking uint32_t is 32 bits... " >&6; }
+  if test "$cross_compiling" = yes; then :
+*** ../vim-7.4.187/src/config.h.in	2013-11-02 21:04:32.000000000 +0100
+--- src/config.h.in	2014-02-23 21:45:36.784771111 +0100
+***************
+*** 37,46 ****
+  #undef UNIX
+  
+  /* Defined to the size of an int */
+! #undef SIZEOF_INT
+  
+  /* Defined to the size of a long */
+! #undef SIZEOF_LONG
+  
+  /* Defined to the size of off_t */
+  #undef SIZEOF_OFF_T
+--- 37,46 ----
+  #undef UNIX
+  
+  /* Defined to the size of an int */
+! #undef VIM_SIZEOF_INT
+  
+  /* Defined to the size of a long */
+! #undef VIM_SIZEOF_LONG
+  
+  /* Defined to the size of off_t */
+  #undef SIZEOF_OFF_T
+*** ../vim-7.4.187/src/fileio.c	2014-02-11 15:23:27.938123631 +0100
+--- src/fileio.c	2014-02-23 22:31:00.824766773 +0100
+***************
+*** 1185,1191 ****
+  	 * The amount is limited by the fact that read() only can read
+  	 * upto max_unsigned characters (and other things).
+  	 */
+! #if SIZEOF_INT <= 2
+  	if (linerest >= 0x7ff0)
+  	{
+  	    ++split;
+--- 1185,1191 ----
+  	 * The amount is limited by the fact that read() only can read
+  	 * upto max_unsigned characters (and other things).
+  	 */
+! #if VIM_SIZEOF_INT <= 2
+  	if (linerest >= 0x7ff0)
+  	{
+  	    ++split;
+***************
+*** 1197,1203 ****
+  	{
+  	    if (!skip_read)
+  	    {
+! #if SIZEOF_INT > 2
+  # if defined(SSIZE_MAX) && (SSIZE_MAX < 0x10000L)
+  		size = SSIZE_MAX;		    /* use max I/O size, 52K */
+  # else
+--- 1197,1203 ----
+  	{
+  	    if (!skip_read)
+  	    {
+! #if VIM_SIZEOF_INT > 2
+  # if defined(SSIZE_MAX) && (SSIZE_MAX < 0x10000L)
+  		size = SSIZE_MAX;		    /* use max I/O size, 52K */
+  # else
+*** ../vim-7.4.187/src/if_python.c	2014-01-14 19:35:49.000000000 +0100
+--- src/if_python.c	2014-02-23 21:54:39.212770247 +0100
+***************
+*** 613,619 ****
+  #  endif
+  # endif
+  # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000 \
+! 	&& SIZEOF_SIZE_T != SIZEOF_INT
+  #  ifdef Py_DEBUG
+      {"Py_InitModule4TraceRefs_64", (PYTHON_PROC*)&dll_Py_InitModule4},
+  #  else
+--- 613,619 ----
+  #  endif
+  # endif
+  # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000 \
+! 	&& SIZEOF_SIZE_T != VIM_SIZEOF_INT
+  #  ifdef Py_DEBUG
+      {"Py_InitModule4TraceRefs_64", (PYTHON_PROC*)&dll_Py_InitModule4},
+  #  else
+*** ../vim-7.4.187/src/message.c	2013-11-04 02:00:55.000000000 +0100
+--- src/message.c	2014-02-23 21:55:16.984770187 +0100
+***************
+*** 4376,4382 ****
+  		    {
+  			/* Don't put the #if inside memchr(), it can be a
+  			 * macro. */
+! #if SIZEOF_INT <= 2
+  			char *q = memchr(str_arg, '\0', precision);
+  #else
+  			/* memchr on HP does not like n > 2^31  !!! */
+--- 4376,4382 ----
+  		    {
+  			/* Don't put the #if inside memchr(), it can be a
+  			 * macro. */
+! #if VIM_SIZEOF_INT <= 2
+  			char *q = memchr(str_arg, '\0', precision);
+  #else
+  			/* memchr on HP does not like n > 2^31  !!! */
+*** ../vim-7.4.187/src/spell.c	2013-11-28 17:41:41.000000000 +0100
+--- src/spell.c	2014-02-23 21:55:24.600770175 +0100
+***************
+*** 317,323 ****
+  
+  /* Type used for indexes in the word tree need to be at least 4 bytes.  If int
+   * is 8 bytes we could use something smaller, but what? */
+! #if SIZEOF_INT > 3
+  typedef int idx_T;
+  #else
+  typedef long idx_T;
+--- 317,323 ----
+  
+  /* Type used for indexes in the word tree need to be at least 4 bytes.  If int
+   * is 8 bytes we could use something smaller, but what? */
+! #if VIM_SIZEOF_INT > 3
+  typedef int idx_T;
+  #else
+  typedef long idx_T;
+*** ../vim-7.4.187/src/feature.h	2013-05-18 20:18:20.000000000 +0200
+--- src/feature.h	2014-02-23 21:55:54.868770127 +0100
+***************
+*** 328,334 ****
+   *
+   * Disabled for EBCDIC as it requires multibyte.
+   */
+! #if defined(FEAT_BIG) && !defined(WIN16) && SIZEOF_INT >= 4 && !defined(EBCDIC)
+  # define FEAT_ARABIC
+  #endif
+  #ifdef FEAT_ARABIC
+--- 328,334 ----
+   *
+   * Disabled for EBCDIC as it requires multibyte.
+   */
+! #if defined(FEAT_BIG) && !defined(WIN16) && VIM_SIZEOF_INT >= 4 && !defined(EBCDIC)
+  # define FEAT_ARABIC
+  #endif
+  #ifdef FEAT_ARABIC
+***************
+*** 640,646 ****
+   */
+  #if (defined(FEAT_NORMAL) || defined(FEAT_GUI_GTK) || defined(FEAT_ARABIC)) \
+  	&& !defined(FEAT_MBYTE) && !defined(WIN16) \
+! 	&& SIZEOF_INT >= 4 && !defined(EBCDIC)
+  # define FEAT_MBYTE
+  #endif
+  
+--- 640,646 ----
+   */
+  #if (defined(FEAT_NORMAL) || defined(FEAT_GUI_GTK) || defined(FEAT_ARABIC)) \
+  	&& !defined(FEAT_MBYTE) && !defined(WIN16) \
+! 	&& VIM_SIZEOF_INT >= 4 && !defined(EBCDIC)
+  # define FEAT_MBYTE
+  #endif
+  
+***************
+*** 661,667 ****
+  # define FEAT_MBYTE
+  #endif
+  
+! #if defined(FEAT_MBYTE) && SIZEOF_INT < 4 && !defined(PROTO)
+  	Error: Can only handle multi-byte feature with 32 bit int or larger
+  #endif
+  
+--- 661,667 ----
+  # define FEAT_MBYTE
+  #endif
+  
+! #if defined(FEAT_MBYTE) && VIM_SIZEOF_INT < 4 && !defined(PROTO)
+  	Error: Can only handle multi-byte feature with 32 bit int or larger
+  #endif
+  
+*** ../vim-7.4.187/src/os_os2_cfg.h	2010-05-15 13:04:11.000000000 +0200
+--- src/os_os2_cfg.h	2014-02-23 21:56:03.540770113 +0100
+***************
+*** 47,53 ****
+  #undef UNIX	/* define always by current configure script */
+  
+  /* Defined to the size of an int */
+! #define SIZEOF_INT 4
+  
+  /*
+   * If we cannot trust one of the following from the libraries, we use our
+--- 47,53 ----
+  #undef UNIX	/* define always by current configure script */
+  
+  /* Defined to the size of an int */
+! #define VIM_SIZEOF_INT 4
+  
+  /*
+   * If we cannot trust one of the following from the libraries, we use our
+*** ../vim-7.4.187/src/os_vms_conf.h	2010-07-28 19:07:48.000000000 +0200
+--- src/os_vms_conf.h	2014-02-23 21:56:20.700770086 +0100
+***************
+*** 23,29 ****
+  #define HAVE_DATE_TIME
+  
+  /* Defined to the size of an int */
+! #define SIZEOF_INT 4
+  
+  /* #undef USEBCOPY */
+  #define USEMEMMOVE
+--- 23,29 ----
+  #define HAVE_DATE_TIME
+  
+  /* Defined to the size of an int */
+! #define VIM_SIZEOF_INT 4
+  
+  /* #undef USEBCOPY */
+  #define USEMEMMOVE
+*** ../vim-7.4.187/src/os_win16.h	2013-05-06 04:06:04.000000000 +0200
+--- src/os_win16.h	2014-02-23 21:56:39.292770056 +0100
+***************
+*** 55,62 ****
+  
+  #define FNAME_ILLEGAL "\"*?><|" /* illegal characters in a file name */
+  
+! #ifndef SIZEOF_INT
+! # define SIZEOF_INT 2
+  #endif
+  
+  typedef long off_t;
+--- 55,62 ----
+  
+  #define FNAME_ILLEGAL "\"*?><|" /* illegal characters in a file name */
+  
+! #ifndef VIM_SIZEOF_INT
+! # define VIM_SIZEOF_INT 2
+  #endif
+  
+  typedef long off_t;
+*** ../vim-7.4.187/src/structs.h	2014-02-22 23:03:48.716901208 +0100
+--- src/structs.h	2014-02-23 21:57:17.680769995 +0100
+***************
+*** 364,370 ****
+  /*
+   * structures used in undo.c
+   */
+! #if SIZEOF_INT > 2
+  # define ALIGN_LONG	/* longword alignment and use filler byte */
+  # define ALIGN_SIZE (sizeof(long))
+  #else
+--- 364,370 ----
+  /*
+   * structures used in undo.c
+   */
+! #if VIM_SIZEOF_INT > 2
+  # define ALIGN_LONG	/* longword alignment and use filler byte */
+  # define ALIGN_SIZE (sizeof(long))
+  #else
+***************
+*** 1094,1100 ****
+  typedef long_u hash_T;		/* Type for hi_hash */
+  
+  
+! #if SIZEOF_INT <= 3		/* use long if int is smaller than 32 bits */
+  typedef long	varnumber_T;
+  #else
+  typedef int	varnumber_T;
+--- 1094,1100 ----
+  typedef long_u hash_T;		/* Type for hi_hash */
+  
+  
+! #if VIM_SIZEOF_INT <= 3		/* use long if int is smaller than 32 bits */
+  typedef long	varnumber_T;
+  #else
+  typedef int	varnumber_T;
+*** ../vim-7.4.187/src/version.c	2014-02-22 23:49:30.268896843 +0100
+--- src/version.c	2014-02-23 22:40:55.708765826 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     188,
+  /**/
+
+-- 
+I'm sure that I asked CBuilder to do a "full" install.  Looks like I got
+a "fool" install, instead.		Charles E Campbell, Jr, PhD
+
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.189 b/SOURCES/7.4.189
new file mode 100644
index 0000000..cf6a2b7
--- /dev/null
+++ b/SOURCES/7.4.189
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.189
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.189
+Problem:    Compiler warning for unused argument.
+Solution:   Add UNUSED.
+Files:      src/eval.c
+
+
+*** ../vim-7.4.188/src/eval.c	2014-02-22 22:18:39.532905522 +0100
+--- src/eval.c	2014-02-23 22:29:14.976766942 +0100
+***************
+*** 9203,9209 ****
+  byteidx(argvars, rettv, comp)
+      typval_T	*argvars;
+      typval_T	*rettv;
+!     int		comp;
+  {
+  #ifdef FEAT_MBYTE
+      char_u	*t;
+--- 9203,9209 ----
+  byteidx(argvars, rettv, comp)
+      typval_T	*argvars;
+      typval_T	*rettv;
+!     int		comp UNUSED;
+  {
+  #ifdef FEAT_MBYTE
+      char_u	*t;
+*** ../vim-7.4.188/src/version.c	2014-02-23 22:52:33.372764715 +0100
+--- src/version.c	2014-02-23 22:54:17.836764549 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     189,
+  /**/
+
+-- 
+Q: How does a UNIX Guru pick up a girl?
+A: look; grep; which; eval; nice; uname; talk; date;
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.190 b/SOURCES/7.4.190
new file mode 100644
index 0000000..6cafb4b
--- /dev/null
+++ b/SOURCES/7.4.190
@@ -0,0 +1,70 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.190
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.190
+Problem:    Compiler warning for using %lld for off_t.
+Solution:   Add type cast.
+Files:      src/fileio.c
+
+
+*** ../vim-7.4.189/src/fileio.c	2014-02-23 22:52:33.368764715 +0100
+--- src/fileio.c	2014-02-23 22:31:00.824766773 +0100
+***************
+*** 5294,5300 ****
+      if (shortmess(SHM_LINES))
+  	sprintf((char *)p,
+  #ifdef LONG_LONG_OFF_T
+! 		"%ldL, %lldC", lnum, nchars
+  #else
+  		/* Explicit typecast avoids warning on Mac OS X 10.6 */
+  		"%ldL, %ldC", lnum, (long)nchars
+--- 5294,5300 ----
+      if (shortmess(SHM_LINES))
+  	sprintf((char *)p,
+  #ifdef LONG_LONG_OFF_T
+! 		"%ldL, %lldC", lnum, (long long)nchars
+  #else
+  		/* Explicit typecast avoids warning on Mac OS X 10.6 */
+  		"%ldL, %ldC", lnum, (long)nchars
+***************
+*** 5312,5318 ****
+  	else
+  	    sprintf((char *)p,
+  #ifdef LONG_LONG_OFF_T
+! 		    _("%lld characters"), nchars
+  #else
+  		    /* Explicit typecast avoids warning on Mac OS X 10.6 */
+  		    _("%ld characters"), (long)nchars
+--- 5312,5318 ----
+  	else
+  	    sprintf((char *)p,
+  #ifdef LONG_LONG_OFF_T
+! 		    _("%lld characters"), (long long)nchars
+  #else
+  		    /* Explicit typecast avoids warning on Mac OS X 10.6 */
+  		    _("%ld characters"), (long)nchars
+*** ../vim-7.4.189/src/version.c	2014-02-23 22:54:54.728764490 +0100
+--- src/version.c	2014-02-23 22:57:43.648764221 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     190,
+  /**/
+
+-- 
+Courtroom Quote #19:
+Q:  Doctor, how many autopsies have you performed on dead people?
+A:  All my autopsies have been performed on dead people.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.191 b/SOURCES/7.4.191
new file mode 100644
index 0000000..f0bb71b
--- /dev/null
+++ b/SOURCES/7.4.191
@@ -0,0 +1,689 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.191
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.191
+Problem:    Escaping a file name for shell commands can't be done without a
+            function.
+Solution:   Add the :S file name modifier.
+Files:      src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
+            src/testdir/Make_ming.mak, src/testdir/Make_os2.mak,
+            src/testdir/Make_vms.mms, src/testdir/Makefile,
+            src/testdir/test105.in, src/testdir/test105.ok,
+            runtime/doc/cmdline.txt, runtime/doc/eval.txt,
+            runtime/doc/map.txt, runtime/doc/options.txt,
+            runtime/doc/quickfix.txt, runtime/doc/usr_30.txt,
+            runtime/doc/usr_40.txt, runtime/doc/usr_42.txt,
+            runtime/doc/vi_diff.txt, src/eval.c, src/misc2.c, src/normal.c,
+            src/proto/misc2.pro
+
+
+*** ../vim-7.4.190/src/testdir/Make_amiga.mak	2014-02-05 22:25:29.974568243 +0100
+--- src/testdir/Make_amiga.mak	2014-02-23 23:16:51.056762395 +0100
+***************
+*** 35,41 ****
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test97.out test98.out \
+  		test99.out test100.out test101.out test102.out test103.out \
+! 		test104.out
+  
+  .SUFFIXES: .in .out
+  
+--- 35,41 ----
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test97.out test98.out \
+  		test99.out test100.out test101.out test102.out test103.out \
+! 		test104.out test105.out
+  
+  .SUFFIXES: .in .out
+  
+***************
+*** 156,158 ****
+--- 156,159 ----
+  test102.out: test102.in
+  test103.out: test103.in
+  test104.out: test104.in
++ test105.out: test105.in
+*** ../vim-7.4.190/src/testdir/Make_dos.mak	2014-02-05 22:25:29.978568243 +0100
+--- src/testdir/Make_dos.mak	2014-02-23 23:17:41.840762314 +0100
+***************
+*** 33,39 ****
+  		test84.out test85.out test86.out test87.out test88.out \
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test98.out test99.out \
+! 		test100.out test101.out test102.out test103.out test104.out
+  
+  SCRIPTS32 =	test50.out test70.out
+  
+--- 33,40 ----
+  		test84.out test85.out test86.out test87.out test88.out \
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test98.out test99.out \
+! 		test100.out test101.out test102.out test103.out test104.out \
+! 		test105.out
+  
+  SCRIPTS32 =	test50.out test70.out
+  
+*** ../vim-7.4.190/src/testdir/Make_ming.mak	2014-02-05 22:25:29.978568243 +0100
+--- src/testdir/Make_ming.mak	2014-02-23 23:17:29.400762333 +0100
+***************
+*** 53,59 ****
+  		test84.out test85.out test86.out test87.out test88.out \
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test98.out test99.out \
+! 		test100.out test101.out test102.out test103.out test104.out
+  
+  SCRIPTS32 =	test50.out test70.out
+  
+--- 53,60 ----
+  		test84.out test85.out test86.out test87.out test88.out \
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test98.out test99.out \
+! 		test100.out test101.out test102.out test103.out test104.out \
+! 		test105.out
+  
+  SCRIPTS32 =	test50.out test70.out
+  
+*** ../vim-7.4.190/src/testdir/Make_os2.mak	2014-02-05 22:25:29.978568243 +0100
+--- src/testdir/Make_os2.mak	2014-02-23 23:17:49.476762302 +0100
+***************
+*** 35,41 ****
+  		test81.out test82.out test83.out test84.out test88.out \
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test98.out test99.out \
+! 		test100.out test101.out test102.out test103.out test104.out
+  
+  .SUFFIXES: .in .out
+  
+--- 35,42 ----
+  		test81.out test82.out test83.out test84.out test88.out \
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test98.out test99.out \
+! 		test100.out test101.out test102.out test103.out test104.out \
+! 		test105.out
+  
+  .SUFFIXES: .in .out
+  
+*** ../vim-7.4.190/src/testdir/Make_vms.mms	2014-02-05 22:25:29.978568243 +0100
+--- src/testdir/Make_vms.mms	2014-02-23 23:17:56.596762290 +0100
+***************
+*** 4,10 ****
+  # Authors:	Zoltan Arpadffy, <arpadffy@polarhome.com>
+  #		Sandor Kopanyi,  <sandor.kopanyi@mailbox.hu>
+  #
+! # Last change:  2013 Nov 21
+  #
+  # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+  # Edit the lines in the Configuration section below to select.
+--- 4,10 ----
+  # Authors:	Zoltan Arpadffy, <arpadffy@polarhome.com>
+  #		Sandor Kopanyi,  <sandor.kopanyi@mailbox.hu>
+  #
+! # Last change:  2014 Feb 23
+  #
+  # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+  # Edit the lines in the Configuration section below to select.
+***************
+*** 79,85 ****
+  	 test82.out test83.out test84.out test88.out test89.out \
+  	 test90.out test91.out test92.out test93.out test94.out \
+  	 test95.out test96.out test97.out test98.out test99.out \
+! 	 test100.out test101.out test102.out test103.out test104.out
+  
+  # Known problems:
+  # Test 30: a problem around mac format - unknown reason
+--- 79,86 ----
+  	 test82.out test83.out test84.out test88.out test89.out \
+  	 test90.out test91.out test92.out test93.out test94.out \
+  	 test95.out test96.out test97.out test98.out test99.out \
+! 	 test100.out test101.out test102.out test103.out test104.out \
+! 	 test105.out
+  
+  # Known problems:
+  # Test 30: a problem around mac format - unknown reason
+*** ../vim-7.4.190/src/testdir/Makefile	2014-02-05 22:25:29.982568243 +0100
+--- src/testdir/Makefile	2014-02-23 23:18:14.040762262 +0100
+***************
+*** 31,37 ****
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test97.out test98.out \
+  		test99.out test100.out test101.out test102.out test103.out \
+! 		test104.out
+  
+  SCRIPTS_GUI = test16.out
+  
+--- 31,37 ----
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test97.out test98.out \
+  		test99.out test100.out test101.out test102.out test103.out \
+! 		test104.out test105.out
+  
+  SCRIPTS_GUI = test16.out
+  
+*** ../vim-7.4.190/src/testdir/test105.in	2014-02-23 23:35:40.680760596 +0100
+--- src/testdir/test105.in	2014-02-23 23:30:24.748761099 +0100
+***************
+*** 0 ****
+--- 1,45 ----
++ Test filename modifiers     vim: set ft=vim :
++ 
++ STARTTEST
++ :source small.vim
++ :%delete _
++ :set shell=sh
++ :set shellslash
++ :let tab="\t"
++ :command -nargs=1 Put :let expr=<q-args> | $put =expr.tab.strtrans(string(eval(expr)))
++ :let $HOME=fnamemodify('.', ':p:h:h:h')
++ :Put fnamemodify('.',              ':p'      )[-1:]
++ :Put fnamemodify('.',              ':p:h'    )[-1:]
++ :Put fnamemodify('test.out',       ':p'      )[-1:]
++ :Put fnamemodify('test.out',       ':.'      )
++ :Put fnamemodify('../testdir/a',   ':.'      )
++ :Put fnamemodify('test.out',       ':~'      )
++ :Put fnamemodify('../testdir/a',   ':~'      )
++ :Put fnamemodify('../testdir/a',   ':t'      )
++ :Put fnamemodify('.',              ':p:t'    )
++ :Put fnamemodify('test.out',       ':p:t'    )
++ :Put fnamemodify('test.out',       ':p:e'    )
++ :Put fnamemodify('test.out',       ':p:t:e'  )
++ :Put fnamemodify('abc.fb2.tar.gz', ':r'      )
++ :Put fnamemodify('abc.fb2.tar.gz', ':r:r'    )
++ :Put fnamemodify('abc.fb2.tar.gz', ':r:r:r'  )
++ :Put substitute(fnamemodify('abc.fb2.tar.gz', ':p:r:r'), '.*\(src/testdir/.*\)', '\1', '')
++ :Put fnamemodify('abc.fb2.tar.gz', ':e'      )
++ :Put fnamemodify('abc.fb2.tar.gz', ':e:e'    )
++ :Put fnamemodify('abc.fb2.tar.gz', ':e:e:e'  )
++ :Put fnamemodify('abc.fb2.tar.gz', ':e:e:e:e')
++ :Put fnamemodify('abc.fb2.tar.gz', ':e:e:r'  )
++ :Put fnamemodify('abc def',        ':S'      )
++ :Put fnamemodify('abc" "def',      ':S'      )
++ :Put fnamemodify('abc"%"def',      ':S'      )
++ :Put fnamemodify('abc'' ''def',    ':S'      )
++ :Put fnamemodify('abc''%''def',    ':S'      )
++ :Put fnamemodify("abc\ndef",       ':S'      )
++ :set shell=tcsh
++ :Put fnamemodify("abc\ndef",       ':S'      )
++ :$put ='vim: ts=8'
++ :1 delete _
++ :w! test.out
++ :qa!
++ ENDTEST
++ 
+*** ../vim-7.4.190/src/testdir/test105.ok	2014-02-23 23:35:40.688760596 +0100
+--- src/testdir/test105.ok	2014-02-23 23:32:11.204760929 +0100
+***************
+*** 0 ****
+--- 1,29 ----
++ fnamemodify('.',              ':p'      )[-1:]	'/'
++ fnamemodify('.',              ':p:h'    )[-1:]	'r'
++ fnamemodify('test.out',       ':p'      )[-1:]	't'
++ fnamemodify('test.out',       ':.'      )	'test.out'
++ fnamemodify('../testdir/a',   ':.'      )	'a'
++ fnamemodify('test.out',       ':~'      )	'~/src/testdir/test.out'
++ fnamemodify('../testdir/a',   ':~'      )	'~/src/testdir/a'
++ fnamemodify('../testdir/a',   ':t'      )	'a'
++ fnamemodify('.',              ':p:t'    )	''
++ fnamemodify('test.out',       ':p:t'    )	'test.out'
++ fnamemodify('test.out',       ':p:e'    )	'out'
++ fnamemodify('test.out',       ':p:t:e'  )	'out'
++ fnamemodify('abc.fb2.tar.gz', ':r'      )	'abc.fb2.tar'
++ fnamemodify('abc.fb2.tar.gz', ':r:r'    )	'abc.fb2'
++ fnamemodify('abc.fb2.tar.gz', ':r:r:r'  )	'abc'
++ substitute(fnamemodify('abc.fb2.tar.gz', ':p:r:r'), '.*\(src/testdir/.*\)', '\1', '')	'src/testdir/abc.fb2'
++ fnamemodify('abc.fb2.tar.gz', ':e'      )	'gz'
++ fnamemodify('abc.fb2.tar.gz', ':e:e'    )	'tar.gz'
++ fnamemodify('abc.fb2.tar.gz', ':e:e:e'  )	'fb2.tar.gz'
++ fnamemodify('abc.fb2.tar.gz', ':e:e:e:e')	'fb2.tar.gz'
++ fnamemodify('abc.fb2.tar.gz', ':e:e:r'  )	'tar'
++ fnamemodify('abc def',        ':S'      )	'''abc def'''
++ fnamemodify('abc" "def',      ':S'      )	'''abc" "def'''
++ fnamemodify('abc"%"def',      ':S'      )	'''abc"%"def'''
++ fnamemodify('abc'' ''def',    ':S'      )	'''abc''\'''' ''\''''def'''
++ fnamemodify('abc''%''def',    ':S'      )	'''abc''\''''%''\''''def'''
++ fnamemodify("abc\ndef",       ':S'      )	'''abc^@def'''
++ fnamemodify("abc\ndef",       ':S'      )	'''abc\^@def'''
++ vim: ts=8
+*** ../vim-7.4.190/runtime/doc/cmdline.txt	2013-11-09 05:30:18.000000000 +0100
+--- runtime/doc/cmdline.txt	2014-02-23 23:20:57.020762003 +0100
+***************
+*** 758,763 ****
+--- 758,764 ----
+  function expand() |expand()|.
+  	%	Is replaced with the current file name.		  *:_%* *c_%*
+  	#	Is replaced with the alternate file name.	  *:_#* *c_#*
++ 		This is remembered for every window.
+  	#n	(where n is a number) is replaced with		  *:_#0* *:_#n*
+  		the file name of buffer n.  "#0" is the same as "#".     *c_#n*
+  	##	Is replaced with all names in the argument list	  *:_##* *c_##*
+***************
+*** 823,830 ****
+  		   the start of the function.
+  
+  							 *filename-modifiers*
+! 	 *:_%:* *::8* *::p* *::.* *::~* *::h* *::t* *::r* *::e* *::s* *::gs*
+! 	        *%:8* *%:p* *%:.* *%:~* *%:h* *%:t* *%:r* *%:e* *%:s* *%:gs*
+  The file name modifiers can be used after "%", "#", "#n", "<cfile>", "<sfile>",
+  "<afile>" or "<abuf>".  They are also used with the |fnamemodify()| function.
+  These are not available when Vim has been compiled without the |+modify_fname|
+--- 824,831 ----
+  		   the start of the function.
+  
+  							 *filename-modifiers*
+! *:_%:* *::8* *::p* *::.* *::~* *::h* *::t* *::r* *::e* *::s* *::gs* *::S*
+!      *%:8* *%:p* *%:.* *%:~* *%:h* *%:t* *%:r* *%:e* *%:s* *%:gs* *%:S*
+  The file name modifiers can be used after "%", "#", "#n", "<cfile>", "<sfile>",
+  "<afile>" or "<abuf>".  They are also used with the |fnamemodify()| function.
+  These are not available when Vim has been compiled without the |+modify_fname|
+***************
+*** 879,884 ****
+--- 880,889 ----
+  	:gs?pat?sub?
+  		Substitute all occurrences of "pat" with "sub".  Otherwise
+  		this works like ":s".
++ 	:S	Escape special characters for use with a shell command (see 
++ 		|shellescape()|). Must be the last one. Examples: >
++ 		    :!dir <cfile>:S
++ 		    :call system('chmod +w -- ' . expand('%:S'))
+  
+  Examples, when the file name is "src/version.c", current dir
+  "/home/mool/vim": >
+*** ../vim-7.4.190/runtime/doc/eval.txt	2014-01-14 12:33:32.000000000 +0100
+--- runtime/doc/eval.txt	2014-02-23 23:19:32.420762138 +0100
+***************
+*** 5414,5419 ****
+--- 5428,5434 ----
+  <		This results in a directory listing for the file under the
+  		cursor.  Example of use with |system()|: >
+  		    :call system("chmod +w -- " . shellescape(expand("%")))
++ <		See also |::S|.
+  
+  
+  shiftwidth()						*shiftwidth()*
+***************
+*** 5896,5909 ****
+  		passed as stdin to the command.  The string is written as-is,
+  		you need to take care of using the correct line separators
+  		yourself.  Pipes are not used.
+! 		Note: Use |shellescape()| to escape special characters in a
+! 		command argument.  Newlines in {expr} may cause the command to
+! 		fail.  The characters in 'shellquote' and 'shellxquote' may
+! 		also cause trouble.
+  		This is not to be used for interactive commands.
+  
+  		The result is a String.  Example: >
+  		    :let files = system("ls " .  shellescape(expand('%:h')))
+  
+  <		To make the result more system-independent, the shell output
+  		is filtered to replace <CR> with <NL> for Macintosh, and
+--- 5911,5926 ----
+  		passed as stdin to the command.  The string is written as-is,
+  		you need to take care of using the correct line separators
+  		yourself.  Pipes are not used.
+! 		Note: Use |shellescape()| or |::S| with |expand()| or 
+! 		|fnamemodify()| to escape special characters in a command 
+! 		argument.  Newlines in {expr} may cause the command to fail.  
+! 		The characters in 'shellquote' and 'shellxquote' may also 
+! 		cause trouble.
+  		This is not to be used for interactive commands.
+  
+  		The result is a String.  Example: >
+  		    :let files = system("ls " .  shellescape(expand('%:h')))
++ 		    :let files = system('ls ' . expand('%:h:S'))
+  
+  <		To make the result more system-independent, the shell output
+  		is filtered to replace <CR> with <NL> for Macintosh, and
+*** ../vim-7.4.190/runtime/doc/map.txt	2013-08-10 13:24:56.000000000 +0200
+--- runtime/doc/map.txt	2014-02-23 23:19:32.424762138 +0100
+***************
+*** 380,386 ****
+     The simplest way to load a set of related language mappings is by using the
+  'keymap' option.  See |45.5|.
+     In Insert mode and in Command-line mode the mappings can be disabled with
+! the CTRL-^ command |i_CTRL-^| |c_CTRL-^| These commands change the value of
+  the 'iminsert' option.  When starting to enter a normal command line (not a
+  search pattern) the mappings are disabled until a CTRL-^ is typed.  The state
+  last used is remembered for Insert mode and Search patterns separately.  The
+--- 380,386 ----
+     The simplest way to load a set of related language mappings is by using the
+  'keymap' option.  See |45.5|.
+     In Insert mode and in Command-line mode the mappings can be disabled with
+! the CTRL-^ command |i_CTRL-^| |c_CTRL-^|. These commands change the value of
+  the 'iminsert' option.  When starting to enter a normal command line (not a
+  search pattern) the mappings are disabled until a CTRL-^ is typed.  The state
+  last used is remembered for Insert mode and Search patterns separately.  The
+***************
+*** 593,599 ****
+  When you have a mapping that contains an Ex command, you need to put a line
+  terminator after it to have it executed.  The use of <CR> is recommended for
+  this (see |<>|).  Example: >
+!    :map  _ls  :!ls -l %<CR>:echo "the end"<CR>
+  
+  To avoid mapping of the characters you type in insert or Command-line mode,
+  type a CTRL-V first.  The mapping in Insert mode is disabled if the 'paste'
+--- 593,599 ----
+  When you have a mapping that contains an Ex command, you need to put a line
+  terminator after it to have it executed.  The use of <CR> is recommended for
+  this (see |<>|).  Example: >
+!    :map  _ls  :!ls -l %:S<CR>:echo "the end"<CR>
+  
+  To avoid mapping of the characters you type in insert or Command-line mode,
+  type a CTRL-V first.  The mapping in Insert mode is disabled if the 'paste'
+*** ../vim-7.4.190/runtime/doc/options.txt	2013-11-12 04:43:57.000000000 +0100
+--- runtime/doc/options.txt	2014-02-23 23:19:32.428762138 +0100
+***************
+*** 4757,4764 ****
+  			global or local to buffer |global-local|
+  			{not in Vi}
+  	Program to use for the ":make" command.  See |:make_makeprg|.
+! 	This option may contain '%' and '#' characters, which are expanded to
+! 	the current and alternate file name. |:_%| |:_#|
+  	Environment variables are expanded |:set_env|.  See |option-backslash|
+  	about including spaces and backslashes.
+  	Note that a '|' must be escaped twice: once for ":set" and once for
+--- 4757,4765 ----
+  			global or local to buffer |global-local|
+  			{not in Vi}
+  	Program to use for the ":make" command.  See |:make_makeprg|.
+! 	This option may contain '%' and '#' characters (see  |:_%| and |:_#|), 
+! 	which are expanded to the current and alternate file name.  Use |::S| 
+! 	to escape file names in case they contain special characters.
+  	Environment variables are expanded |:set_env|.  See |option-backslash|
+  	about including spaces and backslashes.
+  	Note that a '|' must be escaped twice: once for ":set" and once for
+*** ../vim-7.4.190/runtime/doc/quickfix.txt	2013-08-10 13:25:00.000000000 +0200
+--- runtime/doc/quickfix.txt	2014-02-23 23:19:32.432762138 +0100
+***************
+*** 838,844 ****
+  The alltests.py script seems to be used quite often, that's all.
+  Useful values for the 'makeprg' options therefore are:
+   setlocal makeprg=./alltests.py " Run a testsuite
+!  setlocal makeprg=python %      " Run a single testcase
+  
+  Also see http://vim.sourceforge.net/tip_view.php?tip_id=280.
+  
+--- 838,844 ----
+  The alltests.py script seems to be used quite often, that's all.
+  Useful values for the 'makeprg' options therefore are:
+   setlocal makeprg=./alltests.py " Run a testsuite
+!  setlocal makeprg=python\ %:S   " Run a single testcase
+  
+  Also see http://vim.sourceforge.net/tip_view.php?tip_id=280.
+  
+***************
+*** 1332,1338 ****
+  Here is an alternative from Michael F. Lamb for Unix that filters the errors
+  first: >
+    :setl errorformat=%Z%f:%l:\ %m,%A%p^,%-G%*[^sl]%.%#
+!   :setl makeprg=javac\ %\ 2>&1\ \\\|\ vim-javac-filter
+  
+  You need to put the following in "vim-javac-filter" somewhere in your path
+  (e.g., in ~/bin) and make it executable: >
+--- 1332,1338 ----
+  Here is an alternative from Michael F. Lamb for Unix that filters the errors
+  first: >
+    :setl errorformat=%Z%f:%l:\ %m,%A%p^,%-G%*[^sl]%.%#
+!   :setl makeprg=javac\ %:S\ 2>&1\ \\\|\ vim-javac-filter
+  
+  You need to put the following in "vim-javac-filter" somewhere in your path
+  (e.g., in ~/bin) and make it executable: >
+*** ../vim-7.4.190/runtime/doc/usr_30.txt	2013-08-10 13:25:05.000000000 +0200
+--- runtime/doc/usr_30.txt	2014-02-23 23:19:32.432762138 +0100
+***************
+*** 128,134 ****
+  You can include special Vim keywords in the command specification.  The %
+  character expands to the name of the current file.  So if you execute the
+  command: >
+! 	:set makeprg=make\ %
+  
+  When you are editing main.c, then ":make" executes the following command: >
+  
+--- 128,134 ----
+  You can include special Vim keywords in the command specification.  The %
+  character expands to the name of the current file.  So if you execute the
+  command: >
+! 	:set makeprg=make\ %:S
+  
+  When you are editing main.c, then ":make" executes the following command: >
+  
+***************
+*** 137,143 ****
+  This is not too useful, so you will refine the command a little and use the :r
+  (root) modifier: >
+  
+! 	:set makeprg=make\ %:r.o
+  
+  Now the command executed is as follows: >
+  
+--- 137,143 ----
+  This is not too useful, so you will refine the command a little and use the :r
+  (root) modifier: >
+  
+! 	:set makeprg=make\ %:r:S.o
+  
+  Now the command executed is as follows: >
+  
+*** ../vim-7.4.190/runtime/doc/usr_40.txt	2013-08-10 13:25:05.000000000 +0200
+--- runtime/doc/usr_40.txt	2014-02-23 23:19:32.432762138 +0100
+***************
+*** 209,215 ****
+  separates the two commands.  This also means that a | character can't be used
+  inside a map command.  To include one, use <Bar> (five characters).  Example:
+  >
+! 	:map <F8> :write <Bar> !checkin %<CR>
+  
+  The same problem applies to the ":unmap" command, with the addition that you
+  have to watch out for trailing white space.  These two commands are different:
+--- 209,215 ----
+  separates the two commands.  This also means that a | character can't be used
+  inside a map command.  To include one, use <Bar> (five characters).  Example:
+  >
+! 	:map <F8> :write <Bar> !checkin %:S<CR>
+  
+  The same problem applies to the ":unmap" command, with the addition that you
+  have to watch out for trailing white space.  These two commands are different:
+*** ../vim-7.4.190/runtime/doc/usr_42.txt	2013-08-10 13:25:05.000000000 +0200
+--- runtime/doc/usr_42.txt	2014-02-23 23:19:32.432762138 +0100
+***************
+*** 311,317 ****
+  item with a bitmap.  For example, define a new toolbar item with: >
+  
+  	:tmenu ToolBar.Compile  Compile the current file
+! 	:amenu ToolBar.Compile  :!cc % -o %:r<CR>
+  
+  Now you need to create the icon.  For MS-Windows it must be in bitmap format,
+  with the name "Compile.bmp".  For Unix XPM format is used, the file name is
+--- 311,317 ----
+  item with a bitmap.  For example, define a new toolbar item with: >
+  
+  	:tmenu ToolBar.Compile  Compile the current file
+! 	:amenu ToolBar.Compile  :!cc %:S -o %:r:S<CR>
+  
+  Now you need to create the icon.  For MS-Windows it must be in bitmap format,
+  with the name "Compile.bmp".  For Unix XPM format is used, the file name is
+*** ../vim-7.4.190/runtime/doc/vi_diff.txt	2013-08-10 13:25:07.000000000 +0200
+--- runtime/doc/vi_diff.txt	2014-02-23 23:19:32.432762138 +0100
+***************
+*** 540,546 ****
+  Added :wnext command.  Same as ":write" followed by ":next".
+  
+  The ":w!" command always writes, also when the file is write protected.  In Vi
+! you would have to do ":!chmod +w %" and ":set noro".
+  
+  When 'tildeop' has been set, "~" is an operator (must be followed by a
+  movement command).
+--- 540,546 ----
+  Added :wnext command.  Same as ":write" followed by ":next".
+  
+  The ":w!" command always writes, also when the file is write protected.  In Vi
+! you would have to do ":!chmod +w %:S" and ":set noro".
+  
+  When 'tildeop' has been set, "~" is an operator (must be followed by a
+  movement command).
+*** ../vim-7.4.190/src/eval.c	2014-02-23 22:54:54.724764490 +0100
+--- src/eval.c	2014-02-23 23:19:32.432762138 +0100
+***************
+*** 16950,16956 ****
+      typval_T	*rettv;
+  {
+      rettv->vval.v_string = vim_strsave_shellescape(
+! 		       get_tv_string(&argvars[0]), non_zero_arg(&argvars[1]));
+      rettv->v_type = VAR_STRING;
+  }
+  
+--- 16950,16956 ----
+      typval_T	*rettv;
+  {
+      rettv->vval.v_string = vim_strsave_shellescape(
+! 		get_tv_string(&argvars[0]), non_zero_arg(&argvars[1]), TRUE);
+      rettv->v_type = VAR_STRING;
+  }
+  
+***************
+*** 24355,24360 ****
+--- 24355,24371 ----
+  	}
+      }
+  
++     if (src[*usedlen] == ':' && src[*usedlen + 1] == 'S')
++     {
++ 	p = vim_strsave_shellescape(*fnamep, FALSE, FALSE);
++ 	if (p == NULL)
++ 	    return -1;
++ 	vim_free(*bufp);
++ 	*bufp = *fnamep = p;
++ 	*fnamelen = (int)STRLEN(p);
++ 	*usedlen += 2;
++     }
++ 
+      return valid;
+  }
+  
+*** ../vim-7.4.190/src/misc2.c	2014-01-06 06:18:44.000000000 +0100
+--- src/misc2.c	2014-02-23 23:25:44.168761546 +0100
+***************
+*** 1369,1380 ****
+   * Escape a newline, depending on the 'shell' option.
+   * When "do_special" is TRUE also replace "!", "%", "#" and things starting
+   * with "<" like "<cfile>".
+   * Returns the result in allocated memory, NULL if we have run out.
+   */
+      char_u *
+! vim_strsave_shellescape(string, do_special)
+      char_u	*string;
+      int		do_special;
+  {
+      unsigned	length;
+      char_u	*p;
+--- 1369,1382 ----
+   * Escape a newline, depending on the 'shell' option.
+   * When "do_special" is TRUE also replace "!", "%", "#" and things starting
+   * with "<" like "<cfile>".
++  * When "do_newline" is FALSE do not escape newline unless it is csh shell.
+   * Returns the result in allocated memory, NULL if we have run out.
+   */
+      char_u *
+! vim_strsave_shellescape(string, do_special, do_newline)
+      char_u	*string;
+      int		do_special;
++     int		do_newline;
+  {
+      unsigned	length;
+      char_u	*p;
+***************
+*** 1403,1409 ****
+  # endif
+  	if (*p == '\'')
+  	    length += 3;		/* ' => '\'' */
+! 	if (*p == '\n' || (*p == '!' && (csh_like || do_special)))
+  	{
+  	    ++length;			/* insert backslash */
+  	    if (csh_like && do_special)
+--- 1405,1412 ----
+  # endif
+  	if (*p == '\'')
+  	    length += 3;		/* ' => '\'' */
+! 	if ((*p == '\n' && (csh_like || do_newline))
+! 		|| (*p == '!' && (csh_like || do_special)))
+  	{
+  	    ++length;			/* insert backslash */
+  	    if (csh_like && do_special)
+***************
+*** 1454,1460 ****
+  		++p;
+  		continue;
+  	    }
+! 	    if (*p == '\n' || (*p == '!' && (csh_like || do_special)))
+  	    {
+  		*d++ = '\\';
+  		if (csh_like && do_special)
+--- 1457,1464 ----
+  		++p;
+  		continue;
+  	    }
+! 	    if ((*p == '\n' && (csh_like || do_newline))
+! 		    || (*p == '!' && (csh_like || do_special)))
+  	    {
+  		*d++ = '\\';
+  		if (csh_like && do_special)
+*** ../vim-7.4.190/src/normal.c	2014-02-22 23:49:30.268896843 +0100
+--- src/normal.c	2014-02-23 23:19:32.436762138 +0100
+***************
+*** 5790,5796 ****
+      {
+  	/* Escape the argument properly for a shell command */
+  	ptr = vim_strnsave(ptr, n);
+! 	p = vim_strsave_shellescape(ptr, TRUE);
+  	vim_free(ptr);
+  	if (p == NULL)
+  	{
+--- 5790,5796 ----
+      {
+  	/* Escape the argument properly for a shell command */
+  	ptr = vim_strnsave(ptr, n);
+! 	p = vim_strsave_shellescape(ptr, TRUE, TRUE);
+  	vim_free(ptr);
+  	if (p == NULL)
+  	{
+*** ../vim-7.4.190/src/proto/misc2.pro	2013-08-10 13:37:20.000000000 +0200
+--- src/proto/misc2.pro	2014-02-23 23:19:32.436762138 +0100
+***************
+*** 32,38 ****
+  char_u *vim_strsave_escaped __ARGS((char_u *string, char_u *esc_chars));
+  char_u *vim_strsave_escaped_ext __ARGS((char_u *string, char_u *esc_chars, int cc, int bsl));
+  int csh_like_shell __ARGS((void));
+! char_u *vim_strsave_shellescape __ARGS((char_u *string, int do_special));
+  char_u *vim_strsave_up __ARGS((char_u *string));
+  char_u *vim_strnsave_up __ARGS((char_u *string, int len));
+  void vim_strup __ARGS((char_u *p));
+--- 32,38 ----
+  char_u *vim_strsave_escaped __ARGS((char_u *string, char_u *esc_chars));
+  char_u *vim_strsave_escaped_ext __ARGS((char_u *string, char_u *esc_chars, int cc, int bsl));
+  int csh_like_shell __ARGS((void));
+! char_u *vim_strsave_shellescape __ARGS((char_u *string, int do_special, int do_newline));
+  char_u *vim_strsave_up __ARGS((char_u *string));
+  char_u *vim_strnsave_up __ARGS((char_u *string, int len));
+  void vim_strup __ARGS((char_u *p));
+*** ../vim-7.4.190/src/version.c	2014-02-23 22:58:12.072764176 +0100
+--- src/version.c	2014-02-23 23:35:51.044760579 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     191,
+  /**/
+
+-- 
+Windows
+M!uqoms
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.192 b/SOURCES/7.4.192
new file mode 100644
index 0000000..256d0fa
--- /dev/null
+++ b/SOURCES/7.4.192
@@ -0,0 +1,44 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.192
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.192
+Problem:    Memory leak when giving E853.
+Solution:   Free the argument. (Dominique Pelle)
+Files:      src/eval.c
+
+
+*** ../vim-7.4.191/src/eval.c	2014-02-23 23:38:58.824760280 +0100
+--- src/eval.c	2014-02-24 03:27:39.244738435 +0100
+***************
+*** 21457,21462 ****
+--- 21457,21463 ----
+  		if (STRCMP(((char_u **)(newargs.ga_data))[i], arg) == 0)
+  		{
+  		    EMSG2(_("E853: Duplicate argument name: %s"), arg);
++ 		    vim_free(arg);
+  		    goto erret;
+  		}
+  
+*** ../vim-7.4.191/src/version.c	2014-02-23 23:38:58.828760280 +0100
+--- src/version.c	2014-02-24 03:28:23.068738365 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     192,
+  /**/
+
+-- 
+Seen on the back of a biker's vest: If you can read this, my wife fell off.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.193 b/SOURCES/7.4.193
new file mode 100644
index 0000000..f84a9d1
--- /dev/null
+++ b/SOURCES/7.4.193
@@ -0,0 +1,106 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.193
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.193
+Problem:    Typos in messages.
+Solution:   "then" -> "than". (Dominique Pelle)
+Files:	    src/if_py_both.h, src/spell.c
+
+
+*** ../vim-7.4.192/src/if_py_both.h	2014-02-15 15:58:55.081904773 +0100
+--- src/if_py_both.h	2014-03-08 16:10:46.015459417 +0100
+***************
+*** 236,242 ****
+  	if (*result <= 0)
+  	{
+  	    PyErr_SET_STRING(PyExc_ValueError,
+! 		    N_("number must be greater then zero"));
+  	    return -1;
+  	}
+      }
+--- 236,242 ----
+  	if (*result <= 0)
+  	{
+  	    PyErr_SET_STRING(PyExc_ValueError,
+! 		    N_("number must be greater than zero"));
+  	    return -1;
+  	}
+      }
+***************
+*** 2405,2411 ****
+  	if ((item = PyIter_Next(iterator)))
+  	{
+  	    PyErr_FORMAT(PyExc_ValueError,
+! 		    N_("attempt to assign sequence of size greater then %d "
+  			"to extended slice"), 0);
+  	    Py_DECREF(item);
+  	    ret = -1;
+--- 2405,2411 ----
+  	if ((item = PyIter_Next(iterator)))
+  	{
+  	    PyErr_FORMAT(PyExc_ValueError,
+! 		    N_("attempt to assign sequence of size greater than %d "
+  			"to extended slice"), 0);
+  	    Py_DECREF(item);
+  	    ret = -1;
+***************
+*** 2510,2516 ****
+  	{
+  	    Py_DECREF(iterator);
+  	    PyErr_FORMAT(PyExc_ValueError,
+! 		    N_("attempt to assign sequence of size greater then %d "
+  			"to extended slice"), (int) slicelen);
+  	    list_restore(numadded, numreplaced, slicelen, l, lis, lastaddedli);
+  	    PyMem_Free(lis);
+--- 2510,2516 ----
+  	{
+  	    Py_DECREF(iterator);
+  	    PyErr_FORMAT(PyExc_ValueError,
+! 		    N_("attempt to assign sequence of size greater than %d "
+  			"to extended slice"), (int) slicelen);
+  	    list_restore(numadded, numreplaced, slicelen, l, lis, lastaddedli);
+  	    PyMem_Free(lis);
+*** ../vim-7.4.192/src/spell.c	2014-02-23 22:52:33.372764715 +0100
+--- src/spell.c	2014-03-08 16:10:46.019459417 +0100
+***************
+*** 12037,12043 ****
+  		/* Normal byte, go one level deeper.  If it's not equal to the
+  		 * byte in the bad word adjust the score.  But don't even try
+  		 * when the byte was already changed.  And don't try when we
+! 		 * just deleted this byte, accepting it is always cheaper then
+  		 * delete + substitute. */
+  		if (c == fword[sp->ts_fidx]
+  #ifdef FEAT_MBYTE
+--- 12037,12043 ----
+  		/* Normal byte, go one level deeper.  If it's not equal to the
+  		 * byte in the bad word adjust the score.  But don't even try
+  		 * when the byte was already changed.  And don't try when we
+! 		 * just deleted this byte, accepting it is always cheaper than
+  		 * delete + substitute. */
+  		if (c == fword[sp->ts_fidx]
+  #ifdef FEAT_MBYTE
+*** ../vim-7.4.192/src/version.c	2014-02-24 03:31:55.816738026 +0100
+--- src/version.c	2014-03-08 16:11:51.591460422 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     193,
+  /**/
+
+-- 
+BEDEVERE: How do you know so much about swallows?
+ARTHUR:   Well you have to know these things when you're a king, you know.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.194 b/SOURCES/7.4.194
new file mode 100644
index 0000000..e73bd13
--- /dev/null
+++ b/SOURCES/7.4.194
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.194
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.194
+Problem:    Can't build for Android.
+Solution:   Add #if condition. (Fredrik Fornwall)
+Files:	    src/mbyte.c
+
+
+*** ../vim-7.4.193/src/mbyte.c	2014-01-14 13:26:17.000000000 +0100
+--- src/mbyte.c	2014-03-03 22:41:30.527101306 +0100
+***************
+*** 708,714 ****
+  	     * API */
+  	    n = IsDBCSLeadByteEx(enc_dbcs, (WINBYTE)i) ? 2 : 1;
+  #else
+! # if defined(MACOS) || defined(__amigaos4__)
+  	    /*
+  	     * if mblen() is not available, character which MSB is turned on
+  	     * are treated as leading byte character. (note : This assumption
+--- 708,714 ----
+  	     * API */
+  	    n = IsDBCSLeadByteEx(enc_dbcs, (WINBYTE)i) ? 2 : 1;
+  #else
+! # if defined(MACOS) || defined(__amigaos4__) || defined(__ANDROID__)
+  	    /*
+  	     * if mblen() is not available, character which MSB is turned on
+  	     * are treated as leading byte character. (note : This assumption
+*** ../vim-7.4.193/src/version.c	2014-03-08 16:13:39.123462070 +0100
+--- src/version.c	2014-03-12 14:53:45.148684209 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     194,
+  /**/
+
+-- 
+A programmer's wife asks him: "Please run to the store and pick up a loaf of
+bread.  If they have eggs, get a dozen".  The programmer comes home with 12
+loafs of bread.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.195 b/SOURCES/7.4.195
new file mode 100644
index 0000000..0cd888d
--- /dev/null
+++ b/SOURCES/7.4.195
@@ -0,0 +1,164 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.195
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.195 (after 7.4.193)
+Problem:    Python tests fail.
+Solution:   Change "then" to "than" in more places. (Dominique Pelle, Taro
+	    Muraoka)
+Files:	    src/testdir/test86.in, src/testdir/test86.ok,
+	    src/testdir/test87.in, src/testdir/test87.ok
+
+
+*** ../vim-7.4.194/src/testdir/test86.in	2014-02-11 18:47:18.678311042 +0100
+--- src/testdir/test86.in	2014-03-12 15:20:41.512708977 +0100
+***************
+*** 675,681 ****
+  # Check GCing iterator that was not fully exhausted
+  i = iter(vim.buffers)
+  cb.append('i:' + str(next(i)))
+! # and also check creating more then one iterator at a time
+  i2 = iter(vim.buffers)
+  cb.append('i2:' + str(next(i2)))
+  cb.append('i:' + str(next(i)))
+--- 675,681 ----
+  # Check GCing iterator that was not fully exhausted
+  i = iter(vim.buffers)
+  cb.append('i:' + str(next(i)))
+! # and also check creating more than one iterator at a time
+  i2 = iter(vim.buffers)
+  cb.append('i2:' + str(next(i2)))
+  cb.append('i:' + str(next(i)))
+*** ../vim-7.4.194/src/testdir/test86.ok	2014-01-14 16:54:53.000000000 +0100
+--- src/testdir/test86.ok	2014-03-12 15:19:28.080707851 +0100
+***************
+*** 882,892 ****
+  l[:] = FailingIter():NotImplementedError:('iter',)
+  l[:] = FailingIterNext():NotImplementedError:('next',)
+  <<< Finished
+! nel[1:10:2]  = "abcK":ValueError:('attempt to assign sequence of size greater then 2 to extended slice',)
+  ('a', 'b', 'c', 'O')
+  nel[1:10:2]  = "a":ValueError:('attempt to assign sequence of size 1 to extended slice of size 2',)
+  ('a', 'b', 'c', 'O')
+! nel[1:1:-1]  = "a":ValueError:('attempt to assign sequence of size greater then 0 to extended slice',)
+  ('a', 'b', 'c', 'O')
+  nel[:] = FailingIterNextN(2):NotImplementedError:('next N',)
+  ('a', 'b', 'c', 'O')
+--- 882,892 ----
+  l[:] = FailingIter():NotImplementedError:('iter',)
+  l[:] = FailingIterNext():NotImplementedError:('next',)
+  <<< Finished
+! nel[1:10:2]  = "abcK":ValueError:('attempt to assign sequence of size greater than 2 to extended slice',)
+  ('a', 'b', 'c', 'O')
+  nel[1:10:2]  = "a":ValueError:('attempt to assign sequence of size 1 to extended slice of size 2',)
+  ('a', 'b', 'c', 'O')
+! nel[1:1:-1]  = "a":ValueError:('attempt to assign sequence of size greater than 0 to extended slice',)
+  ('a', 'b', 'c', 'O')
+  nel[:] = FailingIterNextN(2):NotImplementedError:('next N',)
+  ('a', 'b', 'c', 'O')
+***************
+*** 1233,1240 ****
+  >>> Testing NumberToLong using vim.buffers[%s]
+  vim.buffers[[]]:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',)
+  vim.buffers[None]:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',)
+! vim.buffers[-1]:ValueError:('number must be greater then zero',)
+! vim.buffers[0]:ValueError:('number must be greater then zero',)
+  <<< Finished
+  > Current
+  >> CurrentGetattr
+--- 1233,1240 ----
+  >>> Testing NumberToLong using vim.buffers[%s]
+  vim.buffers[[]]:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',)
+  vim.buffers[None]:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',)
+! vim.buffers[-1]:ValueError:('number must be greater than zero',)
+! vim.buffers[0]:ValueError:('number must be greater than zero',)
+  <<< Finished
+  > Current
+  >> CurrentGetattr
+*** ../vim-7.4.194/src/testdir/test87.in	2014-02-11 18:47:18.678311042 +0100
+--- src/testdir/test87.in	2014-03-12 15:21:20.036709567 +0100
+***************
+*** 664,670 ****
+  # Check GCing iterator that was not fully exhausted
+  i = iter(vim.buffers)
+  cb.append('i:' + str(next(i)))
+! # and also check creating more then one iterator at a time
+  i2 = iter(vim.buffers)
+  cb.append('i2:' + str(next(i2)))
+  cb.append('i:' + str(next(i)))
+--- 664,670 ----
+  # Check GCing iterator that was not fully exhausted
+  i = iter(vim.buffers)
+  cb.append('i:' + str(next(i)))
+! # and also check creating more than one iterator at a time
+  i2 = iter(vim.buffers)
+  cb.append('i2:' + str(next(i2)))
+  cb.append('i:' + str(next(i)))
+*** ../vim-7.4.194/src/testdir/test87.ok	2014-01-14 16:54:53.000000000 +0100
+--- src/testdir/test87.ok	2014-03-12 15:19:28.080707851 +0100
+***************
+*** 882,892 ****
+  l[:] = FailingIter():(<class 'NotImplementedError'>, NotImplementedError('iter',))
+  l[:] = FailingIterNext():(<class 'NotImplementedError'>, NotImplementedError('next',))
+  <<< Finished
+! nel[1:10:2]  = "abcK":(<class 'ValueError'>, ValueError('attempt to assign sequence of size greater then 2 to extended slice',))
+  (b'a', b'b', b'c', b'O')
+  nel[1:10:2]  = "a":(<class 'ValueError'>, ValueError('attempt to assign sequence of size 1 to extended slice of size 2',))
+  (b'a', b'b', b'c', b'O')
+! nel[1:1:-1]  = "a":(<class 'ValueError'>, ValueError('attempt to assign sequence of size greater then 0 to extended slice',))
+  (b'a', b'b', b'c', b'O')
+  nel[:] = FailingIterNextN(2):(<class 'NotImplementedError'>, NotImplementedError('next N',))
+  (b'a', b'b', b'c', b'O')
+--- 882,892 ----
+  l[:] = FailingIter():(<class 'NotImplementedError'>, NotImplementedError('iter',))
+  l[:] = FailingIterNext():(<class 'NotImplementedError'>, NotImplementedError('next',))
+  <<< Finished
+! nel[1:10:2]  = "abcK":(<class 'ValueError'>, ValueError('attempt to assign sequence of size greater than 2 to extended slice',))
+  (b'a', b'b', b'c', b'O')
+  nel[1:10:2]  = "a":(<class 'ValueError'>, ValueError('attempt to assign sequence of size 1 to extended slice of size 2',))
+  (b'a', b'b', b'c', b'O')
+! nel[1:1:-1]  = "a":(<class 'ValueError'>, ValueError('attempt to assign sequence of size greater than 0 to extended slice',))
+  (b'a', b'b', b'c', b'O')
+  nel[:] = FailingIterNextN(2):(<class 'NotImplementedError'>, NotImplementedError('next N',))
+  (b'a', b'b', b'c', b'O')
+***************
+*** 1233,1240 ****
+  >>> Testing NumberToLong using vim.buffers[%s]
+  vim.buffers[[]]:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got list',))
+  vim.buffers[None]:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got NoneType',))
+! vim.buffers[-1]:(<class 'ValueError'>, ValueError('number must be greater then zero',))
+! vim.buffers[0]:(<class 'ValueError'>, ValueError('number must be greater then zero',))
+  <<< Finished
+  > Current
+  >> CurrentGetattr
+--- 1233,1240 ----
+  >>> Testing NumberToLong using vim.buffers[%s]
+  vim.buffers[[]]:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got list',))
+  vim.buffers[None]:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got NoneType',))
+! vim.buffers[-1]:(<class 'ValueError'>, ValueError('number must be greater than zero',))
+! vim.buffers[0]:(<class 'ValueError'>, ValueError('number must be greater than zero',))
+  <<< Finished
+  > Current
+  >> CurrentGetattr
+*** ../vim-7.4.194/src/version.c	2014-03-12 14:54:29.920684895 +0100
+--- src/version.c	2014-03-12 15:19:20.016707728 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     195,
+  /**/
+
+-- 
+Zen Microsystems: we're the om in .commmmmmmmm
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.196 b/SOURCES/7.4.196
new file mode 100644
index 0000000..d483b24
--- /dev/null
+++ b/SOURCES/7.4.196
@@ -0,0 +1,51 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.196
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.196
+Problem:    Tests fail on Solaris 9 and 10.
+Solution:   Use "test -f" instead of "test -e".  (Laurent Blume)
+Files:	    src/testdir/Makefile
+
+
+*** ../vim-7.4.195/src/testdir/Makefile	2014-02-23 23:38:58.812760280 +0100
+--- src/testdir/Makefile	2014-03-12 15:46:41.352732878 +0100
+***************
+*** 61,67 ****
+  test1.out: test1.in
+  	-rm -rf $*.failed $(RM_ON_RUN) $(RM_ON_START) wrongtermsize
+  	$(RUN_VIM) $*.in
+! 	@/bin/sh -c "if test -e wrongtermsize; \
+  		then echo; \
+  		echo test1 FAILED - terminal size must be 80x24 or larger; \
+  		echo; exit 1; \
+--- 61,67 ----
+  test1.out: test1.in
+  	-rm -rf $*.failed $(RM_ON_RUN) $(RM_ON_START) wrongtermsize
+  	$(RUN_VIM) $*.in
+! 	@/bin/sh -c "if test -f wrongtermsize; \
+  		then echo; \
+  		echo test1 FAILED - terminal size must be 80x24 or larger; \
+  		echo; exit 1; \
+*** ../vim-7.4.195/src/version.c	2014-03-12 15:26:36.432714415 +0100
+--- src/version.c	2014-03-12 15:48:09.700734232 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     196,
+  /**/
+
+-- 
+My Go, this amn keyboar oesn't have a .
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.197 b/SOURCES/7.4.197
new file mode 100644
index 0000000..80783eb
--- /dev/null
+++ b/SOURCES/7.4.197
@@ -0,0 +1,1052 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.197
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.197
+Problem:    Various problems on VMS.
+Solution:   Fix several VMS problems. (Zoltan Arpadffy)
+Files:	    runtime/doc/os_vms.txt, src/Make_vms.mms, src/fileio.c,
+	    src/os_unix.c, src/os_unix.h, src/os_vms.c, src/os_vms_conf.h,
+	    src/proto/os_vms.pro, src/testdir/Make_vms.mms,
+	    src/testdir/test72.in, src/testdir/test77a.com,
+	    src/testdir/test77a.in, src/testdir/test77a.ok src/undo.c
+
+
+*** ../vim-7.4.196/runtime/doc/os_vms.txt	2013-08-10 13:24:59.000000000 +0200
+--- runtime/doc/os_vms.txt	2014-03-12 15:55:50.196741288 +0100
+***************
+*** 1,4 ****
+! *os_vms.txt*    For Vim version 7.4.  Last change: 2011 Aug 14
+  
+  
+  		  VIM REFERENCE MANUAL
+--- 1,4 ----
+! *os_vms.txt*    For Vim version 7.4.  Last change: 2014 Feb 24
+  
+  
+  		  VIM REFERENCE MANUAL
+***************
+*** 24,30 ****
+  
+  1. Getting started					*vms-started*
+  
+! Vim (Vi IMproved) is a vi-compatible text editor that runs on nearly every
+  operating system known to humanity.  Now use Vim on OpenVMS too, in character
+  or X/Motif environment.  It is fully featured and absolutely compatible with
+  Vim on other operating systems.
+--- 24,30 ----
+  
+  1. Getting started					*vms-started*
+  
+! Vim (Vi IMproved) is a Vi-compatible text editor that runs on nearly every
+  operating system known to humanity.  Now use Vim on OpenVMS too, in character
+  or X/Motif environment.  It is fully featured and absolutely compatible with
+  Vim on other operating systems.
+***************
+*** 764,769 ****
+--- 764,785 ----
+  
+  9. VMS related changes					*vms-changes*
+  
++ Version 7.4 
++ - Undo: VMS can not handle more than one dot in the filenames use "dir/name" -> "dir/_un_name" 
++   add _un_ at the beginning to keep the extension
++ - correct swap file name wildcard handling
++ - handle iconv usage correctly
++ - do not optimize on vax - otherwise it hangs compiling crypto files
++ - fileio.c fix the comment
++ - correct RealWaitForChar 
++ - after 7.4-119 use different functions lib$cvtf_to_internal_time because Alpha and VAX have
++   G_FLOAT but IA64 uses IEEE float otherwise Vim crashes
++ - guard agains crashes that are caused by mixed filenames
++ - [TESTDIR]make_vms.mms changed to see the output files
++ - Improve tests, update known issues
++ - minor compiler warnings fixed
++ - CTAGS 5.8 +regex included
++ 
+  Version 7.3
+  - CTAGS 5.8 included
+  - VMS compile warnings fixed - floating-point overflow warning corrected on VAX
+*** ../vim-7.4.196/src/Make_vms.mms	2013-05-06 04:06:04.000000000 +0200
+--- src/Make_vms.mms	2014-03-12 15:55:50.196741288 +0100
+***************
+*** 2,8 ****
+  # Makefile for Vim on OpenVMS
+  #
+  # Maintainer:   Zoltan Arpadffy <arpadffy@polarhome.com>
+! # Last change:  2008 Aug 16
+  #
+  # This has script been tested on VMS 6.2 to 8.2 on DEC Alpha, VAX and IA64
+  # with MMS and MMK
+--- 2,8 ----
+  # Makefile for Vim on OpenVMS
+  #
+  # Maintainer:   Zoltan Arpadffy <arpadffy@polarhome.com>
+! # Last change:  2014 Feb 24
+  #
+  # This has script been tested on VMS 6.2 to 8.2 on DEC Alpha, VAX and IA64
+  # with MMS and MMK
+***************
+*** 21,29 ****
+  ######################################################################
+  # Configuration section.
+  ######################################################################
+- # VMS version
+- # Uncomment if you use VMS version 6.2 or older
+- # OLD_VMS = YES
+  
+  # Compiler selection.
+  # Comment out if you use the VAXC compiler
+--- 21,26 ----
+***************
+*** 60,66 ****
+  
+  # Uncomment if want a debug version. Resulting executable is DVIM.EXE
+  # Development purpose only! Normally, it should not be defined. !!!
+! # DEBUG = YES
+  
+  # Languages support for Perl, Python, TCL etc.
+  # If you don't need it really, leave them behind the comment.
+--- 57,63 ----
+  
+  # Uncomment if want a debug version. Resulting executable is DVIM.EXE
+  # Development purpose only! Normally, it should not be defined. !!!
+! # DEBUG = YES 
+  
+  # Languages support for Perl, Python, TCL etc.
+  # If you don't need it really, leave them behind the comment.
+***************
+*** 87,92 ****
+--- 84,92 ----
+  # Allow FEATURE_MZSCHEME
+  # VIM_MZSCHEME = YES
+  
++ # Use ICONV
++ # VIM_ICONV  = YES
++ 
+  ######################################################################
+  # Directory, library and include files configuration section.
+  # Normally you need not to change anything below. !
+***************
+*** 99,123 ****
+  
+  .IFDEF MMSVAX
+  .IFDEF DECC	     # VAX with DECC
+! CC_DEF  = cc # /decc # some system requires this switch but when it is not required /ver might fail
+  PREFIX  = /prefix=all
+  .ELSE		     # VAX with VAXC
+  CC_DEF	= cc
+  PREFIX	=
+  CCVER	=
+  .ENDIF
+! .ELSE		     # AXP wixh DECC
+  CC_DEF  = cc
+  PREFIX  = /prefix=all
+  .ENDIF
+  
+  LD_DEF  = link
+  C_INC   = [.proto]
+  
+- .IFDEF OLD_VMS
+- VMS_DEF = ,"OLD_VMS"
+- .ENDIF
+- 
+  .IFDEF DEBUG
+  DEBUG_DEF = ,"DEBUG"
+  TARGET    = dvim.exe
+--- 99,123 ----
+  
+  .IFDEF MMSVAX
+  .IFDEF DECC	     # VAX with DECC
+! CC_DEF  = cc # /decc # some versions require /decc switch but when it is not required /ver might fail
+  PREFIX  = /prefix=all
++ OPTIMIZE= /noopt     # do not optimize on VAX. The compiler has hard time with crypto functions
+  .ELSE		     # VAX with VAXC
+  CC_DEF	= cc
+  PREFIX	=
++ OPTIMIZE= /noopt
+  CCVER	=
+  .ENDIF
+! .ELSE		     # AXP and IA64 with DECC
+  CC_DEF  = cc
+  PREFIX  = /prefix=all
++ OPTIMIZE= /opt
+  .ENDIF
+  
++ 
+  LD_DEF  = link
+  C_INC   = [.proto]
+  
+  .IFDEF DEBUG
+  DEBUG_DEF = ,"DEBUG"
+  TARGET    = dvim.exe
+***************
+*** 125,131 ****
+  LDFLAGS   = /debug
+  .ELSE
+  TARGET    = vim.exe
+! CFLAGS    = /opt$(PREFIX)
+  LDFLAGS   =
+  .ENDIF
+  
+--- 125,131 ----
+  LDFLAGS   = /debug
+  .ELSE
+  TARGET    = vim.exe
+! CFLAGS    = $(OPTIMIZE)$(PREFIX)
+  LDFLAGS   =
+  .ENDIF
+  
+***************
+*** 274,279 ****
+--- 274,284 ----
+  MZSCH_OBJ = if_mzsch.obj
+  .ENDIF
+  
++ .IFDEF VIM_ICONV
++ # ICONV related setup
++ ICONV_DEF = ,"USE_ICONV"
++ .ENDIF
++ 
+  ######################################################################
+  # End of configuration section.
+  # Please, do not change anything below without programming experience.
+***************
+*** 287,294 ****
+  
+  .SUFFIXES : .obj .c
+  
+! ALL_CFLAGS = /def=($(MODEL_DEF)$(DEFS)$(VMS_DEF)$(DEBUG_DEF)$(PERL_DEF)$(PYTHON_DEF) -
+!  $(TCL_DEF)$(SNIFF_DEF)$(RUBY_DEF)$(XIM_DEF)$(HANGULIN_DEF)$(TAG_DEF)$(MZSCH_DEF)) -
+   $(CFLAGS)$(GUI_FLAG) -
+   /include=($(C_INC)$(GUI_INC_DIR)$(GUI_INC)$(PERL_INC)$(PYTHON_INC)$(TCL_INC))
+  
+--- 292,299 ----
+  
+  .SUFFIXES : .obj .c
+  
+! ALL_CFLAGS = /def=($(MODEL_DEF)$(DEFS)$(DEBUG_DEF)$(PERL_DEF)$(PYTHON_DEF) -
+!  $(TCL_DEF)$(SNIFF_DEF)$(RUBY_DEF)$(XIM_DEF)$(HANGULIN_DEF)$(TAG_DEF)$(MZSCH_DEF)$(ICONV_DEF)) -
+   $(CFLAGS)$(GUI_FLAG) -
+   /include=($(C_INC)$(GUI_INC_DIR)$(GUI_INC)$(PERL_INC)$(PYTHON_INC)$(TCL_INC))
+  
+***************
+*** 296,303 ****
+  # It is specially formated for correct display of unix like includes
+  # as $(GUI_INC) - replaced with $(GUI_INC_VER)
+  # Otherwise should not be any other difference.
+! ALL_CFLAGS_VER = /def=($(MODEL_DEF)$(DEFS)$(VMS_DEF)$(DEBUG_DEF)$(PERL_DEF)$(PYTHON_DEF) -
+!  $(TCL_DEF)$(SNIFF_DEF)$(RUBY_DEF)$(XIM_DEF)$(HANGULIN_DEF)$(TAG_DEF)$(MZSCH_DEF)) -
+   $(CFLAGS)$(GUI_FLAG) -
+   /include=($(C_INC)$(GUI_INC_DIR)$(GUI_INC_VER)$(PERL_INC)$(PYTHON_INC)$(TCL_INC))
+  
+--- 301,308 ----
+  # It is specially formated for correct display of unix like includes
+  # as $(GUI_INC) - replaced with $(GUI_INC_VER)
+  # Otherwise should not be any other difference.
+! ALL_CFLAGS_VER = /def=($(MODEL_DEF)$(DEFS)$(DEBUG_DEF)$(PERL_DEF)$(PYTHON_DEF) -
+!  $(TCL_DEF)$(SNIFF_DEF)$(RUBY_DEF)$(XIM_DEF)$(HANGULIN_DEF)$(TAG_DEF)$(MZSCH_DEF)$(ICONV_DEF)) -
+   $(CFLAGS)$(GUI_FLAG) -
+   /include=($(C_INC)$(GUI_INC_DIR)$(GUI_INC_VER)$(PERL_INC)$(PYTHON_INC)$(TCL_INC))
+  
+*** ../vim-7.4.196/src/fileio.c	2014-02-23 22:58:12.072764176 +0100
+--- src/fileio.c	2014-03-12 15:55:50.200741288 +0100
+***************
+*** 7559,7565 ****
+      p = (char_u *)tempnam("tmp:", (char *)itmp);
+      if (p != NULL)
+      {
+! 	/* VMS will use '.LOG' if we don't explicitly specify an extension,
+  	 * and VIM will then be unable to find the file later */
+  	STRCPY(itmp, p);
+  	STRCAT(itmp, ".txt");
+--- 7559,7565 ----
+      p = (char_u *)tempnam("tmp:", (char *)itmp);
+      if (p != NULL)
+      {
+! 	/* VMS will use '.LIS' if we don't explicitly specify an extension,
+  	 * and VIM will then be unable to find the file later */
+  	STRCPY(itmp, p);
+  	STRCAT(itmp, ".txt");
+*** ../vim-7.4.196/src/os_unix.c	2013-12-11 17:12:32.000000000 +0100
+--- src/os_unix.c	2014-03-12 16:25:11.144768271 +0100
+***************
+*** 2965,2971 ****
+--- 2965,2990 ----
+  
+      if (stat((char *)name, &st))
+  	return 0;
++ #ifdef VMS
++     /* Like on Unix system file can have executable rights but not necessarily
++      * be an executable, but on Unix is not a default for an ordianry file to
++      * have an executable flag - on VMS it is in most cases.
++      * Therefore, this check does not have any sense - let keep us to the
++      * conventions instead:
++      * *.COM and *.EXE files are the executables - the rest are not. This is
++      * not ideal but better then it was.
++      */
++     int vms_executable = 0;
++     if (S_ISREG(st.st_mode) && mch_access((char *)name, X_OK) == 0)
++     {
++ 	if (strstr(vms_tolower((char*)name),".exe") != NULL
++ 		|| strstr(vms_tolower((char*)name),".com")!= NULL)
++ 	    vms_executable = 1;
++     }
++     return vms_executable;
++ #else
+      return S_ISREG(st.st_mode) && mch_access((char *)name, X_OK) == 0;
++ #endif
+  }
+  
+  /*
+***************
+*** 2983,2989 ****
+--- 3002,3010 ----
+      /* If it's an absolute or relative path don't need to use $PATH. */
+      if (mch_isFullName(name) || (name[0] == '.' && (name[1] == '/'
+  				      || (name[1] == '.' && name[2] == '/'))))
++     {
+  	return executable_file(name);
++     }
+  
+      p = (char_u *)getenv("PATH");
+      if (p == NULL || *p == NUL)
+*** ../vim-7.4.196/src/os_unix.h	2013-12-11 17:12:32.000000000 +0100
+--- src/os_unix.h	2014-03-12 15:55:50.204741288 +0100
+***************
+*** 302,308 ****
+  #  define USR_VIMRC_FILE2	"$HOME/vimfiles/vimrc"
+  # else
+  #  ifdef VMS
+! #   define USR_VIMRC_FILE2	"sys$login:vimfiles:vimrc"
+  #  else
+  #    define USR_VIMRC_FILE2	"~/.vim/vimrc"
+  #  endif
+--- 302,308 ----
+  #  define USR_VIMRC_FILE2	"$HOME/vimfiles/vimrc"
+  # else
+  #  ifdef VMS
+! #   define USR_VIMRC_FILE2	"sys$login:vimfiles/vimrc"
+  #  else
+  #    define USR_VIMRC_FILE2	"~/.vim/vimrc"
+  #  endif
+***************
+*** 329,335 ****
+  #  define USR_GVIMRC_FILE2	"$HOME/vimfiles/gvimrc"
+  # else
+  #  ifdef VMS
+! #   define USR_GVIMRC_FILE2	"sys$login:vimfiles:gvimrc"
+  #  else
+  #   define USR_GVIMRC_FILE2	"~/.vim/gvimrc"
+  #  endif
+--- 329,335 ----
+  #  define USR_GVIMRC_FILE2	"$HOME/vimfiles/gvimrc"
+  # else
+  #  ifdef VMS
+! #   define USR_GVIMRC_FILE2	"sys$login:vimfiles/gvimrc"
+  #  else
+  #   define USR_GVIMRC_FILE2	"~/.vim/gvimrc"
+  #  endif
+*** ../vim-7.4.196/src/os_vms.c	2013-12-11 17:12:32.000000000 +0100
+--- src/os_vms.c	2014-03-12 16:26:17.544769288 +0100
+***************
+*** 296,301 ****
+--- 296,313 ----
+  }
+  
+  /*
++  * Convert string to lowercase - most often filename
++  */
++     char *
++ vms_tolower( char *name )
++ {
++     int i,nlen = strlen(name);
++     for (i = 0; i < nlen; i++)
++ 	name[i] = TOLOWER_ASC(name[i]);
++     return name;
++ }
++ 
++ /*
+   * Convert VMS system() or lib$spawn() return code to Unix-like exit value.
+   */
+      int
+***************
+*** 361,373 ****
+  vms_wproc(char *name, int val)
+  {
+      int i;
+-     int nlen;
+      static int vms_match_alloced = 0;
+  
+!     if (val != DECC$K_FILE) /* Directories and foreign non VMS files are not
+! 			       counting  */
+  	return 1;
+  
+      if (vms_match_num == 0) {
+  	/* first time through, setup some things */
+  	if (NULL == vms_fmatch) {
+--- 373,384 ----
+  vms_wproc(char *name, int val)
+  {
+      int i;
+      static int vms_match_alloced = 0;
+  
+!     if (val == DECC$K_FOREIGN ) /* foreign non VMS files are not counting */
+  	return 1;
+  
++     /* accept all DECC$K_FILE and DECC$K_DIRECTORY */
+      if (vms_match_num == 0) {
+  	/* first time through, setup some things */
+  	if (NULL == vms_fmatch) {
+***************
+*** 383,394 ****
+  	}
+      }
+  
+      vms_remove_version(name);
+! 
+!     /* convert filename to lowercase */
+!     nlen = strlen(name);
+!     for (i = 0; i < nlen; i++)
+! 	name[i] = TOLOWER_ASC(name[i]);
+  
+      /* if name already exists, don't add it */
+      for (i = 0; i<vms_match_num; i++) {
+--- 394,402 ----
+  	}
+      }
+  
++     /* make matches look uniform */
+      vms_remove_version(name);
+!     name=vms_tolower(name);
+  
+      /* if name already exists, don't add it */
+      for (i = 0; i<vms_match_num; i++) {
+***************
+*** 428,433 ****
+--- 436,442 ----
+  {
+      int		i, cnt = 0;
+      char_u	buf[MAXPATHL];
++     char       *result;
+      int		dir;
+      int files_alloced, files_free;
+  
+***************
+*** 449,456 ****
+  	    STRCPY(buf,pat[i]);
+  
+  	vms_match_num = 0; /* reset collection counter */
+! 	cnt = decc$to_vms(decc$translate_vms(vms_fixfilename(buf)), vms_wproc, 1, 0);
+! 						      /* allow wild, no dir */
+  	if (cnt > 0)
+  	    cnt = vms_match_num;
+  
+--- 458,470 ----
+  	    STRCPY(buf,pat[i]);
+  
+  	vms_match_num = 0; /* reset collection counter */
+! 	result = decc$translate_vms(vms_fixfilename(buf));
+! 	if ( (int) result == 0 || (int) result == -1  ) {
+! 	    cnt = 0;
+! 	}
+!         else {
+! 	    cnt = decc$to_vms(result, vms_wproc, 1 /*allow wild*/ , (flags & EW_DIR ? 0:1 ) /*allow directory*/) ;
+! 	}
+  	if (cnt > 0)
+  	    cnt = vms_match_num;
+  
+***************
+*** 497,506 ****
+  mch_expandpath(garray_T *gap, char_u *path, int flags)
+  {
+      int		i,cnt = 0;
+!     vms_match_num = 0;
+  
+!     cnt = decc$to_vms(decc$translate_vms(vms_fixfilename(path)), vms_wproc, 1, 0);
+! 						      /* allow wild, no dir */
+      if (cnt > 0)
+  	cnt = vms_match_num;
+      for (i = 0; i < cnt; i++)
+--- 511,528 ----
+  mch_expandpath(garray_T *gap, char_u *path, int flags)
+  {
+      int		i,cnt = 0;
+!     char       *result;
+  
+!     vms_match_num = 0;
+!     /* the result from the decc$translate_vms needs to be handled */
+!     /* otherwise it might create ACCVIO error in decc$to_vms      */
+!     result = decc$translate_vms(vms_fixfilename(path));
+!     if ( (int) result == 0 || (int) result == -1  ) {
+!         cnt = 0;
+!     }
+!     else {
+!         cnt = decc$to_vms(result, vms_wproc, 1 /*allow_wild*/, (flags & EW_DIR ? 0:1 ) /*allow directory*/);
+!     }
+      if (cnt > 0)
+  	cnt = vms_match_num;
+      for (i = 0; i < cnt; i++)
+***************
+*** 521,526 ****
+--- 543,549 ----
+      char *end_of_dir;
+      char ch;
+      int len;
++     char *out_str=out;
+  
+      /* copy vms filename portion up to last colon
+       * (node and/or disk)
+***************
+*** 602,608 ****
+  	*end_of_dir = ']';
+  }
+  
+- 
+  /*
+   * for decc$to_vms in vms_fixfilename
+   */
+--- 625,630 ----
+***************
+*** 710,735 ****
+      struct _generic_64 time_diff;
+      struct _generic_64 time_out;
+      unsigned int convert_operation = LIB$K_DELTA_SECONDS_F;
+!     float sec = (float) msec / 1000;
+  
+      /* make sure the iochan is set */
+      if (!iochan)
+  	get_tty();
+  
+!     if (msec > 0) {
+          /* time-out specified; convert it to absolute time */
+  
+          /* get current time (number of 100ns ticks since the VMS Epoch) */
+          status = sys$gettim(&time_curr);
+          if (status != SS$_NORMAL)
+              return 0; /* error */
+- 
+          /* construct the delta time */
+!         status = lib$cvtf_to_internal_time(
+                  &convert_operation, &sec, &time_diff);
+          if (status != LIB$_NORMAL)
+              return 0; /* error */
+- 
+          /* add them up */
+          status = lib$add_times(
+                  &time_curr,
+--- 732,764 ----
+      struct _generic_64 time_diff;
+      struct _generic_64 time_out;
+      unsigned int convert_operation = LIB$K_DELTA_SECONDS_F;
+!     float sec =(float) msec/1000;
+  
+      /* make sure the iochan is set */
+      if (!iochan)
+  	get_tty();
+  
+!     if (sec > 0) {
+          /* time-out specified; convert it to absolute time */
++ 	/* sec>0 requirement of lib$cvtf_to_internal_time()*/
+  
+          /* get current time (number of 100ns ticks since the VMS Epoch) */
+          status = sys$gettim(&time_curr);
+          if (status != SS$_NORMAL)
+              return 0; /* error */
+          /* construct the delta time */
+! #if __G_FLOAT==0
+! # ifndef VAX
+! 	/* IEEE is default on IA64, but can be used on Alpha too - but not on VAX */
+!         status = lib$cvts_to_internal_time(
+                  &convert_operation, &sec, &time_diff);
++ # endif
++ #else   /* default on Alpha and VAX  */
++         status = lib$cvtf_to_internal_time(
++ 		&convert_operation, &sec, &time_diff);
++ #endif
+          if (status != LIB$_NORMAL)
+              return 0; /* error */
+          /* add them up */
+          status = lib$add_times(
+                  &time_curr,
+*** ../vim-7.4.196/src/os_vms_conf.h	2014-02-23 22:52:33.372764715 +0100
+--- src/os_vms_conf.h	2014-03-12 15:55:50.204741288 +0100
+***************
+*** 166,173 ****
+  #undef  HAVE_SYS_TIME_H
+  #undef  HAVE_LOCALE_H
+  #define BROKEN_LOCALE
+- #undef  HAVE_ICONV_H
+- #undef  HAVE_ICONV
+  #undef  DYNAMIC_ICONV
+  #undef	HAVE_STRFTIME
+  #else
+--- 166,171 ----
+***************
+*** 177,188 ****
+  #define HAVE_SYS_TIME_H
+  #define HAVE_LOCALE_H
+  #define BROKEN_LOCALE
+- #undef  HAVE_ICONV_H
+- #undef  HAVE_ICONV
+  #undef  DYNAMIC_ICONV
+  #define	HAVE_STRFTIME
+  #endif
+  
+  /* GUI support defines */
+  #if defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_GTK)
+  #define HAVE_X11
+--- 175,192 ----
+  #define HAVE_SYS_TIME_H
+  #define HAVE_LOCALE_H
+  #define BROKEN_LOCALE
+  #undef  DYNAMIC_ICONV
+  #define	HAVE_STRFTIME
+  #endif
+  
++ #if defined(USE_ICONV)
++ #define HAVE_ICONV_H
++ #define HAVE_ICONV
++ #else
++ #undef HAVE_ICONV_H
++ #undef HAVE_ICONV
++ #endif
++ 
+  /* GUI support defines */
+  #if defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_GTK)
+  #define HAVE_X11
+*** ../vim-7.4.196/src/proto/os_vms.pro	2013-08-10 13:37:40.000000000 +0200
+--- src/proto/os_vms.pro	2014-03-12 15:55:50.204741288 +0100
+***************
+*** 7,12 ****
+--- 7,13 ----
+  int vms_sys __ARGS((char *cmd, char *out, char *inp));
+  int vms_sys_status __ARGS((int status));
+  int vms_read __ARGS((char *inbuf, size_t nbytes));
++ char *vms_tolower __ARGS((char *name));
+  int mch_expand_wildcards __ARGS((int num_pat, char_u **pat, int *num_file, char_u ***file, int flags));
+  int mch_expandpath __ARGS((garray_T *gap, char_u *path, int flags));
+  void *vms_fixfilename __ARGS((void *instring));
+*** ../vim-7.4.196/src/testdir/Make_vms.mms	2014-02-23 23:38:58.812760280 +0100
+--- src/testdir/Make_vms.mms	2014-03-12 16:06:22.888750982 +0100
+***************
+*** 4,10 ****
+  # Authors:	Zoltan Arpadffy, <arpadffy@polarhome.com>
+  #		Sandor Kopanyi,  <sandor.kopanyi@mailbox.hu>
+  #
+! # Last change:  2014 Feb 23
+  #
+  # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+  # Edit the lines in the Configuration section below to select.
+--- 4,10 ----
+  # Authors:	Zoltan Arpadffy, <arpadffy@polarhome.com>
+  #		Sandor Kopanyi,  <sandor.kopanyi@mailbox.hu>
+  #
+! # Last change:  2014 Mar 12
+  #
+  # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+  # Edit the lines in the Configuration section below to select.
+***************
+*** 41,56 ****
+  # They fail because VMS does not support file names.
+  # WANT_SPELL = YES
+  
+! # Comment out if you want to run mzschema  tests.
+  # It fails because VMS does not support this feature yet.
+  # WANT_MZSCH = YES
+  
+  # Comment out if you have gzip on your system
+  # HAVE_GZIP = YES
+  
+  # Comment out if you have GNU compatible diff on your system
+  # HAVE_GDIFF = YES
+  
+  #######################################################################
+  # End of configuration section.
+  #
+--- 41,71 ----
+  # They fail because VMS does not support file names.
+  # WANT_SPELL = YES
+  
+! # Comment out if you want to run mzschema tests.
+  # It fails because VMS does not support this feature yet.
+  # WANT_MZSCH = YES
+  
++ # Comment out if you have ODS-5 file system                                                                                                                 
++ # HAVE_ODS5 = YES
++ 
+  # Comment out if you have gzip on your system
+  # HAVE_GZIP = YES
+  
+  # Comment out if you have GNU compatible diff on your system
+  # HAVE_GDIFF = YES
+  
++ # Comment out if you have GNU compatible cksum on your system                                                                                                  
++ # HAVE_CKSUM = YES
++ 
++ # Comment out if you have ICONV support                                                                                                  
++ # HAVE_ICONV = YES
++ 
++ # Comment out if you have LUA support
++ # HAVE_LUA = YES
++ 
++ # Comment out if you have PYTHON support
++ # HAVE_PYTHON = YES
++ 
+  #######################################################################
+  # End of configuration section.
+  #
+***************
+*** 63,99 ****
+  
+  SCRIPT = test1.out  test2.out  test3.out  test4.out  test5.out  \
+  	 test6.out  test7.out  test8.out  test9.out  test10a.out\
+! 	 test13.out test14.out test15.out test17.out \
+  	 test18.out test19.out test20.out test21.out test22.out \
+  	 test23.out test24.out test26.out \
+  	 test28.out test29.out test30.out test31.out test32.out \
+  	 test33.out test34.out test35.out test36.out test37.out \
+  	 test38.out test39.out test40.out test41.out test42.out \
+  	 test43.out test44.out test45.out test46.out \
+! 	 test48.out test51.out test53.out test54.out test55.out \
+! 	 test56.out test57.out test60.out \
+  	 test61.out test62.out test63.out test64.out test65.out \
+  	 test66.out test67.out test68.out test69.out \
+  	 test71.out test72.out test74.out test75.out test76.out \
+! 	 test77.out test78.out test79.out test80.out test81.out \
+! 	 test82.out test83.out test84.out test88.out test89.out \
+  	 test90.out test91.out test92.out test93.out test94.out \
+! 	 test95.out test96.out test97.out test98.out test99.out \
+! 	 test100.out test101.out test102.out test103.out test104.out \
+  	 test105.out
+  
+  # Known problems:
+! # Test 30: a problem around mac format - unknown reason
+  #
+! # Test 32: VMS is not case sensitive and all filenames are lowercase within Vim
+  # (this should be changed in order to preserve the original filename) - should
+  # be fixed. VMS allows just one dot in the filename
+  #
+! # Test 58 and 59: Failed/Hangs - VMS does not support spell files (file names
+  # with too many dots).
+  #
+! # Test 72: unknown reason
+! # Test 85: no Lua interface
+  
+  .IFDEF WANT_GUI
+  SCRIPT_GUI = test16.out
+--- 78,121 ----
+  
+  SCRIPT = test1.out  test2.out  test3.out  test4.out  test5.out  \
+  	 test6.out  test7.out  test8.out  test9.out  test10a.out\
+! 	 test13.out test14.out test15.out \
+  	 test18.out test19.out test20.out test21.out test22.out \
+  	 test23.out test24.out test26.out \
+  	 test28.out test29.out test30.out test31.out test32.out \
+  	 test33.out test34.out test35.out test36.out test37.out \
+  	 test38.out test39.out test40.out test41.out test42.out \
+  	 test43.out test44.out test45.out test46.out \
+! 	 test48.out test49.out test51.out test53.out test54.out \
+! 	 test55.out test56.out test57.out test60.out \
+  	 test61.out test62.out test63.out test64.out test65.out \
+  	 test66.out test67.out test68.out test69.out \
+  	 test71.out test72.out test74.out test75.out test76.out \
+! 	 test77a.out test78.out test79.out test80.out test81.out \
+! 	 test82.out test84.out test88.out test89.out \
+  	 test90.out test91.out test92.out test93.out test94.out \
+! 	 test95.out test96.out test98.out test99.out \
+! 	 test100.out test101.out test103.out test104.out \
+  	 test105.out
+  
+  # Known problems:
+! # test17: ?
+! #
+! # test30: bug, most probably - a problem around mac format
+  #
+! # test32: VMS is not case sensitive and all filenames are lowercase within Vim
+  # (this should be changed in order to preserve the original filename) - should
+  # be fixed. VMS allows just one dot in the filename
+  #
+! # test58, test59: Failed/Hangs - VMS does not support spell files (file names
+  # with too many dots).
+  #
+! # test72: bug - Vim hangs at :rename (while rename works well otherwise)
+! # test78: bug - Vim dies at :recover Xtest 
+! # test83: ?
+! # test85: no Lua interface
+! # test89: bug - findfile() does not work on VMS (just in the current directory) 
+! # test97, test102: Just ODS-5 supports space and special chars in the filename.
+! # On ODS-2 tests fail. 
+  
+  .IFDEF WANT_GUI
+  SCRIPT_GUI = test16.out
+***************
+*** 101,107 ****
+  .ENDIF
+  
+  .IFDEF WANT_UNIX
+! SCRIPT_UNIX = test10.out test12.out test25.out test27.out test49.out test73.out
+  .ENDIF
+  
+  .IFDEF WANT_WIN
+--- 123,129 ----
+  .ENDIF
+  
+  .IFDEF WANT_UNIX
+! SCRIPT_UNIX = test10.out test12.out test17.out test25.out test27.out test49.out test73.out
+  .ENDIF
+  
+  .IFDEF WANT_WIN
+***************
+*** 116,121 ****
+--- 138,147 ----
+  SCRIPT_MZSCH = test70.out 
+  .ENDIF
+  
++ .IFDEF HAVE_ODS5                                                                                                                                   
++ SCRIPT_ODS5 = test97.out test102.out                                                                                                   
++ .ENDIF  
++ 
+  .IFDEF HAVE_GZIP
+  SCRIPT_GZIP = test11.out
+  .ENDIF
+***************
+*** 124,133 ****
+--- 150,177 ----
+  SCRIPT_GDIFF = test47.out
+  .ENDIF
+  
++ .IFDEF HAVE_CKSUM
++ SCRIPT_CKSUM = test77.out
++ .ENDIF
++ 
++ .IFDEF HAVE_ICONV
++ SCRIPT_ICONV = test83.out
++ .ENDIF
++ 
++ .IFDEF HAVE_LUA
++ SCRIPT_LUA = test85.out
++ .ENDIF
++ 
++ .IFDEF HAVE_PYTHON
++ SCRIPT_PYTHON = test86.out test87.out
++ .ENDIF
++ 
+  .in.out :
+  	-@ !clean up before doing the test
+  	-@ if "''F$SEARCH("test.out.*")'" .NES. "" then delete/noconfirm/nolog test.out.*
+  	-@ if "''F$SEARCH("$*.out.*")'"   .NES. "" then delete/noconfirm/nolog $*.out.*
++ 	-@ ! define TMP if not set - some tests use it
++ 	-@ if "''F$TRNLNM("TMP")'" .EQS. "" then define/nolog TMP []
+  	-@ write sys$output " "
+  	-@ write sys$output "-----------------------------------------------"
+  	-@ write sys$output "                "$*" "
+***************
+*** 140,148 ****
+  	-@ if "''F$SEARCH("$*.out.*")'"   .NES. "" then differences /par $*.out $*.ok;
+  	-@ !clean up after the test
+  	-@ if "''F$SEARCH("Xdotest.*")'"  .NES. "" then delete/noconfirm/nolog Xdotest.*.*
+  
+! all : clean nolog $(START_WITH) $(SCRIPT) $(SCRIPT_GUI) $(SCRIPT_UNIX) $(SCRIPT_WIN) $(SCRIPT_SPELL) $(SCRIPT_GZIP) \
+!     $(SCRIPT_GDIFF) $(SCRIPT_MZSCH) nolog 
+  	-@ write sys$output " "
+  	-@ write sys$output "-----------------------------------------------"
+  	-@ write sys$output "                All done"
+--- 184,193 ----
+  	-@ if "''F$SEARCH("$*.out.*")'"   .NES. "" then differences /par $*.out $*.ok;
+  	-@ !clean up after the test
+  	-@ if "''F$SEARCH("Xdotest.*")'"  .NES. "" then delete/noconfirm/nolog Xdotest.*.*
++ 	-@ if "''F$SEARCH("Xtest.*")'"    .NES. "" then delete/noconfirm/nolog Xtest.*.*
+  
+! all : clean nolog $(START_WITH) $(SCRIPT) $(SCRIPT_GUI) $(SCRIPT_UNIX) $(SCRIPT_WIN) $(SCRIPT_SPELL) $(SCRIPT_ODS5) $(SCRIPT_GZIP) \
+!     $(SCRIPT_GDIFF) $(SCRIPT_MZSCH) $(SCRIPT_CKSUM) $(SCRIPT_ICONV) $(SCRIPT_LUA) $(SCRIPT_PYTHON) nolog 
+  	-@ write sys$output " "
+  	-@ write sys$output "-----------------------------------------------"
+  	-@ write sys$output "                All done"
+***************
+*** 165,177 ****
+  	-@ write sys$output "                Test results:"
+  	-@ write sys$output "-----------------------------------------------"
+  	-@ write sys$output "MAKE_VMS.MMS options:"
+! 	-@ write sys$output "   WANT_GUI  = ""$(WANT_GUI)"" "
+! 	-@ write sys$output "   WANT_UNIX = ""$(WANT_UNIX)"" "
+! 	-@ write sys$output "   WANT_WIN  = ""$(WANT_WIN)"" "
+! 	-@ write sys$output "   WANT_SPELL= ""$(WANT_SPELL)"" "
+! 	-@ write sys$output "   WANT_MZSCH= ""$(WANT_MZSCH)"" "
+! 	-@ write sys$output "   HAVE_GZIP = ""$(HAVE_GZIP)"" "
+! 	-@ write sys$output "   HAVE_GDIFF= ""$(HAVE_GDIFF)"" "
+  	-@ write sys$output "Default vimrc file is VMS.VIM:"
+  	-@ write sys$output "-----------------------------------------------"
+  	-@ type VMS.VIM
+--- 210,227 ----
+  	-@ write sys$output "                Test results:"
+  	-@ write sys$output "-----------------------------------------------"
+  	-@ write sys$output "MAKE_VMS.MMS options:"
+! 	-@ write sys$output "   WANT_GUI   = ""$(WANT_GUI)"" "
+! 	-@ write sys$output "   WANT_UNIX  = ""$(WANT_UNIX)"" "
+! 	-@ write sys$output "   WANT_WIN   = ""$(WANT_WIN)"" "
+! 	-@ write sys$output "   WANT_SPELL = ""$(WANT_SPELL)"" "
+! 	-@ write sys$output "   WANT_MZSCH = ""$(WANT_MZSCH)"" "
+! 	-@ write sys$output "   HAVE_ODS5  = ""$(HAVE_ODS5)"" "
+! 	-@ write sys$output "   HAVE_GZIP  = ""$(HAVE_GZIP)"" "
+! 	-@ write sys$output "   HAVE_GDIFF = ""$(HAVE_GDIFF)"" "
+! 	-@ write sys$output "   HAVE_CKSUM = ""$(HAVE_CKSUM)"" "	  
+! 	-@ write sys$output "   HAVE_ICONV = ""$(HAVE_ICONV)"" "
+! 	-@ write sys$output "   HAVE_LUA   = ""$(HAVE_LUA)"" "
+! 	-@ write sys$output "   HAVE_PYTHON= ""$(HAVE_PYTHON)"" "
+  	-@ write sys$output "Default vimrc file is VMS.VIM:"
+  	-@ write sys$output "-----------------------------------------------"
+  	-@ type VMS.VIM
+***************
+*** 181,186 ****
+--- 231,239 ----
+  	-@ if "''F$SEARCH("test.log")'"     .NES. "" then delete/noconfirm/nolog test.log.*
+  	-@ if "''F$SEARCH("test.ok")'"      .NES. "" then delete/noconfirm/nolog test.ok.*
+  	-@ if "''F$SEARCH("Xdotest.*")'"    .NES. "" then delete/noconfirm/nolog Xdotest.*.*
++ 	-@ if "''F$SEARCH("Xtest*.*")'"     .NES. "" then delete/noconfirm/nolog Xtest*.*.*
++ 	-@ if "''F$SEARCH("XX*.*")'"        .NES. "" then delete/noconfirm/nolog XX*.*.*
++ 	-@ if "''F$SEARCH("_un_*.*")'"      .NES. "" then delete/noconfirm/nolog _un_*.*.*
+  	-@ if "''F$SEARCH("*.*_sw*")'"      .NES. "" then delete/noconfirm/nolog *.*_sw*.*
+  	-@ if "''F$SEARCH("*.failed")'"     .NES. "" then delete/noconfirm/nolog *.failed.*
+  	-@ if "''F$SEARCH("*.rej")'"        .NES. "" then delete/noconfirm/nolog *.rej.*
+***************
+*** 188,193 ****
+  	-@ if "''F$SEARCH("small.vim")'"    .NES. "" then delete/noconfirm/nolog small.vim.*
+  	-@ if "''F$SEARCH("mbyte.vim")'"    .NES. "" then delete/noconfirm/nolog mbyte.vim.*
+  	-@ if "''F$SEARCH("mzscheme.vim")'" .NES. "" then delete/noconfirm/nolog mzscheme.vim.*
+! 	-@ if "''F$SEARCH("lua.vim")'" .NES. "" then delete/noconfirm/nolog lua.vim.*
+  	-@ if "''F$SEARCH("viminfo.*")'"    .NES. "" then delete/noconfirm/nolog viminfo.*.*
+  
+--- 241,246 ----
+  	-@ if "''F$SEARCH("small.vim")'"    .NES. "" then delete/noconfirm/nolog small.vim.*
+  	-@ if "''F$SEARCH("mbyte.vim")'"    .NES. "" then delete/noconfirm/nolog mbyte.vim.*
+  	-@ if "''F$SEARCH("mzscheme.vim")'" .NES. "" then delete/noconfirm/nolog mzscheme.vim.*
+! 	-@ if "''F$SEARCH("lua.vim")'"      .NES. "" then delete/noconfirm/nolog lua.vim.*
+  	-@ if "''F$SEARCH("viminfo.*")'"    .NES. "" then delete/noconfirm/nolog viminfo.*.*
+  
+*** ../vim-7.4.196/src/testdir/test72.in	2012-01-04 19:04:17.000000000 +0100
+--- src/testdir/test72.in	2014-03-12 15:55:50.204741288 +0100
+***************
+*** 105,111 ****
+  u:.w >>test.out
+  :"
+  :" Rename the undo file so that it gets cleaned up.
+! :call rename(".Xtestfile.un~", "Xtestundo")
+  :qa!
+  ENDTEST
+  
+--- 105,115 ----
+  u:.w >>test.out
+  :"
+  :" Rename the undo file so that it gets cleaned up.
+! :if has("vms")
+! : call rename("_un_Xtestfile", "Xtestundo")
+! :else
+! : call rename(".Xtestfile.un~", "Xtestundo")
+! :endif
+  :qa!
+  ENDTEST
+  
+*** ../vim-7.4.196/src/testdir/test77a.com	2014-03-12 16:49:10.740790329 +0100
+--- src/testdir/test77a.com	2014-03-12 16:40:04.316781957 +0100
+***************
+*** 0 ****
+--- 1,8 ----
++ $! test77a - help file creating checksum on VMS
++ $! Created by Zoltan Arpadffy
++ $
++ $ IF P1 .NES. ""
++ $ THEN
++ $    checksum 'P1'
++ $    show symb CHECKSUM$CHECKSUM
++ $ ENDIF
+*** ../vim-7.4.196/src/testdir/test77a.in	2014-03-12 16:49:10.748790329 +0100
+--- src/testdir/test77a.in	2014-03-12 15:55:50.204741288 +0100
+***************
+*** 0 ****
+--- 1,31 ----
++ Inserts 2 million lines with consecutive integers starting from 1
++ (essentially, the output of GNU's seq 1 2000000), writes them to Xtest
++ and writes its cksum to test.out.
++ 
++ We need 2 million lines to trigger a call to mf_hash_grow().  If it would mess
++ up the lines the checksum would differ.
++ 
++ cksum is part of POSIX and so should be available on most Unixes.
++ If it isn't available then the test will be skipped.
++ 
++ VMS does not have CKSUM but has a built in CHECKSUM - it should be used
++ STARTTEST
++ :so small.vim
++ :if !has("vms")
++ : e! test.ok
++ : w! test.out
++ : qa!
++ :endif
++ :set fileformat=unix undolevels=-1
++ ggdG
++ :let i = 1
++ :while i <= 2000000 | call append(i, range(i, i + 99)) | let i += 100 | endwhile
++ ggdd
++ :w! Xtest.
++ :r !@test77a.com Xtest.
++ :s/\s/ /g
++ :set fileformat&
++ :.w! test.out
++ :qa!
++ ENDTEST
++ 
+*** ../vim-7.4.196/src/testdir/test77a.ok	2014-03-12 16:49:10.756790330 +0100
+--- src/testdir/test77a.ok	2014-03-12 15:55:50.204741288 +0100
+***************
+*** 0 ****
+--- 1 ----
++   CHECKSUM$CHECKSUM = "844110470"
+*** ../vim-7.4.196/src/undo.c	2014-01-23 18:12:44.695676751 +0100
+--- src/undo.c	2014-03-12 16:31:52.432774419 +0100
+***************
+*** 790,798 ****
+--- 790,809 ----
+  	    if (undo_file_name == NULL)
+  		break;
+  	    p = gettail(undo_file_name);
++ #ifdef VMS
++ 	    /* VMS can not handle more than one dot in the filenames
++ 	     * use "dir/name" -> "dir/_un_name" - add _un_
++ 	     * at the beginning to keep the extension */
++ 	    mch_memmove(p + 4,  p, STRLEN(p) + 1);
++ 	    mch_memmove(p, "_un_", 4);
++ 
++ #else
++ 	    /* Use same directory as the ffname,
++ 	     * "dir/name" -> "dir/.name.un~" */
+  	    mch_memmove(p + 1, p, STRLEN(p) + 1);
+  	    *p = '.';
+  	    STRCAT(p, ".un~");
++ #endif
+  	}
+  	else
+  	{
+*** ../vim-7.4.196/src/version.c	2014-03-12 15:50:18.472736205 +0100
+--- src/version.c	2014-03-12 15:54:26.712740008 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     197,
+  /**/
+
+-- 
+Violators can be fined, arrested or jailed for making ugly faces at a dog.
+		[real standing law in Oklahoma, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.198 b/SOURCES/7.4.198
new file mode 100644
index 0000000..f204c2e
--- /dev/null
+++ b/SOURCES/7.4.198
@@ -0,0 +1,103 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.198
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.198
+Problem:    Can't build Vim with Perl when -Dusethreads is not specified for
+	    building Perl, and building Vim with --enable-perlinterp=dynamic.
+Solution:   Adjust #ifdefs. (Yasuhiro Matsumoto)
+Files:	    src/if_perl.xs
+
+
+*** ../vim-7.4.197/src/if_perl.xs	2013-12-14 11:50:28.000000000 +0100
+--- src/if_perl.xs	2014-03-12 17:05:07.832804995 +0100
+***************
+*** 138,143 ****
+--- 138,145 ----
+  #endif
+  typedef int XSINIT_t;
+  typedef int XSUBADDR_t;
++ #endif
++ #ifndef USE_ITHREADS
+  typedef int perl_key;
+  #endif
+  
+***************
+*** 264,270 ****
+  # define Perl_Iscopestack_ix_ptr dll_Perl_Iscopestack_ix_ptr
+  # define Perl_Iunitcheckav_ptr dll_Perl_Iunitcheckav_ptr
+  # if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
+! #  define PL_thr_key *dll_PL_thr_key
+  # endif
+  
+  /*
+--- 266,274 ----
+  # define Perl_Iscopestack_ix_ptr dll_Perl_Iscopestack_ix_ptr
+  # define Perl_Iunitcheckav_ptr dll_Perl_Iunitcheckav_ptr
+  # if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
+! #  ifdef USE_ITHREADS
+! #   define PL_thr_key *dll_PL_thr_key
+! #  endif
+  # endif
+  
+  /*
+***************
+*** 386,392 ****
+--- 390,398 ----
+  #endif
+  
+  #if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
++ # ifdef USE_ITHREADS
+  static perl_key* dll_PL_thr_key;
++ # endif
+  #else
+  static GV** (*Perl_Idefgv_ptr)(register PerlInterpreter*);
+  static GV** (*Perl_Ierrgv_ptr)(register PerlInterpreter*);
+***************
+*** 413,419 ****
+--- 419,427 ----
+  #ifdef PERL5101_OR_LATER
+      {"Perl_croak_xs_usage", (PERL_PROC*)&Perl_croak_xs_usage},
+  #endif
++ #ifdef PERL_IMPLICIT_CONTEXT
+      {"Perl_croak_nocontext", (PERL_PROC*)&Perl_croak_nocontext},
++ #endif
+      {"Perl_dowantarray", (PERL_PROC*)&Perl_dowantarray},
+      {"Perl_free_tmps", (PERL_PROC*)&Perl_free_tmps},
+      {"Perl_gv_stashpv", (PERL_PROC*)&Perl_gv_stashpv},
+***************
+*** 505,511 ****
+--- 513,521 ----
+  # endif
+  #endif
+  #if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
++ #  ifdef USE_ITHREADS
+      {"PL_thr_key", (PERL_PROC*)&dll_PL_thr_key},
++ #  endif
+  #else
+      {"Perl_Idefgv_ptr", (PERL_PROC*)&Perl_Idefgv_ptr},
+      {"Perl_Ierrgv_ptr", (PERL_PROC*)&Perl_Ierrgv_ptr},
+*** ../vim-7.4.197/src/version.c	2014-03-12 16:51:35.060792541 +0100
+--- src/version.c	2014-03-12 17:06:27.660806218 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     198,
+  /**/
+
+-- 
+Dogs must have a permit signed by the mayor in order to congregate in groups
+of three or more on private property.
+		[real standing law in Oklahoma, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.199 b/SOURCES/7.4.199
new file mode 100644
index 0000000..d421df0
--- /dev/null
+++ b/SOURCES/7.4.199
@@ -0,0 +1,106 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.199
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.199
+Problem:    (issue 197) ]P doesn't paste over Visual selection.
+Solution:   Handle Visual mode specifically. (Christian Brabandt)
+Files:	    src/normal.c
+
+
+*** ../vim-7.4.198/src/normal.c	2014-02-23 23:38:58.824760280 +0100
+--- src/normal.c	2014-03-12 17:33:28.184831049 +0100
+***************
+*** 6751,6760 ****
+      {
+  	if (!checkclearop(cap->oap))
+  	{
+  	    prep_redo_cmd(cap);
+! 	    do_put(cap->oap->regname,
+! 	      (cap->cmdchar == ']' && cap->nchar == 'p') ? FORWARD : BACKWARD,
+! 						  cap->count1, PUT_FIXINDENT);
+  	}
+      }
+  
+--- 6751,6808 ----
+      {
+  	if (!checkclearop(cap->oap))
+  	{
++ 	    int	    dir = (cap->cmdchar == ']' && cap->nchar == 'p')
++ 							 ? FORWARD : BACKWARD;
++ 	    int	    regname = cap->oap->regname;
++ #ifdef FEAT_VISUAL
++ 	    int	    was_visual = VIsual_active;
++ 	    int	    line_count = curbuf->b_ml.ml_line_count;
++ 	    pos_T   start, end;
++ 
++ 	    if (VIsual_active)
++ 	    {
++ 		start = ltoreq(VIsual, curwin->w_cursor)
++ 						  ? VIsual : curwin->w_cursor;
++ 		end =  equalpos(start,VIsual) ? curwin->w_cursor : VIsual;
++ 		curwin->w_cursor = (dir == BACKWARD ? start : end);
++ 	    }
++ #endif
++ # ifdef FEAT_CLIPBOARD
++ 	    adjust_clip_reg(&regname);
++ # endif
+  	    prep_redo_cmd(cap);
+! 
+! 	    do_put(regname, dir, cap->count1, PUT_FIXINDENT);
+! #ifdef FEAT_VISUAL
+! 	    if (was_visual)
+! 	    {
+! 		VIsual = start;
+! 		curwin->w_cursor = end;
+! 		if (dir == BACKWARD)
+! 		{
+! 		    /* adjust lines */
+! 		    VIsual.lnum += curbuf->b_ml.ml_line_count - line_count;
+! 		    curwin->w_cursor.lnum +=
+! 				      curbuf->b_ml.ml_line_count - line_count;
+! 		}
+! 
+! 		VIsual_active = TRUE;
+! 		if (VIsual_mode == 'V')
+! 		{
+! 		    /* delete visually selected lines */
+! 		    cap->cmdchar = 'd';
+! 		    cap->nchar = NUL;
+! 		    cap->oap->regname = regname;
+! 		    nv_operator(cap);
+! 		    do_pending_operator(cap, 0, FALSE);
+! 		}
+! 		if (VIsual_active)
+! 		{
+! 		    end_visual_mode();
+! 		    redraw_later(SOME_VALID);
+! 		}
+! 	    }
+! #endif
+  	}
+      }
+  
+*** ../vim-7.4.198/src/version.c	2014-03-12 17:08:01.508807656 +0100
+--- src/version.c	2014-03-12 17:30:36.908828425 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     199,
+  /**/
+
+-- 
+No man may purchase alcohol without written consent from his wife.
+		[real standing law in Pennsylvania, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.200 b/SOURCES/7.4.200
new file mode 100644
index 0000000..be3dfb3
--- /dev/null
+++ b/SOURCES/7.4.200
@@ -0,0 +1,68 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.200
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.200
+Problem:    Too many #ifdefs in the code.
+Solution:   Enable FEAT_VISUAL always, await any complaints
+Files:	    src/feature.h
+
+
+*** ../vim-7.4.199/src/feature.h	2014-02-23 22:52:33.372764715 +0100
+--- src/feature.h	2014-03-12 17:48:24.396844782 +0100
+***************
+*** 211,228 ****
+  #endif
+  
+  /*
+!  * +visual		Visual mode.
+   * +visualextra		Extra features for Visual mode (mostly block operators).
+   */
+! #ifdef FEAT_SMALL
+! # define FEAT_VISUAL
+! # ifdef FEAT_NORMAL
+! #  define FEAT_VISUALEXTRA
+! # endif
+! #else
+! # ifdef FEAT_CLIPBOARD
+! #  undef FEAT_CLIPBOARD	/* can't use clipboard without Visual mode */
+! # endif
+  #endif
+  
+  /*
+--- 211,222 ----
+  #endif
+  
+  /*
+!  * +visual		Visual mode - now always included.
+   * +visualextra		Extra features for Visual mode (mostly block operators).
+   */
+! #define FEAT_VISUAL
+! #ifdef FEAT_NORMAL
+! # define FEAT_VISUALEXTRA
+  #endif
+  
+  /*
+*** ../vim-7.4.199/src/version.c	2014-03-12 17:41:59.128838878 +0100
+--- src/version.c	2014-03-12 17:52:28.080848516 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     200,
+  /**/
+
+-- 
+It is illegal to take more than three sips of beer at a time while standing.
+		[real standing law in Texas, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.201 b/SOURCES/7.4.201
new file mode 100644
index 0000000..9bed2b5
--- /dev/null
+++ b/SOURCES/7.4.201
@@ -0,0 +1,273 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.201
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.201
+Problem:    'lispwords' is a global option.
+Solution:   Make 'lispwords' global-local. (Sung Pae)
+Files:	    runtime/doc/options.txt, runtime/optwin.vim, src/buffer.c,
+	    src/misc1.c, src/option.c, src/option.h, src/structs.h,
+	    src/testdir/test100.in, src/testdir/test100.ok
+
+
+*** ../vim-7.4.200/runtime/doc/options.txt	2014-02-23 23:38:58.820760280 +0100
+--- runtime/doc/options.txt	2014-03-12 18:20:30.748874299 +0100
+***************
+*** 4629,4635 ****
+  
+  						*'lispwords'* *'lw'*
+  'lispwords' 'lw'	string	(default is very long)
+! 			global
+  			{not in Vi}
+  			{not available when compiled without the |+lispindent|
+  			feature}
+--- 4629,4635 ----
+  
+  						*'lispwords'* *'lw'*
+  'lispwords' 'lw'	string	(default is very long)
+! 			global or local to buffer |global-local|
+  			{not in Vi}
+  			{not available when compiled without the |+lispindent|
+  			feature}
+*** ../vim-7.4.200/runtime/optwin.vim	2013-06-29 14:32:06.000000000 +0200
+--- runtime/optwin.vim	2014-03-12 18:20:30.748874299 +0100
+***************
+*** 855,861 ****
+    call append("$", "\t(local to buffer)")
+    call <SID>BinOptionL("lisp")
+    call append("$", "lispwords\twords that change how lisp indenting works")
+!   call <SID>OptionG("lw", &lw)
+  endif
+  
+  
+--- 855,861 ----
+    call append("$", "\t(local to buffer)")
+    call <SID>BinOptionL("lisp")
+    call append("$", "lispwords\twords that change how lisp indenting works")
+!   call <SID>OptionL("lw", &lw)
+  endif
+  
+  
+*** ../vim-7.4.200/src/buffer.c	2014-01-10 16:43:09.000000000 +0100
+--- src/buffer.c	2014-03-12 18:20:30.752874299 +0100
+***************
+*** 1978,1983 ****
+--- 1978,1986 ----
+  #endif
+      buf->b_p_ar = -1;
+      buf->b_p_ul = NO_LOCAL_UNDOLEVEL;
++ #ifdef FEAT_LISP
++     clear_string_option(&buf->b_p_lw);
++ #endif
+  }
+  
+  /*
+*** ../vim-7.4.200/src/misc1.c	2013-11-06 04:01:31.000000000 +0100
+--- src/misc1.c	2014-03-12 18:20:30.752874299 +0100
+***************
+*** 8879,8885 ****
+  {
+      char_u	buf[LSIZE];
+      int		len;
+!     char_u	*word = p_lispwords;
+  
+      while (*word != NUL)
+      {
+--- 8879,8885 ----
+  {
+      char_u	buf[LSIZE];
+      int		len;
+!     char_u	*word = *curbuf->b_p_lw != NUL ? curbuf->b_p_lw : p_lispwords;
+  
+      while (*word != NUL)
+      {
+*** ../vim-7.4.200/src/option.c	2014-01-14 16:54:53.000000000 +0100
+--- src/option.c	2014-03-12 18:20:30.752874299 +0100
+***************
+*** 134,139 ****
+--- 134,140 ----
+  #define PV_KP		OPT_BOTH(OPT_BUF(BV_KP))
+  #ifdef FEAT_LISP
+  # define PV_LISP	OPT_BUF(BV_LISP)
++ # define PV_LW		OPT_BOTH(OPT_BUF(BV_LW))
+  #endif
+  #define PV_MA		OPT_BUF(BV_MA)
+  #define PV_ML		OPT_BUF(BV_ML)
+***************
+*** 1718,1724 ****
+  			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+      {"lispwords",   "lw",   P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
+  #ifdef FEAT_LISP
+! 			    (char_u *)&p_lispwords, PV_NONE,
+  			    {(char_u *)LISPWORD_VALUE, (char_u *)0L}
+  #else
+  			    (char_u *)NULL, PV_NONE,
+--- 1719,1725 ----
+  			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+      {"lispwords",   "lw",   P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
+  #ifdef FEAT_LISP
+! 			    (char_u *)&p_lispwords, PV_LW,
+  			    {(char_u *)LISPWORD_VALUE, (char_u *)0L}
+  #else
+  			    (char_u *)NULL, PV_NONE,
+***************
+*** 5412,5417 ****
+--- 5413,5421 ----
+      check_string_option(&buf->b_p_dict);
+      check_string_option(&buf->b_p_tsr);
+  #endif
++ #ifdef FEAT_LISP
++     check_string_option(&buf->b_p_lw);
++ #endif
+  }
+  
+  /*
+***************
+*** 9879,9884 ****
+--- 9883,9893 ----
+  	case PV_UL:
+  	    buf->b_p_ul = NO_LOCAL_UNDOLEVEL;
+  	    break;
++ #ifdef FEAT_LISP
++ 	case PV_LW:
++ 	    clear_string_option(&buf->b_p_lw);
++ 	    break;
++ #endif
+      }
+  }
+  
+***************
+*** 9928,9933 ****
+--- 9937,9945 ----
+  	    case PV_STL:  return (char_u *)&(curwin->w_p_stl);
+  #endif
+  	    case PV_UL:   return (char_u *)&(curbuf->b_p_ul);
++ #ifdef FEAT_LISP
++ 	    case PV_LW:   return (char_u *)&(curbuf->b_p_lw);
++ #endif
+  	}
+  	return NULL; /* "cannot happen" */
+      }
+***************
+*** 9994,9999 ****
+--- 10006,10015 ----
+  #endif
+  	case PV_UL:	return curbuf->b_p_ul != NO_LOCAL_UNDOLEVEL
+  				    ? (char_u *)&(curbuf->b_p_ul) : p->var;
++ #ifdef FEAT_LISP
++ 	case PV_LW:	return *curbuf->b_p_lw != NUL
++ 				    ? (char_u *)&(curbuf->b_p_lw) : p->var;
++ #endif
+  
+  #ifdef FEAT_ARABIC
+  	case PV_ARAB:	return (char_u *)&(curwin->w_p_arab);
+***************
+*** 10567,10572 ****
+--- 10583,10591 ----
+  #ifdef FEAT_PERSISTENT_UNDO
+  	    buf->b_p_udf = p_udf;
+  #endif
++ #ifdef FEAT_LISP
++ 	    buf->b_p_lw = empty_option;
++ #endif
+  
+  	    /*
+  	     * Don't copy the options set by ex_help(), use the saved values,
+*** ../vim-7.4.200/src/option.h	2014-01-10 15:32:17.000000000 +0100
+--- src/option.h	2014-03-12 18:20:30.752874299 +0100
+***************
+*** 990,995 ****
+--- 990,996 ----
+      , BV_KP
+  #ifdef FEAT_LISP
+      , BV_LISP
++     , BV_LW
+  #endif
+      , BV_MA
+      , BV_ML
+*** ../vim-7.4.200/src/structs.h	2014-02-23 22:52:33.372764715 +0100
+--- src/structs.h	2014-03-12 18:20:30.752874299 +0100
+***************
+*** 1641,1646 ****
+--- 1641,1649 ----
+  #ifdef FEAT_PERSISTENT_UNDO
+      int		b_p_udf;	/* 'undofile' */
+  #endif
++ #ifdef FEAT_LISP
++     char_u	*b_p_lw;	/* 'lispwords' local value */
++ #endif
+  
+      /* end of buffer options */
+  
+*** ../vim-7.4.200/src/testdir/test100.in	2013-11-07 03:25:51.000000000 +0100
+--- src/testdir/test100.in	2014-03-12 18:25:27.792878851 +0100
+***************
+*** 1,4 ****
+! Tests for 'undolevel' setting being global-local
+  
+  STARTTEST
+  :so small.vim
+--- 1,4 ----
+! Tests for 'undolevel' and 'lispwords' settings being global-local
+  
+  STARTTEST
+  :so small.vim
+***************
+*** 37,42 ****
+--- 37,50 ----
+  :call UndoLevel()
+  :%w >> test.out
+  :"sleep 10
++ :"
++ :" Testing 'lispwords'
++ :"
++ :setglobal lispwords=foo,bar,baz
++ :setlocal lispwords-=foo | setlocal lispwords+=quux
++ :redir >> test.out | echon "\nTesting 'lispwords' local value" | setglobal lispwords? | setlocal lispwords? | echo &lispwords . "\n" | redir end
++ :setlocal lispwords<
++ :redir >> test.out | echon "\nTesting 'lispwords' value reset" | setglobal lispwords? | setlocal lispwords? | echo &lispwords . "\n" | redir end
+  :qa!
+  ENDTEST
+  
+*** ../vim-7.4.200/src/testdir/test100.ok	2013-11-07 03:25:51.000000000 +0100
+--- src/testdir/test100.ok	2014-03-12 18:25:27.792878851 +0100
+***************
+*** 39,41 ****
+--- 39,51 ----
+  
+    undolevels=50 global
+    undolevels=-123456 local
++ 
++ Testing 'lispwords' local value
++   lispwords=foo,bar,baz
++   lispwords=bar,baz,quux
++ bar,baz,quux
++ 
++ Testing 'lispwords' value reset
++   lispwords=foo,bar,baz
++   lispwords=foo,bar,baz
++ foo,bar,baz
+*** ../vim-7.4.200/src/version.c	2014-03-12 17:56:42.960852421 +0100
+--- src/version.c	2014-03-12 18:19:13.720873119 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     201,
+  /**/
+
+-- 
+Lawmakers made it obligatory for everybody to take at least one bath
+each week -- on Saturday night.
+		[real standing law in Vermont, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.202 b/SOURCES/7.4.202
new file mode 100644
index 0000000..5c50d87
--- /dev/null
+++ b/SOURCES/7.4.202
@@ -0,0 +1,281 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.202
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.202
+Problem:    MS-Windows: non-ASCII font names don't work.
+Solution:   Convert between the current code page and 'encoding'. (Ken Takata)
+Files:	    src/gui_w48.c, src/os_mswin.c, src/proto/winclip.pro,
+	    src/winclip.c
+
+
+*** ../vim-7.4.201/src/gui_w48.c	2013-09-22 15:43:34.000000000 +0200
+--- src/gui_w48.c	2014-03-12 19:18:14.264927370 +0100
+***************
+*** 3069,3083 ****
+      char	*p;
+      char	*res;
+      char	*charset_name;
+  
+      charset_name = charset_id2name((int)lf.lfCharSet);
+!     res = alloc((unsigned)(strlen(lf.lfFaceName) + 20
+  		    + (charset_name == NULL ? 0 : strlen(charset_name) + 2)));
+      if (res != NULL)
+      {
+  	p = res;
+  	/* make a normal font string out of the lf thing:*/
+! 	sprintf((char *)p, "%s:h%d", lf.lfFaceName, pixels_to_points(
+  			 lf.lfHeight < 0 ? -lf.lfHeight : lf.lfHeight, TRUE));
+  	while (*p)
+  	{
+--- 3069,3094 ----
+      char	*p;
+      char	*res;
+      char	*charset_name;
++     char	*font_name = lf.lfFaceName;
+  
+      charset_name = charset_id2name((int)lf.lfCharSet);
+! #ifdef FEAT_MBYTE
+!     /* Convert a font name from the current codepage to 'encoding'.
+!      * TODO: Use Wide APIs (including LOGFONTW) instead of ANSI APIs. */
+!     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+!     {
+! 	int	len;
+! 	acp_to_enc(lf.lfFaceName, strlen(lf.lfFaceName),
+! 						(char_u **)&font_name, &len);
+!     }
+! #endif
+!     res = alloc((unsigned)(strlen(font_name) + 20
+  		    + (charset_name == NULL ? 0 : strlen(charset_name) + 2)));
+      if (res != NULL)
+      {
+  	p = res;
+  	/* make a normal font string out of the lf thing:*/
+! 	sprintf((char *)p, "%s:h%d", font_name, pixels_to_points(
+  			 lf.lfHeight < 0 ? -lf.lfHeight : lf.lfHeight, TRUE));
+  	while (*p)
+  	{
+***************
+*** 3102,3107 ****
+--- 3113,3122 ----
+  	}
+      }
+  
++ #ifdef FEAT_MBYTE
++     if (font_name != lf.lfFaceName)
++ 	vim_free(font_name);
++ #endif
+      return res;
+  }
+  
+*** ../vim-7.4.201/src/os_mswin.c	2014-02-11 17:05:57.278217857 +0100
+--- src/os_mswin.c	2014-03-12 19:18:14.264927370 +0100
+***************
+*** 2867,2878 ****
+--- 2867,2893 ----
+  {
+      char_u	*p;
+      int		i;
++     int		ret = FAIL;
+      static LOGFONT *lastlf = NULL;
++ #ifdef FEAT_MBYTE
++     char_u	*acpname = NULL;
++ #endif
+  
+      *lf = s_lfDefault;
+      if (name == NULL)
+  	return OK;
+  
++ #ifdef FEAT_MBYTE
++     /* Convert 'name' from 'encoding' to the current codepage, because
++      * lf->lfFaceName uses the current codepage.
++      * TODO: Use Wide APIs instead of ANSI APIs. */
++     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
++     {
++ 	int	len;
++ 	enc_to_acp(name, strlen(name), &acpname, &len);
++ 	name = acpname;
++     }
++ #endif
+      if (STRCMP(name, "*") == 0)
+      {
+  #if defined(FEAT_GUI_W32)
+***************
+*** 2887,2896 ****
+  	cf.lpLogFont = lf;
+  	cf.nFontType = 0 ; //REGULAR_FONTTYPE;
+  	if (ChooseFont(&cf))
+! 	    goto theend;
+! #else
+! 	return FAIL;
+  #endif
+      }
+  
+      /*
+--- 2902,2910 ----
+  	cf.lpLogFont = lf;
+  	cf.nFontType = 0 ; //REGULAR_FONTTYPE;
+  	if (ChooseFont(&cf))
+! 	    ret = OK;
+  #endif
++ 	goto theend;
+      }
+  
+      /*
+***************
+*** 2899,2905 ****
+      for (p = name; *p && *p != ':'; p++)
+      {
+  	if (p - name + 1 > LF_FACESIZE)
+! 	    return FAIL;			/* Name too long */
+  	lf->lfFaceName[p - name] = *p;
+      }
+      if (p != name)
+--- 2913,2919 ----
+      for (p = name; *p && *p != ':'; p++)
+      {
+  	if (p - name + 1 > LF_FACESIZE)
+! 	    goto theend;			/* Name too long */
+  	lf->lfFaceName[p - name] = *p;
+      }
+      if (p != name)
+***************
+*** 2927,2933 ****
+  		did_replace = TRUE;
+  	    }
+  	if (!did_replace || init_logfont(lf) == FAIL)
+! 	    return FAIL;
+      }
+  
+      while (*p == ':')
+--- 2941,2947 ----
+  		did_replace = TRUE;
+  	    }
+  	if (!did_replace || init_logfont(lf) == FAIL)
+! 	    goto theend;
+      }
+  
+      while (*p == ':')
+***************
+*** 2988,3012 ****
+  			    p[-1], name);
+  		    EMSG(IObuff);
+  		}
+! 		return FAIL;
+  	}
+  	while (*p == ':')
+  	    p++;
+      }
+  
+- #if defined(FEAT_GUI_W32)
+  theend:
+- #endif
+      /* ron: init lastlf */
+!     if (printer_dc == NULL)
+      {
+  	vim_free(lastlf);
+  	lastlf = (LOGFONT *)alloc(sizeof(LOGFONT));
+  	if (lastlf != NULL)
+  	    mch_memmove(lastlf, lf, sizeof(LOGFONT));
+      }
+  
+!     return OK;
+  }
+  
+  #endif /* defined(FEAT_GUI) || defined(FEAT_PRINTER) */
+--- 3002,3028 ----
+  			    p[-1], name);
+  		    EMSG(IObuff);
+  		}
+! 		goto theend;
+  	}
+  	while (*p == ':')
+  	    p++;
+      }
++     ret = OK;
+  
+  theend:
+      /* ron: init lastlf */
+!     if (ret == OK && printer_dc == NULL)
+      {
+  	vim_free(lastlf);
+  	lastlf = (LOGFONT *)alloc(sizeof(LOGFONT));
+  	if (lastlf != NULL)
+  	    mch_memmove(lastlf, lf, sizeof(LOGFONT));
+      }
++ #ifdef FEAT_MBYTE
++     vim_free(acpname);
++ #endif
+  
+!     return ret;
+  }
+  
+  #endif /* defined(FEAT_GUI) || defined(FEAT_PRINTER) */
+*** ../vim-7.4.201/src/proto/winclip.pro	2013-08-10 13:37:39.000000000 +0200
+--- src/proto/winclip.pro	2014-03-12 19:18:14.264927370 +0100
+***************
+*** 11,14 ****
+--- 11,15 ----
+  short_u *enc_to_utf16 __ARGS((char_u *str, int *lenp));
+  char_u *utf16_to_enc __ARGS((short_u *str, int *lenp));
+  void acp_to_enc __ARGS((char_u *str, int str_size, char_u **out, int *outlen));
++ void enc_to_acp __ARGS((char_u *str, int str_size, char_u **out, int *outlen));
+  /* vim: set ft=c : */
+*** ../vim-7.4.201/src/winclip.c	2013-07-01 21:05:53.000000000 +0200
+--- src/winclip.c	2014-03-12 19:18:14.264927370 +0100
+***************
+*** 797,800 ****
+--- 797,825 ----
+  	vim_free(widestr);
+      }
+  }
++ 
++ /*
++  * Convert from 'encoding' to the active codepage.
++  * Input is "str[str_size]".
++  * The result is in allocated memory: "out[outlen]".  With terminating NUL.
++  */
++     void
++ enc_to_acp(str, str_size, out, outlen)
++     char_u	*str;
++     int		str_size;
++     char_u	**out;
++     int		*outlen;
++ 
++ {
++     LPWSTR	widestr;
++     int		len = str_size;
++ 
++     widestr = (WCHAR *)enc_to_utf16(str, &len);
++     if (widestr != NULL)
++     {
++ 	WideCharToMultiByte_alloc(GetACP(), 0, widestr, len,
++ 						(LPSTR *)out, outlen, 0, 0);
++ 	vim_free(widestr);
++     }
++ }
+  #endif
+*** ../vim-7.4.201/src/version.c	2014-03-12 18:55:52.104906804 +0100
+--- src/version.c	2014-03-12 19:19:01.388928092 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     202,
+  /**/
+
+-- 
+<Beeth> Girls are like internet domain names,
+        the ones I like are already taken.
+<honx>  Well, you can stil get one from a strange country :-P
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.203 b/SOURCES/7.4.203
new file mode 100644
index 0000000..d5cb84a
--- /dev/null
+++ b/SOURCES/7.4.203
@@ -0,0 +1,203 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.203
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.203
+Problem:    Parsing 'errorformat' is not correct.
+Solution:   Reset "multiignore" at the start of a multi-line message. (Lcd)
+Files:	    src/quickfix.c, src/testdir/Make_amiga.mak,
+	    src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+	    src/testdir/Make_os2.mak, src/testdir/Make_vms.mms,
+	    src/testdir/Makefile, src/testdir/test106.in,
+	    src/testdir/test106.ok
+
+
+*** ../vim-7.4.202/src/quickfix.c	2013-07-01 21:16:44.000000000 +0200
+--- src/quickfix.c	2014-03-12 19:35:22.016943118 +0100
+***************
+*** 751,757 ****
+--- 751,760 ----
+  		fmt_start = fmt_ptr;
+  
+  	    if (vim_strchr((char_u *)"AEWI", idx) != NULL)
++ 	    {
+  		multiline = TRUE;	/* start of a multi-line message */
++ 		multiignore = FALSE;	/* reset continuation */
++ 	    }
+  	    else if (vim_strchr((char_u *)"CZ", idx) != NULL)
+  	    {				/* continuation of multi-line msg */
+  		if (qfprev == NULL)
+*** ../vim-7.4.202/src/testdir/Make_amiga.mak	2014-02-23 23:38:58.808760280 +0100
+--- src/testdir/Make_amiga.mak	2014-03-12 19:32:32.192940516 +0100
+***************
+*** 35,41 ****
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test97.out test98.out \
+  		test99.out test100.out test101.out test102.out test103.out \
+! 		test104.out test105.out
+  
+  .SUFFIXES: .in .out
+  
+--- 35,41 ----
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test97.out test98.out \
+  		test99.out test100.out test101.out test102.out test103.out \
+! 		test104.out test105.out test106.out
+  
+  .SUFFIXES: .in .out
+  
+***************
+*** 157,159 ****
+--- 157,160 ----
+  test103.out: test103.in
+  test104.out: test104.in
+  test105.out: test105.in
++ test106.out: test106.in
+*** ../vim-7.4.202/src/testdir/Make_dos.mak	2014-02-23 23:38:58.808760280 +0100
+--- src/testdir/Make_dos.mak	2014-03-12 19:32:40.100940637 +0100
+***************
+*** 34,40 ****
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test98.out test99.out \
+  		test100.out test101.out test102.out test103.out test104.out \
+! 		test105.out
+  
+  SCRIPTS32 =	test50.out test70.out
+  
+--- 34,40 ----
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test98.out test99.out \
+  		test100.out test101.out test102.out test103.out test104.out \
+! 		test105.out test106.out
+  
+  SCRIPTS32 =	test50.out test70.out
+  
+*** ../vim-7.4.202/src/testdir/Make_ming.mak	2014-02-23 23:38:58.812760280 +0100
+--- src/testdir/Make_ming.mak	2014-03-12 19:32:44.948940712 +0100
+***************
+*** 54,60 ****
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test98.out test99.out \
+  		test100.out test101.out test102.out test103.out test104.out \
+! 		test105.out
+  
+  SCRIPTS32 =	test50.out test70.out
+  
+--- 54,60 ----
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test98.out test99.out \
+  		test100.out test101.out test102.out test103.out test104.out \
+! 		test105.out test106.out
+  
+  SCRIPTS32 =	test50.out test70.out
+  
+*** ../vim-7.4.202/src/testdir/Make_os2.mak	2014-02-23 23:38:58.812760280 +0100
+--- src/testdir/Make_os2.mak	2014-03-12 19:32:48.112940760 +0100
+***************
+*** 36,42 ****
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test98.out test99.out \
+  		test100.out test101.out test102.out test103.out test104.out \
+! 		test105.out
+  
+  .SUFFIXES: .in .out
+  
+--- 36,42 ----
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test98.out test99.out \
+  		test100.out test101.out test102.out test103.out test104.out \
+! 		test105.out test106.out
+  
+  .SUFFIXES: .in .out
+  
+*** ../vim-7.4.202/src/testdir/Make_vms.mms	2014-03-12 16:51:35.060792541 +0100
+--- src/testdir/Make_vms.mms	2014-03-12 19:32:51.836940817 +0100
+***************
+*** 95,101 ****
+  	 test90.out test91.out test92.out test93.out test94.out \
+  	 test95.out test96.out test98.out test99.out \
+  	 test100.out test101.out test103.out test104.out \
+! 	 test105.out
+  
+  # Known problems:
+  # test17: ?
+--- 95,101 ----
+  	 test90.out test91.out test92.out test93.out test94.out \
+  	 test95.out test96.out test98.out test99.out \
+  	 test100.out test101.out test103.out test104.out \
+! 	 test105.out test106.out
+  
+  # Known problems:
+  # test17: ?
+*** ../vim-7.4.202/src/testdir/Makefile	2014-03-12 15:50:18.472736205 +0100
+--- src/testdir/Makefile	2014-03-12 19:32:13.884940236 +0100
+***************
+*** 31,37 ****
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test97.out test98.out \
+  		test99.out test100.out test101.out test102.out test103.out \
+! 		test104.out test105.out
+  
+  SCRIPTS_GUI = test16.out
+  
+--- 31,37 ----
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test97.out test98.out \
+  		test99.out test100.out test101.out test102.out test103.out \
+! 		test104.out test105.out test106.out
+  
+  SCRIPTS_GUI = test16.out
+  
+*** ../vim-7.4.202/src/testdir/test106.in	2014-03-12 19:40:59.584948291 +0100
+--- src/testdir/test106.in	2014-03-12 19:33:30.332941407 +0100
+***************
+*** 0 ****
+--- 1,16 ----
++ Tests for errorformat.  vim: set ft=vim ts=8 :
++ 
++ STARTTEST
++ :so small.vim
++ :if !has('quickfix') | e! test.ok | wq! test.out | endif
++ :set efm=%EEEE%m,%WWWW%m,%+CCCC%.%#,%-GGGG%.%#
++ :cgetexpr ['WWWW', 'EEEE', 'CCCC']
++ :$put =strtrans(string(map(getqflist(), '[v:val.text, v:val.valid]')))
++ :cgetexpr ['WWWW', 'GGGG', 'EEEE', 'CCCC']
++ :$put =strtrans(string(map(getqflist(), '[v:val.text, v:val.valid]')))
++ :cgetexpr ['WWWW', 'GGGG', 'ZZZZ', 'EEEE', 'CCCC', 'YYYY']
++ :$put =strtrans(string(map(getqflist(), '[v:val.text, v:val.valid]')))
++ :/^Results/,$wq! test.out
++ ENDTEST
++ 
++ Results of test106:
+*** ../vim-7.4.202/src/testdir/test106.ok	2014-03-12 19:40:59.592948291 +0100
+--- src/testdir/test106.ok	2014-03-12 19:33:50.496941716 +0100
+***************
+*** 0 ****
+--- 1,4 ----
++ Results of test106:
++ [['W', 1], ['E^@CCCC', 1]]
++ [['W', 1], ['E^@CCCC', 1]]
++ [['W', 1], ['ZZZZ', 0], ['E^@CCCC', 1], ['YYYY', 0]]
+*** ../vim-7.4.202/src/version.c	2014-03-12 19:24:32.508933166 +0100
+--- src/version.c	2014-03-12 19:39:34.344946985 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     203,
+  /**/
+
+-- 
+"I know that there are people who don't love their fellow man,
+and I hate those people!" - Tom Lehrer
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.204 b/SOURCES/7.4.204
new file mode 100644
index 0000000..c6b491e
--- /dev/null
+++ b/SOURCES/7.4.204
@@ -0,0 +1,113 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.204
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.204
+Problem:    A mapping where the second byte is 0x80 doesn't work.
+Solution:   Unescape before checking for incomplete multi-byte char. (Nobuhiro
+	    Takasaki)
+Files:	    src/getchar.c, src/testdir/test75.in, src/testdir/test75.ok
+
+
+*** ../vim-7.4.203/src/getchar.c	2014-02-15 16:17:02.213903042 +0100
+--- src/getchar.c	2014-03-12 20:06:17.944971557 +0100
+***************
+*** 2206,2215 ****
+  #ifdef FEAT_MBYTE
+  				/* Don't allow mapping the first byte(s) of a
+  				 * multi-byte char.  Happens when mapping
+! 				 * <M-a> and then changing 'encoding'. */
+! 				if (has_mbyte && MB_BYTE2LEN(c1)
+! 						  > (*mb_ptr2len)(mp->m_keys))
+! 				    mlen = 0;
+  #endif
+  				/*
+  				 * Check an entry whether it matches.
+--- 2206,2221 ----
+  #ifdef FEAT_MBYTE
+  				/* Don't allow mapping the first byte(s) of a
+  				 * multi-byte char.  Happens when mapping
+! 				 * <M-a> and then changing 'encoding'. Beware
+! 				 * that 0x80 is escaped. */
+! 				{
+! 				    char_u *p1 = mp->m_keys;
+! 				    char_u *p2 = mb_unescape(&p1);
+! 
+! 				    if (has_mbyte && p2 != NULL
+! 					  && MB_BYTE2LEN(c1) > MB_PTR2LEN(p2))
+! 					mlen = 0;
+! 				}
+  #endif
+  				/*
+  				 * Check an entry whether it matches.
+*** ../vim-7.4.203/src/testdir/test75.in	2013-11-02 04:19:10.000000000 +0100
+--- src/testdir/test75.in	2014-03-12 20:02:45.932968308 +0100
+***************
+*** 1,8 ****
+--- 1,11 ----
+  Tests for maparg().
++ Also test utf8 map with a 0x80 byte.
+  
+  STARTTEST
+  :so small.vim
++ :so mbyte.vim
+  :set cpo-=<
++ :set encoding=utf8
+  :" Test maparg() with a string result
+  :map foo<C-V> is<F4>foo
+  :vnoremap <script> <buffer> <expr> <silent> bar isbar
+***************
+*** 17,22 ****
+--- 20,39 ----
+  :map abc y<S-char-114>y
+  :call append('$', maparg('abc'))
+  :"
++ Go:"
++ :" Outside of the range, minimum
++ :inoremap <Char-0x1040> a
++ :call feedkeys("a\u1040\<Esc>")
++ :" Inside of the range, minimum
++ :inoremap <Char-0x103f> b
++ :call feedkeys("a\u103f\<Esc>")
++ :" Inside of the range, maximum
++ :inoremap <Char-0xf03f> c
++ :call feedkeys("a\uf03f\<Esc>")
++ :" Outside of the range, maximum
++ :inoremap <Char-0xf040> d
++ :call feedkeys("a\uf040\<Esc>")
++ :"
+  :/^eof/+1,$w! test.out
+  :qa!
+  ENDTEST
+*** ../vim-7.4.203/src/testdir/test75.ok	2013-06-29 13:50:08.000000000 +0200
+--- src/testdir/test75.ok	2014-03-12 20:02:49.780968367 +0100
+***************
+*** 4,6 ****
+--- 4,7 ----
+  {'silent': 0, 'noremap': 0, 'lhs': 'foo', 'mode': ' ', 'nowait': 1, 'expr': 0, 'sid': 0, 'rhs': 'bar', 'buffer': 1}
+  xrx
+  yRy
++ abcd
+*** ../vim-7.4.203/src/version.c	2014-03-12 19:41:37.100948866 +0100
+--- src/version.c	2014-03-12 20:06:43.684971951 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     204,
+  /**/
+
+-- 
+If you only have a hammer, you tend to see every problem as a nail.
+If you only have MS-Windows, you tend to solve every problem by rebooting.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.205 b/SOURCES/7.4.205
new file mode 100644
index 0000000..1f4fcf4
--- /dev/null
+++ b/SOURCES/7.4.205
@@ -0,0 +1,113 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.205
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.205
+Problem:    ":mksession" writes command to move to second argument while it
+	    does not exist.  When it does exist the order might be wrong.
+Solution:   Use ":argadd" for each argument instead of using ":args" with a
+	    list of names. (Nobuhiro Takasaki)
+Files:	    src/ex_docmd.c
+
+
+*** ../vim-7.4.204/src/ex_docmd.c	2014-02-05 22:46:49.058587842 +0100
+--- src/ex_docmd.c	2014-03-12 21:08:35.361028825 +0100
+***************
+*** 10381,10387 ****
+      }
+  
+      /* the global argument list */
+!     if (ses_arglist(fd, "args", &global_alist.al_ga,
+  			    !(ssop_flags & SSOP_CURDIR), &ssop_flags) == FAIL)
+  	return FAIL;
+  
+--- 10381,10387 ----
+      }
+  
+      /* the global argument list */
+!     if (ses_arglist(fd, "argglobal", &global_alist.al_ga,
+  			    !(ssop_flags & SSOP_CURDIR), &ssop_flags) == FAIL)
+  	return FAIL;
+  
+***************
+*** 10955,10963 ****
+      char_u	*buf = NULL;
+      char_u	*s;
+  
+!     if (gap->ga_len == 0)
+! 	return put_line(fd, "silent! argdel *");
+!     if (fputs(cmd, fd) < 0)
+  	return FAIL;
+      for (i = 0; i < gap->ga_len; ++i)
+      {
+--- 10955,10963 ----
+      char_u	*buf = NULL;
+      char_u	*s;
+  
+!     if (fputs(cmd, fd) < 0 || put_eol(fd) == FAIL)
+! 	return FAIL;
+!     if (put_line(fd, "silent! argdel *") == FAIL)
+  	return FAIL;
+      for (i = 0; i < gap->ga_len; ++i)
+      {
+***************
+*** 10974,10980 ****
+  		    s = buf;
+  		}
+  	    }
+! 	    if (fputs(" ", fd) < 0 || ses_put_fname(fd, s, flagp) == FAIL)
+  	    {
+  		vim_free(buf);
+  		return FAIL;
+--- 10974,10982 ----
+  		    s = buf;
+  		}
+  	    }
+! 	    if (fputs("argadd ", fd) < 0
+! 		    || ses_put_fname(fd, s, flagp) == FAIL
+! 		    || put_eol(fd) == FAIL)
+  	    {
+  		vim_free(buf);
+  		return FAIL;
+***************
+*** 10982,10988 ****
+  	    vim_free(buf);
+  	}
+      }
+!     return put_eol(fd);
+  }
+  
+  /*
+--- 10984,10990 ----
+  	    vim_free(buf);
+  	}
+      }
+!     return OK;
+  }
+  
+  /*
+*** ../vim-7.4.204/src/version.c	2014-03-12 20:17:47.752982126 +0100
+--- src/version.c	2014-03-12 21:09:16.273029451 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     205,
+  /**/
+
+-- 
+A law to reduce crime states: "It is mandatory for a motorist with criminal
+intentions to stop at the city limits and telephone the chief of police as he
+is entering the town.
+		[real standing law in Washington, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.206 b/SOURCES/7.4.206
new file mode 100644
index 0000000..d251135
--- /dev/null
+++ b/SOURCES/7.4.206
@@ -0,0 +1,72 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.206
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.206
+Problem:    Compiler warnings on 64 bit Windows.
+Solution:   Add type casts. (Mike Williams)
+Files:	    src/gui_w48.c, src/os_mswin.c
+
+
+*** ../vim-7.4.205/src/gui_w48.c	2014-03-12 19:24:32.504933166 +0100
+--- src/gui_w48.c	2014-03-19 12:32:15.129821412 +0100
+***************
+*** 3078,3084 ****
+      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+      {
+  	int	len;
+! 	acp_to_enc(lf.lfFaceName, strlen(lf.lfFaceName),
+  						(char_u **)&font_name, &len);
+      }
+  #endif
+--- 3078,3084 ----
+      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+      {
+  	int	len;
+! 	acp_to_enc(lf.lfFaceName, (int)strlen(lf.lfFaceName),
+  						(char_u **)&font_name, &len);
+      }
+  #endif
+*** ../vim-7.4.205/src/os_mswin.c	2014-03-12 19:24:32.504933166 +0100
+--- src/os_mswin.c	2014-03-19 12:32:15.129821412 +0100
+***************
+*** 2884,2890 ****
+      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+      {
+  	int	len;
+! 	enc_to_acp(name, strlen(name), &acpname, &len);
+  	name = acpname;
+      }
+  #endif
+--- 2884,2890 ----
+      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+      {
+  	int	len;
+! 	enc_to_acp(name, (int)strlen(name), &acpname, &len);
+  	name = acpname;
+      }
+  #endif
+*** ../vim-7.4.205/src/version.c	2014-03-12 21:28:09.485046816 +0100
+--- src/version.c	2014-03-19 12:33:16.253822349 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     206,
+  /**/
+
+-- 
+We apologise again for the fault in the subtitles.  Those responsible for
+sacking the people who have just been sacked have been sacked.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.207 b/SOURCES/7.4.207
new file mode 100644
index 0000000..895aa72
--- /dev/null
+++ b/SOURCES/7.4.207
@@ -0,0 +1,176 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.207
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.207
+Problem:    The cursor report sequence is sometimes not recognized and results
+	    in entering replace mode.
+Solution:   Also check for the cursor report when not asked for.
+Files:	    src/term.c
+
+
+*** ../vim-7.4.206/src/term.c	2013-09-29 16:27:42.000000000 +0200
+--- src/term.c	2014-03-19 13:30:23.589874866 +0100
+***************
+*** 3379,3385 ****
+  	 out_str(buf);
+  	 out_str(T_U7);
+  	 u7_status = U7_SENT;
+! 	 term_windgoto(0, 0);
+  	 out_str((char_u *)"  ");
+  	 term_windgoto(0, 0);
+  	 /* check for the characters now, otherwise they might be eaten by
+--- 3379,3386 ----
+  	 out_str(buf);
+  	 out_str(T_U7);
+  	 u7_status = U7_SENT;
+! 	 out_flush();
+! 	 term_windgoto(1, 0);
+  	 out_str((char_u *)"  ");
+  	 term_windgoto(0, 0);
+  	 /* check for the characters now, otherwise they might be eaten by
+***************
+*** 4185,4208 ****
+  			    || (tp[0] == CSI && len >= 2))
+  			&& (VIM_ISDIGIT(*p) || *p == '>' || *p == '?'))
+  	    {
+  		j = 0;
+  		extra = 0;
+  		for (i = 2 + (tp[0] != CSI); i < len
+  				&& !(tp[i] >= '{' && tp[i] <= '~')
+  				&& !ASCII_ISALPHA(tp[i]); ++i)
+  		    if (tp[i] == ';' && ++j == 1)
+  			extra = i + 1;
+  		if (i == len)
+  		{
+  		    LOG_TR("Not enough characters for CRV");
+  		    return -1;
+  		}
+- 
+  #ifdef FEAT_MBYTE
+! 		/* Eat it when it has 2 arguments and ends in 'R'. Ignore it
+! 		 * when u7_status is not "sent", <S-F3> sends something
+! 		 * similar. */
+! 		if (j == 1 && tp[i] == 'R' && u7_status == U7_SENT)
+  		{
+  		    char *aw = NULL;
+  
+--- 4186,4223 ----
+  			    || (tp[0] == CSI && len >= 2))
+  			&& (VIM_ISDIGIT(*p) || *p == '>' || *p == '?'))
+  	    {
++ #ifdef FEAT_MBYTE
++ 		int col;
++ 		int row_char;
++ #endif
+  		j = 0;
+  		extra = 0;
+  		for (i = 2 + (tp[0] != CSI); i < len
+  				&& !(tp[i] >= '{' && tp[i] <= '~')
+  				&& !ASCII_ISALPHA(tp[i]); ++i)
+  		    if (tp[i] == ';' && ++j == 1)
++ 		    {
+  			extra = i + 1;
++ #ifdef FEAT_MBYTE
++ 			row_char = tp[i - 1];
++ #endif
++ 		    }
+  		if (i == len)
+  		{
+  		    LOG_TR("Not enough characters for CRV");
+  		    return -1;
+  		}
+  #ifdef FEAT_MBYTE
+! 		if (extra > 0)
+! 		    col = atoi((char *)tp + extra);
+! 		else
+! 		    col = 0;
+! 
+! 		/* Eat it when it has 2 arguments and ends in 'R'. Also when
+! 		 * u7_status is not "sent", it may be from a previous Vim that
+! 		 * just exited.  But not for <S-F3>, it sends something
+! 		 * similar, check for row and column to make sense. */
+! 		if (j == 1 && tp[i] == 'R' && row_char == '2' && col >= 2)
+  		{
+  		    char *aw = NULL;
+  
+***************
+*** 4211,4228 ****
+  # ifdef FEAT_AUTOCMD
+  		    did_cursorhold = TRUE;
+  # endif
+! 		    if (extra > 0)
+! 			extra = atoi((char *)tp + extra);
+! 		    if (extra == 2)
+  			aw = "single";
+! 		    else if (extra == 3)
+  			aw = "double";
+  		    if (aw != NULL && STRCMP(aw, p_ambw) != 0)
+  		    {
+  			/* Setting the option causes a screen redraw. Do that
+  			 * right away if possible, keeping any messages. */
+  			set_option_value((char_u *)"ambw", 0L, (char_u *)aw, 0);
+! #ifdef DEBUG_TERMRESPONSE
+  			{
+  			    char buf[100];
+  			    int  r = redraw_asap(CLEAR);
+--- 4226,4241 ----
+  # ifdef FEAT_AUTOCMD
+  		    did_cursorhold = TRUE;
+  # endif
+! 		    if (col == 2)
+  			aw = "single";
+! 		    else if (col == 3)
+  			aw = "double";
+  		    if (aw != NULL && STRCMP(aw, p_ambw) != 0)
+  		    {
+  			/* Setting the option causes a screen redraw. Do that
+  			 * right away if possible, keeping any messages. */
+  			set_option_value((char_u *)"ambw", 0L, (char_u *)aw, 0);
+! # ifdef DEBUG_TERMRESPONSE
+  			{
+  			    char buf[100];
+  			    int  r = redraw_asap(CLEAR);
+***************
+*** 4231,4239 ****
+  									   r);
+  			    log_tr(buf);
+  			}
+! #else
+  			redraw_asap(CLEAR);
+! #endif
+  		    }
+  		    key_name[0] = (int)KS_EXTRA;
+  		    key_name[1] = (int)KE_IGNORE;
+--- 4244,4252 ----
+  									   r);
+  			    log_tr(buf);
+  			}
+! # else
+  			redraw_asap(CLEAR);
+! # endif
+  		    }
+  		    key_name[0] = (int)KS_EXTRA;
+  		    key_name[1] = (int)KE_IGNORE;
+*** ../vim-7.4.206/src/version.c	2014-03-19 12:37:18.537826062 +0100
+--- src/version.c	2014-03-19 12:55:42.249842974 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     207,
+  /**/
+
+-- 
+How come wrong numbers are never busy?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.209 b/SOURCES/7.4.209
new file mode 100644
index 0000000..9791716
--- /dev/null
+++ b/SOURCES/7.4.209
@@ -0,0 +1,63 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.209
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.209
+Problem:    When repeating a filter command "%" and "#" are expanded.
+Solution:   Escape the command when storing for redo. (Christian Brabandt)
+Files:	    src/ex_cmds.c
+
+
+*** ../vim-7.4.208/src/ex_cmds.c	2014-02-22 22:27:20.768904692 +0100
+--- src/ex_cmds.c	2014-03-19 17:40:01.138104365 +0100
+***************
+*** 1012,1018 ****
+  
+      if (bangredo)	    /* put cmd in redo buffer for ! command */
+      {
+! 	AppendToRedobuffLit(prevcmd, -1);
+  	AppendToRedobuff((char_u *)"\n");
+  	bangredo = FALSE;
+      }
+--- 1012,1029 ----
+  
+      if (bangredo)	    /* put cmd in redo buffer for ! command */
+      {
+! 	/* If % or # appears in the command, it must have been escaped.
+! 	 * Reescape them, so that redoing them does not substitute them by the
+! 	 * buffername. */
+! 	char_u *cmd = vim_strsave_escaped(prevcmd, (char_u *)"%#");
+! 
+! 	if (cmd != NULL)
+! 	{
+! 	    AppendToRedobuffLit(cmd, -1);
+! 	    vim_free(cmd);
+! 	}
+! 	else
+! 	    AppendToRedobuffLit(prevcmd, -1);
+  	AppendToRedobuff((char_u *)"\n");
+  	bangredo = FALSE;
+      }
+*** ../vim-7.4.208/src/version.c	2014-03-19 17:32:32.454097490 +0100
+--- src/version.c	2014-03-19 17:40:24.810104728 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     209,
+  /**/
+
+-- 
+System administrators are just like women: You can't live with them and you
+can't live without them.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.210 b/SOURCES/7.4.210
new file mode 100644
index 0000000..a96431c
--- /dev/null
+++ b/SOURCES/7.4.210
@@ -0,0 +1,133 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.210
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.210
+Problem:    Visual block mode plus virtual edit doesn't work well with tabs.
+	    (Liang Li) 
+Solution:   Take coladd into account. (Christian Brabandt)
+Files:	    src/ops.c, src/testdir/test39.in, src/testdir/test39.ok
+
+
+*** ../vim-7.4.209/src/ops.c	2014-02-22 23:03:48.716901208 +0100
+--- src/ops.c	2014-03-19 18:33:54.118153904 +0100
+***************
+*** 2646,2652 ****
+  	if (oap->start.lnum == curbuf->b_op_start_orig.lnum && !bd.is_MAX)
+  	{
+  	    if (oap->op_type == OP_INSERT
+! 		    && oap->start.col != curbuf->b_op_start_orig.col)
+  	    {
+  		oap->start.col = curbuf->b_op_start_orig.col;
+  		pre_textlen -= getviscol2(oap->start.col, oap->start.coladd)
+--- 2646,2660 ----
+  	if (oap->start.lnum == curbuf->b_op_start_orig.lnum && !bd.is_MAX)
+  	{
+  	    if (oap->op_type == OP_INSERT
+! 		    && oap->start.col
+! #ifdef FEAT_VIRTUALEDIT
+! 			    + oap->start.coladd
+! #endif
+! 			!= curbuf->b_op_start_orig.col
+! #ifdef FEAT_VIRTUALEDIT
+! 			    + curbuf->b_op_start_orig.coladd
+! #endif
+! 			)
+  	    {
+  		oap->start.col = curbuf->b_op_start_orig.col;
+  		pre_textlen -= getviscol2(oap->start.col, oap->start.coladd)
+***************
+*** 2654,2660 ****
+  		oap->start_vcol = getviscol2(oap->start.col, oap->start.coladd);
+  	    }
+  	    else if (oap->op_type == OP_APPEND
+! 		    && oap->end.col >= curbuf->b_op_start_orig.col)
+  	    {
+  		oap->start.col = curbuf->b_op_start_orig.col;
+  		/* reset pre_textlen to the value of OP_INSERT */
+--- 2662,2676 ----
+  		oap->start_vcol = getviscol2(oap->start.col, oap->start.coladd);
+  	    }
+  	    else if (oap->op_type == OP_APPEND
+! 		      && oap->end.col
+! #ifdef FEAT_VIRTUALEDIT
+! 			    + oap->end.coladd
+! #endif
+! 			>= curbuf->b_op_start_orig.col
+! #ifdef FEAT_VIRTUALEDIT
+! 			    + curbuf->b_op_start_orig.coladd
+! #endif
+! 			)
+  	    {
+  		oap->start.col = curbuf->b_op_start_orig.col;
+  		/* reset pre_textlen to the value of OP_INSERT */
+*** ../vim-7.4.209/src/testdir/test39.in	2014-01-14 13:18:53.000000000 +0100
+--- src/testdir/test39.in	2014-03-19 18:35:31.382155394 +0100
+***************
+*** 35,40 ****
+--- 35,46 ----
+  /^C23$/
+  :exe ":norm! l\<C-V>j$hhAab\<Esc>"
+  :.,/^$/w >> test.out
++ :" Test for Visual block insert when virtualedit=all
++ :set ve=all
++ :/\t\tline
++ :exe ":norm! 07l\<C-V>jjIx\<Esc>"
++ :set ve=
++ :.,/^$/w >> test.out
+  :" gUe must uppercase a whole word, also when � changes to SS
+  Gothe youtu�euu endYpk0wgUe
+  :" gUfx must uppercase until x, inclusive.
+***************
+*** 62,67 ****
+--- 68,77 ----
+  :qa!
+  ENDTEST
+  
++ 		line1
++ 		line2
++ 		line3
++ 
+  aaaaaa
+  bbbbbb
+  cccccc
+*** ../vim-7.4.209/src/testdir/test39.ok	2014-01-14 13:18:53.000000000 +0100
+--- src/testdir/test39.ok	2014-03-19 18:34:18.206154273 +0100
+***************
+*** 17,22 ****
+--- 17,26 ----
+  C23ab
+  456ab7
+  
++        x 	line1
++        x 	line2
++        x 	line3
++ 
+  the YOUTUSSEUU end
+  - yOUSSTUSSEXu -
+  THE YOUTUSSEUU END
+*** ../vim-7.4.209/src/version.c	2014-03-19 17:41:20.390105580 +0100
+--- src/version.c	2014-03-19 18:27:19.746147861 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     210,
+  /**/
+
+-- 
+SUPERIMPOSE "England AD 787".  After a few more seconds we hear hoofbeats in
+the distance.  They come slowly closer.  Then out of the mist comes KING
+ARTHUR followed by a SERVANT who is banging two half coconuts together.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.211 b/SOURCES/7.4.211
new file mode 100644
index 0000000..783855c
--- /dev/null
+++ b/SOURCES/7.4.211
@@ -0,0 +1,68 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.211
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.211
+Problem:    ":lu" is an abbreviation for ":lua", but it should be ":lunmap".
+	    (ZyX)
+Solution:   Move "lunmap" to above "lua".
+Files:	    src/ex_cmds.h
+
+
+*** ../vim-7.4.210/src/ex_cmds.h	2013-11-09 05:30:18.000000000 +0100
+--- src/ex_cmds.h	2014-03-22 13:28:01.277844383 +0100
+***************
+*** 573,586 ****
+  			RANGE|NOTADR|COUNT|TRLBAR|BANG),
+  EX(CMD_ltag,		"ltag",	ex_tag,
+  			NOTADR|TRLBAR|BANG|WORD1),
+  EX(CMD_lua,		"lua",		ex_lua,
+  			RANGE|EXTRA|NEEDARG|CMDWIN),
+  EX(CMD_luado,		"luado",	ex_luado,
+  			RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN),
+  EX(CMD_luafile,		"luafile",	ex_luafile,
+  			RANGE|FILE1|NEEDARG|CMDWIN),
+- EX(CMD_lunmap,		"lunmap",	ex_unmap,
+- 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
+  EX(CMD_lvimgrep,	"lvimgrep",	ex_vimgrep,
+  			RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE),
+  EX(CMD_lvimgrepadd,	"lvimgrepadd",	ex_vimgrep,
+--- 573,586 ----
+  			RANGE|NOTADR|COUNT|TRLBAR|BANG),
+  EX(CMD_ltag,		"ltag",	ex_tag,
+  			NOTADR|TRLBAR|BANG|WORD1),
++ EX(CMD_lunmap,		"lunmap",	ex_unmap,
++ 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
+  EX(CMD_lua,		"lua",		ex_lua,
+  			RANGE|EXTRA|NEEDARG|CMDWIN),
+  EX(CMD_luado,		"luado",	ex_luado,
+  			RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN),
+  EX(CMD_luafile,		"luafile",	ex_luafile,
+  			RANGE|FILE1|NEEDARG|CMDWIN),
+  EX(CMD_lvimgrep,	"lvimgrep",	ex_vimgrep,
+  			RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE),
+  EX(CMD_lvimgrepadd,	"lvimgrepadd",	ex_vimgrep,
+*** ../vim-7.4.210/src/version.c	2014-03-19 18:57:27.730175565 +0100
+--- src/version.c	2014-03-22 13:28:47.421845090 +0100
+***************
+*** 740,741 ****
+--- 740,743 ----
+  {   /* Add new patch number below this line */
++ /**/
++     211,
+  /**/
+
+-- 
+"I've been teaching myself to play the piano for about 5 years and now write
+most of my songs on it, mainly because I can never find any paper."
+		Jeff Lynne, ELO's greatest hits
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.212 b/SOURCES/7.4.212
new file mode 100644
index 0000000..6bc98eb
--- /dev/null
+++ b/SOURCES/7.4.212
@@ -0,0 +1,5720 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.212
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.212 (after 7.4.200)
+Problem:    Now that the +visual feature is always enabled the #ifdefs for it
+	    are not useful.
+Solution:   Remove the checks for FEAT_VISUAL.
+Files:	    src/buffer.c, src/charset.c, src/edit.c, src/eval.c,
+	    src/ex_cmds.c, src/ex_docmd.c, src/fold.c, src/getchar.c,
+	    src/gui.c, src/gui_mac.c, src/gui_w48.c, src/main.c, src/mark.c,
+	    src/menu.c, src/misc2.c, src/move.c, src/netbeans.c, src/normal.c,
+	    src/ops.c, src/option.c, src/os_msdos.c, src/os_qnx.c,
+	    src/quickfix.c, src/regexp.c, src/regexp_nfa.c, src/screen.c,
+	    src/search.c, src/spell.c, src/syntax.c, src/term.c, src/ui.c,
+	    src/undo.c, src/version.c, src/window.c, src/feature.h,
+	    src/globals.h, src/option.h, src/os_win32.h, src/structs.h
+
+
+*** ../vim-7.4.211/src/buffer.c	2014-03-12 18:55:52.100906804 +0100
+--- src/buffer.c	2014-03-23 13:01:39.843144050 +0100
+***************
+*** 1432,1441 ****
+  	curwin->w_alt_fnum = curbuf->b_fnum; /* remember alternate file */
+      buflist_altfpos(curwin);			 /* remember curpos */
+  
+- #ifdef FEAT_VISUAL
+      /* Don't restart Select mode after switching to another buffer. */
+      VIsual_reselect = FALSE;
+- #endif
+  
+      /* close_windows() or apply_autocmds() may change curbuf */
+      prevbuf = curbuf;
+--- 1432,1439 ----
+*** ../vim-7.4.211/src/charset.c	2013-02-06 16:20:01.000000000 +0100
+--- src/charset.c	2014-03-23 13:02:19.467144657 +0100
+***************
+*** 1380,1389 ****
+  		&& (State & NORMAL)
+  		&& !wp->w_p_list
+  		&& !virtual_active()
+! #ifdef FEAT_VISUAL
+! 		&& !(VIsual_active
+! 				   && (*p_sel == 'e' || ltoreq(*pos, VIsual)))
+! #endif
+  		)
+  	    *cursor = vcol + incr - 1;	    /* cursor at end */
+  	else
+--- 1380,1386 ----
+  		&& (State & NORMAL)
+  		&& !wp->w_p_list
+  		&& !virtual_active()
+! 		&& !(VIsual_active && (*p_sel == 'e' || ltoreq(*pos, VIsual)))
+  		)
+  	    *cursor = vcol + incr - 1;	    /* cursor at end */
+  	else
+***************
+*** 1463,1469 ****
+  }
+  #endif
+  
+- #if defined(FEAT_VISUAL) || defined(PROTO)
+  /*
+   * Get the leftmost and rightmost virtual column of pos1 and pos2.
+   * Used for Visual block mode.
+--- 1460,1465 ----
+***************
+*** 1500,1506 ****
+      else
+  	*right = to1;
+  }
+- #endif
+  
+  /*
+   * skipwhite: skip over ' ' and '\t'.
+--- 1496,1501 ----
+*** ../vim-7.4.211/src/edit.c	2014-02-22 23:03:48.712901208 +0100
+--- src/edit.c	2014-03-23 13:03:11.951145462 +0100
+***************
+*** 220,228 ****
+  #ifdef FEAT_RIGHTLEFT
+  static void ins_ctrl_ __ARGS((void));
+  #endif
+- #ifdef FEAT_VISUAL
+  static int ins_start_select __ARGS((int c));
+- #endif
+  static void ins_insert __ARGS((int replaceState));
+  static void ins_ctrl_o __ARGS((void));
+  static void ins_shift __ARGS((int c, int lastc));
+--- 220,226 ----
+***************
+*** 932,938 ****
+  	    }
+  #endif
+  
+- #ifdef FEAT_VISUAL
+  	/*
+  	 * If 'keymodel' contains "startsel", may start selection.  If it
+  	 * does, a CTRL-O and c will be stuffed, we need to get these
+--- 930,935 ----
+***************
+*** 940,946 ****
+  	 */
+  	if (ins_start_select(c))
+  	    continue;
+- #endif
+  
+  	/*
+  	 * The big switch to handle a character in insert mode.
+--- 937,942 ----
+***************
+*** 6900,6906 ****
+  	    else if (cc != NUL)
+  		++curwin->w_cursor.col;	/* put cursor back on the NUL */
+  
+- #ifdef FEAT_VISUAL
+  	    /* <C-S-Right> may have started Visual mode, adjust the position for
+  	     * deleted characters. */
+  	    if (VIsual_active && VIsual.lnum == curwin->w_cursor.lnum)
+--- 6896,6901 ----
+***************
+*** 6910,6921 ****
+  		if (VIsual.col > len)
+  		{
+  		    VIsual.col = len;
+! # ifdef FEAT_VIRTUALEDIT
+  		    VIsual.coladd = 0;
+! # endif
+  		}
+  	    }
+- #endif
+  	}
+      }
+      did_ai = FALSE;
+--- 6905,6915 ----
+  		if (VIsual.col > len)
+  		{
+  		    VIsual.col = len;
+! #ifdef FEAT_VIRTUALEDIT
+  		    VIsual.coladd = 0;
+! #endif
+  		}
+  	    }
+  	}
+      }
+      did_ai = FALSE;
+***************
+*** 8112,8120 ****
+      int		need_redraw = FALSE;
+      int		regname;
+      int		literally = 0;
+- #ifdef FEAT_VISUAL
+      int		vis_active = VIsual_active;
+- #endif
+  
+      /*
+       * If we are going to wait for a character, show a '"'.
+--- 8106,8112 ----
+***************
+*** 8218,8228 ****
+      if (need_redraw || stuff_empty())
+  	edit_unputchar();
+  
+- #ifdef FEAT_VISUAL
+      /* Disallow starting Visual mode here, would get a weird mode. */
+      if (!vis_active && VIsual_active)
+  	end_visual_mode();
+- #endif
+  }
+  
+  /*
+--- 8210,8218 ----
+***************
+*** 8419,8429 ****
+  #endif
+  	       )
+  	    && (restart_edit == NUL
+! 		   || (gchar_cursor() == NUL
+! #ifdef FEAT_VISUAL
+! 		       && !VIsual_active
+! #endif
+! 		      ))
+  #ifdef FEAT_RIGHTLEFT
+  	    && !revins_on
+  #endif
+--- 8409,8415 ----
+  #endif
+  	       )
+  	    && (restart_edit == NUL
+! 		   || (gchar_cursor() == NUL && !VIsual_active))
+  #ifdef FEAT_RIGHTLEFT
+  	    && !revins_on
+  #endif
+***************
+*** 8525,8531 ****
+  }
+  #endif
+  
+- #ifdef FEAT_VISUAL
+  /*
+   * If 'keymodel' contains "startsel", may start selection.
+   * Returns TRUE when a CTRL-O and other keys stuffed.
+--- 8511,8516 ----
+***************
+*** 8581,8587 ****
+  	}
+      return FALSE;
+  }
+- #endif
+  
+  /*
+   * <Insert> key in Insert mode: toggle insert/replace mode.
+--- 8566,8571 ----
+*** ../vim-7.4.211/src/eval.c	2014-02-24 03:31:55.816738026 +0100
+--- src/eval.c	2014-03-23 13:03:56.419146143 +0100
+***************
+*** 11833,11844 ****
+      {
+  	case MLINE: buf[0] = 'V'; break;
+  	case MCHAR: buf[0] = 'v'; break;
+- #ifdef FEAT_VISUAL
+  	case MBLOCK:
+  		buf[0] = Ctrl_V;
+  		sprintf((char *)buf + 1, "%ld", reglen + 1);
+  		break;
+- #endif
+      }
+      rettv->v_type = VAR_STRING;
+      rettv->vval.v_string = vim_strsave(buf);
+--- 11833,11842 ----
+***************
+*** 12552,12560 ****
+  #ifdef FEAT_VIRTUALEDIT
+  	"virtualedit",
+  #endif
+- #ifdef FEAT_VISUAL
+  	"visual",
+- #endif
+  #ifdef FEAT_VISUALEXTRA
+  	"visualextra",
+  #endif
+--- 12550,12556 ----
+***************
+*** 14397,14403 ****
+      buf[1] = NUL;
+      buf[2] = NUL;
+  
+- #ifdef FEAT_VISUAL
+      if (VIsual_active)
+      {
+  	if (VIsual_select)
+--- 14393,14398 ----
+***************
+*** 14405,14413 ****
+  	else
+  	    buf[0] = VIsual_mode;
+      }
+!     else
+! #endif
+! 	if (State == HITRETURN || State == ASKMORE || State == SETWSIZE
+  		|| State == CONFIRM)
+      {
+  	buf[0] = 'r';
+--- 14400,14406 ----
+  	else
+  	    buf[0] = VIsual_mode;
+      }
+!     else if (State == HITRETURN || State == ASKMORE || State == SETWSIZE
+  		|| State == CONFIRM)
+      {
+  	buf[0] = 'r';
+***************
+*** 16756,16762 ****
+  		case 'V': case 'l':	/* line-wise selection */
+  		    yank_type = MLINE;
+  		    break;
+- #ifdef FEAT_VISUAL
+  		case 'b': case Ctrl_V:	/* block-wise selection */
+  		    yank_type = MBLOCK;
+  		    if (VIM_ISDIGIT(stropt[1]))
+--- 16749,16754 ----
+***************
+*** 16766,16772 ****
+  			--stropt;
+  		    }
+  		    break;
+- #endif
+  	    }
+      }
+  
+--- 16758,16763 ----
+***************
+*** 18769,18775 ****
+      typval_T	*argvars UNUSED;
+      typval_T	*rettv UNUSED;
+  {
+- #ifdef FEAT_VISUAL
+      char_u	str[2];
+  
+      rettv->v_type = VAR_STRING;
+--- 18760,18765 ----
+***************
+*** 18780,18786 ****
+      /* A non-zero number or non-empty string argument: reset mode. */
+      if (non_zero_arg(&argvars[0]))
+  	curbuf->b_visual_mode_eval = NUL;
+- #endif
+  }
+  
+  /*
+--- 18770,18775 ----
+***************
+*** 19154,19167 ****
+  	return NULL;
+      if (name[0] == '.')				/* cursor */
+  	return &curwin->w_cursor;
+- #ifdef FEAT_VISUAL
+      if (name[0] == 'v' && name[1] == NUL)	/* Visual start */
+      {
+  	if (VIsual_active)
+  	    return &VIsual;
+  	return &curwin->w_cursor;
+      }
+- #endif
+      if (name[0] == '\'')			/* mark */
+      {
+  	pp = getmark_buf_fnum(curbuf, name[1], FALSE, fnum);
+--- 19143,19154 ----
+*** ../vim-7.4.211/src/ex_cmds.c	2014-03-19 17:41:20.390105580 +0100
+--- src/ex_cmds.c	2014-03-23 13:04:09.359146341 +0100
+***************
+*** 3274,3286 ****
+  	goto theend;
+      }
+  
+- #ifdef FEAT_VISUAL
+      /*
+       * End Visual mode before switching to another buffer, so the text can be
+       * copied into the GUI selection buffer.
+       */
+      reset_VIsual();
+- #endif
+  
+  #ifdef FEAT_AUTOCMD
+      if ((command != NULL || newlnum > (linenr_T)0)
+--- 3274,3284 ----
+*** ../vim-7.4.211/src/ex_docmd.c	2014-03-12 21:28:09.481046816 +0100
+--- src/ex_docmd.c	2014-03-23 13:04:47.975146933 +0100
+***************
+*** 8577,8586 ****
+  	beginline(BL_SOL | BL_FIX);
+      }
+  
+- #if defined(FEAT_VISUAL)
+      if (VIsual_active)
+  	end_visual_mode();
+- #endif
+  
+      switch (eap->cmdidx)
+      {
+--- 8577,8584 ----
+***************
+*** 8991,9001 ****
+      RedrawingDisabled = 0;
+      p_lz = FALSE;
+      update_topline();
+!     update_screen(eap->forceit ? CLEAR :
+! #ifdef FEAT_VISUAL
+! 	    VIsual_active ? INVERTED :
+! #endif
+! 	    0);
+  #ifdef FEAT_TITLE
+      if (need_maketitle)
+  	maketitle();
+--- 8989,8995 ----
+      RedrawingDisabled = 0;
+      p_lz = FALSE;
+      update_topline();
+!     update_screen(eap->forceit ? CLEAR : VIsual_active ? INVERTED : 0);
+  #ifdef FEAT_TITLE
+      if (need_maketitle)
+  	maketitle();
+***************
+*** 9030,9040 ****
+  	status_redraw_all();
+      else
+  	status_redraw_curbuf();
+!     update_screen(
+! # ifdef FEAT_VISUAL
+! 	    VIsual_active ? INVERTED :
+! # endif
+! 	    0);
+      RedrawingDisabled = r;
+      p_lz = p;
+      out_flush();
+--- 9024,9030 ----
+  	status_redraw_all();
+      else
+  	status_redraw_curbuf();
+!     update_screen(VIsual_active ? INVERTED : 0);
+      RedrawingDisabled = r;
+      p_lz = p;
+      out_flush();
+*** ../vim-7.4.211/src/fold.c	2013-11-05 07:12:59.000000000 +0100
+--- src/fold.c	2014-03-23 13:05:14.775147344 +0100
+***************
+*** 430,440 ****
+      }
+      if (done == DONE_NOTHING)
+  	EMSG(_(e_nofold));
+- #ifdef FEAT_VISUAL
+      /* Force a redraw to remove the Visual highlighting. */
+      if (had_visual)
+  	redraw_curbuf_later(INVERTED);
+- #endif
+  }
+  
+  /* openFold() {{{2 */
+--- 430,438 ----
+***************
+*** 807,817 ****
+      if (!did_one)
+      {
+  	EMSG(_(e_nofold));
+- #ifdef FEAT_VISUAL
+  	/* Force a redraw to remove the Visual highlighting. */
+  	if (had_visual)
+  	    redraw_curbuf_later(INVERTED);
+- #endif
+      }
+      else
+  	/* Deleting markers may make cursor column invalid. */
+--- 805,813 ----
+***************
+*** 1065,1071 ****
+  }
+  
+  /* foldAdjustVisual() {{{2 */
+- #ifdef FEAT_VISUAL
+  /*
+   * Adjust the Visual area to include any fold at the start or end completely.
+   */
+--- 1061,1066 ----
+***************
+*** 1103,1109 ****
+  #endif
+      }
+  }
+- #endif
+  
+  /* cursor_foldstart() {{{2 */
+  /*
+--- 1098,1103 ----
+*** ../vim-7.4.211/src/getchar.c	2014-03-12 20:17:47.748982126 +0100
+--- src/getchar.c	2014-03-23 13:05:45.383147813 +0100
+***************
+*** 870,876 ****
+  	c = read_redo(FALSE, old_redo);
+      }
+  
+- #ifdef FEAT_VISUAL
+      if (c == 'v')   /* redo Visual */
+      {
+  	VIsual = curwin->w_cursor;
+--- 870,875 ----
+***************
+*** 880,886 ****
+  	redo_VIsual_busy = TRUE;
+  	c = read_redo(FALSE, old_redo);
+      }
+- #endif
+  
+      /* try to enter the count (in place of a previous count) */
+      if (count)
+--- 879,884 ----
+***************
+*** 1162,1168 ****
+      return typebuf.tb_maplen == 0;
+  }
+  
+- #if defined(FEAT_VISUAL) || defined(PROTO)
+  /*
+   * Return the number of characters that are mapped (or not typed).
+   */
+--- 1160,1165 ----
+***************
+*** 1171,1177 ****
+  {
+      return typebuf.tb_maplen;
+  }
+- #endif
+  
+  /*
+   * remove "len" characters from typebuf.tb_buf[typebuf.tb_off + offset]
+--- 1168,1173 ----
+***************
+*** 2443,2449 ****
+  				idx = get_menu_index(current_menu, local_State);
+  				if (idx != MENU_INDEX_INVALID)
+  				{
+- # ifdef FEAT_VISUAL
+  				    /*
+  				     * In Select mode and a Visual mode menu
+  				     * is used:  Switch to Visual mode
+--- 2439,2444 ----
+***************
+*** 2457,2463 ****
+  					(void)ins_typebuf(K_SELECT_STRING,
+  						  REMAP_NONE, 0, TRUE, FALSE);
+  				    }
+- # endif
+  				    ins_typebuf(current_menu->strings[idx],
+  						current_menu->noremap[idx],
+  						0, TRUE,
+--- 2452,2457 ----
+***************
+*** 2516,2522 ****
+  			    break;
+  			}
+  
+- #ifdef FEAT_VISUAL
+  			/*
+  			 * In Select mode and a Visual mode mapping is used:
+  			 * Switch to Visual mode temporarily.  Append K_SELECT
+--- 2510,2515 ----
+***************
+*** 2529,2535 ****
+  			    (void)ins_typebuf(K_SELECT_STRING, REMAP_NONE,
+  							      0, TRUE, FALSE);
+  			}
+- #endif
+  
+  #ifdef FEAT_EVAL
+  			/* Copy the values from *mp that are used, because
+--- 2522,2527 ----
+*** ../vim-7.4.211/src/gui.c	2013-06-30 17:41:48.000000000 +0200
+--- src/gui.c	2014-03-23 13:05:57.623148000 +0100
+***************
+*** 3132,3142 ****
+       */
+      if (!mouse_has(checkfor) || checkfor == MOUSE_COMMAND)
+      {
+- #ifdef FEAT_VISUAL
+  	/* Don't do modeless selection in Visual mode. */
+  	if (checkfor != MOUSE_NONEF && VIsual_active && (State & NORMAL))
+  	    return;
+- #endif
+  
+  	/*
+  	 * When 'mousemodel' is "popup", shift-left is translated to right.
+--- 3132,3140 ----
+*** ../vim-7.4.211/src/gui_mac.c	2013-05-06 04:06:04.000000000 +0200
+--- src/gui_mac.c	2014-03-23 13:06:30.143148498 +0100
+***************
+*** 1068,1078 ****
+      }
+   */
+  
+- 
+- #ifdef FEAT_VISUAL
+      reset_VIsual();
+- #endif
+- 
+      fnames = new_fnames_from_AEDesc(&theList, &numFiles, &error);
+  
+      if (error)
+--- 1068,1074 ----
+***************
+*** 1142,1148 ****
+  
+      /* Update the screen display */
+      update_screen(NOT_VALID);
+! #ifdef FEAT_VISUAL
+      /* Select the text if possible */
+      if (gotPosition)
+      {
+--- 1138,1144 ----
+  
+      /* Update the screen display */
+      update_screen(NOT_VALID);
+! 
+      /* Select the text if possible */
+      if (gotPosition)
+      {
+***************
+*** 1160,1166 ****
+  	    VIsual.col = 0;
+  	}
+      }
+! #endif
+      setcursor();
+      out_flush();
+  
+--- 1156,1162 ----
+  	    VIsual.col = 0;
+  	}
+      }
+! 
+      setcursor();
+      out_flush();
+  
+*** ../vim-7.4.211/src/gui_w48.c	2014-03-19 12:37:18.537826062 +0100
+--- src/gui_w48.c	2014-03-23 13:06:44.959148725 +0100
+***************
+*** 3708,3716 ****
+      DragQueryPoint(hDrop, &pt);
+      MapWindowPoints(s_hwnd, s_textArea, &pt, 1);
+  
+- # ifdef FEAT_VISUAL
+      reset_VIsual();
+- # endif
+  
+      fnames = (char_u **)alloc(cFiles * sizeof(char_u *));
+  
+--- 3708,3714 ----
+*** ../vim-7.4.211/src/main.c	2014-01-14 12:57:00.000000000 +0100
+--- src/main.c	2014-03-23 13:07:21.771149289 +0100
+***************
+*** 1057,1065 ****
+      if (!cmdwin && !noexmode && SETJMP(x_jump_env))
+      {
+  	State = NORMAL;
+- # ifdef FEAT_VISUAL
+  	VIsual_active = FALSE;
+- # endif
+  	got_int = TRUE;
+  	need_wait_return = FALSE;
+  	global_busy = FALSE;
+--- 1057,1063 ----
+***************
+*** 1096,1106 ****
+  		check_timestamps(FALSE);
+  	    if (need_wait_return)	/* if wait_return still needed ... */
+  		wait_return(FALSE);	/* ... call it now */
+! 	    if (need_start_insertmode && goto_im()
+! #ifdef FEAT_VISUAL
+! 		    && !VIsual_active
+! #endif
+! 		    )
+  	    {
+  		need_start_insertmode = FALSE;
+  		stuffReadbuff((char_u *)"i");	/* start insert mode next */
+--- 1094,1100 ----
+  		check_timestamps(FALSE);
+  	    if (need_wait_return)	/* if wait_return still needed ... */
+  		wait_return(FALSE);	/* ... call it now */
+! 	    if (need_start_insertmode && goto_im() && !VIsual_active)
+  	    {
+  		need_start_insertmode = FALSE;
+  		stuffReadbuff((char_u *)"i");	/* start insert mode next */
+***************
+*** 1202,1208 ****
+  		diff_need_scrollbind = FALSE;
+  	    }
+  #endif
+! #if defined(FEAT_FOLDING) && defined(FEAT_VISUAL)
+  	    /* Include a closed fold completely in the Visual area. */
+  	    foldAdjustVisual();
+  #endif
+--- 1196,1202 ----
+  		diff_need_scrollbind = FALSE;
+  	    }
+  #endif
+! #if defined(FEAT_FOLDING)
+  	    /* Include a closed fold completely in the Visual area. */
+  	    foldAdjustVisual();
+  #endif
+***************
+*** 1228,1239 ****
+  	    update_topline();
+  	    validate_cursor();
+  
+- #ifdef FEAT_VISUAL
+  	    if (VIsual_active)
+  		update_curbuf(INVERTED);/* update inverted part */
+! 	    else
+! #endif
+! 		if (must_redraw)
+  		update_screen(0);
+  	    else if (redraw_cmdline || clear_cmdline)
+  		showmode();
+--- 1222,1230 ----
+  	    update_topline();
+  	    validate_cursor();
+  
+  	    if (VIsual_active)
+  		update_curbuf(INVERTED);/* update inverted part */
+! 	    else if (must_redraw)
+  		update_screen(0);
+  	    else if (redraw_cmdline || clear_cmdline)
+  		showmode();
+*** ../vim-7.4.211/src/mark.c	2013-11-03 00:20:46.000000000 +0100
+--- src/mark.c	2014-03-23 13:08:03.011149921 +0100
+***************
+*** 98,104 ****
+  	return OK;
+      }
+  
+- #ifdef FEAT_VISUAL
+      if (c == '<' || c == '>')
+      {
+  	if (c == '<')
+--- 98,103 ----
+***************
+*** 110,116 ****
+  	    curbuf->b_visual.vi_mode = 'v';
+  	return OK;
+      }
+- #endif
+  
+  #ifndef EBCDIC
+      if (c > 'z')	    /* some islower() and isupper() cannot handle
+--- 109,114 ----
+***************
+*** 340,348 ****
+      int		*fnum;
+  {
+      pos_T		*posp;
+- #ifdef FEAT_VISUAL
+      pos_T		*startp, *endp;
+- #endif
+      static pos_T	pos_copy;
+  
+      posp = NULL;
+--- 338,344 ----
+***************
+*** 403,409 ****
+  	curwin->w_cursor = pos;
+  	listcmd_busy = slcb;
+      }
+- #ifdef FEAT_VISUAL
+      else if (c == '<' || c == '>')	/* start/end of visual area */
+      {
+  	startp = &buf->b_visual.vi_start;
+--- 399,404 ----
+***************
+*** 428,434 ****
+  #endif
+  	}
+      }
+- #endif
+      else if (ASCII_ISLOWER(c))		/* normal named mark */
+      {
+  	posp = &(buf->b_namedm[c - 'a']);
+--- 423,428 ----
+***************
+*** 757,766 ****
+      show_one_mark(']', arg, &curbuf->b_op_end, NULL, TRUE);
+      show_one_mark('^', arg, &curbuf->b_last_insert, NULL, TRUE);
+      show_one_mark('.', arg, &curbuf->b_last_change, NULL, TRUE);
+- #ifdef FEAT_VISUAL
+      show_one_mark('<', arg, &curbuf->b_visual.vi_start, NULL, TRUE);
+      show_one_mark('>', arg, &curbuf->b_visual.vi_end, NULL, TRUE);
+- #endif
+      show_one_mark(-1, arg, NULL, NULL, FALSE);
+  }
+  
+--- 751,758 ----
+***************
+*** 892,901 ****
+  		    case '.': curbuf->b_last_change.lnum = 0; break;
+  		    case '[': curbuf->b_op_start.lnum    = 0; break;
+  		    case ']': curbuf->b_op_end.lnum      = 0; break;
+- #ifdef FEAT_VISUAL
+  		    case '<': curbuf->b_visual.vi_start.lnum = 0; break;
+  		    case '>': curbuf->b_visual.vi_end.lnum   = 0; break;
+- #endif
+  		    case ' ': break;
+  		    default:  EMSG2(_(e_invarg2), p);
+  			      return;
+--- 884,891 ----
+***************
+*** 1085,1095 ****
+  	    one_adjust_nodel(&(curbuf->b_changelist[i].lnum));
+  #endif
+  
+- #ifdef FEAT_VISUAL
+  	/* Visual area */
+  	one_adjust_nodel(&(curbuf->b_visual.vi_start.lnum));
+  	one_adjust_nodel(&(curbuf->b_visual.vi_end.lnum));
+- #endif
+  
+  #ifdef FEAT_QUICKFIX
+  	/* quickfix marks */
+--- 1075,1083 ----
+***************
+*** 1136,1149 ****
+  		    if (win->w_tagstack[i].fmark.fnum == fnum)
+  			one_adjust_nodel(&(win->w_tagstack[i].fmark.mark.lnum));
+  
+- #ifdef FEAT_VISUAL
+  	    /* the displayed Visual area */
+  	    if (win->w_old_cursor_lnum != 0)
+  	    {
+  		one_adjust_nodel(&(win->w_old_cursor_lnum));
+  		one_adjust_nodel(&(win->w_old_visual_lnum));
+  	    }
+- #endif
+  
+  	    /* topline and cursor position for windows with the same buffer
+  	     * other than the current window */
+--- 1124,1135 ----
+***************
+*** 1260,1270 ****
+  	col_adjust(&(curbuf->b_changelist[i]));
+  #endif
+  
+- #ifdef FEAT_VISUAL
+      /* Visual area */
+      col_adjust(&(curbuf->b_visual.vi_start));
+      col_adjust(&(curbuf->b_visual.vi_end));
+- #endif
+  
+      /* previous context mark */
+      col_adjust(&(curwin->w_pcmark));
+--- 1246,1254 ----
+*** ../vim-7.4.211/src/menu.c	2011-04-11 15:17:21.000000000 +0200
+--- src/menu.c	2014-03-23 13:08:19.091150168 +0100
+***************
+*** 1640,1646 ****
+  	idx = MENU_INDEX_INSERT;
+      else if (state & CMDLINE)
+  	idx = MENU_INDEX_CMDLINE;
+- #ifdef FEAT_VISUAL
+      else if (VIsual_active)
+      {
+  	if (VIsual_select)
+--- 1640,1645 ----
+***************
+*** 1648,1654 ****
+  	else
+  	    idx = MENU_INDEX_VISUAL;
+      }
+- #endif
+      else if (state == HITRETURN || state == ASKMORE)
+  	idx = MENU_INDEX_CMDLINE;
+      else if (finish_op)
+--- 1647,1652 ----
+***************
+*** 1811,1824 ****
+      static int
+  get_menu_mode()
+  {
+- #ifdef FEAT_VISUAL
+      if (VIsual_active)
+      {
+  	if (VIsual_select)
+  	    return MENU_INDEX_SELECT;
+  	return MENU_INDEX_VISUAL;
+      }
+- #endif
+      if (State & INSERT)
+  	return MENU_INDEX_INSERT;
+      if ((State & CMDLINE) || State == ASKMORE || State == HITRETURN)
+--- 1809,1820 ----
+*** ../vim-7.4.211/src/misc2.c	2014-02-23 23:38:58.824760280 +0100
+--- src/misc2.c	2014-03-23 13:08:56.927150748 +0100
+***************
+*** 31,39 ****
+      if (virtual_op != MAYBE)
+  	return virtual_op;
+      return (ve_flags == VE_ALL
+- # ifdef FEAT_VISUAL
+  	    || ((ve_flags & VE_BLOCK) && VIsual_active && VIsual_mode == Ctrl_V)
+- # endif
+  	    || ((ve_flags & VE_INSERT) && (State & INSERT)));
+  }
+  
+--- 31,37 ----
+***************
+*** 149,157 ****
+  
+      one_more = (State & INSERT)
+  		    || restart_edit != NUL
+- #ifdef FEAT_VISUAL
+  		    || (VIsual_active && *p_sel != 'o')
+- #endif
+  #ifdef FEAT_VIRTUALEDIT
+  		    || ((ve_flags & VE_ONEMORE) && wcol < MAXCOL)
+  #endif
+--- 147,153 ----
+***************
+*** 570,578 ****
+  	 * - in Visual mode and 'selection' isn't "old"
+  	 * - 'virtualedit' is set */
+  	if ((State & INSERT) || restart_edit
+- #ifdef FEAT_VISUAL
+  		|| (VIsual_active && *p_sel != 'o')
+- #endif
+  #ifdef FEAT_VIRTUALEDIT
+  		|| (ve_flags & VE_ONEMORE)
+  #endif
+--- 566,572 ----
+***************
+*** 627,635 ****
+  adjust_cursor_col()
+  {
+      if (curwin->w_cursor.col > 0
+- # ifdef FEAT_VISUAL
+  	    && (!VIsual_active || *p_sel == 'o')
+- # endif
+  	    && gchar_cursor() == NUL)
+  	--curwin->w_cursor.col;
+  }
+--- 621,627 ----
+***************
+*** 3290,3306 ****
+  {
+      if (State & NORMAL)
+      {
+- #ifdef FEAT_VISUAL
+  	if (VIsual_active)
+  	{
+  	    if (VIsual_select)
+  		return SELECTMODE;
+  	    return VISUAL;
+  	}
+! 	else
+! #endif
+! 	    if (finish_op)
+! 		return OP_PENDING;
+      }
+      return State;
+  }
+--- 3282,3295 ----
+  {
+      if (State & NORMAL)
+      {
+  	if (VIsual_active)
+  	{
+  	    if (VIsual_select)
+  		return SELECTMODE;
+  	    return VISUAL;
+  	}
+! 	else if (finish_op)
+! 	    return OP_PENDING;
+      }
+      return State;
+  }
+***************
+*** 3738,3744 ****
+      }
+      if (finish_op)
+  	return SHAPE_IDX_O;
+- #ifdef FEAT_VISUAL
+      if (VIsual_active)
+      {
+  	if (*p_sel == 'e')
+--- 3727,3732 ----
+***************
+*** 3746,3752 ****
+  	else
+  	    return SHAPE_IDX_V;
+      }
+- #endif
+      return SHAPE_IDX_N;
+  }
+  #endif
+--- 3734,3739 ----
+*** ../vim-7.4.211/src/move.c	2014-02-11 18:58:05.102320947 +0100
+--- src/move.c	2014-03-23 13:09:16.535151048 +0100
+***************
+*** 2857,2873 ****
+      win_T	*old_curwin = curwin;
+      buf_T	*old_curbuf = curbuf;
+      int		restart_edit_save;
+- # ifdef FEAT_VISUAL
+      int		old_VIsual_select = VIsual_select;
+      int		old_VIsual_active = VIsual_active;
+- # endif
+  
+      /*
+       * loop through the cursorbound windows
+       */
+- # ifdef FEAT_VISUAL
+      VIsual_select = VIsual_active = 0;
+- # endif
+      for (curwin = firstwin; curwin; curwin = curwin->w_next)
+      {
+  	curbuf = curwin->w_buffer;
+--- 2857,2869 ----
+***************
+*** 2916,2925 ****
+      /*
+       * reset current-window
+       */
+- # ifdef FEAT_VISUAL
+      VIsual_select = old_VIsual_select;
+      VIsual_active = old_VIsual_active;
+- # endif
+      curwin = old_curwin;
+      curbuf = old_curbuf;
+  }
+--- 2912,2919 ----
+*** ../vim-7.4.211/src/netbeans.c	2012-06-20 19:56:18.000000000 +0200
+--- src/netbeans.c	2014-03-23 13:09:29.163151241 +0100
+***************
+*** 2232,2242 ****
+  
+  	    nb_set_curbuf(buf->bufp);
+  
+- #ifdef FEAT_VISUAL
+  	    /* Don't want Visual mode now. */
+  	    if (VIsual_active)
+  		end_visual_mode();
+- #endif
+  #ifdef NBDEBUG
+  	    s = args;
+  #endif
+--- 2232,2240 ----
+*** ../vim-7.4.211/src/normal.c	2014-03-12 17:41:59.128838878 +0100
+--- src/normal.c	2014-03-23 15:07:40.435259900 +0100
+***************
+*** 14,20 ****
+  
+  #include "vim.h"
+  
+- #ifdef FEAT_VISUAL
+  /*
+   * The Visual area is remembered for reselection.
+   */
+--- 14,19 ----
+***************
+*** 24,30 ****
+  static int	VIsual_mode_orig = NUL;		/* saved Visual mode */
+  
+  static int	restart_VIsual_select = 0;
+- #endif
+  
+  #ifdef FEAT_EVAL
+  static void	set_vcount_ca __ARGS((cmdarg_T *cap, int *set_prevcount));
+--- 23,28 ----
+***************
+*** 37,43 ****
+  static int	find_command __ARGS((int cmdchar));
+  static void	op_colon __ARGS((oparg_T *oap));
+  static void	op_function __ARGS((oparg_T *oap));
+! #if defined(FEAT_MOUSE) && defined(FEAT_VISUAL)
+  static void	find_start_of_word __ARGS((pos_T *));
+  static void	find_end_of_word __ARGS((pos_T *));
+  static int	get_mouse_class __ARGS((char_u *p));
+--- 35,41 ----
+  static int	find_command __ARGS((int cmdchar));
+  static void	op_colon __ARGS((oparg_T *oap));
+  static void	op_function __ARGS((oparg_T *oap));
+! #if defined(FEAT_MOUSE)
+  static void	find_start_of_word __ARGS((pos_T *));
+  static void	find_end_of_word __ARGS((pos_T *));
+  static int	get_mouse_class __ARGS((char_u *p));
+***************
+*** 48,56 ****
+  static int	checkclearopq __ARGS((oparg_T *oap));
+  static void	clearop __ARGS((oparg_T *oap));
+  static void	clearopbeep __ARGS((oparg_T *oap));
+- #ifdef FEAT_VISUAL
+  static void	unshift_special __ARGS((cmdarg_T *cap));
+- #endif
+  #ifdef FEAT_CMDL_INFO
+  static void	del_from_showcmd __ARGS((int));
+  #endif
+--- 46,52 ----
+***************
+*** 117,141 ****
+  #ifdef FEAT_VREPLACE
+  static void	nv_vreplace __ARGS((cmdarg_T *cap));
+  #endif
+- #ifdef FEAT_VISUAL
+  static void	v_swap_corners __ARGS((int cmdchar));
+- #endif
+  static void	nv_replace __ARGS((cmdarg_T *cap));
+  static void	n_swapchar __ARGS((cmdarg_T *cap));
+  static void	nv_cursormark __ARGS((cmdarg_T *cap, int flag, pos_T *pos));
+- #ifdef FEAT_VISUAL
+  static void	v_visop __ARGS((cmdarg_T *cap));
+- #endif
+  static void	nv_subst __ARGS((cmdarg_T *cap));
+  static void	nv_abbrev __ARGS((cmdarg_T *cap));
+  static void	nv_optrans __ARGS((cmdarg_T *cap));
+  static void	nv_gomark __ARGS((cmdarg_T *cap));
+  static void	nv_pcmark __ARGS((cmdarg_T *cap));
+  static void	nv_regname __ARGS((cmdarg_T *cap));
+- #ifdef FEAT_VISUAL
+  static void	nv_visual __ARGS((cmdarg_T *cap));
+  static void	n_start_visual_mode __ARGS((int c));
+- #endif
+  static void	nv_window __ARGS((cmdarg_T *cap));
+  static void	nv_suspend __ARGS((cmdarg_T *cap));
+  static void	nv_g_cmd __ARGS((cmdarg_T *cap));
+--- 113,131 ----
+***************
+*** 155,165 ****
+  static void	nv_wordcmd __ARGS((cmdarg_T *cap));
+  static void	nv_beginline __ARGS((cmdarg_T *cap));
+  static void	adjust_cursor __ARGS((oparg_T *oap));
+- #ifdef FEAT_VISUAL
+  static void	adjust_for_sel __ARGS((cmdarg_T *cap));
+  static int	unadjust_for_sel __ARGS((void));
+  static void	nv_select __ARGS((cmdarg_T *cap));
+- #endif
+  static void	nv_goto __ARGS((cmdarg_T *cap));
+  static void	nv_normal __ARGS((cmdarg_T *cap));
+  static void	nv_esc __ARGS((cmdarg_T *oap));
+--- 145,153 ----
+***************
+*** 248,271 ****
+      {Ctrl_N,	nv_down,	NV_STS,			FALSE},
+      {Ctrl_O,	nv_ctrlo,	0,			0},
+      {Ctrl_P,	nv_up,		NV_STS,			FALSE},
+- #ifdef FEAT_VISUAL
+      {Ctrl_Q,	nv_visual,	0,			FALSE},
+- #else
+-     {Ctrl_Q,	nv_ignore,	0,			0},
+- #endif
+      {Ctrl_R,	nv_redo,	0,			0},
+      {Ctrl_S,	nv_ignore,	0,			0},
+      {Ctrl_T,	nv_tagpop,	NV_NCW,			0},
+      {Ctrl_U,	nv_halfpage,	0,			0},
+- #ifdef FEAT_VISUAL
+      {Ctrl_V,	nv_visual,	0,			FALSE},
+      {'V',	nv_visual,	0,			FALSE},
+      {'v',	nv_visual,	0,			FALSE},
+- #else
+-     {Ctrl_V,	nv_error,	0,			0},
+-     {'V',	nv_error,	0,			0},
+-     {'v',	nv_error,	0,			0},
+- #endif
+      {Ctrl_W,	nv_window,	0,			0},
+      {Ctrl_X,	nv_addsub,	0,			0},
+      {Ctrl_Y,	nv_scroll_line,	0,			FALSE},
+--- 236,249 ----
+***************
+*** 427,435 ****
+      {K_HELP,	nv_help,	NV_NCW,			0},
+      {K_F1,	nv_help,	NV_NCW,			0},
+      {K_XF1,	nv_help,	NV_NCW,			0},
+- #ifdef FEAT_VISUAL
+      {K_SELECT,	nv_select,	0,			0},
+- #endif
+  #ifdef FEAT_GUI
+      {K_VER_SCROLLBAR, nv_ver_scrollbar, 0,		0},
+      {K_HOR_SCROLLBAR, nv_hor_scrollbar, 0,		0},
+--- 405,411 ----
+***************
+*** 579,589 ****
+  #ifdef FEAT_CMDL_INFO
+      int		need_flushbuf;		/* need to call out_flush() */
+  #endif
+- #ifdef FEAT_VISUAL
+      pos_T	old_pos;		/* cursor position before command */
+      int		mapped_len;
+      static int	old_mapped_len = 0;
+- #endif
+      int		idx;
+  #ifdef FEAT_EVAL
+      int		set_prevcount = FALSE;
+--- 555,563 ----
+***************
+*** 643,651 ****
+      }
+  #endif
+  
+- #ifdef FEAT_VISUAL
+      mapped_len = typebuf_maplen();
+- #endif
+  
+      State = NORMAL_BUSY;
+  #ifdef USE_ON_FLY_SCROLL
+--- 617,623 ----
+***************
+*** 666,672 ****
+      c = safe_vgetc();
+      LANGMAP_ADJUST(c, TRUE);
+  
+- #ifdef FEAT_VISUAL
+      /*
+       * If a mapping was started in Visual or Select mode, remember the length
+       * of the mapping.  This is used below to not return to Insert mode for as
+--- 638,643 ----
+***************
+*** 677,688 ****
+      else if (old_mapped_len
+  		|| (VIsual_active && mapped_len == 0 && typebuf_maplen() > 0))
+  	old_mapped_len = typebuf_maplen();
+- #endif
+  
+      if (c == NUL)
+  	c = K_ZERO;
+  
+- #ifdef FEAT_VISUAL
+      /*
+       * In Select mode, typed text replaces the selection.
+       */
+--- 648,657 ----
+***************
+*** 703,718 ****
+  	msg_nowait = TRUE;	/* don't delay going to insert mode */
+  	old_mapped_len = 0;	/* do go to Insert mode */
+      }
+- #endif
+  
+  #ifdef FEAT_CMDL_INFO
+      need_flushbuf = add_to_showcmd(c);
+  #endif
+  
+  getcount:
+- #ifdef FEAT_VISUAL
+      if (!(VIsual_active && VIsual_select))
+- #endif
+      {
+  	/*
+  	 * Handle a count before a command and compute ca.count0.
+--- 672,684 ----
+***************
+*** 856,862 ****
+  	goto normal_end;
+  #endif
+  
+- #ifdef FEAT_VISUAL
+      /*
+       * In Visual/Select mode, a few keys are handled in a special way.
+       */
+--- 822,827 ----
+***************
+*** 892,898 ****
+  	    }
+  	}
+      }
+- #endif
+  
+  #ifdef FEAT_RIGHTLEFT
+      if (curwin->w_p_rl && KeyTyped && !KeyStuffed
+--- 857,862 ----
+***************
+*** 930,940 ****
+  		    && !Recording
+  		    && !Exec_reg)
+  		|| ((ca.cmdchar == 'a' || ca.cmdchar == 'i')
+! 		    && (oap->op_type != OP_NOP
+! #ifdef FEAT_VISUAL
+! 			|| VIsual_active
+! #endif
+! 		       ))))
+      {
+  	int	*cp;
+  	int	repl = FALSE;	/* get character for replace mode */
+--- 894,900 ----
+  		    && !Recording
+  		    && !Exec_reg)
+  		|| ((ca.cmdchar == 'a' || ca.cmdchar == 'i')
+! 		    && (oap->op_type != OP_NOP || VIsual_active))))
+      {
+  	int	*cp;
+  	int	repl = FALSE;	/* get character for replace mode */
+***************
+*** 1168,1174 ****
+  	msg_col = 0;
+      }
+  
+- #ifdef FEAT_VISUAL
+      old_pos = curwin->w_cursor;		/* remember where cursor was */
+  
+      /* When 'keymodel' contains "startsel" some keys start Select/Visual
+--- 1128,1133 ----
+***************
+*** 1188,1194 ****
+  	    mod_mask &= ~MOD_MASK_SHIFT;
+  	}
+      }
+- #endif
+  
+      /*
+       * Execute the command!
+--- 1147,1152 ----
+***************
+*** 1220,1231 ****
+  #endif
+      }
+  
+- #ifdef FEAT_VISUAL
+      /* Get the length of mapped chars again after typing a count, second
+       * character or "z333<cr>". */
+      if (old_mapped_len > 0)
+  	old_mapped_len = typebuf_maplen();
+- #endif
+  
+      /*
+       * If an operation is pending, handle it...
+--- 1178,1187 ----
+***************
+*** 1247,1257 ****
+      if (       ((p_smd
+  		    && msg_silent == 0
+  		    && (restart_edit != 0
+- #ifdef FEAT_VISUAL
+  			|| (VIsual_active
+  			    && old_pos.lnum == curwin->w_cursor.lnum
+  			    && old_pos.col == curwin->w_cursor.col)
+- #endif
+  		       )
+  		    && (clear_cmdline
+  			|| redraw_cmdline)
+--- 1203,1211 ----
+***************
+*** 1259,1267 ****
+  		    && !msg_nowait
+  		    && KeyTyped)
+  		|| (restart_edit != 0
+- #ifdef FEAT_VISUAL
+  		    && !VIsual_active
+- #endif
+  		    && (msg_scroll
+  			|| emsg_on_display)))
+  	    && oap->regname == 0
+--- 1213,1219 ----
+***************
+*** 1368,1403 ****
+       * May switch from Visual to Select mode after CTRL-O command.
+       */
+      if (       oap->op_type == OP_NOP
+- #ifdef FEAT_VISUAL
+  	    && ((restart_edit != 0 && !VIsual_active && old_mapped_len == 0)
+  		|| restart_VIsual_select == 1)
+- #else
+- 	    && restart_edit != 0
+- #endif
+  	    && !(ca.retval & CA_COMMAND_BUSY)
+  	    && stuff_empty()
+  	    && oap->regname == 0)
+      {
+- #ifdef FEAT_VISUAL
+  	if (restart_VIsual_select == 1)
+  	{
+  	    VIsual_select = TRUE;
+  	    showmode();
+  	    restart_VIsual_select = 0;
+  	}
+! #endif
+! 	if (restart_edit != 0
+! #ifdef FEAT_VISUAL
+! 		&& !VIsual_active && old_mapped_len == 0
+! #endif
+! 		)
+  	    (void)edit(restart_edit, FALSE, 1L);
+      }
+  
+- #ifdef FEAT_VISUAL
+      if (restart_VIsual_select == 2)
+  	restart_VIsual_select = 1;
+- #endif
+  
+      /* Save count before an operator for next time. */
+      opcount = ca.opcount;
+--- 1320,1343 ----
+       * May switch from Visual to Select mode after CTRL-O command.
+       */
+      if (       oap->op_type == OP_NOP
+  	    && ((restart_edit != 0 && !VIsual_active && old_mapped_len == 0)
+  		|| restart_VIsual_select == 1)
+  	    && !(ca.retval & CA_COMMAND_BUSY)
+  	    && stuff_empty()
+  	    && oap->regname == 0)
+      {
+  	if (restart_VIsual_select == 1)
+  	{
+  	    VIsual_select = TRUE;
+  	    showmode();
+  	    restart_VIsual_select = 0;
+  	}
+! 	if (restart_edit != 0 && !VIsual_active && old_mapped_len == 0)
+  	    (void)edit(restart_edit, FALSE, 1L);
+      }
+  
+      if (restart_VIsual_select == 2)
+  	restart_VIsual_select = 1;
+  
+      /* Save count before an operator for next time. */
+      opcount = ca.opcount;
+***************
+*** 1437,1451 ****
+      int		empty_region_error;
+      int		restart_edit_save;
+  
+- #ifdef FEAT_VISUAL
+      /* The visual area is remembered for redo */
+      static int	    redo_VIsual_mode = NUL; /* 'v', 'V', or Ctrl-V */
+      static linenr_T redo_VIsual_line_count; /* number of lines */
+      static colnr_T  redo_VIsual_vcol;	    /* number of cols or end column */
+      static long	    redo_VIsual_count;	    /* count for Visual operator */
+! # ifdef FEAT_VIRTUALEDIT
+      int		    include_line_break = FALSE;
+- # endif
+  #endif
+  
+  #if defined(FEAT_CLIPBOARD)
+--- 1377,1389 ----
+      int		empty_region_error;
+      int		restart_edit_save;
+  
+      /* The visual area is remembered for redo */
+      static int	    redo_VIsual_mode = NUL; /* 'v', 'V', or Ctrl-V */
+      static linenr_T redo_VIsual_line_count; /* number of lines */
+      static colnr_T  redo_VIsual_vcol;	    /* number of cols or end column */
+      static long	    redo_VIsual_count;	    /* count for Visual operator */
+! #ifdef FEAT_VIRTUALEDIT
+      int		    include_line_break = FALSE;
+  #endif
+  
+  #if defined(FEAT_CLIPBOARD)
+***************
+*** 1459,1468 ****
+      if ((clip_star.available || clip_plus.available)
+  	    && oap->op_type != OP_NOP
+  	    && !gui_yank
+- # ifdef FEAT_VISUAL
+  	    && VIsual_active
+  	    && !redo_VIsual_busy
+- # endif
+  	    && oap->regname == 0)
+  	clip_auto_select();
+  #endif
+--- 1397,1404 ----
+***************
+*** 1471,1483 ****
+      /*
+       * If an operation is pending, handle it...
+       */
+!     if ((finish_op
+! #ifdef FEAT_VISUAL
+! 		|| VIsual_active
+! #endif
+! 		) && oap->op_type != OP_NOP)
+      {
+- #ifdef FEAT_VISUAL
+  	oap->is_VIsual = VIsual_active;
+  	if (oap->motion_force == 'V')
+  	    oap->motion_type = MLINE;
+--- 1407,1414 ----
+      /*
+       * If an operation is pending, handle it...
+       */
+!     if ((finish_op || VIsual_active) && oap->op_type != OP_NOP)
+      {
+  	oap->is_VIsual = VIsual_active;
+  	if (oap->motion_force == 'V')
+  	    oap->motion_type = MLINE;
+***************
+*** 1501,1517 ****
+  	    VIsual_select = FALSE;
+  	    VIsual_reselect = FALSE;
+  	}
+- #endif
+  
+  	/* Only redo yank when 'y' flag is in 'cpoptions'. */
+  	/* Never redo "zf" (define fold). */
+  	if ((vim_strchr(p_cpo, CPO_YANK) != NULL || oap->op_type != OP_YANK)
+- #ifdef FEAT_VISUAL
+  		&& ((!VIsual_active || oap->motion_force)
+  		    /* Also redo Operator-pending Visual mode mappings */
+  		    || (VIsual_active && cap->cmdchar == ':'
+  						 && oap->op_type != OP_COLON))
+- #endif
+  		&& cap->cmdchar != 'D'
+  #ifdef FEAT_FOLDING
+  		&& oap->op_type != OP_FOLD
+--- 1432,1445 ----
+***************
+*** 1554,1560 ****
+  	    }
+  	}
+  
+- #ifdef FEAT_VISUAL
+  	if (redo_VIsual_busy)
+  	{
+  	    /* Redo of an operation on a Visual area. Use the same size from
+--- 1482,1487 ----
+***************
+*** 1639,1645 ****
+  	    if (VIsual_mode == 'V')
+  		oap->start.col = 0;
+  	}
+- #endif /* FEAT_VISUAL */
+  
+  	/*
+  	 * Set oap->start to the first position of the operated text, oap->end
+--- 1566,1571 ----
+***************
+*** 1690,1696 ****
+  	virtual_op = virtual_active();
+  #endif
+  
+- #ifdef FEAT_VISUAL
+  	if (VIsual_active || redo_VIsual_busy)
+  	{
+  	    if (VIsual_mode == Ctrl_V)	/* block mode */
+--- 1616,1621 ----
+***************
+*** 1826,1834 ****
+  	    {
+  		oap->motion_type = MCHAR;
+  		if (VIsual_mode != Ctrl_V && *ml_get_pos(&(oap->end)) == NUL
+! # ifdef FEAT_VIRTUALEDIT
+  			&& (include_line_break || !virtual_op)
+! # endif
+  			)
+  		{
+  		    oap->inclusive = FALSE;
+--- 1751,1759 ----
+  	    {
+  		oap->motion_type = MCHAR;
+  		if (VIsual_mode != Ctrl_V && *ml_get_pos(&(oap->end)) == NUL
+! #ifdef FEAT_VIRTUALEDIT
+  			&& (include_line_break || !virtual_op)
+! #endif
+  			)
+  		{
+  		    oap->inclusive = FALSE;
+***************
+*** 1840,1848 ****
+  			{
+  			    ++oap->end.lnum;
+  			    oap->end.col = 0;
+! # ifdef FEAT_VIRTUALEDIT
+  			    oap->end.coladd = 0;
+! # endif
+  			    ++oap->line_count;
+  			}
+  			else
+--- 1765,1773 ----
+  			{
+  			    ++oap->end.lnum;
+  			    oap->end.col = 0;
+! #ifdef FEAT_VIRTUALEDIT
+  			    oap->end.coladd = 0;
+! #endif
+  			    ++oap->line_count;
+  			}
+  			else
+***************
+*** 1868,1877 ****
+  	    if (!gui_yank)
+  	    {
+  		VIsual_active = FALSE;
+! # ifdef FEAT_MOUSE
+  		setmouse();
+  		mouse_dragging = 0;
+! # endif
+  		if (mode_displayed)
+  		    clear_cmdline = TRUE;   /* unshow visual mode later */
+  #ifdef FEAT_CMDL_INFO
+--- 1793,1802 ----
+  	    if (!gui_yank)
+  	    {
+  		VIsual_active = FALSE;
+! #ifdef FEAT_MOUSE
+  		setmouse();
+  		mouse_dragging = 0;
+! #endif
+  		if (mode_displayed)
+  		    clear_cmdline = TRUE;   /* unshow visual mode later */
+  #ifdef FEAT_CMDL_INFO
+***************
+*** 1886,1892 ****
+  		    redraw_curbuf_later(INVERTED);
+  	    }
+  	}
+- #endif
+  
+  #ifdef FEAT_MBYTE
+  	/* Include the trailing byte of a multi-byte char. */
+--- 1811,1816 ----
+***************
+*** 1921,1936 ****
+  	empty_region_error = (oap->empty
+  				&& vim_strchr(p_cpo, CPO_EMPTYREGION) != NULL);
+  
+- #ifdef FEAT_VISUAL
+  	/* Force a redraw when operating on an empty Visual region, when
+  	 * 'modifiable is off or creating a fold. */
+  	if (oap->is_VIsual && (oap->empty || !curbuf->b_p_ma
+! # ifdef FEAT_FOLDING
+  		    || oap->op_type == OP_FOLD
+! # endif
+  		    ))
+  	    redraw_curbuf_later(INVERTED);
+- #endif
+  
+  	/*
+  	 * If the end of an operator is in column one while oap->motion_type
+--- 1845,1858 ----
+  	empty_region_error = (oap->empty
+  				&& vim_strchr(p_cpo, CPO_EMPTYREGION) != NULL);
+  
+  	/* Force a redraw when operating on an empty Visual region, when
+  	 * 'modifiable is off or creating a fold. */
+  	if (oap->is_VIsual && (oap->empty || !curbuf->b_p_ma
+! #ifdef FEAT_FOLDING
+  		    || oap->op_type == OP_FOLD
+! #endif
+  		    ))
+  	    redraw_curbuf_later(INVERTED);
+  
+  	/*
+  	 * If the end of an operator is in column one while oap->motion_type
+***************
+*** 1943,1952 ****
+  		&& oap->inclusive == FALSE
+  		&& !(cap->retval & CA_NO_ADJ_OP_END)
+  		&& oap->end.col == 0
+- #ifdef FEAT_VISUAL
+  		&& (!oap->is_VIsual || *p_sel == 'o')
+  		&& !oap->block_mode
+- #endif
+  		&& oap->line_count > 1)
+  	{
+  	    oap->end_adjusted = TRUE;	    /* remember that we did this */
+--- 1865,1872 ----
+***************
+*** 1971,1981 ****
+  	{
+  	case OP_LSHIFT:
+  	case OP_RSHIFT:
+! 	    op_shift(oap, TRUE,
+! #ifdef FEAT_VISUAL
+! 		    oap->is_VIsual ? (int)cap->count1 :
+! #endif
+! 		    1);
+  	    auto_format(FALSE, TRUE);
+  	    break;
+  
+--- 1891,1897 ----
+  	{
+  	case OP_LSHIFT:
+  	case OP_RSHIFT:
+! 	    op_shift(oap, TRUE, oap->is_VIsual ? (int)cap->count1 : 1);
+  	    auto_format(FALSE, TRUE);
+  	    break;
+  
+***************
+*** 1988,2002 ****
+  		beep_flush();
+  	    else
+  	    {
+! 		(void)do_join(oap->line_count, oap->op_type == OP_JOIN, TRUE, TRUE);
+  		auto_format(FALSE, TRUE);
+  	    }
+  	    break;
+  
+  	case OP_DELETE:
+- #ifdef FEAT_VISUAL
+  	    VIsual_reselect = FALSE;	    /* don't reselect now */
+- #endif
+  	    if (empty_region_error)
+  	    {
+  		vim_beep();
+--- 1904,1917 ----
+  		beep_flush();
+  	    else
+  	    {
+! 		(void)do_join(oap->line_count, oap->op_type == OP_JOIN,
+! 								  TRUE, TRUE);
+  		auto_format(FALSE, TRUE);
+  	    }
+  	    break;
+  
+  	case OP_DELETE:
+  	    VIsual_reselect = FALSE;	    /* don't reselect now */
+  	    if (empty_region_error)
+  	    {
+  		vim_beep();
+***************
+*** 2026,2034 ****
+  	    break;
+  
+  	case OP_CHANGE:
+- #ifdef FEAT_VISUAL
+  	    VIsual_reselect = FALSE;	    /* don't reselect now */
+- #endif
+  	    if (empty_region_error)
+  	    {
+  		vim_beep();
+--- 1941,1947 ----
+***************
+*** 2126,2134 ****
+  
+  	case OP_INSERT:
+  	case OP_APPEND:
+- #ifdef FEAT_VISUAL
+  	    VIsual_reselect = FALSE;	/* don't reselect now */
+- #endif
+  #ifdef FEAT_VISUALEXTRA
+  	    if (empty_region_error)
+  	    {
+--- 2039,2045 ----
+***************
+*** 2158,2166 ****
+  	    break;
+  
+  	case OP_REPLACE:
+- #ifdef FEAT_VISUAL
+  	    VIsual_reselect = FALSE;	/* don't reselect now */
+- #endif
+  #ifdef FEAT_VISUALEXTRA
+  	    if (empty_region_error)
+  #endif
+--- 2069,2075 ----
+***************
+*** 2220,2228 ****
+  	{
+  	    curwin->w_cursor = old_cursor;
+  	}
+- #ifdef FEAT_VISUAL
+  	oap->block_mode = FALSE;
+- #endif
+  	clearop(oap);
+      }
+  }
+--- 2129,2135 ----
+***************
+*** 2235,2245 ****
+      oparg_T	*oap;
+  {
+      stuffcharReadbuff(':');
+- #ifdef FEAT_VISUAL
+      if (oap->is_VIsual)
+  	stuffReadbuff((char_u *)"'<,'>");
+      else
+- #endif
+      {
+  	/*
+  	 * Make the range look nice, so it can be repeated.
+--- 2142,2150 ----
+***************
+*** 2404,2417 ****
+      pos_T	save_cursor;
+  #endif
+      win_T	*old_curwin = curwin;
+- #ifdef FEAT_VISUAL
+      static pos_T orig_cursor;
+      colnr_T	leftcol, rightcol;
+      pos_T	end_visual;
+      int		diff;
+      int		old_active = VIsual_active;
+      int		old_mode = VIsual_mode;
+- #endif
+      int		regname;
+  
+  #if defined(FEAT_FOLDING)
+--- 2309,2320 ----
+***************
+*** 2432,2446 ****
+  	if (!gui.in_use)
+  #endif
+  	{
+- #ifdef FEAT_VISUAL
+  	    if (VIsual_active)
+  	    {
+  		if (!mouse_has(MOUSE_VISUAL))
+  		    return FALSE;
+  	    }
+! 	    else
+! #endif
+! 		if (State == NORMAL && !mouse_has(MOUSE_NORMAL))
+  		return FALSE;
+  	}
+  
+--- 2335,2346 ----
+  	if (!gui.in_use)
+  #endif
+  	{
+  	    if (VIsual_active)
+  	    {
+  		if (!mouse_has(MOUSE_VISUAL))
+  		    return FALSE;
+  	    }
+! 	    else if (State == NORMAL && !mouse_has(MOUSE_NORMAL))
+  		return FALSE;
+  	}
+  
+***************
+*** 2509,2522 ****
+  	}
+      }
+  
+- #ifndef FEAT_VISUAL
+-     /*
+-      * ALT is only used for starting/extending Visual mode.
+-      */
+-     if ((mod_mask & MOD_MASK_ALT))
+- 	return FALSE;
+- #endif
+- 
+      /*
+       * CTRL right mouse button does CTRL-T
+       */
+--- 2409,2414 ----
+***************
+*** 2586,2592 ****
+  		return FALSE;
+  	    }
+  
+- #ifdef FEAT_VISUAL
+  	    /*
+  	     * If visual was active, yank the highlighted text and put it
+  	     * before the mouse pointer position.
+--- 2478,2483 ----
+***************
+*** 2607,2613 ****
+  		do_always = TRUE;	/* ignore 'mouse' setting next time */
+  		return FALSE;
+  	    }
+- #endif
+  	    /*
+  	     * The rest is below jump_to_mouse()
+  	     */
+--- 2498,2503 ----
+***************
+*** 2761,2767 ****
+  		{
+  		    /* First set the cursor position before showing the popup
+  		     * menu. */
+- #ifdef FEAT_VISUAL
+  		    if (VIsual_active)
+  		    {
+  			pos_T    m_pos;
+--- 2651,2656 ----
+***************
+*** 2800,2815 ****
+  		    }
+  		    else
+  			jump_flags = MOUSE_MAY_STOP_VIS;
+- #endif
+  		}
+  		if (jump_flags)
+  		{
+  		    jump_flags = jump_to_mouse(jump_flags, NULL, which_button);
+! 		    update_curbuf(
+! #ifdef FEAT_VISUAL
+! 			    VIsual_active ? INVERTED :
+! #endif
+! 			    VALID);
+  		    setcursor();
+  		    out_flush();    /* Update before showing popup menu */
+  		}
+--- 2689,2699 ----
+  		    }
+  		    else
+  			jump_flags = MOUSE_MAY_STOP_VIS;
+  		}
+  		if (jump_flags)
+  		{
+  		    jump_flags = jump_to_mouse(jump_flags, NULL, which_button);
+! 		    update_curbuf(VIsual_active ? INVERTED : VALID);
+  		    setcursor();
+  		    out_flush();    /* Update before showing popup menu */
+  		}
+***************
+*** 2832,2838 ****
+  	}
+      }
+  
+- #ifdef FEAT_VISUAL
+      if ((State & (NORMAL | INSERT))
+  			    && !(mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL)))
+      {
+--- 2716,2721 ----
+***************
+*** 2872,2878 ****
+  		jump_flags |= MOUSE_MAY_VIS;
+  	}
+      }
+- #endif
+  
+      /*
+       * If an operator is pending, ignore all drags and releases until the
+--- 2755,2760 ----
+***************
+*** 2941,2947 ****
+      }
+  #endif
+  
+- #ifdef FEAT_VISUAL
+      /* Set global flag that we are extending the Visual area with mouse
+       * dragging; temporarily minimize 'scrolloff'. */
+      if (VIsual_active && is_drag && p_so)
+--- 2823,2828 ----
+***************
+*** 3040,3046 ****
+       */
+      else if ((State & INSERT) && VIsual_active)
+  	stuffcharReadbuff(Ctrl_O);
+- #endif
+  
+      /*
+       * Middle mouse click: Put text before cursor.
+--- 2921,2926 ----
+***************
+*** 3118,3128 ****
+       */
+      else if ((mod_mask & MOD_MASK_SHIFT))
+      {
+! 	if (State & INSERT
+! #ifdef FEAT_VISUAL
+! 		|| (VIsual_active && VIsual_select)
+! #endif
+! 		)
+  	    stuffcharReadbuff(Ctrl_O);
+  	if (which_button == MOUSE_LEFT)
+  	    stuffcharReadbuff('*');
+--- 2998,3004 ----
+       */
+      else if ((mod_mask & MOD_MASK_SHIFT))
+      {
+! 	if ((State & INSERT) || (VIsual_active && VIsual_select))
+  	    stuffcharReadbuff(Ctrl_O);
+  	if (which_button == MOUSE_LEFT)
+  	    stuffcharReadbuff('*');
+***************
+*** 3153,3159 ****
+  # endif
+      }
+  #endif
+- #ifdef FEAT_VISUAL
+      else if ((mod_mask & MOD_MASK_MULTI_CLICK) && (State & (NORMAL | INSERT))
+  	     && mouse_has(MOUSE_VISUAL))
+      {
+--- 3029,3034 ----
+***************
+*** 3267,3278 ****
+  	    || (VIsual_active && p_smd && msg_silent == 0
+  				 && (!old_active || VIsual_mode != old_mode)))
+  	redraw_cmdline = TRUE;
+- #endif
+  
+      return moved;
+  }
+  
+- #ifdef FEAT_VISUAL
+  /*
+   * Move "pos" back to the start of the word it's in.
+   */
+--- 3142,3151 ----
+***************
+*** 3372,3381 ****
+  	return 1;
+      return c;
+  }
+- #endif /* FEAT_VISUAL */
+  #endif /* FEAT_MOUSE */
+  
+- #if defined(FEAT_VISUAL) || defined(PROTO)
+  /*
+   * Check if  highlighting for visual mode is possible, give a warning message
+   * if not.
+--- 3245,3252 ----
+***************
+*** 3468,3474 ****
+  	VIsual_reselect = FALSE;
+      }
+  }
+- #endif /* FEAT_VISUAL */
+  
+  #if defined(FEAT_BEVAL)
+  static int find_is_eval_item __ARGS((char_u *ptr, int *colp, int *nbp, int dir));
+--- 3339,3344 ----
+***************
+*** 3802,3812 ****
+  checkclearopq(oap)
+      oparg_T	*oap;
+  {
+!     if (oap->op_type == OP_NOP
+! #ifdef FEAT_VISUAL
+! 	    && !VIsual_active
+! #endif
+! 	    )
+  	return FALSE;
+      clearopbeep(oap);
+      return TRUE;
+--- 3672,3678 ----
+  checkclearopq(oap)
+      oparg_T	*oap;
+  {
+!     if (oap->op_type == OP_NOP && !VIsual_active)
+  	return FALSE;
+      clearopbeep(oap);
+      return TRUE;
+***************
+*** 3830,3836 ****
+      beep_flush();
+  }
+  
+- #ifdef FEAT_VISUAL
+  /*
+   * Remove the shift modifier from a special key.
+   */
+--- 3696,3701 ----
+***************
+*** 3849,3866 ****
+      }
+      cap->cmdchar = simplify_key(cap->cmdchar, &mod_mask);
+  }
+- #endif
+  
+  #if defined(FEAT_CMDL_INFO) || defined(PROTO)
+  /*
+   * Routines for displaying a partly typed command
+   */
+  
+! #ifdef FEAT_VISUAL	/* need room for size of Visual area */
+! # define SHOWCMD_BUFLEN SHOWCMD_COLS + 1 + 30
+! #else
+! # define SHOWCMD_BUFLEN SHOWCMD_COLS + 1
+! #endif
+  static char_u	showcmd_buf[SHOWCMD_BUFLEN];
+  static char_u	old_showcmd_buf[SHOWCMD_BUFLEN];  /* For push_showcmd() */
+  static int	showcmd_is_clear = TRUE;
+--- 3714,3726 ----
+      }
+      cap->cmdchar = simplify_key(cap->cmdchar, &mod_mask);
+  }
+  
+  #if defined(FEAT_CMDL_INFO) || defined(PROTO)
+  /*
+   * Routines for displaying a partly typed command
+   */
+  
+! #define SHOWCMD_BUFLEN SHOWCMD_COLS + 1 + 30
+  static char_u	showcmd_buf[SHOWCMD_BUFLEN];
+  static char_u	old_showcmd_buf[SHOWCMD_BUFLEN];  /* For push_showcmd() */
+  static int	showcmd_is_clear = TRUE;
+***************
+*** 3874,3880 ****
+      if (!p_sc)
+  	return;
+  
+- #ifdef FEAT_VISUAL
+      if (VIsual_active && !char_avail())
+      {
+  	int		cursor_bot = lt(VIsual, curwin->w_cursor);
+--- 3734,3739 ----
+***************
+*** 3960,3966 ****
+  	showcmd_visual = TRUE;
+      }
+      else
+- #endif
+      {
+  	showcmd_buf[0] = NUL;
+  	showcmd_visual = FALSE;
+--- 3819,3824 ----
+***************
+*** 4203,4212 ****
+      int		want_hor;
+      win_T	*old_curwin = curwin;
+      buf_T	*old_curbuf = curbuf;
+- #ifdef FEAT_VISUAL
+      int		old_VIsual_select = VIsual_select;
+      int		old_VIsual_active = VIsual_active;
+- #endif
+      colnr_T	tgt_leftcol = curwin->w_leftcol;
+      long	topline;
+      long	y;
+--- 4061,4068 ----
+***************
+*** 4223,4231 ****
+      /*
+       * loop through the scrollbound windows and scroll accordingly
+       */
+- #ifdef FEAT_VISUAL
+      VIsual_select = VIsual_active = 0;
+- #endif
+      for (curwin = firstwin; curwin; curwin = curwin->w_next)
+      {
+  	curbuf = curwin->w_buffer;
+--- 4079,4085 ----
+***************
+*** 4280,4289 ****
+      /*
+       * reset current-window
+       */
+- #ifdef FEAT_VISUAL
+      VIsual_select = old_VIsual_select;
+      VIsual_active = old_VIsual_active;
+- #endif
+      curwin = old_curwin;
+      curbuf = old_curbuf;
+  }
+--- 4134,4141 ----
+***************
+*** 5239,5249 ****
+  
+  		    if (checkclearop(cap->oap))
+  			break;
+- # ifdef FEAT_VISUAL
+  		    if (VIsual_active && get_visual_text(cap, &ptr, &len)
+  								      == FAIL)
+  			return;
+- # endif
+  		    if (ptr == NULL)
+  		    {
+  			pos_T	pos = curwin->w_cursor;
+--- 5091,5099 ----
+***************
+*** 5411,5422 ****
+      /*
+       * Ignore 'Q' in Visual mode, just give a beep.
+       */
+- #ifdef FEAT_VISUAL
+      if (VIsual_active)
+  	vim_beep();
+!     else
+! #endif
+! 	if (!checkclearop(cap->oap))
+  	do_exmode(FALSE);
+  }
+  
+--- 5261,5269 ----
+      /*
+       * Ignore 'Q' in Visual mode, just give a beep.
+       */
+      if (VIsual_active)
+  	vim_beep();
+!     else if (!checkclearop(cap->oap))
+  	do_exmode(FALSE);
+  }
+  
+***************
+*** 5430,5440 ****
+      int	    old_p_im;
+      int	    cmd_result;
+  
+- #ifdef FEAT_VISUAL
+      if (VIsual_active)
+  	nv_operator(cap);
+      else
+- #endif
+      {
+  	if (cap->oap->op_type != OP_NOP)
+  	{
+--- 5277,5285 ----
+***************
+*** 5494,5508 ****
+  nv_ctrlg(cap)
+      cmdarg_T *cap;
+  {
+- #ifdef FEAT_VISUAL
+      if (VIsual_active)	/* toggle Selection/Visual mode */
+      {
+  	VIsual_select = !VIsual_select;
+  	showmode();
+      }
+!     else
+! #endif
+! 	if (!checkclearop(cap->oap))
+  	/* print full name if count given or :cd used */
+  	fileinfo((int)cap->count0, FALSE, TRUE);
+  }
+--- 5339,5350 ----
+  nv_ctrlg(cap)
+      cmdarg_T *cap;
+  {
+      if (VIsual_active)	/* toggle Selection/Visual mode */
+      {
+  	VIsual_select = !VIsual_select;
+  	showmode();
+      }
+!     else if (!checkclearop(cap->oap))
+  	/* print full name if count given or :cd used */
+  	fileinfo((int)cap->count0, FALSE, TRUE);
+  }
+***************
+*** 5514,5527 ****
+  nv_ctrlh(cap)
+      cmdarg_T *cap;
+  {
+- #ifdef FEAT_VISUAL
+      if (VIsual_active && VIsual_select)
+      {
+  	cap->cmdchar = 'x';	/* BS key behaves like 'x' in Select mode */
+  	v_visop(cap);
+      }
+      else
+- #endif
+  	nv_left(cap);
+  }
+  
+--- 5356,5367 ----
+***************
+*** 5558,5564 ****
+  nv_ctrlo(cap)
+      cmdarg_T	*cap;
+  {
+- #ifdef FEAT_VISUAL
+      if (VIsual_active && VIsual_select)
+      {
+  	VIsual_select = FALSE;
+--- 5398,5403 ----
+***************
+*** 5566,5572 ****
+  	restart_VIsual_select = 2;	/* restart Select mode later */
+      }
+      else
+- #endif
+      {
+  	cap->count1 = -cap->count1;
+  	nv_pcmark(cap);
+--- 5405,5410 ----
+***************
+*** 5675,5684 ****
+       */
+      if (cmdchar == ']' || cmdchar == Ctrl_RSB || cmdchar == 'K')
+      {
+- #ifdef FEAT_VISUAL
+  	if (VIsual_active && get_visual_text(cap, &ptr, &n) == FAIL)
+  	    return;
+- #endif
+  	if (checkclearopq(cap->oap))
+  	    return;
+      }
+--- 5513,5520 ----
+***************
+*** 5872,5878 ****
+      vim_free(buf);
+  }
+  
+- #if defined(FEAT_VISUAL) || defined(PROTO)
+  /*
+   * Get visually selected text, within one line only.
+   * Returns FAIL if more than one line selected.
+--- 5708,5713 ----
+***************
+*** 5917,5923 ****
+      reset_VIsual_and_resel();
+      return OK;
+  }
+- #endif
+  
+  /*
+   * CTRL-T: backwards in tag stack
+--- 5752,5757 ----
+***************
+*** 6040,6050 ****
+      cmdarg_T	*cap;
+  {
+      long	n;
+! #ifdef FEAT_VISUAL
+!     int		PAST_LINE;
+! #else
+! # define PAST_LINE 0
+! #endif
+  
+      if (mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL))
+      {
+--- 5874,5880 ----
+      cmdarg_T	*cap;
+  {
+      long	n;
+!     int		past_line;
+  
+      if (mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL))
+      {
+***************
+*** 6057,6081 ****
+  
+      cap->oap->motion_type = MCHAR;
+      cap->oap->inclusive = FALSE;
+! #ifdef FEAT_VISUAL
+!     PAST_LINE = (VIsual_active && *p_sel != 'o');
+  
+! # ifdef FEAT_VIRTUALEDIT
+      /*
+!      * In virtual mode, there's no such thing as "PAST_LINE", as lines are
+!      * (theoretically) infinitely long.
+       */
+      if (virtual_active())
+! 	PAST_LINE = 0;
+! # endif
+  #endif
+  
+      for (n = cap->count1; n > 0; --n)
+      {
+! 	if ((!PAST_LINE && oneright() == FAIL)
+! #ifdef FEAT_VISUAL
+! 		|| (PAST_LINE && *ml_get_cursor() == NUL)
+! #endif
+  		)
+  	{
+  	    /*
+--- 5887,5907 ----
+  
+      cap->oap->motion_type = MCHAR;
+      cap->oap->inclusive = FALSE;
+!     past_line = (VIsual_active && *p_sel != 'o');
+  
+! #ifdef FEAT_VIRTUALEDIT
+      /*
+!      * In virtual edit mode, there's no such thing as "past_line", as lines
+!      * are (theoretically) infinitely long.
+       */
+      if (virtual_active())
+! 	past_line = 0;
+  #endif
+  
+      for (n = cap->count1; n > 0; --n)
+      {
+! 	if ((!past_line && oneright() == FAIL)
+! 		|| (past_line && *ml_get_cursor() == NUL)
+  		)
+  	{
+  	    /*
+***************
+*** 6123,6148 ****
+  	    }
+  	    break;
+  	}
+! #ifdef FEAT_VISUAL
+! 	else if (PAST_LINE)
+  	{
+  	    curwin->w_set_curswant = TRUE;
+! # ifdef FEAT_VIRTUALEDIT
+  	    if (virtual_active())
+  		oneright();
+  	    else
+! # endif
+  	    {
+! # ifdef FEAT_MBYTE
+  		if (has_mbyte)
+  		    curwin->w_cursor.col +=
+  					 (*mb_ptr2len)(ml_get_cursor());
+  		else
+! # endif
+  		    ++curwin->w_cursor.col;
+  	    }
+  	}
+- #endif
+      }
+  #ifdef FEAT_FOLDING
+      if (n != cap->count1 && (fdo_flags & FDO_HOR) && KeyTyped
+--- 5949,5972 ----
+  	    }
+  	    break;
+  	}
+! 	else if (past_line)
+  	{
+  	    curwin->w_set_curswant = TRUE;
+! #ifdef FEAT_VIRTUALEDIT
+  	    if (virtual_active())
+  		oneright();
+  	    else
+! #endif
+  	    {
+! #ifdef FEAT_MBYTE
+  		if (has_mbyte)
+  		    curwin->w_cursor.col +=
+  					 (*mb_ptr2len)(ml_get_cursor());
+  		else
+! #endif
+  		    ++curwin->w_cursor.col;
+  	    }
+  	}
+      }
+  #ifdef FEAT_FOLDING
+      if (n != cap->count1 && (fdo_flags & FDO_HOR) && KeyTyped
+***************
+*** 6503,6511 ****
+  	else
+  	    curwin->w_cursor.coladd = 0;
+  #endif
+- #ifdef FEAT_VISUAL
+  	adjust_for_sel(cap);
+- #endif
+  #ifdef FEAT_FOLDING
+  	if ((fdo_flags & FDO_HOR) && KeyTyped && cap->oap->op_type == OP_NOP)
+  	    foldOpenCursor();
+--- 6327,6333 ----
+***************
+*** 6754,6760 ****
+  	    int	    dir = (cap->cmdchar == ']' && cap->nchar == 'p')
+  							 ? FORWARD : BACKWARD;
+  	    int	    regname = cap->oap->regname;
+- #ifdef FEAT_VISUAL
+  	    int	    was_visual = VIsual_active;
+  	    int	    line_count = curbuf->b_ml.ml_line_count;
+  	    pos_T   start, end;
+--- 6576,6581 ----
+***************
+*** 6766,6779 ****
+  		end =  equalpos(start,VIsual) ? curwin->w_cursor : VIsual;
+  		curwin->w_cursor = (dir == BACKWARD ? start : end);
+  	    }
+- #endif
+  # ifdef FEAT_CLIPBOARD
+  	    adjust_clip_reg(&regname);
+  # endif
+  	    prep_redo_cmd(cap);
+  
+  	    do_put(regname, dir, cap->count1, PUT_FIXINDENT);
+- #ifdef FEAT_VISUAL
+  	    if (was_visual)
+  	    {
+  		VIsual = start;
+--- 6587,6598 ----
+***************
+*** 6802,6808 ****
+  		    redraw_later(SOME_VALID);
+  		}
+  	    }
+- #endif
+  	}
+      }
+  
+--- 6621,6626 ----
+***************
+*** 6936,6944 ****
+  #ifdef FEAT_VIRTUALEDIT
+  	    curwin->w_cursor.coladd = 0;
+  #endif
+- #ifdef FEAT_VISUAL
+  	    adjust_for_sel(cap);
+- #endif
+  	}
+      }
+  #ifdef FEAT_FOLDING
+--- 6754,6760 ----
+***************
+*** 7027,7037 ****
+  nv_undo(cap)
+      cmdarg_T	*cap;
+  {
+!     if (cap->oap->op_type == OP_LOWER
+! #ifdef FEAT_VISUAL
+! 	    || VIsual_active
+! #endif
+! 	    )
+      {
+  	/* translate "<Visual>u" to "<Visual>gu" and "guu" to "gugu" */
+  	cap->cmdchar = 'g';
+--- 6843,6849 ----
+  nv_undo(cap)
+      cmdarg_T	*cap;
+  {
+!     if (cap->oap->op_type == OP_LOWER || VIsual_active)
+      {
+  	/* translate "<Visual>u" to "<Visual>gu" and "guu" to "gugu" */
+  	cap->cmdchar = 'g';
+***************
+*** 7089,7095 ****
+  	return;
+      }
+  
+- #ifdef FEAT_VISUAL
+      /* Visual mode "r" */
+      if (VIsual_active)
+      {
+--- 6901,6906 ----
+***************
+*** 7105,7111 ****
+  	nv_operator(cap);
+  	return;
+      }
+- #endif
+  
+  #ifdef FEAT_VIRTUALEDIT
+      /* Break tabs, etc. */
+--- 6916,6921 ----
+***************
+*** 7273,7279 ****
+      }
+  }
+  
+- #ifdef FEAT_VISUAL
+  /*
+   * 'o': Exchange start and end of Visual area.
+   * 'O': same, but in block mode exchange left and right corners.
+--- 7083,7088 ----
+***************
+*** 7326,7332 ****
+  	curwin->w_set_curswant = TRUE;
+      }
+  }
+- #endif /* FEAT_VISUAL */
+  
+  /*
+   * "R" (cap->arg is FALSE) and "gR" (cap->arg is TRUE).
+--- 7135,7140 ----
+***************
+*** 7335,7341 ****
+  nv_Replace(cap)
+      cmdarg_T	    *cap;
+  {
+- #ifdef FEAT_VISUAL
+      if (VIsual_active)		/* "R" is replace lines */
+      {
+  	cap->cmdchar = 'c';
+--- 7143,7148 ----
+***************
+*** 7344,7352 ****
+  	VIsual_mode = 'V';
+  	nv_operator(cap);
+      }
+!     else
+! #endif
+! 	if (!checkclearopq(cap->oap))
+      {
+  	if (!curbuf->b_p_ma)
+  	    EMSG(_(e_modifiable));
+--- 7151,7157 ----
+  	VIsual_mode = 'V';
+  	nv_operator(cap);
+      }
+!     else if (!checkclearopq(cap->oap))
+      {
+  	if (!curbuf->b_p_ma)
+  	    EMSG(_(e_modifiable));
+***************
+*** 7369,7384 ****
+  nv_vreplace(cap)
+      cmdarg_T	*cap;
+  {
+- # ifdef FEAT_VISUAL
+      if (VIsual_active)
+      {
+  	cap->cmdchar = 'r';
+  	cap->nchar = cap->extra_char;
+  	nv_replace(cap);	/* Do same as "r" in Visual mode for now */
+      }
+!     else
+! # endif
+! 	if (!checkclearopq(cap->oap))
+      {
+  	if (!curbuf->b_p_ma)
+  	    EMSG(_(e_modifiable));
+--- 7174,7186 ----
+  nv_vreplace(cap)
+      cmdarg_T	*cap;
+  {
+      if (VIsual_active)
+      {
+  	cap->cmdchar = 'r';
+  	cap->nchar = cap->extra_char;
+  	nv_replace(cap);	/* Do same as "r" in Visual mode for now */
+      }
+!     else if (!checkclearopq(cap->oap))
+      {
+  	if (!curbuf->b_p_ma)
+  	    EMSG(_(e_modifiable));
+***************
+*** 7525,7531 ****
+      curwin->w_set_curswant = TRUE;
+  }
+  
+- #ifdef FEAT_VISUAL
+  /*
+   * Handle commands that are operators in Visual mode.
+   */
+--- 7327,7332 ----
+***************
+*** 7550,7556 ****
+      cap->cmdchar = *(vim_strchr(trans, cap->cmdchar) + 1);
+      nv_operator(cap);
+  }
+- #endif
+  
+  /*
+   * "s" and "S" commands.
+--- 7351,7356 ----
+***************
+*** 7559,7565 ****
+  nv_subst(cap)
+      cmdarg_T	*cap;
+  {
+- #ifdef FEAT_VISUAL
+      if (VIsual_active)	/* "vs" and "vS" are the same as "vc" */
+      {
+  	if (cap->cmdchar == 'S')
+--- 7359,7364 ----
+***************
+*** 7571,7577 ****
+  	nv_operator(cap);
+      }
+      else
+- #endif
+  	nv_optrans(cap);
+  }
+  
+--- 7370,7375 ----
+***************
+*** 7585,7596 ****
+      if (cap->cmdchar == K_DEL || cap->cmdchar == K_KDEL)
+  	cap->cmdchar = 'x';		/* DEL key behaves like 'x' */
+  
+- #ifdef FEAT_VISUAL
+      /* in Visual mode these commands are operators */
+      if (VIsual_active)
+  	v_visop(cap);
+      else
+- #endif
+  	nv_optrans(cap);
+  }
+  
+--- 7383,7392 ----
+***************
+*** 7758,7764 ****
+  	clearopbeep(cap->oap);
+  }
+  
+- #ifdef FEAT_VISUAL
+  /*
+   * Handle "v", "V" and "CTRL-V" commands.
+   * Also for "gh", "gH" and "g^H" commands: Always start Select mode, cap->arg
+--- 7554,7559 ----
+***************
+*** 7950,7956 ****
+      }
+  }
+  
+- #endif /* FEAT_VISUAL */
+  
+  /*
+   * CTRL-W: Window commands
+--- 7745,7750 ----
+***************
+*** 7975,7984 ****
+      cmdarg_T	*cap;
+  {
+      clearop(cap->oap);
+- #ifdef FEAT_VISUAL
+      if (VIsual_active)
+  	end_visual_mode();		/* stop Visual mode */
+- #endif
+      do_cmdline_cmd((char_u *)"st");
+  }
+  
+--- 7769,7776 ----
+***************
+*** 7990,7998 ****
+      cmdarg_T	*cap;
+  {
+      oparg_T	*oap = cap->oap;
+- #ifdef FEAT_VISUAL
+      pos_T	tpos;
+- #endif
+      int		i;
+      int		flag = FALSE;
+  
+--- 7782,7788 ----
+***************
+*** 8025,8031 ****
+  	do_cmdline_cmd((char_u *)"%s//~/&");
+  	break;
+  
+- #ifdef FEAT_VISUAL
+      /*
+       * "gv": Reselect the previous Visual area.  If Visual already active,
+       *	     exchange previous and current Visual area.
+--- 7815,7820 ----
+***************
+*** 8126,8132 ****
+  	cap->arg = TRUE;
+  	nv_visual(cap);
+  	break;
+- #endif /* FEAT_VISUAL */
+  
+      /* "gn", "gN" visually select next/previous search match
+       * "gn" selects next match
+--- 7915,7920 ----
+***************
+*** 8134,8142 ****
+       */
+      case 'N':
+      case 'n':
+- #ifdef FEAT_VISUAL
+  	if (!current_search(cap->count1, cap->nchar == 'n'))
+- #endif
+  	    clearopbeep(oap);
+  	break;
+  
+--- 7922,7928 ----
+***************
+*** 8258,8266 ****
+  				    && vim_iswhite(ptr[curwin->w_cursor.col]))
+  		--curwin->w_cursor.col;
+  	    curwin->w_set_curswant = TRUE;
+- #ifdef FEAT_VISUAL
+  	    adjust_for_sel(cap);
+- #endif
+  	}
+  	break;
+  
+--- 8044,8050 ----
+***************
+*** 8657,8667 ****
+      cmdarg_T	*cap;
+  {
+      /* In Visual mode and typing "gUU" triggers an operator */
+!     if (cap->oap->op_type == OP_UPPER
+! #ifdef FEAT_VISUAL
+! 	    || VIsual_active
+! #endif
+! 	    )
+      {
+  	/* translate "gUU" to "gUgU" */
+  	cap->cmdchar = 'g';
+--- 8441,8447 ----
+      cmdarg_T	*cap;
+  {
+      /* In Visual mode and typing "gUU" triggers an operator */
+!     if (cap->oap->op_type == OP_UPPER || VIsual_active)
+      {
+  	/* translate "gUU" to "gUgU" */
+  	cap->cmdchar = 'g';
+***************
+*** 8683,8693 ****
+  nv_tilde(cap)
+      cmdarg_T	*cap;
+  {
+!     if (!p_to
+! #ifdef FEAT_VISUAL
+! 	    && !VIsual_active
+! #endif
+! 	    && cap->oap->op_type != OP_TILDE)
+  	n_swapchar(cap);
+      else
+  	nv_operator(cap);
+--- 8463,8469 ----
+  nv_tilde(cap)
+      cmdarg_T	*cap;
+  {
+!     if (!p_to && !VIsual_active && cap->oap->op_type != OP_TILDE)
+  	n_swapchar(cap);
+      else
+  	nv_operator(cap);
+***************
+*** 8906,8914 ****
+  	clearopbeep(cap->oap);
+      else
+      {
+- #ifdef FEAT_VISUAL
+  	adjust_for_sel(cap);
+- #endif
+  #ifdef FEAT_FOLDING
+  	if ((fdo_flags & FDO_HOR) && KeyTyped && cap->oap->op_type == OP_NOP)
+  	    foldOpenCursor();
+--- 8682,8688 ----
+***************
+*** 8931,8939 ****
+       * - 'virtualedit' is not "all" and not "onemore".
+       */
+      if (curwin->w_cursor.col > 0 && gchar_cursor() == NUL
+- #ifdef FEAT_VISUAL
+  		&& (!VIsual_active || *p_sel == 'o')
+- #endif
+  #ifdef FEAT_VIRTUALEDIT
+  		&& !virtual_active() && (ve_flags & VE_ONEMORE) == 0
+  #endif
+--- 8705,8711 ----
+***************
+*** 8968,8974 ****
+  			       one-character line). */
+  }
+  
+- #ifdef FEAT_VISUAL
+  /*
+   * In exclusive Visual mode, may include the last character.
+   */
+--- 8740,8745 ----
+***************
+*** 8979,8989 ****
+      if (VIsual_active && cap->oap->inclusive && *p_sel == 'e'
+  	    && gchar_cursor() != NUL && lt(VIsual, curwin->w_cursor))
+      {
+! # ifdef FEAT_MBYTE
+  	if (has_mbyte)
+  	    inc_cursor();
+  	else
+! # endif
+  	    ++curwin->w_cursor.col;
+  	cap->oap->inclusive = FALSE;
+      }
+--- 8750,8760 ----
+      if (VIsual_active && cap->oap->inclusive && *p_sel == 'e'
+  	    && gchar_cursor() != NUL && lt(VIsual, curwin->w_cursor))
+      {
+! #ifdef FEAT_MBYTE
+  	if (has_mbyte)
+  	    inc_cursor();
+  	else
+! #endif
+  	    ++curwin->w_cursor.col;
+  	cap->oap->inclusive = FALSE;
+      }
+***************
+*** 9044,9050 ****
+      }
+  }
+  
+- #endif
+  
+  /*
+   * "G", "gg", CTRL-END, CTRL-HOME.
+--- 8815,8820 ----
+***************
+*** 9095,9107 ****
+  	if (cmdwin_type != 0)
+  	    cmdwin_result = Ctrl_C;
+  #endif
+- #ifdef FEAT_VISUAL
+  	if (VIsual_active)
+  	{
+  	    end_visual_mode();		/* stop Visual */
+  	    redraw_curbuf_later(INVERTED);
+  	}
+- #endif
+  	/* CTRL-\ CTRL-G restarts Insert mode when 'insertmode' is set. */
+  	if (cap->nchar == Ctrl_G && p_im)
+  	    restart_edit = 'a';
+--- 8865,8875 ----
+***************
+*** 9132,9140 ****
+  #ifdef FEAT_CMDWIN
+  		&& cmdwin_type == 0
+  #endif
+- #ifdef FEAT_VISUAL
+  		&& !VIsual_active
+- #endif
+  		&& no_reason)
+  	    MSG(_("Type  :quit<Enter>  to exit Vim"));
+  
+--- 8900,8906 ----
+***************
+*** 9152,9158 ****
+  #endif
+      }
+  
+- #ifdef FEAT_VISUAL
+      if (VIsual_active)
+      {
+  	end_visual_mode();	/* stop Visual */
+--- 8918,8923 ----
+***************
+*** 9160,9169 ****
+  	curwin->w_set_curswant = TRUE;
+  	redraw_curbuf_later(INVERTED);
+      }
+!     else
+! #endif
+! 	if (no_reason)
+! 	    vim_beep();
+      clearop(cap->oap);
+  
+      /* A CTRL-C is often used at the start of a menu.  When 'insertmode' is
+--- 8925,8932 ----
+  	curwin->w_set_curswant = TRUE;
+  	redraw_curbuf_later(INVERTED);
+      }
+!     else if (no_reason)
+! 	vim_beep();
+      clearop(cap->oap);
+  
+      /* A CTRL-C is often used at the start of a menu.  When 'insertmode' is
+***************
+*** 9187,9206 ****
+      if (cap->cmdchar == K_INS || cap->cmdchar == K_KINS)
+  	cap->cmdchar = 'i';
+  
+- #ifdef FEAT_VISUAL
+      /* in Visual mode "A" and "I" are an operator */
+      if (VIsual_active && (cap->cmdchar == 'A' || cap->cmdchar == 'I'))
+  	v_visop(cap);
+  
+      /* in Visual mode and after an operator "a" and "i" are for text objects */
+!     else
+! #endif
+! 	if ((cap->cmdchar == 'a' || cap->cmdchar == 'i')
+! 	    && (cap->oap->op_type != OP_NOP
+! #ifdef FEAT_VISUAL
+! 		|| VIsual_active
+! #endif
+! 		))
+      {
+  #ifdef FEAT_TEXTOBJ
+  	nv_object(cap);
+--- 8950,8962 ----
+      if (cap->cmdchar == K_INS || cap->cmdchar == K_KINS)
+  	cap->cmdchar = 'i';
+  
+      /* in Visual mode "A" and "I" are an operator */
+      if (VIsual_active && (cap->cmdchar == 'A' || cap->cmdchar == 'I'))
+  	v_visop(cap);
+  
+      /* in Visual mode and after an operator "a" and "i" are for text objects */
+!     else if ((cap->cmdchar == 'a' || cap->cmdchar == 'i')
+! 	    && (cap->oap->op_type != OP_NOP || VIsual_active))
+      {
+  #ifdef FEAT_TEXTOBJ
+  	nv_object(cap);
+***************
+*** 9467,9478 ****
+  nv_join(cap)
+      cmdarg_T *cap;
+  {
+- #ifdef FEAT_VISUAL
+      if (VIsual_active)	/* join the visual lines */
+  	nv_operator(cap);
+!     else
+! #endif
+! 	if (!checkclearop(cap->oap))
+      {
+  	if (cap->count0 <= 1)
+  	    cap->count0 = 2;	    /* default for join is two lines! */
+--- 9223,9231 ----
+  nv_join(cap)
+      cmdarg_T *cap;
+  {
+      if (VIsual_active)	/* join the visual lines */
+  	nv_operator(cap);
+!     else if (!checkclearop(cap->oap))
+      {
+  	if (cap->count0 <= 1)
+  	    cap->count0 = 2;	    /* default for join is two lines! */
+***************
+*** 9495,9506 ****
+  nv_put(cap)
+      cmdarg_T  *cap;
+  {
+- #ifdef FEAT_VISUAL
+      int		regname = 0;
+      void	*reg1 = NULL, *reg2 = NULL;
+      int		empty = FALSE;
+      int		was_visual = FALSE;
+- #endif
+      int		dir;
+      int		flags = 0;
+  
+--- 9248,9257 ----
+***************
+*** 9526,9532 ****
+  	if (cap->cmdchar == 'g')
+  	    flags |= PUT_CURSEND;
+  
+- #ifdef FEAT_VISUAL
+  	if (VIsual_active)
+  	{
+  	    /* Putting in Visual mode: The put text replaces the selected
+--- 9277,9282 ----
+***************
+*** 9536,9549 ****
+  	     */
+  	    was_visual = TRUE;
+  	    regname = cap->oap->regname;
+! # ifdef FEAT_CLIPBOARD
+  	    adjust_clip_reg(&regname);
+! # endif
+  	   if (regname == 0 || regname == '"'
+  				     || VIM_ISDIGIT(regname) || regname == '-'
+! # ifdef FEAT_CLIPBOARD
+  		    || (clip_unnamed && (regname == '*' || regname == '+'))
+! # endif
+  
+  		    )
+  	    {
+--- 9286,9299 ----
+  	     */
+  	    was_visual = TRUE;
+  	    regname = cap->oap->regname;
+! #ifdef FEAT_CLIPBOARD
+  	    adjust_clip_reg(&regname);
+! #endif
+  	   if (regname == 0 || regname == '"'
+  				     || VIM_ISDIGIT(regname) || regname == '-'
+! #ifdef FEAT_CLIPBOARD
+  		    || (clip_unnamed && (regname == '*' || regname == '+'))
+! #endif
+  
+  		    )
+  	    {
+***************
+*** 9591,9600 ****
+  	    /* May have been reset in do_put(). */
+  	    VIsual_active = TRUE;
+  	}
+- #endif
+  	do_put(cap->oap->regname, dir, cap->count1, flags);
+  
+- #ifdef FEAT_VISUAL
+  	/* If a register was saved, put it back now. */
+  	if (reg2 != NULL)
+  	    put_register(regname, reg2);
+--- 9341,9348 ----
+***************
+*** 9621,9627 ****
+  		coladvance((colnr_T)MAXCOL);
+  	    }
+  	}
+- #endif
+  	auto_format(FALSE, TRUE);
+      }
+  }
+--- 9369,9374 ----
+***************
+*** 9642,9652 ****
+      }
+      else
+  #endif
+- #ifdef FEAT_VISUAL
+      if (VIsual_active)  /* switch start and end of visual */
+  	v_swap_corners(cap->cmdchar);
+      else
+- #endif
+  	n_opencmd(cap);
+  }
+  
+--- 9389,9397 ----
+*** ../vim-7.4.211/src/ops.c	2014-03-19 18:57:27.730175565 +0100
+--- src/ops.c	2014-03-23 15:08:16.095260447 +0100
+***************
+*** 57,65 ****
+      char_u	**y_array;	/* pointer to array of line pointers */
+      linenr_T	y_size;		/* number of lines in y_array */
+      char_u	y_type;		/* MLINE, MCHAR or MBLOCK */
+- #ifdef FEAT_VISUAL
+      colnr_T	y_width;	/* only set if y_type == MBLOCK */
+- #endif
+  } y_regs[NUM_REGISTERS];
+  
+  static struct yankreg	*y_current;	    /* ptr to current yankreg */
+--- 57,63 ----
+***************
+*** 107,123 ****
+  static int	yank_copy_line __ARGS((struct block_def *bd, long y_idx));
+  #ifdef FEAT_CLIPBOARD
+  static void	copy_yank_reg __ARGS((struct yankreg *reg));
+- # if defined(FEAT_VISUAL) || defined(FEAT_EVAL)
+  static void	may_set_selection __ARGS((void));
+- # endif
+  #endif
+  static void	dis_msg __ARGS((char_u *p, int skip_esc));
+  #if defined(FEAT_COMMENTS) || defined(PROTO)
+  static char_u	*skip_comment __ARGS((char_u *line, int process, int include_space, int *is_comment));
+  #endif
+- #ifdef FEAT_VISUAL
+  static void	block_prep __ARGS((oparg_T *oap, struct block_def *, linenr_T, int));
+- #endif
+  #if defined(FEAT_CLIPBOARD) || defined(FEAT_EVAL)
+  static void	str_to_reg __ARGS((struct yankreg *y_ptr, int type, char_u *str, long len, long blocklen));
+  #endif
+--- 105,117 ----
+***************
+*** 187,193 ****
+      return i;
+  }
+  
+- #if defined(FEAT_VISUAL) || defined(PROTO)
+  /*
+   * Return TRUE if operator "op" always works on whole lines.
+   */
+--- 181,186 ----
+***************
+*** 197,203 ****
+  {
+      return opchars[op][2];
+  }
+- #endif
+  
+  /*
+   * Get first operator command character.
+--- 190,195 ----
+***************
+*** 232,249 ****
+      long	    i;
+      int		    first_char;
+      char_u	    *s;
+- #ifdef FEAT_VISUAL
+      int		    block_col = 0;
+- #endif
+  
+      if (u_save((linenr_T)(oap->start.lnum - 1),
+  				       (linenr_T)(oap->end.lnum + 1)) == FAIL)
+  	return;
+  
+- #ifdef FEAT_VISUAL
+      if (oap->block_mode)
+  	block_col = curwin->w_cursor.col;
+- #endif
+  
+      for (i = oap->line_count; --i >= 0; )
+      {
+--- 224,237 ----
+***************
+*** 272,286 ****
+      foldOpenCursor();
+  #endif
+  
+- #ifdef FEAT_VISUAL
+      if (oap->block_mode)
+      {
+  	curwin->w_cursor.lnum = oap->start.lnum;
+  	curwin->w_cursor.col = block_col;
+      }
+!     else
+! #endif
+! 	if (curs_top)	    /* put cursor on first line, for ">>" */
+      {
+  	curwin->w_cursor.lnum = oap->start.lnum;
+  	beginline(BL_SOL | BL_FIX);   /* shift_line() may have set cursor.col */
+--- 260,271 ----
+      foldOpenCursor();
+  #endif
+  
+      if (oap->block_mode)
+      {
+  	curwin->w_cursor.lnum = oap->start.lnum;
+  	curwin->w_cursor.col = block_col;
+      }
+!     else if (curs_top)	    /* put cursor on first line, for ">>" */
+      {
+  	curwin->w_cursor.lnum = oap->start.lnum;
+  	beginline(BL_SOL | BL_FIX);   /* shift_line() may have set cursor.col */
+***************
+*** 733,746 ****
+       * there is no change still need to remove the Visual highlighting. */
+      if (last_changed != 0)
+  	changed_lines(first_changed, 0,
+- #ifdef FEAT_VISUAL
+  		oap->is_VIsual ? start_lnum + oap->line_count :
+- #endif
+  		last_changed + 1, 0L);
+- #ifdef FEAT_VISUAL
+      else if (oap->is_VIsual)
+  	redraw_curbuf_later(INVERTED);
+- #endif
+  
+      if (oap->line_count > p_report)
+      {
+--- 718,727 ----
+***************
+*** 948,954 ****
+  }
+  #endif
+  
+- #if defined(FEAT_VISUAL) || defined(PROTO)
+  /*
+   * Obtain the contents of a "normal" register. The register is made empty.
+   * The returned pointer has allocated memory, use put_register() later.
+--- 929,934 ----
+***************
+*** 1016,1025 ****
+      *y_current = *(struct yankreg *)reg;
+      vim_free(reg);
+  
+! # ifdef FEAT_CLIPBOARD
+      /* Send text written to clipboard register to the clipboard. */
+      may_set_selection();
+! # endif
+  }
+  
+      void
+--- 996,1005 ----
+      *y_current = *(struct yankreg *)reg;
+      vim_free(reg);
+  
+! #ifdef FEAT_CLIPBOARD
+      /* Send text written to clipboard register to the clipboard. */
+      may_set_selection();
+! #endif
+  }
+  
+      void
+***************
+*** 1034,1040 ****
+      vim_free(reg);
+      *y_current = tmp;
+  }
+- #endif
+  
+  #if defined(FEAT_MOUSE) || defined(PROTO)
+  /*
+--- 1014,1019 ----
+***************
+*** 1634,1643 ****
+      int			n;
+      linenr_T		lnum;
+      char_u		*ptr;
+- #ifdef FEAT_VISUAL
+      char_u		*newp, *oldp;
+      struct block_def	bd;
+- #endif
+      linenr_T		old_lcount = curbuf->b_ml.ml_line_count;
+      int			did_yank = FALSE;
+      int			orig_regname = oap->regname;
+--- 1613,1620 ----
+***************
+*** 1670,1679 ****
+       * delete linewise.  Don't do this for the change command or Visual mode.
+       */
+      if (       oap->motion_type == MCHAR
+- #ifdef FEAT_VISUAL
+  	    && !oap->is_VIsual
+  	    && !oap->block_mode
+- #endif
+  	    && oap->line_count > 1
+  	    && oap->motion_force == NUL
+  	    && oap->op_type == OP_DELETE)
+--- 1647,1654 ----
+***************
+*** 1787,1793 ****
+  	}
+      }
+  
+- #ifdef FEAT_VISUAL
+      /*
+       * block mode delete
+       */
+--- 1762,1767 ----
+***************
+*** 1838,1846 ****
+  						       oap->end.lnum + 1, 0L);
+  	oap->line_count = 0;	    /* no lines deleted */
+      }
+!     else
+! #endif
+! 	if (oap->motion_type == MLINE)
+      {
+  	if (oap->op_type == OP_CHANGE)
+  	{
+--- 1812,1818 ----
+  						       oap->end.lnum + 1, 0L);
+  	oap->line_count = 0;	    /* no lines deleted */
+      }
+!     else if (oap->motion_type == MLINE)
+      {
+  	if (oap->op_type == OP_CHANGE)
+  	{
+***************
+*** 1924,1936 ****
+  		return FAIL;
+  
+  	    /* if 'cpoptions' contains '$', display '$' at end of change */
+! 	    if (	   vim_strchr(p_cpo, CPO_DOLLAR) != NULL
+  		    && oap->op_type == OP_CHANGE
+  		    && oap->end.lnum == curwin->w_cursor.lnum
+! #ifdef FEAT_VISUAL
+! 		    && !oap->is_VIsual
+! #endif
+! 		    )
+  		display_dollar(oap->end.col - !oap->inclusive);
+  
+  	    n = oap->end.col - oap->start.col + 1 - !oap->inclusive;
+--- 1896,1905 ----
+  		return FAIL;
+  
+  	    /* if 'cpoptions' contains '$', display '$' at end of change */
+! 	    if (       vim_strchr(p_cpo, CPO_DOLLAR) != NULL
+  		    && oap->op_type == OP_CHANGE
+  		    && oap->end.lnum == curwin->w_cursor.lnum
+! 		    && !oap->is_VIsual)
+  		display_dollar(oap->end.col - !oap->inclusive);
+  
+  	    n = oap->end.col - oap->start.col + 1 - !oap->inclusive;
+***************
+*** 1967,1977 ****
+  	    }
+  	    else
+  	    {
+! 		(void)del_bytes((long)n, !virtual_op, oap->op_type == OP_DELETE
+! #ifdef FEAT_VISUAL
+! 				    && !oap->is_VIsual
+! #endif
+! 							);
+  	    }
+  	}
+  	else				/* delete characters between lines */
+--- 1936,1943 ----
+  	    }
+  	    else
+  	    {
+! 		(void)del_bytes((long)n, !virtual_op,
+! 				oap->op_type == OP_DELETE && !oap->is_VIsual);
+  	    }
+  	}
+  	else				/* delete characters between lines */
+***************
+*** 2008,2018 ****
+  	    {
+  		/* delete from start of line until op_end */
+  		curwin->w_cursor.col = 0;
+! 		(void)del_bytes((long)n, !virtual_op, oap->op_type == OP_DELETE
+! #ifdef FEAT_VISUAL
+! 					&& !oap->is_VIsual
+! #endif
+! 							    );
+  		curwin->w_cursor = curpos;	/* restore curwin->w_cursor */
+  	    }
+  	    if (curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
+--- 1974,1981 ----
+  	    {
+  		/* delete from start of line until op_end */
+  		curwin->w_cursor.col = 0;
+! 		(void)del_bytes((long)n, !virtual_op,
+! 				oap->op_type == OP_DELETE && !oap->is_VIsual);
+  		curwin->w_cursor = curpos;	/* restore curwin->w_cursor */
+  	    }
+  	    if (curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
+***************
+*** 2025,2038 ****
+  #ifdef FEAT_VIRTUALEDIT
+  setmarks:
+  #endif
+- #ifdef FEAT_VISUAL
+      if (oap->block_mode)
+      {
+  	curbuf->b_op_end.lnum = oap->end.lnum;
+  	curbuf->b_op_end.col = oap->start.col;
+      }
+      else
+- #endif
+  	curbuf->b_op_end = oap->start;
+      curbuf->b_op_start = oap->start;
+  
+--- 1988,1999 ----
+***************
+*** 2318,2326 ****
+      oparg_T	*oap;
+  {
+      pos_T		pos;
+- #ifdef FEAT_VISUAL
+      struct block_def	bd;
+- #endif
+      int			did_change = FALSE;
+  
+      if (u_save((linenr_T)(oap->start.lnum - 1),
+--- 2279,2285 ----
+***************
+*** 2328,2334 ****
+  	return;
+  
+      pos = oap->start;
+- #ifdef FEAT_VISUAL
+      if (oap->block_mode)		    /* Visual block mode */
+      {
+  	for (; pos.lnum <= oap->end.lnum; ++pos.lnum)
+--- 2287,2292 ----
+***************
+*** 2340,2346 ****
+  	    one_change = swapchars(oap->op_type, &pos, bd.textlen);
+  	    did_change |= one_change;
+  
+! # ifdef FEAT_NETBEANS_INTG
+  	    if (netbeans_active() && one_change)
+  	    {
+  		char_u *ptr = ml_get_buf(curbuf, pos.lnum, FALSE);
+--- 2298,2304 ----
+  	    one_change = swapchars(oap->op_type, &pos, bd.textlen);
+  	    did_change |= one_change;
+  
+! #ifdef FEAT_NETBEANS_INTG
+  	    if (netbeans_active() && one_change)
+  	    {
+  		char_u *ptr = ml_get_buf(curbuf, pos.lnum, FALSE);
+***************
+*** 2350,2362 ****
+  		netbeans_inserted(curbuf, pos.lnum, bd.textcol,
+  						&ptr[bd.textcol], bd.textlen);
+  	    }
+! # endif
+  	}
+  	if (did_change)
+  	    changed_lines(oap->start.lnum, 0, oap->end.lnum + 1, 0L);
+      }
+      else				    /* not block mode */
+- #endif
+      {
+  	if (oap->motion_type == MLINE)
+  	{
+--- 2308,2319 ----
+  		netbeans_inserted(curbuf, pos.lnum, bd.textcol,
+  						&ptr[bd.textcol], bd.textlen);
+  	    }
+! #endif
+  	}
+  	if (did_change)
+  	    changed_lines(oap->start.lnum, 0, oap->end.lnum + 1, 0L);
+      }
+      else				    /* not block mode */
+      {
+  	if (oap->motion_type == MLINE)
+  	{
+***************
+*** 2412,2422 ****
+  	}
+      }
+  
+- #ifdef FEAT_VISUAL
+      if (!did_change && oap->is_VIsual)
+  	/* No change: need to remove the Visual selection */
+  	redraw_curbuf_later(INVERTED);
+- #endif
+  
+      /*
+       * Set '[ and '] marks.
+--- 2369,2377 ----
+***************
+*** 3018,3027 ****
+      if (       oap->motion_type == MCHAR
+  	    && oap->start.col == 0
+  	    && !oap->inclusive
+- #ifdef FEAT_VISUAL
+  	    && (!oap->is_VIsual || *p_sel == 'o')
+  	    && !oap->block_mode
+- #endif
+  	    && oap->end.col == 0
+  	    && yanklines > 1)
+      {
+--- 2973,2980 ----
+***************
+*** 3032,3040 ****
+  
+      y_current->y_size = yanklines;
+      y_current->y_type = yanktype;   /* set the yank register type */
+- #ifdef FEAT_VISUAL
+      y_current->y_width = 0;
+- #endif
+      y_current->y_array = (char_u **)lalloc_clear((long_u)(sizeof(char_u *) *
+  							    yanklines), TRUE);
+  
+--- 2985,2991 ----
+***************
+*** 3047,3053 ****
+      y_idx = 0;
+      lnum = oap->start.lnum;
+  
+- #ifdef FEAT_VISUAL
+      if (oap->block_mode)
+      {
+  	/* Visual block mode */
+--- 2998,3003 ----
+***************
+*** 3057,3075 ****
+  	if (curwin->w_curswant == MAXCOL && y_current->y_width > 0)
+  	    y_current->y_width--;
+      }
+- #endif
+  
+      for ( ; lnum <= yankendlnum; lnum++, y_idx++)
+      {
+  	switch (y_current->y_type)
+  	{
+- #ifdef FEAT_VISUAL
+  	    case MBLOCK:
+  		block_prep(oap, &bd, lnum, FALSE);
+  		if (yank_copy_line(&bd, y_idx) == FAIL)
+  		    goto fail;
+  		break;
+- #endif
+  
+  	    case MLINE:
+  		if ((y_current->y_array[y_idx] =
+--- 3007,3022 ----
+***************
+*** 3206,3214 ****
+      if (mess)			/* Display message about yank? */
+      {
+  	if (yanktype == MCHAR
+- #ifdef FEAT_VISUAL
+  		&& !oap->block_mode
+- #endif
+  		&& yanklines == 1)
+  	    yanklines = 0;
+  	/* Some versions of Vi use ">=" here, some don't...  */
+--- 3153,3159 ----
+***************
+*** 3218,3234 ****
+  	    update_topline_redraw();
+  	    if (yanklines == 1)
+  	    {
+- #ifdef FEAT_VISUAL
+  		if (oap->block_mode)
+  		    MSG(_("block of 1 line yanked"));
+  		else
+- #endif
+  		    MSG(_("1 line yanked"));
+  	    }
+- #ifdef FEAT_VISUAL
+  	    else if (oap->block_mode)
+  		smsg((char_u *)_("block of %ld lines yanked"), yanklines);
+- #endif
+  	    else
+  		smsg((char_u *)_("%ld lines yanked"), yanklines);
+  	}
+--- 3163,3175 ----
+***************
+*** 3239,3249 ****
+       */
+      curbuf->b_op_start = oap->start;
+      curbuf->b_op_end = oap->end;
+!     if (yanktype == MLINE
+! #ifdef FEAT_VISUAL
+! 		&& !oap->block_mode
+! #endif
+!        )
+      {
+  	curbuf->b_op_start.col = 0;
+  	curbuf->b_op_end.col = MAXCOL;
+--- 3180,3186 ----
+       */
+      curbuf->b_op_start = oap->start;
+      curbuf->b_op_end = oap->end;
+!     if (yanktype == MLINE && !oap->block_mode)
+      {
+  	curbuf->b_op_start.col = 0;
+  	curbuf->b_op_end.col = MAXCOL;
+***************
+*** 3380,3386 ****
+      long	i;			/* index in y_array[] */
+      int		y_type;
+      long	y_size;
+- #ifdef FEAT_VISUAL
+      int		oldlen;
+      long	y_width = 0;
+      colnr_T	vcol;
+--- 3317,3322 ----
+***************
+*** 3388,3394 ****
+      int		incr = 0;
+      long	j;
+      struct block_def bd;
+- #endif
+      char_u	**y_array = NULL;
+      long	nr_lines = 0;
+      pos_T	new_cursor;
+--- 3324,3329 ----
+***************
+*** 3497,3510 ****
+  	get_yank_register(regname, FALSE);
+  
+  	y_type = y_current->y_type;
+- #ifdef FEAT_VISUAL
+  	y_width = y_current->y_width;
+- #endif
+  	y_size = y_current->y_size;
+  	y_array = y_current->y_array;
+      }
+  
+- #ifdef FEAT_VISUAL
+      if (y_type == MLINE)
+      {
+  	if (flags & PUT_LINE_SPLIT)
+--- 3432,3442 ----
+***************
+*** 3535,3541 ****
+  	curbuf->b_op_start = curwin->w_cursor;	/* default for '[ mark */
+  	curbuf->b_op_end = curwin->w_cursor;	/* default for '] mark */
+      }
+- #endif
+  
+      if (flags & PUT_LINE)	/* :put command or "p" in Visual line mode. */
+  	y_type = MLINE;
+--- 3467,3472 ----
+***************
+*** 3547,3553 ****
+  	goto end;
+      }
+  
+- #ifdef FEAT_VISUAL
+      if (y_type == MBLOCK)
+      {
+  	lnum = curwin->w_cursor.lnum + y_size + 1;
+--- 3478,3483 ----
+***************
+*** 3556,3564 ****
+  	if (u_save(curwin->w_cursor.lnum - 1, lnum) == FAIL)
+  	    goto end;
+      }
+!     else
+! #endif
+! 	if (y_type == MLINE)
+      {
+  	lnum = curwin->w_cursor.lnum;
+  #ifdef FEAT_FOLDING
+--- 3486,3492 ----
+  	if (u_save(curwin->w_cursor.lnum - 1, lnum) == FAIL)
+  	    goto end;
+      }
+!     else if (y_type == MLINE)
+      {
+  	lnum = curwin->w_cursor.lnum;
+  #ifdef FEAT_FOLDING
+***************
+*** 3610,3616 ****
+      lnum = curwin->w_cursor.lnum;
+      col = curwin->w_cursor.col;
+  
+- #ifdef FEAT_VISUAL
+      /*
+       * Block mode
+       */
+--- 3538,3543 ----
+***************
+*** 3792,3798 ****
+  	    curwin->w_cursor.lnum = lnum;
+      }
+      else
+- #endif
+      {
+  	/*
+  	 * Character or Line mode
+--- 3719,3724 ----
+***************
+*** 3866,3882 ****
+  			curwin->w_cursor.col += (colnr_T)(totlen - 1);
+  		    }
+  		}
+- #ifdef FEAT_VISUAL
+  		if (VIsual_active)
+  		    lnum++;
+! #endif
+! 	    } while (
+! #ifdef FEAT_VISUAL
+! 		    VIsual_active && lnum <= curbuf->b_visual.vi_end.lnum
+! #else
+! 		    FALSE /* stop after 1 paste */
+! #endif
+! 		    );
+  
+  	    curbuf->b_op_end = curwin->w_cursor;
+  	    /* For "CTRL-O p" in Insert mode, put cursor after last char */
+--- 3792,3800 ----
+  			curwin->w_cursor.col += (colnr_T)(totlen - 1);
+  		    }
+  		}
+  		if (VIsual_active)
+  		    lnum++;
+! 	    } while (VIsual_active && lnum <= curbuf->b_visual.vi_end.lnum);
+  
+  	    curbuf->b_op_end = curwin->w_cursor;
+  	    /* For "CTRL-O p" in Insert mode, put cursor after last char */
+***************
+*** 4038,4046 ****
+      if (regname == '=')
+  	vim_free(y_array);
+  
+- #ifdef FEAT_VISUAL
+      VIsual_active = FALSE;
+- #endif
+  
+      /* If the cursor is past the end of the line put it at the end. */
+      adjust_cursor_eol();
+--- 3956,3962 ----
+***************
+*** 4729,4739 ****
+  	return;
+      curwin->w_cursor = oap->start;
+  
+- #ifdef FEAT_VISUAL
+      if (oap->is_VIsual)
+  	/* When there is no change: need to remove the Visual selection */
+  	redraw_curbuf_later(INVERTED);
+- #endif
+  
+      /* Set '[ mark at the start of the formatted area */
+      curbuf->b_op_start = oap->start;
+--- 4645,4653 ----
+***************
+*** 4765,4771 ****
+  	saved_cursor.lnum = 0;
+      }
+  
+- #ifdef FEAT_VISUAL
+      if (oap->is_VIsual)
+      {
+  	win_T	*wp;
+--- 4679,4684 ----
+***************
+*** 4783,4789 ****
+  	    }
+  	}
+      }
+- #endif
+  }
+  
+  #if defined(FEAT_EVAL) || defined(PROTO)
+--- 4696,4701 ----
+***************
+*** 4794,4804 ****
+  op_formatexpr(oap)
+      oparg_T	*oap;
+  {
+- # ifdef FEAT_VISUAL
+      if (oap->is_VIsual)
+  	/* When there is no change: need to remove the Visual selection */
+  	redraw_curbuf_later(INVERTED);
+- # endif
+  
+      if (fex_format(oap->start.lnum, oap->line_count, NUL) != 0)
+  	/* As documented: when 'formatexpr' returns non-zero fall back to
+--- 4706,4714 ----
+***************
+*** 5238,5244 ****
+      return FALSE;
+  }
+  
+- #ifdef FEAT_VISUAL
+  /*
+   * prepare a few things for block mode yank/delete/tilde
+   *
+--- 5148,5153 ----
+***************
+*** 5397,5403 ****
+      bdp->textcol = (colnr_T) (pstart - line);
+      bdp->textstart = pstart;
+  }
+- #endif /* FEAT_VISUAL */
+  
+  #ifdef FEAT_RIGHTLEFT
+  static void reverse_line __ARGS((char_u *s));
+--- 5306,5311 ----
+***************
+*** 5748,5766 ****
+  	str = skipwhite(skiptowhite(str));
+  	if (STRNCMP(str, "CHAR", 4) == 0)
+  	    y_current->y_type = MCHAR;
+- #ifdef FEAT_VISUAL
+  	else if (STRNCMP(str, "BLOCK", 5) == 0)
+  	    y_current->y_type = MBLOCK;
+- #endif
+  	else
+  	    y_current->y_type = MLINE;
+  	/* get the block width; if it's missing we get a zero, which is OK */
+  	str = skipwhite(skiptowhite(str));
+- #ifdef FEAT_VISUAL
+  	y_current->y_width = getdigits(&str);
+- #else
+- 	(void)getdigits(&str);
+- #endif
+      }
+  
+      while (!(eof = viminfo_readline(virp))
+--- 5656,5668 ----
+***************
+*** 5868,5878 ****
+  	    case MCHAR:
+  		type = (char_u *)"CHAR";
+  		break;
+- #ifdef FEAT_VISUAL
+  	    case MBLOCK:
+  		type = (char_u *)"BLOCK";
+  		break;
+- #endif
+  	    default:
+  		sprintf((char *)IObuff, _("E574: Unknown register type %d"),
+  							    y_regs[i].y_type);
+--- 5770,5778 ----
+***************
+*** 5886,5898 ****
+  	fprintf(fp, "\"%c", c);
+  	if (c == execreg_lastc)
+  	    fprintf(fp, "@");
+! 	fprintf(fp, "\t%s\t%d\n", type,
+! #ifdef FEAT_VISUAL
+! 		    (int)y_regs[i].y_width
+! #else
+! 		    0
+! #endif
+! 		    );
+  
+  	/* If max_num_lines < 0, then we save ALL the lines in the register */
+  	if (max_num_lines > 0 && num_lines > max_num_lines)
+--- 5786,5792 ----
+  	fprintf(fp, "\"%c", c);
+  	if (c == execreg_lastc)
+  	    fprintf(fp, "@");
+! 	fprintf(fp, "\t%s\t%d\n", type, (int)y_regs[i].y_width);
+  
+  	/* If max_num_lines < 0, then we save ALL the lines in the register */
+  	if (max_num_lines > 0 && num_lines > max_num_lines)
+***************
+*** 6039,6048 ****
+  {
+      struct yankreg *old_y_previous, *old_y_current;
+      pos_T	old_cursor;
+- #ifdef FEAT_VISUAL
+      pos_T	old_visual;
+      int		old_visual_mode;
+- #endif
+      colnr_T	old_curswant;
+      int		old_set_curswant;
+      pos_T	old_op_start, old_op_end;
+--- 5933,5940 ----
+***************
+*** 6063,6072 ****
+  	old_set_curswant = curwin->w_set_curswant;
+  	old_op_start = curbuf->b_op_start;
+  	old_op_end = curbuf->b_op_end;
+- #ifdef FEAT_VISUAL
+  	old_visual = VIsual;
+  	old_visual_mode = VIsual_mode;
+- #endif
+  	clear_oparg(&oa);
+  	oa.regname = (cbd == &clip_plus ? '+' : '*');
+  	oa.op_type = OP_YANK;
+--- 5955,5962 ----
+***************
+*** 6084,6093 ****
+  	curwin->w_set_curswant = old_set_curswant;
+  	curbuf->b_op_start = old_op_start;
+  	curbuf->b_op_end = old_op_end;
+- #ifdef FEAT_VISUAL
+  	VIsual = old_visual;
+  	VIsual_mode = old_visual_mode;
+- #endif
+      }
+      else
+      {
+--- 5974,5981 ----
+***************
+*** 6190,6196 ****
+  }
+  
+  
+- # if defined(FEAT_VISUAL) || defined(FEAT_EVAL)
+  /*
+   * If we have written to a clipboard register, send the text to the clipboard.
+   */
+--- 6078,6083 ----
+***************
+*** 6208,6214 ****
+  	clip_gen_set_selection(&clip_plus);
+      }
+  }
+- # endif
+  
+  #endif /* FEAT_CLIPBOARD || PROTO */
+  
+--- 6095,6100 ----
+***************
+*** 6273,6282 ****
+  
+      if (y_current->y_array != NULL)
+      {
+- #ifdef FEAT_VISUAL
+  	if (reglen != NULL && y_current->y_type == MBLOCK)
+  	    *reglen = y_current->y_width;
+- #endif
+  	return y_current->y_type;
+      }
+      return MAUTO;
+--- 6159,6166 ----
+***************
+*** 6454,6464 ****
+      get_yank_register(name, TRUE);
+      if (!y_append && !must_append)
+  	free_yank_all();
+- #ifndef FEAT_VISUAL
+-     /* Just in case - make sure we don't use MBLOCK */
+-     if (yank_type == MBLOCK)
+- 	yank_type = MAUTO;
+- #endif
+      str_to_reg(y_current, yank_type, str, len, block_len);
+  
+  # ifdef FEAT_CLIPBOARD
+--- 6338,6343 ----
+***************
+*** 6496,6504 ****
+      int		append = FALSE;		/* append to last line in register */
+      char_u	*s;
+      char_u	**pp;
+- #ifdef FEAT_VISUAL
+      long	maxlen;
+- #endif
+  
+      if (y_ptr->y_array == NULL)		/* NULL means empty register */
+  	y_ptr->y_size = 0;
+--- 6375,6381 ----
+***************
+*** 6539,6547 ****
+  	pp[lnum] = y_ptr->y_array[lnum];
+      vim_free(y_ptr->y_array);
+      y_ptr->y_array = pp;
+- #ifdef FEAT_VISUAL
+      maxlen = 0;
+- #endif
+  
+      /*
+       * Find the end of each line and save it into the array.
+--- 6416,6422 ----
+***************
+*** 6552,6561 ****
+  	    if (str[i] == '\n')
+  		break;
+  	i -= start;			/* i is now length of line */
+- #ifdef FEAT_VISUAL
+  	if (i > maxlen)
+  	    maxlen = i;
+- #endif
+  	if (append)
+  	{
+  	    --lnum;
+--- 6427,6434 ----
+***************
+*** 6585,6596 ****
+      }
+      y_ptr->y_type = type;
+      y_ptr->y_size = lnum;
+- # ifdef FEAT_VISUAL
+      if (type == MBLOCK)
+  	y_ptr->y_width = (blocklen < 0 ? maxlen - 1 : blocklen);
+      else
+  	y_ptr->y_width = 0;
+- # endif
+  }
+  #endif /* FEAT_CLIPBOARD || FEAT_EVAL || PROTO */
+  
+--- 6458,6467 ----
+***************
+*** 6684,6695 ****
+      long	word_count_cursor = 0;
+      int		eol_size;
+      long	last_check = 100000L;
+- #ifdef FEAT_VISUAL
+      long	line_count_selected = 0;
+      pos_T	min_pos, max_pos;
+      oparg_T	oparg;
+      struct block_def	bd;
+- #endif
+  
+      /*
+       * Compute the length of the file in characters.
+--- 6555,6564 ----
+***************
+*** 6705,6711 ****
+  	else
+  	    eol_size = 1;
+  
+- #ifdef FEAT_VISUAL
+  	if (VIsual_active)
+  	{
+  	    if (lt(VIsual, curwin->w_cursor))
+--- 6574,6579 ----
+***************
+*** 6749,6755 ****
+  	    }
+  	    line_count_selected = max_pos.lnum - min_pos.lnum + 1;
+  	}
+- #endif
+  
+  	for (lnum = 1; lnum <= curbuf->b_ml.ml_line_count; ++lnum)
+  	{
+--- 6617,6622 ----
+***************
+*** 6762,6768 ****
+  		last_check = byte_count + 100000L;
+  	    }
+  
+- #ifdef FEAT_VISUAL
+  	    /* Do extra processing for VIsual mode. */
+  	    if (VIsual_active
+  		    && lnum >= min_pos.lnum && lnum <= max_pos.lnum)
+--- 6629,6634 ----
+***************
+*** 6773,6785 ****
+  		switch (VIsual_mode)
+  		{
+  		    case Ctrl_V:
+! # ifdef FEAT_VIRTUALEDIT
+  			virtual_op = virtual_active();
+! # endif
+  			block_prep(&oparg, &bd, lnum, 0);
+! # ifdef FEAT_VIRTUALEDIT
+  			virtual_op = MAYBE;
+! # endif
+  			s = bd.textstart;
+  			len = (long)bd.textlen;
+  			break;
+--- 6639,6651 ----
+  		switch (VIsual_mode)
+  		{
+  		    case Ctrl_V:
+! #ifdef FEAT_VIRTUALEDIT
+  			virtual_op = virtual_active();
+! #endif
+  			block_prep(&oparg, &bd, lnum, 0);
+! #ifdef FEAT_VIRTUALEDIT
+  			virtual_op = MAYBE;
+! #endif
+  			s = bd.textstart;
+  			len = (long)bd.textlen;
+  			break;
+***************
+*** 6811,6817 ****
+  		}
+  	    }
+  	    else
+- #endif
+  	    {
+  		/* In non-visual mode, check for the line the cursor is on */
+  		if (lnum == curwin->w_cursor.lnum)
+--- 6677,6682 ----
+***************
+*** 6833,6839 ****
+  	if (!curbuf->b_p_eol && curbuf->b_p_bin)
+  	    byte_count -= eol_size;
+  
+- #ifdef FEAT_VISUAL
+  	if (VIsual_active)
+  	{
+  	    if (VIsual_mode == Ctrl_V && curwin->w_curswant < MAXCOL)
+--- 6698,6703 ----
+***************
+*** 6864,6870 ****
+  			byte_count_cursor, byte_count);
+  	}
+  	else
+- #endif
+  	{
+  	    p = ml_get_curline();
+  	    validate_virtcol();
+--- 6728,6733 ----
+*** ../vim-7.4.211/src/option.c	2014-03-12 18:55:52.100906804 +0100
+--- src/option.c	2014-03-23 13:28:12.359168452 +0100
+***************
+*** 1629,1639 ****
+  #endif
+  			    SCRIPTID_INIT},
+      {"keymodel",    "km",   P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
+- #ifdef FEAT_VISUAL
+  			    (char_u *)&p_km, PV_NONE,
+- #else
+- 			    (char_u *)NULL, PV_NONE,
+- #endif
+  			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+      {"keywordprg",  "kp",   P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+  			    (char_u *)&p_kp, PV_KP,
+--- 1629,1635 ----
+***************
+*** 2190,2208 ****
+  			    (char_u *)&p_secure, PV_NONE,
+  			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+      {"selection",   "sel",  P_STRING|P_VI_DEF,
+- #ifdef FEAT_VISUAL
+  			    (char_u *)&p_sel, PV_NONE,
+- #else
+- 			    (char_u *)NULL, PV_NONE,
+- #endif
+  			    {(char_u *)"inclusive", (char_u *)0L}
+  			    SCRIPTID_INIT},
+      {"selectmode",  "slm",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
+- #ifdef FEAT_VISUAL
+  			    (char_u *)&p_slm, PV_NONE,
+- #else
+- 			    (char_u *)NULL, PV_NONE,
+- #endif
+  			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+      {"sessionoptions", "ssop", P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
+  #ifdef FEAT_SESSION
+--- 2186,2196 ----
+***************
+*** 2979,2991 ****
+  static char *(p_wak_values[]) = {"yes", "menu", "no", NULL};
+  #endif
+  static char *(p_mousem_values[]) = {"extend", "popup", "popup_setpos", "mac", NULL};
+- #ifdef FEAT_VISUAL
+  static char *(p_sel_values[]) = {"inclusive", "exclusive", "old", NULL};
+  static char *(p_slm_values[]) = {"mouse", "key", "cmd", NULL};
+- #endif
+- #ifdef FEAT_VISUAL
+  static char *(p_km_values[]) = {"startsel", "stopsel", NULL};
+- #endif
+  #ifdef FEAT_BROWSE
+  static char *(p_bsdir_values[]) = {"current", "last", "buffer", NULL};
+  #endif
+--- 2967,2975 ----
+***************
+*** 6578,6584 ****
+      }
+  #endif
+  
+- #ifdef FEAT_VISUAL
+      /* 'selection' */
+      else if (varp == &p_sel)
+      {
+--- 6562,6567 ----
+***************
+*** 6593,6599 ****
+  	if (check_opt_strings(p_slm, p_slm_values, TRUE) != OK)
+  	    errmsg = e_invarg;
+      }
+- #endif
+  
+  #ifdef FEAT_BROWSE
+      /* 'browsedir' */
+--- 6576,6581 ----
+***************
+*** 6605,6611 ****
+      }
+  #endif
+  
+- #ifdef FEAT_VISUAL
+      /* 'keymodel' */
+      else if (varp == &p_km)
+      {
+--- 6587,6592 ----
+***************
+*** 6617,6623 ****
+  	    km_startsel = (vim_strchr(p_km, 'a') != NULL);
+  	}
+      }
+- #endif
+  
+      /* 'mousemodel' */
+      else if (varp == &p_mousem)
+--- 6598,6603 ----
+*** ../vim-7.4.211/src/os_msdos.c	2013-05-06 04:06:04.000000000 +0200
+--- src/os_msdos.c	2014-03-23 13:28:24.855168644 +0100
+***************
+*** 2270,2278 ****
+  		default:
+  		case 'L':	type = MLINE;	break;
+  		case 'C':	type = MCHAR;	break;
+- #ifdef FEAT_VISUAL
+  		case 'B':	type = MBLOCK;	break;
+- #endif
+  	    }
+  	}
+  
+--- 2270,2276 ----
+***************
+*** 2799,2807 ****
+  	    default:
+  	    case MLINE:	    clip_sel_type = "L";	break;
+  	    case MCHAR:	    clip_sel_type = "C";	break;
+- #ifdef FEAT_VISUAL
+  	    case MBLOCK:    clip_sel_type = "B";	break;
+- #endif
+  	}
+  
+  	movedata(
+--- 2797,2803 ----
+*** ../vim-7.4.211/src/os_qnx.c	2011-09-21 19:48:08.000000000 +0200
+--- src/os_qnx.c	2014-03-23 13:28:38.815168858 +0100
+***************
+*** 78,86 ****
+  		default: /* fallthrough to line type */
+  		case 'L': type = MLINE; break;
+  		case 'C': type = MCHAR; break;
+- #ifdef FEAT_VISUAL
+  		case 'B': type = MBLOCK; break;
+- #endif
+  	    }
+  	    is_type_set = TRUE;
+  	}
+--- 78,84 ----
+***************
+*** 143,151 ****
+  		default: /* fallthrough to MLINE */
+  		case MLINE:	*vim_clip = 'L'; break;
+  		case MCHAR:	*vim_clip = 'C'; break;
+- #ifdef FEAT_VISUAL
+  		case MBLOCK:	*vim_clip = 'B'; break;
+- #endif
+  	    }
+  
+  	    vim_strncpy(text_clip, str, len);
+--- 141,147 ----
+*** ../vim-7.4.211/src/quickfix.c	2014-03-12 19:41:37.096948866 +0100
+--- src/quickfix.c	2014-03-23 13:28:50.907169043 +0100
+***************
+*** 2347,2355 ****
+      else
+  	height = QF_WINHEIGHT;
+  
+- #ifdef FEAT_VISUAL
+      reset_VIsual_and_resel();			/* stop Visual mode */
+- #endif
+  #ifdef FEAT_GUI
+      need_mouse_correct = TRUE;
+  #endif
+--- 2347,2353 ----
+*** ../vim-7.4.211/src/regexp.c	2013-11-21 17:12:55.000000000 +0100
+--- src/regexp.c	2014-03-23 13:29:14.495169404 +0100
+***************
+*** 4179,4187 ****
+  			    - (*mb_head_off)(regline, reginput - 1), reg_buf);
+      return -1;
+  }
+- 
+  #endif
+! #ifdef FEAT_VISUAL
+  static int reg_match_visual __ARGS((void));
+  
+  /*
+--- 4179,4186 ----
+  			    - (*mb_head_off)(regline, reginput - 1), reg_buf);
+      return -1;
+  }
+  #endif
+! 
+  static int reg_match_visual __ARGS((void));
+  
+  /*
+***************
+*** 4258,4264 ****
+      }
+      return TRUE;
+  }
+- #endif
+  
+  #define ADVANCE_REGINPUT() mb_ptr_adv(reginput)
+  
+--- 4257,4262 ----
+***************
+*** 4440,4448 ****
+  	    break;
+  
+  	  case RE_VISUAL:
+- #ifdef FEAT_VISUAL
+  	    if (!reg_match_visual())
+- #endif
+  		status = RA_NOMATCH;
+  	    break;
+  
+--- 4438,4444 ----
+*** ../vim-7.4.211/src/regexp_nfa.c	2013-11-28 14:20:11.000000000 +0100
+--- src/regexp_nfa.c	2014-03-23 13:29:31.367169663 +0100
+***************
+*** 6403,6416 ****
+  		break;
+  
+  	    case NFA_VISUAL:
+- #ifdef FEAT_VISUAL
+  		result = reg_match_visual();
+  		if (result)
+  		{
+  		    add_here = TRUE;
+  		    add_state = t->state->out;
+  		}
+- #endif
+  		break;
+  
+  	    case NFA_MOPEN1:
+--- 6403,6414 ----
+*** ../vim-7.4.211/src/screen.c	2013-12-11 15:51:54.000000000 +0100
+--- src/screen.c	2014-03-23 13:32:10.787172106 +0100
+***************
+*** 446,453 ****
+  #endif
+  }
+  
+- #if defined(FEAT_RUBY) || defined(FEAT_PERL) || defined(FEAT_VISUAL) || \
+-     (defined(FEAT_CLIPBOARD) && defined(FEAT_X11)) || defined(PROTO)
+  /*
+   * update all windows that are editing the current buffer
+   */
+--- 446,451 ----
+***************
+*** 458,464 ****
+      redraw_curbuf_later(type);
+      update_screen(type);
+  }
+- #endif
+  
+  /*
+   * update_screen()
+--- 456,461 ----
+***************
+*** 596,609 ****
+  		    && curwin->w_botfill == curwin->w_old_botfill
+  #endif
+  		    && curwin->w_topline == curwin->w_lines[0].wl_lnum)
+- #ifdef FEAT_VISUAL
+  		|| (type == INVERTED
+  		    && VIsual_active
+  		    && curwin->w_old_cursor_lnum == curwin->w_cursor.lnum
+  		    && curwin->w_old_visual_mode == VIsual_mode
+  		    && (curwin->w_valid & VALID_VIRTCOL)
+  		    && curwin->w_old_curswant == curwin->w_curswant)
+- #endif
+  		))
+  	curwin->w_redr_type = type;
+  
+--- 593,604 ----
+***************
+*** 1030,1039 ****
+  				   updating.  0 when no mid area updating. */
+      int		bot_start = 999;/* first row of the bot area that needs
+  				   updating.  999 when no bot area updating */
+- #ifdef FEAT_VISUAL
+      int		scrolled_down = FALSE;	/* TRUE when scrolled down when
+  					   w_topline got smaller a bit */
+- #endif
+  #ifdef FEAT_SEARCH_EXTRA
+      matchitem_T *cur;		/* points to the match list */
+      int		top_to_mod = FALSE;    /* redraw above mod_top */
+--- 1025,1032 ----
+***************
+*** 1354,1362 ****
+  			    /* Need to update rows that are new, stop at the
+  			     * first one that scrolled down. */
+  			    top_end = i;
+- #ifdef FEAT_VISUAL
+  			    scrolled_down = TRUE;
+- #endif
+  
+  			    /* Move the entries that were scrolled, disable
+  			     * the entries for the lines to be redrawn. */
+--- 1347,1353 ----
+***************
+*** 1513,1519 ****
+  	type = NOT_VALID;
+      }
+  
+- #ifdef FEAT_VISUAL
+      /* check if we are updating or removing the inverted part */
+      if ((VIsual_active && buf == curwin->w_buffer)
+  	    || (wp->w_old_cursor_lnum != 0 && type != NOT_VALID))
+--- 1504,1509 ----
+***************
+*** 1708,1714 ****
+  	wp->w_old_visual_lnum = 0;
+  	wp->w_old_visual_col = 0;
+      }
+- #endif /* FEAT_VISUAL */
+  
+  #if defined(FEAT_SYN_HL) || defined(FEAT_SEARCH_EXTRA)
+      /* reset got_int, otherwise regexp won't work */
+--- 1698,1703 ----
+***************
+*** 2670,2676 ****
+       * 6. set highlighting for the Visual area an other text.
+       * If all folded lines are in the Visual area, highlight the line.
+       */
+- #ifdef FEAT_VISUAL
+      if (VIsual_active && wp->w_buffer == curwin->w_buffer)
+      {
+  	if (ltoreq(curwin->w_cursor, VIsual))
+--- 2659,2664 ----
+***************
+*** 2718,2724 ****
+  	    }
+  	}
+      }
+- #endif
+  
+  #ifdef FEAT_SYN_HL
+      /* Show 'cursorcolumn' in the fold line. */
+--- 2706,2711 ----
+***************
+*** 2876,2885 ****
+      int		fromcol, tocol;		/* start/end of inverting */
+      int		fromcol_prev = -2;	/* start of inverting after cursor */
+      int		noinvcur = FALSE;	/* don't invert the cursor */
+- #ifdef FEAT_VISUAL
+      pos_T	*top, *bot;
+      int		lnum_in_visual_area = FALSE;
+- #endif
+      pos_T	pos;
+      long	v;
+  
+--- 2863,2870 ----
+***************
+*** 3090,3096 ****
+       */
+      fromcol = -10;
+      tocol = MAXCOL;
+- #ifdef FEAT_VISUAL
+      if (VIsual_active && wp->w_buffer == curwin->w_buffer)
+      {
+  					/* Visual is after curwin->w_cursor */
+--- 3075,3080 ----
+***************
+*** 3183,3191 ****
+      /*
+       * handle 'incsearch' and ":s///c" highlighting
+       */
+!     else
+! #endif /* FEAT_VISUAL */
+! 	if (highlight_match
+  	    && wp == curwin
+  	    && lnum >= curwin->w_cursor.lnum
+  	    && lnum <= curwin->w_cursor.lnum + search_match_lines)
+--- 3167,3173 ----
+      /*
+       * handle 'incsearch' and ":s///c" highlighting
+       */
+!     else if (highlight_match
+  	    && wp == curwin
+  	    && lnum >= curwin->w_cursor.lnum
+  	    && lnum <= curwin->w_cursor.lnum + search_match_lines)
+***************
+*** 3324,3330 ****
+  	    mb_ptr_adv(ptr);
+  	}
+  
+- #if defined(FEAT_SYN_HL) || defined(FEAT_VIRTUALEDIT) || defined(FEAT_VISUAL)
+  	/* When:
+  	 * - 'cuc' is set, or
+  	 * - 'colorcolumn' is set, or
+--- 3306,3311 ----
+***************
+*** 3333,3359 ****
+  	 * the end of the line may be before the start of the displayed part.
+  	 */
+  	if (vcol < v && (
+! # ifdef FEAT_SYN_HL
+! 	     wp->w_p_cuc
+! 	     || draw_color_col
+! #  if defined(FEAT_VIRTUALEDIT) || defined(FEAT_VISUAL)
+! 	     ||
+! #  endif
+! # endif
+! # ifdef FEAT_VIRTUALEDIT
+! 	     virtual_active()
+! #  ifdef FEAT_VISUAL
+! 	     ||
+! #  endif
+! # endif
+! # ifdef FEAT_VISUAL
+! 	     (VIsual_active && wp->w_buffer == curwin->w_buffer)
+! # endif
+! 	     ))
+  	{
+  	    vcol = v;
+  	}
+- #endif
+  
+  	/* Handle a character that's not completely on the screen: Put ptr at
+  	 * that character but skip the first few screen characters. */
+--- 3314,3329 ----
+  	 * the end of the line may be before the start of the displayed part.
+  	 */
+  	if (vcol < v && (
+! #ifdef FEAT_SYN_HL
+! 	     wp->w_p_cuc || draw_color_col ||
+! #endif
+! #ifdef FEAT_VIRTUALEDIT
+! 	     virtual_active() ||
+! #endif
+! 	     (VIsual_active && wp->w_buffer == curwin->w_buffer)))
+  	{
+  	    vcol = v;
+  	}
+  
+  	/* Handle a character that's not completely on the screen: Put ptr at
+  	 * that character but skip the first few screen characters. */
+***************
+*** 4500,4508 ****
+  			&& ((wp->w_p_list && lcs_eol > 0)
+  			    || ((fromcol >= 0 || fromcol_prev >= 0)
+  				&& tocol > vcol
+- #ifdef FEAT_VISUAL
+  				&& VIsual_mode != Ctrl_V
+- #endif
+  				&& (
+  # ifdef FEAT_RIGHTLEFT
+  				    wp->w_p_rl ? (col >= 0) :
+--- 4470,4476 ----
+***************
+*** 4854,4864 ****
+  #endif
+  	    if (lcs_eol == lcs_eol_one
+  		    && ((area_attr != 0 && vcol == fromcol
+- #ifdef FEAT_VISUAL
+  			    && (VIsual_mode != Ctrl_V
+  				|| lnum == VIsual.lnum
+  				|| lnum == curwin->w_cursor.lnum)
+- #endif
+  			    && c == NUL)
+  #ifdef FEAT_SEARCH_EXTRA
+  			/* highlight 'hlsearch' match at end of line */
+--- 4822,4830 ----
+***************
+*** 9659,9668 ****
+      do_mode = ((p_smd && msg_silent == 0)
+  	    && ((State & INSERT)
+  		|| restart_edit
+! #ifdef FEAT_VISUAL
+! 		|| VIsual_active
+! #endif
+! 		));
+      if (do_mode || Recording)
+      {
+  	/*
+--- 9625,9631 ----
+      do_mode = ((p_smd && msg_silent == 0)
+  	    && ((State & INSERT)
+  		|| restart_edit
+! 		|| VIsual_active));
+      if (do_mode || Recording)
+      {
+  	/*
+***************
+*** 9790,9796 ****
+  		if ((State & INSERT) && p_paste)
+  		    MSG_PUTS_ATTR(_(" (paste)"), attr);
+  
+- #ifdef FEAT_VISUAL
+  		if (VIsual_active)
+  		{
+  		    char *p;
+--- 9753,9758 ----
+***************
+*** 9810,9816 ****
+  		    }
+  		    MSG_PUTS_ATTR(_(p), attr);
+  		}
+- #endif
+  		MSG_PUTS_ATTR(" --", attr);
+  	    }
+  
+--- 9772,9777 ----
+***************
+*** 9839,9849 ****
+  	msg_clr_cmdline();
+  
+  #ifdef FEAT_CMDL_INFO
+- # ifdef FEAT_VISUAL
+      /* In Visual mode the size of the selected area must be redrawn. */
+      if (VIsual_active)
+  	clear_showcmd();
+- # endif
+  
+      /* If the last window has no status line, the ruler is after the mode
+       * message and must be redrawn */
+--- 9800,9808 ----
+*** ../vim-7.4.211/src/search.c	2014-01-14 21:31:30.000000000 +0100
+--- src/search.c	2014-03-23 13:34:46.351174489 +0100
+***************
+*** 506,512 ****
+  #endif
+  
+  /*
+!  * lowest level search function.
+   * Search for 'count'th occurrence of pattern 'pat' in direction 'dir'.
+   * Start at position 'pos' and return the found position in 'pos'.
+   *
+--- 506,512 ----
+  #endif
+  
+  /*
+!  * Lowest level search function.
+   * Search for 'count'th occurrence of pattern 'pat' in direction 'dir'.
+   * Start at position 'pos' and return the found position in 'pos'.
+   *
+***************
+*** 3198,3204 ****
+      cls_bigword = bigword;
+      clearpos(&start_pos);
+  
+- #ifdef FEAT_VISUAL
+      /* Correct cursor when 'selection' is exclusive */
+      if (VIsual_active && *p_sel == 'e' && lt(VIsual, curwin->w_cursor))
+  	dec_cursor();
+--- 3198,3203 ----
+***************
+*** 3208,3214 ****
+       * character, select the word and/or white space under the cursor.
+       */
+      if (!VIsual_active || equalpos(curwin->w_cursor, VIsual))
+- #endif
+      {
+  	/*
+  	 * Go to start of current word or white space.
+--- 3207,3212 ----
+***************
+*** 3245,3251 ****
+  		include_white = TRUE;
+  	}
+  
+- #ifdef FEAT_VISUAL
+  	if (VIsual_active)
+  	{
+  	    /* should do something when inclusive == FALSE ! */
+--- 3243,3248 ----
+***************
+*** 3253,3259 ****
+  	    redraw_curbuf_later(INVERTED);	/* update the inversion */
+  	}
+  	else
+- #endif
+  	{
+  	    oap->start = start_pos;
+  	    oap->motion_type = MCHAR;
+--- 3250,3255 ----
+***************
+*** 3267,3273 ****
+      while (count > 0)
+      {
+  	inclusive = TRUE;
+- #ifdef FEAT_VISUAL
+  	if (VIsual_active && lt(curwin->w_cursor, VIsual))
+  	{
+  	    /*
+--- 3263,3268 ----
+***************
+*** 3288,3294 ****
+  	    }
+  	}
+  	else
+- #endif
+  	{
+  	    /*
+  	     * Move cursor forward one word and/or white area.
+--- 3283,3288 ----
+***************
+*** 3334,3351 ****
+  	    back_in_line();
+  	    if (cls() == 0 && curwin->w_cursor.col > 0)
+  	    {
+- #ifdef FEAT_VISUAL
+  		if (VIsual_active)
+  		    VIsual = curwin->w_cursor;
+  		else
+- #endif
+  		    oap->start = curwin->w_cursor;
+  	    }
+  	}
+  	curwin->w_cursor = pos;	/* put cursor back at end */
+      }
+  
+- #ifdef FEAT_VISUAL
+      if (VIsual_active)
+      {
+  	if (*p_sel == 'e' && inclusive && ltoreq(VIsual, curwin->w_cursor))
+--- 3328,3342 ----
+***************
+*** 3357,3363 ****
+  	}
+      }
+      else
+- #endif
+  	oap->inclusive = inclusive;
+  
+      return OK;
+--- 3348,3353 ----
+***************
+*** 3384,3390 ****
+      pos = start_pos;
+      findsent(FORWARD, 1L);	/* Find start of next sentence. */
+  
+- #ifdef FEAT_VISUAL
+      /*
+       * When the Visual area is bigger than one character: Extend it.
+       */
+--- 3374,3379 ----
+***************
+*** 3471,3477 ****
+  	}
+  	return OK;
+      }
+- #endif
+  
+      /*
+       * If the cursor started on a blank, check if it is just before the start
+--- 3460,3465 ----
+***************
+*** 3521,3527 ****
+  	    find_first_blank(&start_pos);
+      }
+  
+- #ifdef FEAT_VISUAL
+      if (VIsual_active)
+      {
+  	/* Avoid getting stuck with "is" on a single space before a sentence. */
+--- 3509,3514 ----
+***************
+*** 3534,3540 ****
+  	redraw_curbuf_later(INVERTED);	/* update the inversion */
+      }
+      else
+- #endif
+      {
+  	/* include a newline after the sentence, if there is one */
+  	if (incl(&curwin->w_cursor) == -1)
+--- 3521,3526 ----
+***************
+*** 3574,3582 ****
+      /*
+       * If we start on '(', '{', ')', '}', etc., use the whole block inclusive.
+       */
+- #ifdef FEAT_VISUAL
+      if (!VIsual_active || equalpos(VIsual, curwin->w_cursor))
+- #endif
+      {
+  	setpcmark();
+  	if (what == '{')		/* ignore indent */
+--- 3560,3566 ----
+***************
+*** 3587,3593 ****
+  	    /* cursor on '(' or '{', move cursor just after it */
+  	    ++curwin->w_cursor.col;
+      }
+- #ifdef FEAT_VISUAL
+      else if (lt(VIsual, curwin->w_cursor))
+      {
+  	old_start = VIsual;
+--- 3571,3576 ----
+***************
+*** 3595,3601 ****
+      }
+      else
+  	old_end = VIsual;
+- #endif
+  
+      /*
+       * Search backwards for unclosed '(', '{', etc..
+--- 3578,3583 ----
+***************
+*** 3641,3647 ****
+  		if (decl(&curwin->w_cursor) != 0)
+  		    break;
+  	    }
+- #ifdef FEAT_VISUAL
+  	/*
+  	 * In Visual mode, when the resulting area is not bigger than what we
+  	 * started with, extend it to the next block, and then exclude again.
+--- 3623,3628 ----
+***************
+*** 3666,3676 ****
+  	    curwin->w_cursor = *end_pos;
+  	}
+  	else
+- #endif
+  	    break;
+      }
+  
+- #ifdef FEAT_VISUAL
+      if (VIsual_active)
+      {
+  	if (*p_sel == 'e')
+--- 3647,3655 ----
+***************
+*** 3683,3689 ****
+  	showmode();
+      }
+      else
+- #endif
+      {
+  	oap->start = start_pos;
+  	oap->motion_type = MCHAR;
+--- 3662,3667 ----
+***************
+*** 3807,3823 ****
+      old_pos = curwin->w_cursor;
+      old_end = curwin->w_cursor;		    /* remember where we started */
+      old_start = old_end;
+- #ifdef FEAT_VISUAL
+      if (!VIsual_active || *p_sel == 'e')
+- #endif
+  	decl(&old_end);			    /* old_end is inclusive */
+  
+      /*
+       * If we start on "<aaa>" select that block.
+       */
+- #ifdef FEAT_VISUAL
+      if (!VIsual_active || equalpos(VIsual, curwin->w_cursor))
+- #endif
+      {
+  	setpcmark();
+  
+--- 3785,3797 ----
+***************
+*** 3843,3849 ****
+  	    old_end = curwin->w_cursor;
+  	}
+      }
+- #ifdef FEAT_VISUAL
+      else if (lt(VIsual, curwin->w_cursor))
+      {
+  	old_start = VIsual;
+--- 3817,3822 ----
+***************
+*** 3851,3857 ****
+      }
+      else
+  	old_end = VIsual;
+- #endif
+  
+  again:
+      /*
+--- 3824,3829 ----
+***************
+*** 3951,3957 ****
+  	}
+      }
+  
+- #ifdef FEAT_VISUAL
+      if (VIsual_active)
+      {
+  	/* If the end is before the start there is no text between tags, select
+--- 3923,3928 ----
+***************
+*** 3966,3972 ****
+  	showmode();
+      }
+      else
+- #endif
+      {
+  	oap->start = start_pos;
+  	oap->motion_type = MCHAR;
+--- 3937,3942 ----
+***************
+*** 4010,4016 ****
+  
+      start_lnum = curwin->w_cursor.lnum;
+  
+- #ifdef FEAT_VISUAL
+      /*
+       * When visual area is more than one line: extend it.
+       */
+--- 3980,3985 ----
+***************
+*** 4064,4070 ****
+  	curwin->w_cursor.col = 0;
+  	return retval;
+      }
+- #endif
+  
+      /*
+       * First move back to the start_lnum of the paragraph or white lines
+--- 4033,4038 ----
+***************
+*** 4136,4142 ****
+  	while (start_lnum > 1 && linewhite(start_lnum - 1))
+  	    --start_lnum;
+  
+- #ifdef FEAT_VISUAL
+      if (VIsual_active)
+      {
+  	/* Problem: when doing "Vipipip" nothing happens in a single white
+--- 4104,4109 ----
+***************
+*** 4149,4155 ****
+  	showmode();
+      }
+      else
+- #endif
+      {
+  	oap->start.lnum = start_lnum;
+  	oap->start.col = 0;
+--- 4116,4121 ----
+***************
+*** 4247,4253 ****
+      int		col_end;
+      int		col_start = curwin->w_cursor.col;
+      int		inclusive = FALSE;
+- #ifdef FEAT_VISUAL
+      int		vis_empty = TRUE;	/* Visual selection <= 1 char */
+      int		vis_bef_curs = FALSE;	/* Visual starts before cursor */
+      int		inside_quotes = FALSE;	/* Looks like "i'" done before */
+--- 4213,4218 ----
+***************
+*** 4331,4347 ****
+  	}
+      }
+      else
+- #endif
+  
+!     if (line[col_start] == quotechar
+! #ifdef FEAT_VISUAL
+! 	    || !vis_empty
+! #endif
+! 	    )
+      {
+  	int	first_col = col_start;
+  
+- #ifdef FEAT_VISUAL
+  	if (!vis_empty)
+  	{
+  	    if (vis_bef_curs)
+--- 4296,4306 ----
+  	}
+      }
+      else
+  
+!     if (line[col_start] == quotechar || !vis_empty)
+      {
+  	int	first_col = col_start;
+  
+  	if (!vis_empty)
+  	{
+  	    if (vis_bef_curs)
+***************
+*** 4349,4355 ****
+  	    else
+  		first_col = find_prev_quote(line, col_start, quotechar, NULL);
+  	}
+! #endif
+  	/* The cursor is on a quote, we don't know if it's the opening or
+  	 * closing quote.  Search from the start of the line to find out.
+  	 * Also do this when there is a Visual area, a' may leave the cursor
+--- 4308,4314 ----
+  	    else
+  		first_col = find_prev_quote(line, col_start, quotechar, NULL);
+  	}
+! 
+  	/* The cursor is on a quote, we don't know if it's the opening or
+  	 * closing quote.  Search from the start of the line to find out.
+  	 * Also do this when there is a Visual area, a' may leave the cursor
+***************
+*** 4406,4419 ****
+  
+      /* Set start position.  After vi" another i" must include the ".
+       * For v2i" include the quotes. */
+!     if (!include && count < 2
+! #ifdef FEAT_VISUAL
+! 	    && (vis_empty || !inside_quotes)
+! #endif
+! 	    )
+  	++col_start;
+      curwin->w_cursor.col = col_start;
+- #ifdef FEAT_VISUAL
+      if (VIsual_active)
+      {
+  	/* Set the start of the Visual area when the Visual area was empty, we
+--- 4365,4373 ----
+  
+      /* Set start position.  After vi" another i" must include the ".
+       * For v2i" include the quotes. */
+!     if (!include && count < 2 && (vis_empty || !inside_quotes))
+  	++col_start;
+      curwin->w_cursor.col = col_start;
+      if (VIsual_active)
+      {
+  	/* Set the start of the Visual area when the Visual area was empty, we
+***************
+*** 4433,4439 ****
+  	}
+      }
+      else
+- #endif
+      {
+  	oap->start = curwin->w_cursor;
+  	oap->motion_type = MCHAR;
+--- 4387,4392 ----
+***************
+*** 4441,4454 ****
+  
+      /* Set end position. */
+      curwin->w_cursor.col = col_end;
+!     if ((include || count > 1
+! #ifdef FEAT_VISUAL
+! 		/* After vi" another i" must include the ". */
+  		|| (!vis_empty && inside_quotes)
+- #endif
+  	) && inc_cursor() == 2)
+  	inclusive = TRUE;
+- #ifdef FEAT_VISUAL
+      if (VIsual_active)
+      {
+  	if (vis_empty || vis_bef_curs)
+--- 4394,4403 ----
+  
+      /* Set end position. */
+      curwin->w_cursor.col = col_end;
+!     if ((include || count > 1 /* After vi" another i" must include the ". */
+  		|| (!vis_empty && inside_quotes)
+  	) && inc_cursor() == 2)
+  	inclusive = TRUE;
+      if (VIsual_active)
+      {
+  	if (vis_empty || vis_bef_curs)
+***************
+*** 4480,4486 ****
+  	}
+      }
+      else
+- #endif
+      {
+  	/* Set inclusive and other oap's flags. */
+  	oap->inclusive = inclusive;
+--- 4429,4434 ----
+***************
+*** 4491,4497 ****
+  
+  #endif /* FEAT_TEXTOBJ */
+  
+- #if defined(FEAT_VISUAL) || defined(PROTO)
+  static int is_one_char __ARGS((char_u *pattern));
+  
+  /*
+--- 4439,4444 ----
+***************
+*** 4690,4696 ****
+      vim_regfree(regmatch.regprog);
+      return result;
+  }
+- #endif /* FEAT_VISUAL */
+  
+  #if defined(FEAT_LISP) || defined(FEAT_CINDENT) || defined(FEAT_TEXTOBJ) \
+  	|| defined(PROTO)
+--- 4637,4642 ----
+*** ../vim-7.4.211/src/spell.c	2014-03-08 16:13:39.123462070 +0100
+--- src/spell.c	2014-03-23 13:35:15.195174931 +0100
+***************
+*** 10191,10197 ****
+      if (no_spell_checking(curwin))
+  	return;
+  
+- #ifdef FEAT_VISUAL
+      if (VIsual_active)
+      {
+  	/* Use the Visually selected text as the bad word.  But reject
+--- 10191,10196 ----
+***************
+*** 10209,10218 ****
+  	++badlen;
+  	end_visual_mode();
+      }
+!     else
+! #endif
+! 	/* Find the start of the badly spelled word. */
+! 	if (spell_move_to(curwin, FORWARD, TRUE, TRUE, NULL) == 0
+  	    || curwin->w_cursor.col > prev_cursor.col)
+      {
+  	/* No bad word or it starts after the cursor: use the word under the
+--- 10208,10215 ----
+  	++badlen;
+  	end_visual_mode();
+      }
+!     /* Find the start of the badly spelled word. */
+!     else if (spell_move_to(curwin, FORWARD, TRUE, TRUE, NULL) == 0
+  	    || curwin->w_cursor.col > prev_cursor.col)
+      {
+  	/* No bad word or it starts after the cursor: use the word under the
+*** ../vim-7.4.211/src/syntax.c	2013-11-28 18:53:47.000000000 +0100
+--- src/syntax.c	2014-03-23 13:35:30.379175164 +0100
+***************
+*** 6837,6846 ****
+  	CENT("SignColumn term=standout ctermbg=Grey ctermfg=DarkBlue",
+  	     "SignColumn term=standout ctermbg=Grey ctermfg=DarkBlue guibg=Grey guifg=DarkBlue"),
+  #endif
+- #ifdef FEAT_VISUAL
+  	CENT("Visual term=reverse",
+  	     "Visual term=reverse guibg=LightGrey"),
+- #endif
+  #ifdef FEAT_DIFF
+  	CENT("DiffAdd term=bold ctermbg=LightBlue",
+  	     "DiffAdd term=bold ctermbg=LightBlue guibg=LightBlue"),
+--- 6837,6844 ----
+***************
+*** 6927,6936 ****
+  	CENT("SignColumn term=standout ctermbg=DarkGrey ctermfg=Cyan",
+  	     "SignColumn term=standout ctermbg=DarkGrey ctermfg=Cyan guibg=Grey guifg=Cyan"),
+  #endif
+- #ifdef FEAT_VISUAL
+  	CENT("Visual term=reverse",
+  	     "Visual term=reverse guibg=DarkGrey"),
+- #endif
+  #ifdef FEAT_DIFF
+  	CENT("DiffAdd term=bold ctermbg=DarkBlue",
+  	     "DiffAdd term=bold ctermbg=DarkBlue guibg=DarkBlue"),
+--- 6925,6932 ----
+*** ../vim-7.4.211/src/term.c	2014-03-19 14:01:53.153903819 +0100
+--- src/term.c	2014-03-23 13:35:43.519175365 +0100
+***************
+*** 3456,3467 ****
+  	return;
+      }
+  
+- #  ifdef FEAT_VISUAL
+      if (VIsual_active)
+  	checkfor = MOUSE_VISUAL;
+!     else
+! #  endif
+! 	if (State == HITRETURN || State == ASKMORE || State == SETWSIZE)
+  	checkfor = MOUSE_RETURN;
+      else if (State & INSERT)
+  	checkfor = MOUSE_INSERT;
+--- 3456,3464 ----
+  	return;
+      }
+  
+      if (VIsual_active)
+  	checkfor = MOUSE_VISUAL;
+!     else if (State == HITRETURN || State == ASKMORE || State == SETWSIZE)
+  	checkfor = MOUSE_RETURN;
+      else if (State & INSERT)
+  	checkfor = MOUSE_INSERT;
+*** ../vim-7.4.211/src/ui.c	2013-07-13 20:57:08.000000000 +0200
+--- src/ui.c	2014-03-23 13:36:15.459175855 +0100
+***************
+*** 2610,2622 ****
+  	if (on_sep_line)
+  	    return IN_SEP_LINE;
+  #endif
+- #ifdef FEAT_VISUAL
+  	if (flags & MOUSE_MAY_STOP_VIS)
+  	{
+  	    end_visual_mode();
+  	    redraw_curbuf_later(INVERTED);	/* delete the inversion */
+  	}
+- #endif
+  #if defined(FEAT_CMDWIN) && defined(FEAT_CLIPBOARD)
+  	/* Continue a modeless selection in another window. */
+  	if (cmdwin_type != 0 && row < W_WINROW(curwin))
+--- 2610,2620 ----
+***************
+*** 2686,2717 ****
+  	}
+  #endif
+  
+- #ifdef FEAT_VISUAL
+  	/* Before jumping to another buffer, or moving the cursor for a left
+  	 * click, stop Visual mode. */
+  	if (VIsual_active
+  		&& (wp->w_buffer != curwin->w_buffer
+  		    || (!on_status_line
+! # ifdef FEAT_VERTSPLIT
+  			&& !on_sep_line
+! # endif
+! # ifdef FEAT_FOLDING
+  			&& (
+! #  ifdef FEAT_RIGHTLEFT
+  			    wp->w_p_rl ? col < W_WIDTH(wp) - wp->w_p_fdc :
+! #  endif
+  			    col >= wp->w_p_fdc
+! #  ifdef FEAT_CMDWIN
+  				  + (cmdwin_type == 0 && wp == curwin ? 0 : 1)
+- #  endif
+- 			    )
+  # endif
+  			&& (flags & MOUSE_MAY_STOP_VIS))))
+  	{
+  	    end_visual_mode();
+  	    redraw_curbuf_later(INVERTED);	/* delete the inversion */
+  	}
+- #endif
+  #ifdef FEAT_CMDWIN
+  	if (cmdwin_type != 0 && wp != curwin)
+  	{
+--- 2684,2713 ----
+  	}
+  #endif
+  
+  	/* Before jumping to another buffer, or moving the cursor for a left
+  	 * click, stop Visual mode. */
+  	if (VIsual_active
+  		&& (wp->w_buffer != curwin->w_buffer
+  		    || (!on_status_line
+! #ifdef FEAT_VERTSPLIT
+  			&& !on_sep_line
+! #endif
+! #ifdef FEAT_FOLDING
+  			&& (
+! # ifdef FEAT_RIGHTLEFT
+  			    wp->w_p_rl ? col < W_WIDTH(wp) - wp->w_p_fdc :
+! # endif
+  			    col >= wp->w_p_fdc
+! # ifdef FEAT_CMDWIN
+  				  + (cmdwin_type == 0 && wp == curwin ? 0 : 1)
+  # endif
++ 			    )
++ #endif
+  			&& (flags & MOUSE_MAY_STOP_VIS))))
+  	{
+  	    end_visual_mode();
+  	    redraw_curbuf_later(INVERTED);	/* delete the inversion */
+  	}
+  #ifdef FEAT_CMDWIN
+  	if (cmdwin_type != 0 && wp != curwin)
+  	{
+***************
+*** 2801,2814 ****
+  #endif
+      else /* keep_window_focus must be TRUE */
+      {
+- #ifdef FEAT_VISUAL
+  	/* before moving the cursor for a left click, stop Visual mode */
+  	if (flags & MOUSE_MAY_STOP_VIS)
+  	{
+  	    end_visual_mode();
+  	    redraw_curbuf_later(INVERTED);	/* delete the inversion */
+  	}
+- #endif
+  
+  #if defined(FEAT_CMDWIN) && defined(FEAT_CLIPBOARD)
+  	/* Continue a modeless selection in another window. */
+--- 2797,2808 ----
+***************
+*** 2933,2939 ****
+      if (mouse_comp_pos(curwin, &row, &col, &curwin->w_cursor.lnum))
+  	mouse_past_bottom = TRUE;
+  
+- #ifdef FEAT_VISUAL
+      /* Start Visual mode before coladvance(), for when 'sel' != "old" */
+      if ((flags & MOUSE_MAY_VIS) && !VIsual_active)
+      {
+--- 2927,2932 ----
+***************
+*** 2947,2953 ****
+  	if (p_smd && msg_silent == 0)
+  	    redraw_cmdline = TRUE;	/* show visual mode later */
+      }
+- #endif
+  
+      curwin->w_curswant = col;
+      curwin->w_set_curswant = FALSE;	/* May still have been TRUE */
+--- 2940,2945 ----
+*** ../vim-7.4.211/src/undo.c	2014-03-12 16:51:35.060792541 +0100
+--- src/undo.c	2014-03-23 13:37:05.435176620 +0100
+***************
+*** 532,540 ****
+  
+  	/* save named marks and Visual marks for undo */
+  	mch_memmove(uhp->uh_namedm, curbuf->b_namedm, sizeof(pos_T) * NMARKS);
+- #ifdef FEAT_VISUAL
+  	uhp->uh_visual = curbuf->b_visual;
+- #endif
+  
+  	curbuf->b_u_newhead = uhp;
+  	if (curbuf->b_u_oldhead == NULL)
+--- 532,538 ----
+***************
+*** 1014,1029 ****
+      /* Assume NMARKS will stay the same. */
+      for (i = 0; i < NMARKS; ++i)
+  	serialize_pos(uhp->uh_namedm[i], fp);
+- #ifdef FEAT_VISUAL
+      serialize_visualinfo(&uhp->uh_visual, fp);
+- #else
+-     {
+- 	visualinfo_T info;
+- 
+- 	memset(&info, 0, sizeof(visualinfo_T));
+- 	serialize_visualinfo(&info, fp);
+-     }
+- #endif
+      put_time(fp, uhp->uh_time);
+  
+      /* Optional fields. */
+--- 1012,1018 ----
+***************
+*** 1082,1095 ****
+      uhp->uh_flags = get2c(fp);
+      for (i = 0; i < NMARKS; ++i)
+  	unserialize_pos(&uhp->uh_namedm[i], fp);
+- #ifdef FEAT_VISUAL
+      unserialize_visualinfo(&uhp->uh_visual, fp);
+- #else
+-     {
+- 	visualinfo_T info;
+- 	unserialize_visualinfo(&info, fp);
+-     }
+- #endif
+      uhp->uh_time = get8ctime(fp);
+  
+      /* Optional fields. */
+--- 1071,1077 ----
+***************
+*** 2406,2414 ****
+      int		old_flags;
+      int		new_flags;
+      pos_T	namedm[NMARKS];
+- #ifdef FEAT_VISUAL
+      visualinfo_T visualinfo;
+- #endif
+      int		empty_buffer;		    /* buffer became empty */
+      u_header_T	*curhead = curbuf->b_u_curhead;
+  
+--- 2388,2394 ----
+***************
+*** 2430,2438 ****
+       * save marks before undo/redo
+       */
+      mch_memmove(namedm, curbuf->b_namedm, sizeof(pos_T) * NMARKS);
+- #ifdef FEAT_VISUAL
+      visualinfo = curbuf->b_visual;
+- #endif
+      curbuf->b_op_start.lnum = curbuf->b_ml.ml_line_count;
+      curbuf->b_op_start.col = 0;
+      curbuf->b_op_end.lnum = 0;
+--- 2410,2416 ----
+***************
+*** 2602,2614 ****
+  	    curbuf->b_namedm[i] = curhead->uh_namedm[i];
+  	    curhead->uh_namedm[i] = namedm[i];
+  	}
+- #ifdef FEAT_VISUAL
+      if (curhead->uh_visual.vi_start.lnum != 0)
+      {
+  	curbuf->b_visual = curhead->uh_visual;
+  	curhead->uh_visual = visualinfo;
+      }
+- #endif
+  
+      /*
+       * If the cursor is only off by one line, put it at the same position as
+--- 2580,2590 ----
+*** ../vim-7.4.211/src/version.c	2014-03-22 13:29:57.693846167 +0100
+--- src/version.c	2014-03-23 15:01:49.719254526 +0100
+***************
+*** 642,656 ****
+  #else
+  	"-virtualedit",
+  #endif
+- #ifdef FEAT_VISUAL
+  	"+visual",
+! # ifdef FEAT_VISUALEXTRA
+  	"+visualextra",
+- # else
+- 	"-visualextra",
+- # endif
+  #else
+! 	"-visual",
+  #endif
+  #ifdef FEAT_VIMINFO
+  	"+viminfo",
+--- 642,652 ----
+  #else
+  	"-virtualedit",
+  #endif
+  	"+visual",
+! #ifdef FEAT_VISUALEXTRA
+  	"+visualextra",
+  #else
+! 	"-visualextra",
+  #endif
+  #ifdef FEAT_VIMINFO
+  	"+viminfo",
+*** ../vim-7.4.211/src/window.c	2014-01-10 15:53:09.000000000 +0100
+--- src/window.c	2014-03-23 13:38:17.767177729 +0100
+***************
+*** 130,138 ****
+      case Ctrl_S:
+      case 's':
+  		CHECK_CMDWIN
+- #ifdef FEAT_VISUAL
+  		reset_VIsual_and_resel();	/* stop Visual mode */
+- #endif
+  #ifdef FEAT_QUICKFIX
+  		/* When splitting the quickfix window open a new buffer in it,
+  		 * don't replicate the quickfix buffer. */
+--- 130,136 ----
+***************
+*** 150,158 ****
+      case Ctrl_V:
+      case 'v':
+  		CHECK_CMDWIN
+- # ifdef FEAT_VISUAL
+  		reset_VIsual_and_resel();	/* stop Visual mode */
+- # endif
+  # ifdef FEAT_QUICKFIX
+  		/* When splitting the quickfix window open a new buffer in it,
+  		 * don't replicate the quickfix buffer. */
+--- 148,154 ----
+***************
+*** 170,178 ****
+      case Ctrl_HAT:
+      case '^':
+  		CHECK_CMDWIN
+- #ifdef FEAT_VISUAL
+  		reset_VIsual_and_resel();	/* stop Visual mode */
+- #endif
+  		STRCPY(cbuf, "split #");
+  		if (Prenum)
+  		    vim_snprintf((char *)cbuf + 7, sizeof(cbuf) - 7,
+--- 166,172 ----
+***************
+*** 184,192 ****
+      case Ctrl_N:
+      case 'n':
+  		CHECK_CMDWIN
+- #ifdef FEAT_VISUAL
+  		reset_VIsual_and_resel();	/* stop Visual mode */
+- #endif
+  #ifdef FEAT_QUICKFIX
+  newwindow:
+  #endif
+--- 178,184 ----
+***************
+*** 206,223 ****
+  /* quit current window */
+      case Ctrl_Q:
+      case 'q':
+- #ifdef FEAT_VISUAL
+  		reset_VIsual_and_resel();	/* stop Visual mode */
+- #endif
+  		do_cmdline_cmd((char_u *)"quit");
+  		break;
+  
+  /* close current window */
+      case Ctrl_C:
+      case 'c':
+- #ifdef FEAT_VISUAL
+  		reset_VIsual_and_resel();	/* stop Visual mode */
+- #endif
+  		do_cmdline_cmd((char_u *)"close");
+  		break;
+  
+--- 198,211 ----
+***************
+*** 226,234 ****
+      case Ctrl_Z:
+      case 'z':
+  		CHECK_CMDWIN
+- #ifdef FEAT_VISUAL
+  		reset_VIsual_and_resel();	/* stop Visual mode */
+- #endif
+  		do_cmdline_cmd((char_u *)"pclose");
+  		break;
+  
+--- 214,220 ----
+***************
+*** 248,256 ****
+      case Ctrl_O:
+      case 'o':
+  		CHECK_CMDWIN
+- #ifdef FEAT_VISUAL
+  		reset_VIsual_and_resel();	/* stop Visual mode */
+- #endif
+  		do_cmdline_cmd((char_u *)"only");
+  		break;
+  
+--- 234,240 ----
+***************
+*** 399,416 ****
+      case Ctrl_R:
+      case 'r':
+  		CHECK_CMDWIN
+- #ifdef FEAT_VISUAL
+  		reset_VIsual_and_resel();	/* stop Visual mode */
+- #endif
+  		win_rotate(FALSE, (int)Prenum1);    /* downwards */
+  		break;
+  
+  /* rotate windows upwards */
+      case 'R':
+  		CHECK_CMDWIN
+- #ifdef FEAT_VISUAL
+  		reset_VIsual_and_resel();	/* stop Visual mode */
+- #endif
+  		win_rotate(TRUE, (int)Prenum1);	    /* upwards */
+  		break;
+  
+--- 383,396 ----
+***************
+*** 499,507 ****
+      case ']':
+      case Ctrl_RSB:
+  		CHECK_CMDWIN
+- #ifdef FEAT_VISUAL
+  		reset_VIsual_and_resel();	/* stop Visual mode */
+- #endif
+  		if (Prenum)
+  		    postponed_split = Prenum;
+  		else
+--- 479,485 ----
+***************
+*** 612,620 ****
+  #endif
+  		    case ']':
+  		    case Ctrl_RSB:
+- #ifdef FEAT_VISUAL
+  			reset_VIsual_and_resel();	/* stop Visual mode */
+- #endif
+  			if (Prenum)
+  			    postponed_split = Prenum;
+  			else
+--- 590,596 ----
+***************
+*** 3726,3734 ****
+  {
+      tabpage_T	*tp = curtab;
+  
+- #ifdef FEAT_VISUAL
+      reset_VIsual_and_resel();	/* stop Visual mode */
+- #endif
+  #ifdef FEAT_AUTOCMD
+      if (trigger_leave_autocmds)
+      {
+--- 3702,3708 ----
+***************
+*** 4029,4040 ****
+  	return;
+  #endif
+  
+- #ifdef FEAT_VISUAL
+      if (wp->w_buffer != curbuf)
+  	reset_VIsual_and_resel();
+      else if (VIsual_active)
+  	wp->w_cursor = curwin->w_cursor;
+- #endif
+  
+  #ifdef FEAT_GUI
+      need_mouse_correct = TRUE;
+--- 4003,4012 ----
+***************
+*** 6037,6043 ****
+      long	count;
+      linenr_T	*file_lnum;
+  {
+- # ifdef FEAT_VISUAL
+      if (VIsual_active)
+      {
+  	int	len;
+--- 6009,6014 ----
+***************
+*** 6048,6054 ****
+  	return find_file_name_in_path(ptr, len,
+  		     FNAME_MESS|FNAME_EXP|FNAME_REL, count, curbuf->b_ffname);
+      }
+- # endif
+      return file_name_at_cursor(FNAME_MESS|FNAME_HYP|FNAME_EXP|FNAME_REL, count,
+  			       file_lnum);
+  
+--- 6019,6024 ----
+*** ../vim-7.4.211/src/feature.h	2014-03-12 17:56:42.960852421 +0100
+--- src/feature.h	2014-03-23 13:39:02.003178407 +0100
+***************
+*** 214,220 ****
+   * +visual		Visual mode - now always included.
+   * +visualextra		Extra features for Visual mode (mostly block operators).
+   */
+- #define FEAT_VISUAL
+  #ifdef FEAT_NORMAL
+  # define FEAT_VISUALEXTRA
+  #endif
+--- 214,219 ----
+***************
+*** 1138,1150 ****
+  #ifdef FEAT_GUI
+  # ifndef FEAT_CLIPBOARD
+  #  define FEAT_CLIPBOARD
+- #  ifndef FEAT_VISUAL
+- #   define FEAT_VISUAL
+- #  endif
+  # endif
+  #endif
+  
+! #if defined(FEAT_NORMAL) && defined(FEAT_VISUAL) \
+  	&& (defined(UNIX) || defined(VMS)) \
+  	&& defined(WANT_X11) && defined(HAVE_X11)
+  # define FEAT_XCLIPBOARD
+--- 1137,1146 ----
+  #ifdef FEAT_GUI
+  # ifndef FEAT_CLIPBOARD
+  #  define FEAT_CLIPBOARD
+  # endif
+  #endif
+  
+! #if defined(FEAT_NORMAL) \
+  	&& (defined(UNIX) || defined(VMS)) \
+  	&& defined(WANT_X11) && defined(HAVE_X11)
+  # define FEAT_XCLIPBOARD
+*** ../vim-7.4.211/src/globals.h	2014-02-22 23:03:48.712901208 +0100
+--- src/globals.h	2014-03-23 13:39:17.407178643 +0100
+***************
+*** 662,668 ****
+  				/* set to TRUE when "-s" commandline argument
+  				 * used for ex */
+  
+- #ifdef FEAT_VISUAL
+  EXTERN pos_T	VIsual;		/* start position of active Visual selection */
+  EXTERN int	VIsual_active INIT(= FALSE);
+  				/* whether Visual mode is active */
+--- 662,667 ----
+***************
+*** 677,683 ****
+  
+  EXTERN int	redo_VIsual_busy INIT(= FALSE);
+  				/* TRUE when redoing Visual */
+- #endif
+  
+  #ifdef FEAT_MOUSE
+  /*
+--- 676,681 ----
+***************
+*** 1178,1188 ****
+  EXTERN int	fill_diff INIT(= '-');
+  #endif
+  
+- #ifdef FEAT_VISUAL
+  /* Whether 'keymodel' contains "stopsel" and "startsel". */
+  EXTERN int	km_stopsel INIT(= FALSE);
+  EXTERN int	km_startsel INIT(= FALSE);
+- #endif
+  
+  #ifdef FEAT_CMDWIN
+  EXTERN int	cedit_key INIT(= -1);	/* key value of 'cedit' option */
+--- 1176,1184 ----
+*** ../vim-7.4.211/src/option.h	2014-03-12 18:55:52.104906804 +0100
+--- src/option.h	2014-03-23 13:39:30.991178851 +0100
+***************
+*** 572,580 ****
+  EXTERN char_u	*p_isp;		/* 'isprint' */
+  EXTERN int	p_js;		/* 'joinspaces' */
+  EXTERN char_u	*p_kp;		/* 'keywordprg' */
+- #ifdef FEAT_VISUAL
+  EXTERN char_u	*p_km;		/* 'keymodel' */
+- #endif
+  #ifdef FEAT_LANGMAP
+  EXTERN char_u	*p_langmap;	/* 'langmap'*/
+  #endif
+--- 572,578 ----
+***************
+*** 681,690 ****
+  #endif
+  EXTERN char_u	*p_sections;	/* 'sections' */
+  EXTERN int	p_secure;	/* 'secure' */
+- #ifdef FEAT_VISUAL
+  EXTERN char_u	*p_sel;		/* 'selection' */
+  EXTERN char_u	*p_slm;		/* 'selectmode' */
+- #endif
+  #ifdef FEAT_SESSION
+  EXTERN char_u	*p_ssop;	/* 'sessionoptions' */
+  EXTERN unsigned	ssop_flags;
+--- 679,686 ----
+*** ../vim-7.4.211/src/os_win32.h	2013-09-25 19:13:32.000000000 +0200
+--- src/os_win32.h	2014-03-23 13:39:49.819179139 +0100
+***************
+*** 68,74 ****
+  #endif
+  
+  #define USE_FNAME_CASE		/* adjust case of file names */
+! #if !defined(FEAT_CLIPBOARD) && defined(FEAT_VISUAL) && defined(FEAT_MOUSE)
+  # define FEAT_CLIPBOARD		/* include clipboard support */
+  #endif
+  #if defined(__DATE__) && defined(__TIME__)
+--- 68,74 ----
+  #endif
+  
+  #define USE_FNAME_CASE		/* adjust case of file names */
+! #if !defined(FEAT_CLIPBOARD) && defined(FEAT_MOUSE)
+  # define FEAT_CLIPBOARD		/* include clipboard support */
+  #endif
+  #if defined(__DATE__) && defined(__TIME__)
+*** ../vim-7.4.211/src/structs.h	2014-03-12 18:55:52.104906804 +0100
+--- src/structs.h	2014-03-23 13:40:19.175179589 +0100
+***************
+*** 346,354 ****
+  #endif
+      int		uh_flags;	/* see below */
+      pos_T	uh_namedm[NMARKS];	/* marks before undo/after redo */
+- #ifdef FEAT_VISUAL
+      visualinfo_T uh_visual;	/* Visual areas before undo/after redo */
+- #endif
+      time_t	uh_time;	/* timestamp when the change was made */
+      long	uh_save_nr;	/* set when the file was saved after the
+  				   changes in this block */
+--- 346,352 ----
+***************
+*** 1406,1417 ****
+  
+      pos_T	b_namedm[NMARKS]; /* current named marks (mark.c) */
+  
+- #ifdef FEAT_VISUAL
+      /* These variables are set when VIsual_active becomes FALSE */
+      visualinfo_T b_visual;
+! # ifdef FEAT_EVAL
+      int		b_visual_mode_eval;  /* b_visual.vi_mode for visualmode() */
+- # endif
+  #endif
+  
+      pos_T	b_last_cursor;	/* cursor position when last unloading this
+--- 1404,1413 ----
+  
+      pos_T	b_namedm[NMARKS]; /* current named marks (mark.c) */
+  
+      /* These variables are set when VIsual_active becomes FALSE */
+      visualinfo_T b_visual;
+! #ifdef FEAT_EVAL
+      int		b_visual_mode_eval;  /* b_visual.vi_mode for visualmode() */
+  #endif
+  
+      pos_T	b_last_cursor;	/* cursor position when last unloading this
+***************
+*** 1980,1986 ****
+  				       time through cursupdate() to the
+  				       current virtual column */
+  
+- #ifdef FEAT_VISUAL
+      /*
+       * the next six are used to update the visual part
+       */
+--- 1976,1981 ----
+***************
+*** 1991,1997 ****
+      linenr_T	w_old_visual_lnum;  /* last known start of visual part */
+      colnr_T	w_old_visual_col;   /* last known start of visual part */
+      colnr_T	w_old_curswant;	    /* last known value of Curswant */
+- #endif
+  
+      /*
+       * "w_topline", "w_leftcol" and "w_skipcol" specify the offsets for
+--- 1986,1991 ----
+***************
+*** 2293,2302 ****
+  				   (inclusive) */
+      int		empty;		/* op_start and op_end the same (only used by
+  				   do_change()) */
+- #ifdef FEAT_VISUAL
+      int		is_VIsual;	/* operator on Visual area */
+      int		block_mode;	/* current operator is Visual block mode */
+- #endif
+      colnr_T	start_vcol;	/* start col for block mode operator */
+      colnr_T	end_vcol;	/* end col for block mode operator */
+  #ifdef FEAT_AUTOCMD
+--- 2287,2294 ----
+*** ../vim-7.4.211/src/version.c	2014-03-22 13:29:57.693846167 +0100
+--- src/version.c	2014-03-23 15:01:49.719254526 +0100
+***************
+*** 740,741 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     212,
+  /**/
+
+-- 
+If all you have is a hammer, everything looks like a nail.
+When your hammer is C++, everything begins to look like a thumb.
+			-- Steve Hoflich, comp.lang.c++
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.213 b/SOURCES/7.4.213
new file mode 100644
index 0000000..1d0f55c
--- /dev/null
+++ b/SOURCES/7.4.213
@@ -0,0 +1,211 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.213
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.213
+Problem:    It's not possible to open a new buffer without creating a swap
+	    file.
+Solution:   Add the ":noswapfile" modifier. (Christian Brabandt)
+Files:	    runtime/doc/recover.txt, src/ex_cmds.h, src/ex_docmd.c,
+	    src/memline.c, src/structs.h
+
+
+*** ../vim-7.4.212/runtime/doc/recover.txt	2013-08-10 13:25:00.000000000 +0200
+--- runtime/doc/recover.txt	2014-03-23 16:01:59.655309841 +0100
+***************
+*** 81,87 ****
+  'maxmemtot'.  And when making a change to a read-only file, the swap file is
+  created anyway.
+  
+! The 'swapfile' option can be reset to avoid creating a swapfile.
+  
+  
+  Detecting an existing swap file ~
+--- 81,94 ----
+  'maxmemtot'.  And when making a change to a read-only file, the swap file is
+  created anyway.
+  
+! The 'swapfile' option can be reset to avoid creating a swapfile.  And the
+! |:noswapfile| modifier can be used to not create a swapfile for a new buffer.
+! 
+! :noswap[file]   {command}			*:noswap* *:noswapfile*
+! 		Execute {command}. If it contains a command that loads a new
+! 		buffer, it will be loaded without creating a swapfile and the
+! 		'swapfile' option will be reset.  If a buffer already had a
+! 		swapfile it is not removed and 'swapfile' is not reset.
+  
+  
+  Detecting an existing swap file ~
+*** ../vim-7.4.212/src/ex_cmds.h	2014-03-22 13:29:57.693846167 +0100
+--- src/ex_cmds.h	2014-03-23 15:36:42.399286592 +0100
+***************
+*** 655,660 ****
+--- 655,662 ----
+  			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
+  EX(CMD_noremenu,	"noremenu",	ex_menu,
+  			RANGE|NOTADR|ZEROR|BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
++ EX(CMD_noswapfile,	"noswapfile",	ex_wrongmodifier,
++ 			NEEDARG|EXTRA|NOTRLCOM),
+  EX(CMD_normal,		"normal",	ex_normal,
+  			RANGE|BANG|EXTRA|NEEDARG|NOTRLCOM|USECTRLV|SBOXOK|CMDWIN),
+  EX(CMD_number,		"number",	ex_print,
+*** ../vim-7.4.212/src/ex_docmd.c	2014-03-23 15:12:29.919264336 +0100
+--- src/ex_docmd.c	2014-03-23 15:44:42.335293946 +0100
+***************
+*** 1874,1891 ****
+  #endif
+  			continue;
+  
+! 	    case 'n':	if (!checkforcmd(&ea.cmd, "noautocmd", 3))
+! 			    break;
+! #ifdef FEAT_AUTOCMD
+! 			if (cmdmod.save_ei == NULL)
+  			{
+! 			    /* Set 'eventignore' to "all". Restore the
+! 			     * existing option value later. */
+! 			    cmdmod.save_ei = vim_strsave(p_ei);
+! 			    set_string_option_direct((char_u *)"ei", -1,
+  					 (char_u *)"all", OPT_FREE, SID_NONE);
+! 			}
+  #endif
+  			continue;
+  
+  	    case 'r':	if (!checkforcmd(&ea.cmd, "rightbelow", 6))
+--- 1874,1896 ----
+  #endif
+  			continue;
+  
+! 	    case 'n':	if (checkforcmd(&ea.cmd, "noautocmd", 3))
+  			{
+! #ifdef FEAT_AUTOCMD
+! 			    if (cmdmod.save_ei == NULL)
+! 			    {
+! 				/* Set 'eventignore' to "all". Restore the
+! 				 * existing option value later. */
+! 				cmdmod.save_ei = vim_strsave(p_ei);
+! 				set_string_option_direct((char_u *)"ei", -1,
+  					 (char_u *)"all", OPT_FREE, SID_NONE);
+! 			    }
+  #endif
++ 			    continue;
++ 			}
++ 			if (!checkforcmd(&ea.cmd, "noswapfile", 6))
++ 			    break;
++ 			cmdmod.noswapfile = TRUE;
+  			continue;
+  
+  	    case 'r':	if (!checkforcmd(&ea.cmd, "rightbelow", 6))
+***************
+*** 2596,2601 ****
+--- 2601,2608 ----
+  	    case CMD_lua:
+  	    case CMD_match:
+  	    case CMD_mzscheme:
++ 	    case CMD_noautocmd:
++ 	    case CMD_noswapfile:
+  	    case CMD_perl:
+  	    case CMD_psearch:
+  	    case CMD_python:
+***************
+*** 3099,3104 ****
+--- 3106,3112 ----
+      {"leftabove", 5, FALSE},
+      {"lockmarks", 3, FALSE},
+      {"noautocmd", 3, FALSE},
++     {"noswapfile", 3, FALSE},
+      {"rightbelow", 6, FALSE},
+      {"sandbox", 3, FALSE},
+      {"silent", 3, FALSE},
+***************
+*** 3611,3616 ****
+--- 3619,3626 ----
+  	case CMD_keeppatterns:
+  	case CMD_leftabove:
+  	case CMD_lockmarks:
++ 	case CMD_noautocmd:
++ 	case CMD_noswapfile:
+  	case CMD_rightbelow:
+  	case CMD_sandbox:
+  	case CMD_silent:
+*** ../vim-7.4.212/src/memline.c	2014-02-11 15:23:27.942123631 +0100
+--- src/memline.c	2014-03-23 15:48:05.679297062 +0100
+***************
+*** 289,294 ****
+--- 289,297 ----
+      buf->b_ml.ml_chunksize = NULL;
+  #endif
+  
++     if (cmdmod.noswapfile)
++ 	buf->b_p_swf = FALSE;
++ 
+      /*
+       * When 'updatecount' is non-zero swap file may be opened later.
+       */
+***************
+*** 606,612 ****
+  	 * When 'updatecount' is 0 and 'noswapfile' there is no swap file.
+  	 * For help files we will make a swap file now.
+  	 */
+! 	if (p_uc != 0)
+  	    ml_open_file(buf);	    /* create a swap file */
+  	return;
+      }
+--- 609,615 ----
+  	 * When 'updatecount' is 0 and 'noswapfile' there is no swap file.
+  	 * For help files we will make a swap file now.
+  	 */
+! 	if (p_uc != 0 && !cmdmod.noswapfile)
+  	    ml_open_file(buf);	    /* create a swap file */
+  	return;
+      }
+***************
+*** 719,725 ****
+      char_u	*dirp;
+  
+      mfp = buf->b_ml.ml_mfp;
+!     if (mfp == NULL || mfp->mf_fd >= 0 || !buf->b_p_swf)
+  	return;		/* nothing to do */
+  
+  #ifdef FEAT_SPELL
+--- 722,728 ----
+      char_u	*dirp;
+  
+      mfp = buf->b_ml.ml_mfp;
+!     if (mfp == NULL || mfp->mf_fd >= 0 || !buf->b_p_swf || cmdmod.noswapfile)
+  	return;		/* nothing to do */
+  
+  #ifdef FEAT_SPELL
+*** ../vim-7.4.212/src/structs.h	2014-03-23 15:12:29.943264337 +0100
+--- src/structs.h	2014-03-23 15:36:42.407286592 +0100
+***************
+*** 545,550 ****
+--- 545,551 ----
+      int		keepjumps;		/* TRUE when ":keepjumps" was used */
+      int		lockmarks;		/* TRUE when ":lockmarks" was used */
+      int		keeppatterns;		/* TRUE when ":keeppatterns" was used */
++     int		noswapfile;		/* TRUE when ":noswapfile" was used */
+  # ifdef FEAT_AUTOCMD
+      char_u	*save_ei;		/* saved value of 'eventignore' */
+  # endif
+*** ../vim-7.4.212/src/version.c	2014-03-23 15:12:29.943264337 +0100
+--- src/version.c	2014-03-23 16:02:16.519310100 +0100
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     213,
+  /**/
+
+-- 
+Looking at Perl through Lisp glasses, Perl looks atrocious.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.214 b/SOURCES/7.4.214
new file mode 100644
index 0000000..bdce8be
--- /dev/null
+++ b/SOURCES/7.4.214
@@ -0,0 +1,50 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.214
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.214
+Problem:    Compilation problems on HP_nonStop (Tandem).
+Solution:   Add #defines. (Joachim Schmitz)
+Files:	    src/vim.h
+
+
+*** ../vim-7.4.213/src/vim.h	2014-02-23 22:52:33.352764716 +0100
+--- src/vim.h	2014-03-24 17:25:40.328710672 +0100
+***************
+*** 77,82 ****
+--- 77,86 ----
+  # endif
+  # include <floss.h>
+  # define ROOT_UID 65535
++ # define OLDXAW
++ # if (_TANDEM_ARCH_ == 2 && __H_Series_RVU >= 621)
++ #  define SA_ONSTACK_COMPATIBILITY
++ # endif
+  #else
+  # define ROOT_UID 0
+  #endif
+*** ../vim-7.4.213/src/version.c	2014-03-23 16:03:56.171311627 +0100
+--- src/version.c	2014-03-24 17:26:50.976711754 +0100
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     214,
+  /**/
+
+-- 
+ARTHUR:       You are indeed brave Sir knight, but the fight is mine.
+BLACK KNIGHT: Had enough?
+ARTHUR:       You stupid bastard.  You havn't got any arms left.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.215 b/SOURCES/7.4.215
new file mode 100644
index 0000000..ff65a62
--- /dev/null
+++ b/SOURCES/7.4.215
@@ -0,0 +1,87 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.215
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.215
+Problem:    Inconsistency: ":sp foo" does not reload "foo", unless "foo" is
+	    the current buffer. (Liang Li)
+Solution:   Do not reload the current buffer on a split command.
+Files:	    runtime/doc/windows.txt, src/ex_docmd.c
+
+
+*** ../vim-7.4.214/runtime/doc/windows.txt	2013-08-10 13:25:08.000000000 +0200
+--- runtime/doc/windows.txt	2014-03-25 12:34:51.989767212 +0100
+***************
+*** 132,144 ****
+  CTRL-W s						*CTRL-W_s*
+  CTRL-W S						*CTRL-W_S*
+  CTRL-W CTRL-S						*CTRL-W_CTRL-S*
+! :[N]sp[lit] [++opt] [+cmd]				*:sp* *:split*
+  		Split current window in two.  The result is two viewports on
+! 		the same file.  Make new window N high (default is to use half
+! 		the height of the current window).  Reduces the current window
+! 		height to create room (and others, if the 'equalalways' option
+! 		is set, 'eadirection' isn't "hor", and one of them is higher
+! 		than the current or the new window).
+  		Note: CTRL-S does not work on all terminals and might block
+  		further input, use CTRL-Q to get going again.
+  		Also see |++opt| and |+cmd|.
+--- 132,151 ----
+  CTRL-W s						*CTRL-W_s*
+  CTRL-W S						*CTRL-W_S*
+  CTRL-W CTRL-S						*CTRL-W_CTRL-S*
+! :[N]sp[lit] [++opt] [+cmd] [file]			*:sp* *:split*
+  		Split current window in two.  The result is two viewports on
+! 		the same file.
+! 		
+! 		Make the new window N high (default is to use half the height
+! 		of the current window).  Reduces the current window height to
+! 		create room (and others, if the 'equalalways' option is set,
+! 		'eadirection' isn't "hor", and one of them is higher than the
+! 		current or the new window).
+! 
+! 		If [file] is given it will be edited in the new window.  If it
+! 		is not loaded in any buffer, it will be read.  Else the new
+! 		window will use the already loaded buffer.
+! 
+  		Note: CTRL-S does not work on all terminals and might block
+  		further input, use CTRL-Q to get going again.
+  		Also see |++opt| and |+cmd|.
+*** ../vim-7.4.214/src/ex_docmd.c	2014-03-23 16:03:56.167311626 +0100
+--- src/ex_docmd.c	2014-03-25 12:57:13.737787771 +0100
+***************
+*** 7938,7943 ****
+--- 7938,7945 ----
+  					       ? ECMD_ONE : eap->do_ecmd_lnum,
+  		    (P_HID(curbuf) ? ECMD_HIDE : 0)
+  		    + (eap->forceit ? ECMD_FORCEIT : 0)
++ 		      /* after a split we can use an existing buffer */
++ 		    + (old_curwin != NULL ? ECMD_OLDBUF : 0)
+  #ifdef FEAT_LISTCMDS
+  		    + (eap->cmdidx == CMD_badd ? ECMD_ADDBUF : 0 )
+  #endif
+*** ../vim-7.4.214/src/version.c	2014-03-24 19:43:56.604837795 +0100
+--- src/version.c	2014-03-25 12:30:13.137762939 +0100
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     215,
+  /**/
+
+-- 
+BLACK KNIGHT: The Black Knight always triumphs. Have at you!
+   ARTHUR takes his last leg off.  The BLACK KNIGHT's body lands upright.
+BLACK KNIGHT: All right, we'll call it a draw.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.216 b/SOURCES/7.4.216
new file mode 100644
index 0000000..ebf78d1
--- /dev/null
+++ b/SOURCES/7.4.216
@@ -0,0 +1,73 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.216
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.216
+Problem:    Compiler warnings. (Tony Mechelynck)
+Solution:   Initialize variables, add #ifdef.
+Files:	    src/term.c, src/os_unix.h
+
+
+*** ../vim-7.4.215/src/term.c	2014-03-23 15:12:29.939264336 +0100
+--- src/term.c	2014-03-25 13:39:10.821826340 +0100
+***************
+*** 4185,4191 ****
+  	    {
+  #ifdef FEAT_MBYTE
+  		int col;
+! 		int row_char;
+  #endif
+  		j = 0;
+  		extra = 0;
+--- 4185,4191 ----
+  	    {
+  #ifdef FEAT_MBYTE
+  		int col;
+! 		int row_char = NUL;
+  #endif
+  		j = 0;
+  		extra = 0;
+*** ../vim-7.4.215/src/os_unix.h	2014-03-12 16:51:35.060792541 +0100
+--- src/os_unix.h	2014-03-25 13:42:35.141829471 +0100
+***************
+*** 565,571 ****
+  # endif
+  #endif
+  
+! #define HAVE_DUP		/* have dup() */
+  #define HAVE_ST_MODE		/* have stat.st_mode */
+  
+  /* We have three kinds of ACL support. */
+--- 565,573 ----
+  # endif
+  #endif
+  
+! #ifndef HAVE_DUP
+! # define HAVE_DUP		/* have dup() */
+! #endif
+  #define HAVE_ST_MODE		/* have stat.st_mode */
+  
+  /* We have three kinds of ACL support. */
+*** ../vim-7.4.215/src/version.c	2014-03-25 13:03:44.937793766 +0100
+--- src/version.c	2014-03-25 13:40:36.969827660 +0100
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     216,
+  /**/
+
+-- 
+Hacker: Someone skilled in computer programming (good guy).
+Cracker: A hacker that uses his skills to crack software (bad guy).
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.217 b/SOURCES/7.4.217
new file mode 100644
index 0000000..9af7857
--- /dev/null
+++ b/SOURCES/7.4.217
@@ -0,0 +1,85 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.217
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.217
+Problem:    When src/auto/configure was updated, "make clean" would run
+	    configure pointlessly.
+Solution:   Do not run configure for "make clean" and "make distclean" when
+	    the make program supports $MAKECMDGOALS. (Ken Takata)
+Files:	    src/Makefile
+
+
+*** ../vim-7.4.216/src/Makefile	2014-02-05 12:36:36.622026833 +0100
+--- src/Makefile	2014-03-25 15:31:10.629929307 +0100
+***************
+*** 546,551 ****
+--- 546,552 ----
+  # again.
+  #CC = cc
+  #CC = gcc
++ #CC = clang
+  
+  # COMPILER FLAGS - change as you please. Either before running {{{1
+  # configure or afterwards. For examples see below.
+***************
+*** 1666,1672 ****
+  	    ! grep -x -F 'ac_cv_env_CFLAGS_value=$(CFLAGS)' auto/config.cache > /dev/null; then \
+  		rm auto/config.cache; \
+  	fi
+! 	GUI_INC_LOC="$(GUI_INC_LOC)" GUI_LIB_LOC="$(GUI_LIB_LOC)" \
+  		CC="$(CC)" CPPFLAGS="$(CPPFLAGS)" CFLAGS="$(CFLAGS)" \
+  		LDFLAGS="$(LDFLAGS)" $(CONF_SHELL) srcdir="$(srcdir)" \
+  		./configure $(CONF_OPT_GUI) $(CONF_OPT_X) $(CONF_OPT_XSMP) \
+--- 1667,1674 ----
+  	    ! grep -x -F 'ac_cv_env_CFLAGS_value=$(CFLAGS)' auto/config.cache > /dev/null; then \
+  		rm auto/config.cache; \
+  	fi
+! 	if test "X$(MAKECMDGOALS)" != "Xclean" -a "X$(MAKECMDGOALS)" != "Xdistclean"; then \
+! 	    GUI_INC_LOC="$(GUI_INC_LOC)" GUI_LIB_LOC="$(GUI_LIB_LOC)" \
+  		CC="$(CC)" CPPFLAGS="$(CPPFLAGS)" CFLAGS="$(CFLAGS)" \
+  		LDFLAGS="$(LDFLAGS)" $(CONF_SHELL) srcdir="$(srcdir)" \
+  		./configure $(CONF_OPT_GUI) $(CONF_OPT_X) $(CONF_OPT_XSMP) \
+***************
+*** 1679,1685 ****
+  		$(CONF_OPT_COMPBY) $(CONF_OPT_ACL)  $(CONF_OPT_NETBEANS) \
+  		$(CONF_ARGS) $(CONF_OPT_MZSCHEME) $(CONF_OPT_PLTHOME) \
+  		$(CONF_OPT_LUA) $(CONF_OPT_LUA_PREFIX) \
+! 		$(CONF_OPT_SYSMOUSE)
+  
+  # Use "make reconfig" to rerun configure without cached values.
+  # When config.h changes, most things will be recompiled automatically.
+--- 1681,1688 ----
+  		$(CONF_OPT_COMPBY) $(CONF_OPT_ACL)  $(CONF_OPT_NETBEANS) \
+  		$(CONF_ARGS) $(CONF_OPT_MZSCHEME) $(CONF_OPT_PLTHOME) \
+  		$(CONF_OPT_LUA) $(CONF_OPT_LUA_PREFIX) \
+! 		$(CONF_OPT_SYSMOUSE); \
+! 	fi
+  
+  # Use "make reconfig" to rerun configure without cached values.
+  # When config.h changes, most things will be recompiled automatically.
+*** ../vim-7.4.216/src/version.c	2014-03-25 13:46:22.841832960 +0100
+--- src/version.c	2014-03-25 15:32:30.813930536 +0100
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     217,
+  /**/
+
+-- 
+CRONE:  Who sent you?
+ARTHUR: The Knights Who Say GNU!
+CRONE:  Aaaagh!  (she looks around in rear) No!  We have no licenses here.
+           "Monty Python and the Holy editor wars" PYTHON (MONTY) SOFTWARE LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.218 b/SOURCES/7.4.218
new file mode 100644
index 0000000..b878cb7
--- /dev/null
+++ b/SOURCES/7.4.218
@@ -0,0 +1,578 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.218
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.218
+Problem:    It's not easy to remove duplicates from a list.
+Solution:   Add the uniq() function. (LCD)
+Files:	    runtime/doc/change.txt, runtime/doc/eval.txt,
+	    runtime/doc/usr_41.txt, runtime/doc/version7.txt, src/eval.c,
+	    src/testdir/test55.in, src/testdir/test55.ok
+
+
+*** ../vim-7.4.217/runtime/doc/change.txt	2013-09-22 15:23:38.000000000 +0200
+--- runtime/doc/change.txt	2014-03-25 17:32:29.510040841 +0100
+***************
+*** 1645,1651 ****
+  7. Sorting text						*sorting*
+  
+  Vim has a sorting function and a sorting command.  The sorting function can be
+! found here: |sort()|.
+  
+  							*:sor* *:sort*
+  :[range]sor[t][!] [i][u][r][n][x][o] [/{pattern}/]
+--- 1650,1656 ----
+  7. Sorting text						*sorting*
+  
+  Vim has a sorting function and a sorting command.  The sorting function can be
+! found here: |sort()|, |uniq()|.
+  
+  							*:sor* *:sort*
+  :[range]sor[t][!] [i][u][r][n][x][o] [/{pattern}/]
+*** ../vim-7.4.217/runtime/doc/eval.txt	2014-02-23 23:38:58.820760280 +0100
+--- runtime/doc/eval.txt	2014-03-25 17:47:18.750054467 +0100
+***************
+*** 326,331 ****
+--- 327,333 ----
+  Changing the order of items in a list: >
+  	:call sort(list)		" sort a list alphabetically
+  	:call reverse(list)		" reverse the order of items
++ 	:call uniq(sort(list))		" sort and remove duplicates
+  
+  
+  For loop ~
+***************
+*** 1518,1523 ****
+--- 1520,1526 ----
+  		startup.  These are the files that Vim remembers marks for.
+  		The length of the List is limited by the ' argument of the
+  		'viminfo' option (default is 100).
++ 		When the |viminfo| file is not used the List is empty.
+  		Also see |:oldfiles| and |c_#<|.
+  		The List can be modified, but this has no effect on what is
+  		stored in the |viminfo| file later.  If you use values other
+***************
+*** 2003,2008 ****
+--- 2006,2013 ----
+  type( {name})			Number	type of variable {name}
+  undofile( {name})		String	undo file name for {name}
+  undotree()			List	undo file tree
++ uniq( {list} [, {func} [, {dict}]])
++ 				List	remove adjacent duplicates from a list
+  values( {dict})			List	values in {dict}
+  virtcol( {expr})		Number	screen column of cursor or mark
+  visualmode( [expr])		String	last visual mode used
+***************
+*** 5474,5493 ****
+  
+  
+  sort({list} [, {func} [, {dict}]])			*sort()* *E702*
+! 		Sort the items in {list} in-place.  Returns {list}.  If you
+! 		want a list to remain unmodified make a copy first: >
+  			:let sortedlist = sort(copy(mylist))
+  <		Uses the string representation of each item to sort on.
+  		Numbers sort after Strings, |Lists| after Numbers.
+  		For sorting text in the current buffer use |:sort|.
+  		When {func} is given and it is one then case is ignored.
+- 		{dict} is for functions with the "dict" attribute.  It will be
+- 		used to set the local variable "self". |Dictionary-function|
+  		When {func} is a |Funcref| or a function name, this function
+  		is called to compare items.  The function is invoked with two
+  		items as argument and must return zero if they are equal, 1 or
+  		bigger if the first one sorts after the second one, -1 or
+  		smaller if the first one sorts before the second one.
+  		Example: >
+  			func MyCompare(i1, i2)
+  			   return a:i1 == a:i2 ? 0 : a:i1 > a:i2 ? 1 : -1
+--- 5491,5516 ----
+  
+  
+  sort({list} [, {func} [, {dict}]])			*sort()* *E702*
+! 		Sort the items in {list} in-place.  Returns {list}.
+! 		
+! 		If you want a list to remain unmodified make a copy first: >
+  			:let sortedlist = sort(copy(mylist))
+  <		Uses the string representation of each item to sort on.
+  		Numbers sort after Strings, |Lists| after Numbers.
+  		For sorting text in the current buffer use |:sort|.
++ 
+  		When {func} is given and it is one then case is ignored.
+  		When {func} is a |Funcref| or a function name, this function
+  		is called to compare items.  The function is invoked with two
+  		items as argument and must return zero if they are equal, 1 or
+  		bigger if the first one sorts after the second one, -1 or
+  		smaller if the first one sorts before the second one.
++ 
++ 		{dict} is for functions with the "dict" attribute.  It will be
++ 		used to set the local variable "self". |Dictionary-function|
++ 
++ 		Also see |uniq()|.
++ 
+  		Example: >
+  			func MyCompare(i1, i2)
+  			   return a:i1 == a:i2 ? 0 : a:i1 > a:i2 ? 1 : -1
+***************
+*** 6155,6160 ****
+--- 6178,6191 ----
+  				blocks.  Each item may again have an "alt"
+  				item.
+  
++ uniq({list} [, {func} [, {dict}]])			*uniq()* *E882*
++ 		Remove second and succeeding copies of repeated adjacent
++ 		{list} items in-place.  Returns {list}.  If you want a list
++ 		to remain unmodified make a copy first: >
++ 			:let newlist = uniq(copy(mylist))
++ <		The default compare function uses the string representation of
++ 		each item.  For the use of {func} and {dict} see |sort()|.
++ 
+  values({dict})						*values()*
+  		Return a |List| with all the values of {dict}.	The |List| is
+  		in arbitrary order.
+*** ../vim-7.4.217/runtime/doc/usr_41.txt	2013-08-10 13:25:05.000000000 +0200
+--- runtime/doc/usr_41.txt	2014-03-25 17:32:29.518040841 +0100
+***************
+*** 1,4 ****
+! *usr_41.txt*	For Vim version 7.4.  Last change: 2013 Feb 20
+  
+  		     VIM USER MANUAL - by Bram Moolenaar
+  
+--- 1,4 ----
+! *usr_41.txt*	For Vim version 7.4.  Last change: 2014 Jan 10
+  
+  		     VIM USER MANUAL - by Bram Moolenaar
+  
+***************
+*** 595,607 ****
+  	matchlist()		like matchstr() and also return submatches
+  	stridx()		first index of a short string in a long string
+  	strridx()		last index of a short string in a long string
+! 	strlen()		length of a string
+  	substitute()		substitute a pattern match with a string
+  	submatch()		get a specific match in ":s" and substitute()
+  	strpart()		get part of a string
+  	expand()		expand special keywords
+  	iconv()			convert text from one encoding to another
+  	byteidx()		byte index of a character in a string
+  	repeat()		repeat a string multiple times
+  	eval()			evaluate a string expression
+  
+--- 595,611 ----
+  	matchlist()		like matchstr() and also return submatches
+  	stridx()		first index of a short string in a long string
+  	strridx()		last index of a short string in a long string
+! 	strlen()		length of a string in bytes
+! 	strchars()		length of a string in characters
+! 	strwidth()		size of string when displayed
+! 	strdisplaywidth()	size of string when displayed, deals with tabs
+  	substitute()		substitute a pattern match with a string
+  	submatch()		get a specific match in ":s" and substitute()
+  	strpart()		get part of a string
+  	expand()		expand special keywords
+  	iconv()			convert text from one encoding to another
+  	byteidx()		byte index of a character in a string
++ 	byteidxcomp()		like byteidx() but count composing characters
+  	repeat()		repeat a string multiple times
+  	eval()			evaluate a string expression
+  
+***************
+*** 619,624 ****
+--- 623,629 ----
+  	map()			change each List item
+  	sort()			sort a List
+  	reverse()		reverse the order of a List
++ 	uniq()			remove copies of repeated adjacent items
+  	split()			split a String into a List
+  	join()			join List items into a String
+  	range()			return a List with a sequence of numbers
+***************
+*** 656,661 ****
+--- 661,669 ----
+  	ceil()			round up
+  	floor()			round down
+  	trunc()			remove value after decimal point
++ 	fmod()			remainder of division
++ 	exp()			exponential
++ 	log()			natural logarithm (logarithm to base e)
+  	log10()			logarithm to base 10
+  	pow()			value of x to the exponent y
+  	sqrt()			square root
+***************
+*** 675,680 ****
+--- 683,689 ----
+  	invert()		bitwise invert
+  	or()			bitwise OR
+  	xor()			bitwise XOR
++ 	sha256()		SHA-256 hash
+  
+  Variables:						*var-functions*
+  	type()			type of a variable
+***************
+*** 697,707 ****
+--- 706,720 ----
+  	wincol()		window column number of the cursor
+  	winline()		window line number of the cursor
+  	cursor()		position the cursor at a line/column
++ 	screencol()		get screen column of the cursor
++ 	screenrow()		get screen row of the cursor
+  	getpos()		get position of cursor, mark, etc.
+  	setpos()		set position of cursor, mark, etc.
+  	byte2line()		get line number at a specific byte count
+  	line2byte()		byte count at a specific line
+  	diff_filler()		get the number of filler lines above a line
++ 	screenattr()		get attribute at a screen line/row
++ 	screenchar()		get character code at a screen line/row
+  
+  Working with text in the current buffer:		*text-functions*
+  	getline()		get a line or list of lines from the buffer
+***************
+*** 883,896 ****
+--- 896,917 ----
+  	libcall()		call a function in an external library
+  	libcallnr()		idem, returning a number
+  
++ 	undofile()		get the name of the undo file
++ 	undotree()		return the state of the undo tree
++ 
+  	getreg()		get contents of a register
+  	getregtype()		get type of a register
+  	setreg()		set contents and type of a register
+  
++ 	shiftwidth()		effective value of 'shiftwidth'
++ 
+  	taglist()		get list of matching tags
+  	tagfiles()		get a list of tags files
+  
++ 	luaeval()		evaluate Lua expression
+  	mzeval()		evaluate |MzScheme| expression
++ 	py3eval()		evaluate Python expression (|+python3|)
++ 	pyeval()		evaluate Python expression (|+python|)
+  
+  ==============================================================================
+  *41.7*	Defining a function
+*** ../vim-7.4.217/runtime/doc/version7.txt	2013-08-10 14:23:06.000000000 +0200
+--- runtime/doc/version7.txt	2014-03-25 17:32:29.518040841 +0100
+***************
+*** 942,947 ****
+--- 942,948 ----
+  |tagfiles()|		List with tags file names
+  |taglist()|		get list of matching tags (Yegappan Lakshmanan)
+  |tr()|			translate characters (Ron Aaron)
++ |uniq()|		remove copies of repeated adjacent list items
+  |values()|		get List of Dictionary values
+  |winnr()|		takes an argument: what window to use
+  |winrestview()|		restore the view of the current window
+*** ../vim-7.4.217/src/eval.c	2014-03-23 15:12:29.915264336 +0100
+--- src/eval.c	2014-03-25 17:52:09.554058923 +0100
+***************
+*** 744,749 ****
+--- 744,750 ----
+  static void f_type __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_undofile __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_undotree __ARGS((typval_T *argvars, typval_T *rettv));
++ static void f_uniq __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_values __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_virtcol __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_visualmode __ARGS((typval_T *argvars, typval_T *rettv));
+***************
+*** 8150,8155 ****
+--- 8151,8157 ----
+      {"type",		1, 1, f_type},
+      {"undofile",	1, 1, f_undofile},
+      {"undotree",	0, 0, f_undotree},
++     {"uniq",		1, 3, f_uniq},
+      {"values",		1, 1, f_values},
+      {"virtcol",		1, 1, f_virtcol},
+      {"visualmode",	0, 1, f_visualmode},
+***************
+*** 17023,17032 ****
+  static char_u	*item_compare_func;
+  static dict_T	*item_compare_selfdict;
+  static int	item_compare_func_err;
+  #define ITEM_COMPARE_FAIL 999
+  
+  /*
+!  * Compare functions for f_sort() below.
+   */
+      static int
+  #ifdef __BORLANDC__
+--- 17025,17035 ----
+  static char_u	*item_compare_func;
+  static dict_T	*item_compare_selfdict;
+  static int	item_compare_func_err;
++ static void	do_sort_uniq __ARGS((typval_T *argvars, typval_T *rettv, int sort));
+  #define ITEM_COMPARE_FAIL 999
+  
+  /*
+!  * Compare functions for f_sort() and f_uniq() below.
+   */
+      static int
+  #ifdef __BORLANDC__
+***************
+*** 17100,17108 ****
+   * "sort({list})" function
+   */
+      static void
+! f_sort(argvars, rettv)
+      typval_T	*argvars;
+      typval_T	*rettv;
+  {
+      list_T	*l;
+      listitem_T	*li;
+--- 17103,17112 ----
+   * "sort({list})" function
+   */
+      static void
+! do_sort_uniq(argvars, rettv, sort)
+      typval_T	*argvars;
+      typval_T	*rettv;
++     int		sort;
+  {
+      list_T	*l;
+      listitem_T	*li;
+***************
+*** 17111,17122 ****
+      long	i;
+  
+      if (argvars[0].v_type != VAR_LIST)
+! 	EMSG2(_(e_listarg), "sort()");
+      else
+      {
+  	l = argvars[0].vval.v_list;
+  	if (l == NULL || tv_check_lock(l->lv_lock,
+! 					     (char_u *)_("sort() argument")))
+  	    return;
+  	rettv->vval.v_list = l;
+  	rettv->v_type = VAR_LIST;
+--- 17115,17126 ----
+      long	i;
+  
+      if (argvars[0].v_type != VAR_LIST)
+! 	EMSG2(_(e_listarg), sort ? "sort()" : "uniq()");
+      else
+      {
+  	l = argvars[0].vval.v_list;
+  	if (l == NULL || tv_check_lock(l->lv_lock,
+! 	       (char_u *)(sort ? _("sort() argument") : _("uniq() argument"))))
+  	    return;
+  	rettv->vval.v_list = l;
+  	rettv->v_type = VAR_LIST;
+***************
+*** 17163,17191 ****
+  	ptrs = (listitem_T **)alloc((int)(len * sizeof(listitem_T *)));
+  	if (ptrs == NULL)
+  	    return;
+- 	i = 0;
+- 	for (li = l->lv_first; li != NULL; li = li->li_next)
+- 	    ptrs[i++] = li;
+  
+! 	item_compare_func_err = FALSE;
+! 	/* test the compare function */
+! 	if (item_compare_func != NULL
+! 		&& item_compare2((void *)&ptrs[0], (void *)&ptrs[1])
+  							 == ITEM_COMPARE_FAIL)
+! 	    EMSG(_("E702: Sort compare function failed"));
+  	else
+  	{
+! 	    /* Sort the array with item pointers. */
+! 	    qsort((void *)ptrs, (size_t)len, sizeof(listitem_T *),
+! 		    item_compare_func == NULL ? item_compare : item_compare2);
+  
+  	    if (!item_compare_func_err)
+  	    {
+! 		/* Clear the List and append the items in the sorted order. */
+! 		l->lv_first = l->lv_last = l->lv_idx_item = NULL;
+! 		l->lv_len = 0;
+! 		for (i = 0; i < len; ++i)
+! 		    list_append(l, ptrs[i]);
+  	    }
+  	}
+  
+--- 17167,17238 ----
+  	ptrs = (listitem_T **)alloc((int)(len * sizeof(listitem_T *)));
+  	if (ptrs == NULL)
+  	    return;
+  
+! 	i = 0;
+! 	if (sort)
+! 	{
+! 	    /* sort(): ptrs will be the list to sort */
+! 	    for (li = l->lv_first; li != NULL; li = li->li_next)
+! 		ptrs[i++] = li;
+! 
+! 	    item_compare_func_err = FALSE;
+! 	    /* test the compare function */
+! 	    if (item_compare_func != NULL
+! 		    && item_compare2((void *)&ptrs[0], (void *)&ptrs[1])
+  							 == ITEM_COMPARE_FAIL)
+! 		EMSG(_("E702: Sort compare function failed"));
+! 	    else
+! 	    {
+! 		/* Sort the array with item pointers. */
+! 		qsort((void *)ptrs, (size_t)len, sizeof(listitem_T *),
+! 		    item_compare_func == NULL ? item_compare : item_compare2);
+! 
+! 		if (!item_compare_func_err)
+! 		{
+! 		    /* Clear the List and append the items in sorted order. */
+! 		    l->lv_first = l->lv_last = l->lv_idx_item = NULL;
+! 		    l->lv_len = 0;
+! 		    for (i = 0; i < len; ++i)
+! 			list_append(l, ptrs[i]);
+! 		}
+! 	    }
+! 	}
+  	else
+  	{
+! 	    int	(*item_compare_func_ptr)__ARGS((const void *, const void *));
+! 
+! 	    /* f_uniq(): ptrs will be a stack of items to remove */
+! 	    item_compare_func_err = FALSE;
+! 	    item_compare_func_ptr = item_compare_func
+! 					       ? item_compare2 : item_compare;
+! 
+! 	    for (li = l->lv_first; li != NULL && li->li_next != NULL;
+! 							     li = li->li_next)
+! 	    {
+! 		if (item_compare_func_ptr((void *)&li, (void *)&li->li_next)
+! 									 == 0)
+! 		    ptrs[i++] = li;
+! 		if (item_compare_func_err)
+! 		{
+! 		    EMSG(_("E882: Uniq compare function failed"));
+! 		    break;
+! 		}
+! 	    }
+  
+  	    if (!item_compare_func_err)
+  	    {
+! 		while (--i >= 0)
+! 		{
+! 		    li = ptrs[i]->li_next;
+! 		    ptrs[i]->li_next = li->li_next;
+! 		    if (li->li_next != NULL)
+! 			li->li_next->li_prev = ptrs[i];
+! 		    else
+! 			l->lv_last = ptrs[i];
+! 		    list_fix_watch(l, li);
+! 		    listitem_free(li);
+! 		    l->lv_len--;
+! 		}
+  	    }
+  	}
+  
+***************
+*** 17194,17199 ****
+--- 17241,17268 ----
+  }
+  
+  /*
++  * "sort({list})" function
++  */
++     static void
++ f_sort(argvars, rettv)
++     typval_T	*argvars;
++     typval_T	*rettv;
++ {
++     do_sort_uniq(argvars, rettv, TRUE);
++ }
++ 
++ /*
++  * "uniq({list})" function
++  */
++     static void
++ f_uniq(argvars, rettv)
++     typval_T	*argvars;
++     typval_T	*rettv;
++ {
++     do_sort_uniq(argvars, rettv, FALSE);
++ }
++ 
++ /*
+   * "soundfold({word})" function
+   */
+      static void
+*** ../vim-7.4.217/src/testdir/test55.in	2014-01-14 15:24:24.000000000 +0100
+--- src/testdir/test55.in	2014-03-25 17:32:29.522040841 +0100
+***************
+*** 323,335 ****
+  :  $put ='caught ' . v:exception
+  :endtry
+  :"
+! :" reverse() and sort()
+! :let l = ['-0', 'A11', 2, 'xaaa', 4, 'foo', 'foo6', [0, 1, 2], 'x8']
+  :$put =string(reverse(l))
+  :$put =string(reverse(reverse(l)))
+  :$put =string(sort(l))
+  :$put =string(reverse(sort(l)))
+  :$put =string(sort(reverse(sort(l))))
+  :"
+  :" splitting a string to a List
+  :$put =string(split('  aa  bb '))
+--- 323,337 ----
+  :  $put ='caught ' . v:exception
+  :endtry
+  :"
+! :" reverse(), sort(), uniq()
+! :let l = ['-0', 'A11', 2, 2, 'xaaa', 4, 'foo', 'foo6', 'foo', [0, 1, 2], 'x8', [0, 1, 2], 1.5]
+! :$put =string(uniq(copy(l)))
+  :$put =string(reverse(l))
+  :$put =string(reverse(reverse(l)))
+  :$put =string(sort(l))
+  :$put =string(reverse(sort(l)))
+  :$put =string(sort(reverse(sort(l))))
++ :$put =string(uniq(sort(l)))
+  :"
+  :" splitting a string to a List
+  :$put =string(split('  aa  bb '))
+*** ../vim-7.4.217/src/testdir/test55.ok	2014-01-14 15:24:24.000000000 +0100
+--- src/testdir/test55.ok	2014-03-25 17:32:29.522040841 +0100
+***************
+*** 94,104 ****
+  caught a:000[2]
+  caught a:000[3]
+  [1, 2, [3, 9, 5, 6], {'a': 12, '5': 8}]
+! ['x8', [0, 1, 2], 'foo6', 'foo', 4, 'xaaa', 2, 'A11', '-0']
+! ['x8', [0, 1, 2], 'foo6', 'foo', 4, 'xaaa', 2, 'A11', '-0']
+! ['-0', 'A11', 'foo', 'foo6', 'x8', 'xaaa', 2, 4, [0, 1, 2]]
+! [[0, 1, 2], 4, 2, 'xaaa', 'x8', 'foo6', 'foo', 'A11', '-0']
+! ['-0', 'A11', 'foo', 'foo6', 'x8', 'xaaa', 2, 4, [0, 1, 2]]
+  ['aa', 'bb']
+  ['aa', 'bb']
+  ['', 'aa', 'bb', '']
+--- 94,106 ----
+  caught a:000[2]
+  caught a:000[3]
+  [1, 2, [3, 9, 5, 6], {'a': 12, '5': 8}]
+! ['-0', 'A11', 2, 'xaaa', 4, 'foo', 'foo6', 'foo', [0, 1, 2], 'x8', [0, 1, 2], 1.5]
+! [1.5, [0, 1, 2], 'x8', [0, 1, 2], 'foo', 'foo6', 'foo', 4, 'xaaa', 2, 2, 'A11', '-0']
+! [1.5, [0, 1, 2], 'x8', [0, 1, 2], 'foo', 'foo6', 'foo', 4, 'xaaa', 2, 2, 'A11', '-0']
+! ['-0', 'A11', 'foo', 'foo', 'foo6', 'x8', 'xaaa', 1.5, 2, 2, 4, [0, 1, 2], [0, 1, 2]]
+! [[0, 1, 2], [0, 1, 2], 4, 2, 2, 1.5, 'xaaa', 'x8', 'foo6', 'foo', 'foo', 'A11', '-0']
+! ['-0', 'A11', 'foo', 'foo', 'foo6', 'x8', 'xaaa', 1.5, 2, 2, 4, [0, 1, 2], [0, 1, 2]]
+! ['-0', 'A11', 'foo', 'foo6', 'x8', 'xaaa', 1.5, 2, 4, [0, 1, 2]]
+  ['aa', 'bb']
+  ['aa', 'bb']
+  ['', 'aa', 'bb', '']
+*** ../vim-7.4.217/src/version.c	2014-03-25 18:05:45.242071421 +0100
+--- src/version.c	2014-03-25 17:34:51.918043023 +0100
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     218,
+  /**/
+
+-- 
+Never under any circumstances take a sleeping pill
+and a laxative on the same night.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.219 b/SOURCES/7.4.219
new file mode 100644
index 0000000..69a5177
--- /dev/null
+++ b/SOURCES/7.4.219
@@ -0,0 +1,100 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.219
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.219
+Problem:    When 'relativenumber' or 'cursorline' are set the window is
+	    redrawn much to often. (Patrick Hemmer, Dominique Pelle)
+Solution:   Check the VALID_CROW flag instead of VALID_WROW.
+Files:	    src/move.c
+
+
+*** ../vim-7.4.218/src/move.c	2014-03-23 15:12:29.927264336 +0100
+--- src/move.c	2014-03-27 11:59:28.524382473 +0100
+***************
+*** 772,777 ****
+--- 772,791 ----
+  	}
+      }
+  
++     /* Redraw when w_cline_row changes and 'relativenumber' or 'cursorline' is
++      * set. */
++     if ((curwin->w_p_rnu
++ #ifdef FEAT_SYN_HL
++ 		|| curwin->w_p_cul
++ #endif
++ 		)
++ 	    && (curwin->w_valid & VALID_CROW) == 0
++ # ifdef FEAT_INS_EXPAND
++ 	    && !pum_visible()
++ # endif
++ 	    )
++ 	redraw_later(SOME_VALID);
++ 
+      wp->w_valid |= VALID_CROW|VALID_CHEIGHT;
+  
+      /* validate botline too, if update_screen doesn't do it */
+***************
+*** 1172,1193 ****
+      if (prev_skipcol != curwin->w_skipcol)
+  	redraw_later(NOT_VALID);
+  
+-     /* Redraw when w_row changes and 'relativenumber' is set */
+-     if (((curwin->w_valid & VALID_WROW) == 0 && (curwin->w_p_rnu
+  #ifdef FEAT_SYN_HL
+! 	/* or when w_row changes and 'cursorline' is set. */
+! 						|| curwin->w_p_cul
+! #endif
+! 	))
+! #ifdef FEAT_SYN_HL
+! 	/* or when w_virtcol changes and 'cursorcolumn' is set */
+! 	|| (curwin->w_p_cuc && (curwin->w_valid & VALID_VIRTCOL) == 0)
+! #endif
+! 	)
+  # ifdef FEAT_INS_EXPAND
+! 	    if (!pum_visible())
+  # endif
+! 		redraw_later(SOME_VALID);
+  
+      curwin->w_valid |= VALID_WCOL|VALID_WROW|VALID_VIRTCOL;
+  }
+--- 1186,1200 ----
+      if (prev_skipcol != curwin->w_skipcol)
+  	redraw_later(NOT_VALID);
+  
+  #ifdef FEAT_SYN_HL
+!     /* Redraw when w_virtcol changes and 'cursorcolumn' is set */
+!     if (curwin->w_p_cuc && (curwin->w_valid & VALID_VIRTCOL) == 0
+  # ifdef FEAT_INS_EXPAND
+! 	    && !pum_visible()
+  # endif
+! 	)
+! 	redraw_later(SOME_VALID);
+! #endif
+  
+      curwin->w_valid |= VALID_WCOL|VALID_WROW|VALID_VIRTCOL;
+  }
+*** ../vim-7.4.218/src/version.c	2014-03-25 18:23:27.062087691 +0100
+--- src/version.c	2014-03-27 12:11:15.276393302 +0100
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     219,
+  /**/
+
+-- 
+The only way the average employee can speak to an executive is by taking a
+second job as a golf caddie.
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.220 b/SOURCES/7.4.220
new file mode 100644
index 0000000..6df81d8
--- /dev/null
+++ b/SOURCES/7.4.220
@@ -0,0 +1,106 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.220
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.220
+Problem:    Test 105 does not work in a shadow dir. (James McCoy)
+Solution:   Omit "src/" from the checked path.
+Files:	    src/testdir/test105.in, src/testdir/test105.ok
+
+
+*** ../vim-7.4.219/src/testdir/test105.in	2014-02-23 23:38:58.812760280 +0100
+--- src/testdir/test105.in	2014-03-27 12:31:45.052412146 +0100
+***************
+*** 7,13 ****
+  :set shellslash
+  :let tab="\t"
+  :command -nargs=1 Put :let expr=<q-args> | $put =expr.tab.strtrans(string(eval(expr)))
+! :let $HOME=fnamemodify('.', ':p:h:h:h')
+  :Put fnamemodify('.',              ':p'      )[-1:]
+  :Put fnamemodify('.',              ':p:h'    )[-1:]
+  :Put fnamemodify('test.out',       ':p'      )[-1:]
+--- 7,13 ----
+  :set shellslash
+  :let tab="\t"
+  :command -nargs=1 Put :let expr=<q-args> | $put =expr.tab.strtrans(string(eval(expr)))
+! :let $HOME=fnamemodify('.', ':p:h:h')
+  :Put fnamemodify('.',              ':p'      )[-1:]
+  :Put fnamemodify('.',              ':p:h'    )[-1:]
+  :Put fnamemodify('test.out',       ':p'      )[-1:]
+***************
+*** 23,29 ****
+  :Put fnamemodify('abc.fb2.tar.gz', ':r'      )
+  :Put fnamemodify('abc.fb2.tar.gz', ':r:r'    )
+  :Put fnamemodify('abc.fb2.tar.gz', ':r:r:r'  )
+! :Put substitute(fnamemodify('abc.fb2.tar.gz', ':p:r:r'), '.*\(src/testdir/.*\)', '\1', '')
+  :Put fnamemodify('abc.fb2.tar.gz', ':e'      )
+  :Put fnamemodify('abc.fb2.tar.gz', ':e:e'    )
+  :Put fnamemodify('abc.fb2.tar.gz', ':e:e:e'  )
+--- 23,29 ----
+  :Put fnamemodify('abc.fb2.tar.gz', ':r'      )
+  :Put fnamemodify('abc.fb2.tar.gz', ':r:r'    )
+  :Put fnamemodify('abc.fb2.tar.gz', ':r:r:r'  )
+! :Put substitute(fnamemodify('abc.fb2.tar.gz', ':p:r:r'), '.*\(testdir/.*\)', '\1', '')
+  :Put fnamemodify('abc.fb2.tar.gz', ':e'      )
+  :Put fnamemodify('abc.fb2.tar.gz', ':e:e'    )
+  :Put fnamemodify('abc.fb2.tar.gz', ':e:e:e'  )
+*** ../vim-7.4.219/src/testdir/test105.ok	2014-02-23 23:38:58.812760280 +0100
+--- src/testdir/test105.ok	2014-03-27 12:31:40.732412080 +0100
+***************
+*** 3,10 ****
+  fnamemodify('test.out',       ':p'      )[-1:]	't'
+  fnamemodify('test.out',       ':.'      )	'test.out'
+  fnamemodify('../testdir/a',   ':.'      )	'a'
+! fnamemodify('test.out',       ':~'      )	'~/src/testdir/test.out'
+! fnamemodify('../testdir/a',   ':~'      )	'~/src/testdir/a'
+  fnamemodify('../testdir/a',   ':t'      )	'a'
+  fnamemodify('.',              ':p:t'    )	''
+  fnamemodify('test.out',       ':p:t'    )	'test.out'
+--- 3,10 ----
+  fnamemodify('test.out',       ':p'      )[-1:]	't'
+  fnamemodify('test.out',       ':.'      )	'test.out'
+  fnamemodify('../testdir/a',   ':.'      )	'a'
+! fnamemodify('test.out',       ':~'      )	'~/testdir/test.out'
+! fnamemodify('../testdir/a',   ':~'      )	'~/testdir/a'
+  fnamemodify('../testdir/a',   ':t'      )	'a'
+  fnamemodify('.',              ':p:t'    )	''
+  fnamemodify('test.out',       ':p:t'    )	'test.out'
+***************
+*** 13,19 ****
+  fnamemodify('abc.fb2.tar.gz', ':r'      )	'abc.fb2.tar'
+  fnamemodify('abc.fb2.tar.gz', ':r:r'    )	'abc.fb2'
+  fnamemodify('abc.fb2.tar.gz', ':r:r:r'  )	'abc'
+! substitute(fnamemodify('abc.fb2.tar.gz', ':p:r:r'), '.*\(src/testdir/.*\)', '\1', '')	'src/testdir/abc.fb2'
+  fnamemodify('abc.fb2.tar.gz', ':e'      )	'gz'
+  fnamemodify('abc.fb2.tar.gz', ':e:e'    )	'tar.gz'
+  fnamemodify('abc.fb2.tar.gz', ':e:e:e'  )	'fb2.tar.gz'
+--- 13,19 ----
+  fnamemodify('abc.fb2.tar.gz', ':r'      )	'abc.fb2.tar'
+  fnamemodify('abc.fb2.tar.gz', ':r:r'    )	'abc.fb2'
+  fnamemodify('abc.fb2.tar.gz', ':r:r:r'  )	'abc'
+! substitute(fnamemodify('abc.fb2.tar.gz', ':p:r:r'), '.*\(testdir/.*\)', '\1', '')	'testdir/abc.fb2'
+  fnamemodify('abc.fb2.tar.gz', ':e'      )	'gz'
+  fnamemodify('abc.fb2.tar.gz', ':e:e'    )	'tar.gz'
+  fnamemodify('abc.fb2.tar.gz', ':e:e:e'  )	'fb2.tar.gz'
+*** ../vim-7.4.219/src/version.c	2014-03-27 12:11:43.888393741 +0100
+--- src/version.c	2014-03-27 12:32:56.320413238 +0100
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     220,
+  /**/
+
+-- 
+If the Universe is constantly expanding, why can't I ever find a parking space?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.221 b/SOURCES/7.4.221
new file mode 100644
index 0000000..4162a24
--- /dev/null
+++ b/SOURCES/7.4.221
@@ -0,0 +1,62 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.221
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.221
+Problem:    Quickfix doesn't resize on ":copen 20". (issue 199)
+Solution:   Resize the window when requested. (Christian Brabandt)
+Files:	    src/quickfix.c
+
+
+*** ../vim-7.4.220/src/quickfix.c	2014-03-23 15:12:29.931264336 +0100
+--- src/quickfix.c	2014-03-27 16:56:25.316655478 +0100
+***************
+*** 2358,2364 ****
+--- 2358,2379 ----
+      win = qf_find_win(qi);
+  
+      if (win != NULL && cmdmod.tab == 0)
++     {
+  	win_goto(win);
++ 	if (eap->addr_count != 0)
++ 	{
++ #ifdef FEAT_VERTSPLIT
++ 	    if (cmdmod.split & WSP_VERT)
++ 	    {
++ 		if (height != W_WIDTH(win))
++ 		    win_setwidth(height);
++ 	    }
++ 	    else
++ #endif
++ 	    if (height != win->w_height)
++ 		win_setheight(height);
++ 	}
++     }
+      else
+      {
+  	qf_buf = qf_find_buf(qi);
+*** ../vim-7.4.220/src/version.c	2014-03-27 12:40:26.188420131 +0100
+--- src/version.c	2014-03-27 16:54:38.864653847 +0100
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     221,
+  /**/
+
+-- 
+The fastest way to get an engineer to solve a problem is to declare that the
+problem is unsolvable.  No engineer can walk away from an unsolvable problem
+until it's solved.
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.222 b/SOURCES/7.4.222
new file mode 100644
index 0000000..79f04f6
--- /dev/null
+++ b/SOURCES/7.4.222
@@ -0,0 +1,83 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.222
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.222
+Problem:    The Ruby directory is constructed from parts.
+Solution:   Use 'rubyarchhdrdir' if it exists. (James McCoy)
+Files:	    src/configure.in, src/auto/configure
+
+
+*** ../vim-7.4.221/src/configure.in	2014-02-23 22:52:33.356764716 +0100
+--- src/configure.in	2014-03-27 17:13:09.624670867 +0100
+***************
+*** 1692,1700 ****
+        if test "X$rubyhdrdir" != "X"; then
+  	AC_MSG_RESULT($rubyhdrdir)
+  	RUBY_CFLAGS="-I$rubyhdrdir"
+!         rubyarch=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['arch']]"`
+!         if test -d "$rubyhdrdir/$rubyarch"; then
+!           RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyhdrdir/$rubyarch"
+          fi
+          rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['ruby_version']].gsub(/\./, '')[[0,2]]"`
+  	if test "X$rubyversion" = "X"; then
+--- 1692,1700 ----
+        if test "X$rubyhdrdir" != "X"; then
+  	AC_MSG_RESULT($rubyhdrdir)
+  	RUBY_CFLAGS="-I$rubyhdrdir"
+!         rubyarchdir=`$vi_cv_path_ruby -r rbconfig -e "print ($ruby_rbconfig::CONFIG.has_key? 'rubyarchhdrdir') ? $ruby_rbconfig::CONFIG[['rubyarchhdrdir']] : '$rubyhdrdir/'+$ruby_rbconfig::CONFIG[['arch']]"`
+!         if test -d "$rubyarchdir"; then
+!           RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyarchdir"
+          fi
+          rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['ruby_version']].gsub(/\./, '')[[0,2]]"`
+  	if test "X$rubyversion" = "X"; then
+*** ../vim-7.4.221/src/auto/configure	2014-02-23 22:52:33.364764715 +0100
+--- src/auto/configure	2014-03-27 17:14:25.256672026 +0100
+***************
+*** 6777,6785 ****
+  	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rubyhdrdir" >&5
+  $as_echo "$rubyhdrdir" >&6; }
+  	RUBY_CFLAGS="-I$rubyhdrdir"
+!         rubyarch=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG['arch']"`
+!         if test -d "$rubyhdrdir/$rubyarch"; then
+!           RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyhdrdir/$rubyarch"
+          fi
+          rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG['ruby_version'].gsub(/\./, '')[0,2]"`
+  	if test "X$rubyversion" = "X"; then
+--- 6777,6785 ----
+  	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rubyhdrdir" >&5
+  $as_echo "$rubyhdrdir" >&6; }
+  	RUBY_CFLAGS="-I$rubyhdrdir"
+!         rubyarchdir=`$vi_cv_path_ruby -r rbconfig -e "print ($ruby_rbconfig::CONFIG.has_key? 'rubyarchhdrdir') ? $ruby_rbconfig::CONFIG['rubyarchhdrdir'] : '$rubyhdrdir/'+$ruby_rbconfig::CONFIG['arch']"`
+!         if test -d "$rubyarchdir"; then
+!           RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyarchdir"
+          fi
+          rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG['ruby_version'].gsub(/\./, '')[0,2]"`
+  	if test "X$rubyversion" = "X"; then
+*** ../vim-7.4.221/src/version.c	2014-03-27 17:02:22.084660944 +0100
+--- src/version.c	2014-03-27 17:13:29.220671167 +0100
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     222,
+  /**/
+
+-- 
+Engineers are always delighted to share wisdom, even in areas in which they
+have no experience whatsoever.  Their logic provides them with inherent
+insight into any field of expertise.  This can be a problem when dealing with
+the illogical people who believe that knowledge can only be derived through
+experience.
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.223 b/SOURCES/7.4.223
new file mode 100644
index 0000000..c7e447a
--- /dev/null
+++ b/SOURCES/7.4.223
@@ -0,0 +1,6557 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.223
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.223
+Problem:    Still using an older autoconf version.
+Solution:   Switch to autoconf 2.69.
+Files:	    src/Makefile, src/configure.in, src/auto/configure
+
+
+*** ../vim-7.4.222/src/Makefile	2014-03-25 15:34:44.993932592 +0100
+--- src/Makefile	2014-03-27 17:37:32.864693288 +0100
+***************
+*** 586,591 ****
+--- 586,594 ----
+  # as root: sysctl -w vm.max_proc_mmap=30000
+  #EXTRA_LIBS = /usr/local/lib/libefence.a
+  
++ # Autoconf binary.
++ AUTOCONF = autoconf
++ 
+  # PURIFY - remove the # to use the "purify" program (hoi Nia++!)
+  #PURIFY = purify
+  
+***************
+*** 1713,1719 ****
+  # - Uses ">config.log" instead of "./config.log".
+  autoconf:
+  	if test ! -f configure.save; then mv configure configure.save; fi
+! 	autoconf
+  	sed -e 's+>config.log+>auto/config.log+' -e 's+\./config.log+auto/config.log+' configure > auto/configure
+  	chmod 755 auto/configure
+  	mv -f configure.save configure
+--- 1716,1722 ----
+  # - Uses ">config.log" instead of "./config.log".
+  autoconf:
+  	if test ! -f configure.save; then mv configure configure.save; fi
+! 	$(AUTOCONF)
+  	sed -e 's+>config.log+>auto/config.log+' -e 's+\./config.log+auto/config.log+' configure > auto/configure
+  	chmod 755 auto/configure
+  	mv -f configure.save configure
+*** ../vim-7.4.222/src/configure.in	2014-03-27 17:19:05.860676325 +0100
+--- src/configure.in	2014-03-27 17:31:39.412687872 +0100
+***************
+*** 1397,1403 ****
+    ldflags_save=$LDFLAGS
+    dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
+    LDFLAGS="-ldl $LDFLAGS"
+!   AC_RUN_IFELSE([
+      #include <dlfcn.h>
+      /* If this program fails, then RTLD_GLOBAL is needed.
+       * RTLD_GLOBAL will be used and then it is not possible to
+--- 1397,1403 ----
+    ldflags_save=$LDFLAGS
+    dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
+    LDFLAGS="-ldl $LDFLAGS"
+!   AC_RUN_IFELSE([AC_LANG_SOURCE([
+      #include <dlfcn.h>
+      /* If this program fails, then RTLD_GLOBAL is needed.
+       * RTLD_GLOBAL will be used and then it is not possible to
+***************
+*** 1430,1436 ****
+        if (no_rtl_global_needed_for("${python_INSTSONAME}", "${vi_cv_path_python_pfx}"))
+              not_needed = 1;
+        return !not_needed;
+!     }],
+      [AC_MSG_RESULT(yes);AC_DEFINE(PY_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
+  
+    CFLAGS=$cflags_save
+--- 1430,1436 ----
+        if (no_rtl_global_needed_for("${python_INSTSONAME}", "${vi_cv_path_python_pfx}"))
+              not_needed = 1;
+        return !not_needed;
+!     }])],
+      [AC_MSG_RESULT(yes);AC_DEFINE(PY_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
+  
+    CFLAGS=$cflags_save
+***************
+*** 1442,1448 ****
+    ldflags_save=$LDFLAGS
+    dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
+    LDFLAGS="-ldl $LDFLAGS"
+!   AC_RUN_IFELSE([
+      #include <dlfcn.h>
+      #include <wchar.h>
+      /* If this program fails, then RTLD_GLOBAL is needed.
+--- 1442,1448 ----
+    ldflags_save=$LDFLAGS
+    dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
+    LDFLAGS="-ldl $LDFLAGS"
+!   AC_RUN_IFELSE([AC_LANG_SOURCE([
+      #include <dlfcn.h>
+      #include <wchar.h>
+      /* If this program fails, then RTLD_GLOBAL is needed.
+***************
+*** 1476,1482 ****
+        if (no_rtl_global_needed_for("${python3_INSTSONAME}", L"${vi_cv_path_python3_pfx}"))
+              not_needed = 1;
+        return !not_needed;
+!     }],
+      [AC_MSG_RESULT(yes);AC_DEFINE(PY3_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
+  
+    CFLAGS=$cflags_save
+--- 1476,1482 ----
+        if (no_rtl_global_needed_for("${python3_INSTSONAME}", L"${vi_cv_path_python3_pfx}"))
+              not_needed = 1;
+        return !not_needed;
+!     }])],
+      [AC_MSG_RESULT(yes);AC_DEFINE(PY3_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
+  
+    CFLAGS=$cflags_save
+***************
+*** 2737,2743 ****
+  
+  AC_CACHE_CHECK([whether toupper is broken], [vim_cv_toupper_broken],
+    [
+!     AC_RUN_IFELSE([[
+  #include "confdefs.h"
+  #include <ctype.h>
+  #if STDC_HEADERS
+--- 2737,2743 ----
+  
+  AC_CACHE_CHECK([whether toupper is broken], [vim_cv_toupper_broken],
+    [
+!     AC_RUN_IFELSE([AC_LANG_SOURCE([[
+  #include "confdefs.h"
+  #include <ctype.h>
+  #if STDC_HEADERS
+***************
+*** 2745,2751 ****
+  # include <stddef.h>
+  #endif
+  main() { exit(toupper('A') == 'A' && tolower('z') == 'z'); }
+!   ]],[
+      vim_cv_toupper_broken=yes
+    ],[
+      vim_cv_toupper_broken=no
+--- 2745,2751 ----
+  # include <stddef.h>
+  #endif
+  main() { exit(toupper('A') == 'A' && tolower('z') == 'z'); }
+!   ]])],[
+      vim_cv_toupper_broken=yes
+    ],[
+      vim_cv_toupper_broken=no
+***************
+*** 2993,2999 ****
+  
+  AC_CACHE_CHECK([whether we talk terminfo], [vim_cv_terminfo],
+    [
+!     AC_RUN_IFELSE([[
+  #include "confdefs.h"
+  #ifdef HAVE_TERMCAP_H
+  # include <termcap.h>
+--- 2993,2999 ----
+  
+  AC_CACHE_CHECK([whether we talk terminfo], [vim_cv_terminfo],
+    [
+!     AC_RUN_IFELSE([AC_LANG_SOURCE([[
+  #include "confdefs.h"
+  #ifdef HAVE_TERMCAP_H
+  # include <termcap.h>
+***************
+*** 3007,3013 ****
+  #endif
+  main()
+  {char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(!strcmp(s==0 ? "" : s, "1")); }
+!     ]],[
+        vim_cv_terminfo=no
+      ],[
+        vim_cv_terminfo=yes
+--- 3007,3013 ----
+  #endif
+  main()
+  {char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(!strcmp(s==0 ? "" : s, "1")); }
+!     ]])],[
+        vim_cv_terminfo=no
+      ],[
+        vim_cv_terminfo=yes
+***************
+*** 3023,3029 ****
+  if test "x$olibs" != "x$LIBS"; then
+    AC_CACHE_CHECK([what tgetent() returns for an unknown terminal], [vim_cv_tgent],
+      [
+!       AC_RUN_IFELSE([[
+  #include "confdefs.h"
+  #ifdef HAVE_TERMCAP_H
+  # include <termcap.h>
+--- 3023,3029 ----
+  if test "x$olibs" != "x$LIBS"; then
+    AC_CACHE_CHECK([what tgetent() returns for an unknown terminal], [vim_cv_tgent],
+      [
+!       AC_RUN_IFELSE([AC_LANG_SOURCE([[
+  #include "confdefs.h"
+  #ifdef HAVE_TERMCAP_H
+  # include <termcap.h>
+***************
+*** 3034,3040 ****
+  #endif
+  main()
+  {char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist"); exit(res != 0); }
+!       ]],[
+  	vim_cv_tgent=zero
+        ],[
+  	vim_cv_tgent=non-zero
+--- 3034,3040 ----
+  #endif
+  main()
+  {char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist"); exit(res != 0); }
+!       ]])],[
+  	vim_cv_tgent=zero
+        ],[
+  	vim_cv_tgent=non-zero
+***************
+*** 3158,3164 ****
+  rm -f conftest_grp
+  AC_CACHE_CHECK([default tty permissions/group], [vim_cv_tty_group],
+    [
+!     AC_RUN_IFELSE([[
+  #include "confdefs.h"
+  #include <sys/types.h>
+  #if STDC_HEADERS
+--- 3158,3164 ----
+  rm -f conftest_grp
+  AC_CACHE_CHECK([default tty permissions/group], [vim_cv_tty_group],
+    [
+!     AC_RUN_IFELSE([AC_LANG_SOURCE([[
+  #include "confdefs.h"
+  #include <sys/types.h>
+  #if STDC_HEADERS
+***************
+*** 3194,3200 ****
+    fclose(fp);
+    exit(0);
+  }
+!     ]],[
+        if test -f conftest_grp; then
+  	vim_cv_tty_group=`cat conftest_grp`
+  	if test "x$vim_cv_tty_mode" = "x" ; then
+--- 3194,3200 ----
+    fclose(fp);
+    exit(0);
+  }
+!     ]])],[
+        if test -f conftest_grp; then
+  	vim_cv_tty_group=`cat conftest_grp`
+  	if test "x$vim_cv_tty_mode" = "x" ; then
+***************
+*** 3252,3258 ****
+  dnl system("sh -c pwd")
+  AC_CACHE_CHECK([getcwd implementation is broken], [vim_cv_getcwd_broken],
+    [
+!     AC_RUN_IFELSE([[
+  #include "confdefs.h"
+  #ifdef HAVE_UNISTD_H
+  #include <unistd.h>
+--- 3252,3258 ----
+  dnl system("sh -c pwd")
+  AC_CACHE_CHECK([getcwd implementation is broken], [vim_cv_getcwd_broken],
+    [
+!     AC_RUN_IFELSE([AC_LANG_SOURCE([[
+  #include "confdefs.h"
+  #ifdef HAVE_UNISTD_H
+  #include <unistd.h>
+***************
+*** 3265,3271 ****
+    environ = dagger;
+    return getcwd(buffer, 500) ? 0 : 1;
+  }
+!     ]],[
+        vim_cv_getcwd_broken=no
+      ],[
+        vim_cv_getcwd_broken=yes
+--- 3265,3271 ----
+    environ = dagger;
+    return getcwd(buffer, 500) ? 0 : 1;
+  }
+!     ]])],[
+        vim_cv_getcwd_broken=no
+      ],[
+        vim_cv_getcwd_broken=yes
+***************
+*** 3308,3314 ****
+  
+  AC_CACHE_CHECK([whether stat() ignores a trailing slash], [vim_cv_stat_ignores_slash],
+    [
+!     AC_RUN_IFELSE([[
+  #include "confdefs.h"
+  #if STDC_HEADERS
+  # include <stdlib.h>
+--- 3308,3314 ----
+  
+  AC_CACHE_CHECK([whether stat() ignores a trailing slash], [vim_cv_stat_ignores_slash],
+    [
+!     AC_RUN_IFELSE([AC_LANG_SOURCE([[
+  #include "confdefs.h"
+  #if STDC_HEADERS
+  # include <stdlib.h>
+***************
+*** 3317,3323 ****
+  #include <sys/types.h>
+  #include <sys/stat.h>
+  main() {struct stat st;  exit(stat("configure/", &st) != 0); }
+!     ]],[
+        vim_cv_stat_ignores_slash=yes
+      ],[
+        vim_cv_stat_ignores_slash=no
+--- 3317,3323 ----
+  #include <sys/types.h>
+  #include <sys/stat.h>
+  main() {struct stat st;  exit(stat("configure/", &st) != 0); }
+!     ]])],[
+        vim_cv_stat_ignores_slash=yes
+      ],[
+        vim_cv_stat_ignores_slash=no
+***************
+*** 3631,3637 ****
+  
+  AC_CACHE_CHECK([whether memmove handles overlaps],[vim_cv_memmove_handles_overlap],
+    [
+!     AC_RUN_IFELSE([[#define mch_memmove(s,d,l) memmove(d,s,l) $bcopy_test_prog]],
+        [
+  	vim_cv_memmove_handles_overlap=yes
+        ],[
+--- 3631,3637 ----
+  
+  AC_CACHE_CHECK([whether memmove handles overlaps],[vim_cv_memmove_handles_overlap],
+    [
+!     AC_RUN_IFELSE([AC_LANG_SOURCE([[#define mch_memmove(s,d,l) memmove(d,s,l) $bcopy_test_prog]])],
+        [
+  	vim_cv_memmove_handles_overlap=yes
+        ],[
+***************
+*** 3646,3652 ****
+  else
+    AC_CACHE_CHECK([whether bcopy handles overlaps],[vim_cv_bcopy_handles_overlap],
+      [
+!       AC_RUN_IFELSE([[#define mch_bcopy(s,d,l) bcopy(d,s,l) $bcopy_test_prog]],
+        [
+  	vim_cv_bcopy_handles_overlap=yes
+        ],[
+--- 3646,3652 ----
+  else
+    AC_CACHE_CHECK([whether bcopy handles overlaps],[vim_cv_bcopy_handles_overlap],
+      [
+!       AC_RUN_IFELSE([AC_LANG_SOURCE([[#define mch_bcopy(s,d,l) bcopy(d,s,l) $bcopy_test_prog]])],
+        [
+  	vim_cv_bcopy_handles_overlap=yes
+        ],[
+***************
+*** 3661,3667 ****
+    else
+      AC_CACHE_CHECK([whether memcpy handles overlaps],[vim_cv_memcpy_handles_overlap],
+        [
+! 	AC_RUN_IFELSE([[#define mch_memcpy(s,d,l) memcpy(d,s,l) $bcopy_test_prog]],
+  	  [
+  	    vim_cv_memcpy_handles_overlap=yes
+  	  ],[
+--- 3661,3667 ----
+    else
+      AC_CACHE_CHECK([whether memcpy handles overlaps],[vim_cv_memcpy_handles_overlap],
+        [
+! 	AC_RUN_IFELSE([AC_LANG_SOURCE([[#define mch_memcpy(s,d,l) memcpy(d,s,l) $bcopy_test_prog]])],
+  	  [
+  	    vim_cv_memcpy_handles_overlap=yes
+  	  ],[
+*** ../vim-7.4.222/src/auto/configure	2014-03-27 17:19:05.868676325 +0100
+--- src/auto/configure	2014-03-27 17:35:39.660691553 +0100
+***************
+*** 1,11 ****
+  #! /bin/sh
+  # Guess values for system-dependent variables and create Makefiles.
+! # Generated by GNU Autoconf 2.65.
+  #
+  #
+! # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+! # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+! # Inc.
+  #
+  #
+  # This configure script is free software; the Free Software Foundation
+--- 1,9 ----
+  #! /bin/sh
+  # Guess values for system-dependent variables and create Makefiles.
+! # Generated by GNU Autoconf 2.69.
+  #
+  #
+! # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+  #
+  #
+  # This configure script is free software; the Free Software Foundation
+***************
+*** 89,94 ****
+--- 87,93 ----
+  IFS=" ""	$as_nl"
+  
+  # Find who we are.  Look in the path if we contain no directory separator.
++ as_myself=
+  case $0 in #((
+    *[\\/]* ) as_myself=$0 ;;
+    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+***************
+*** 133,138 ****
+--- 132,162 ----
+  # CDPATH.
+  (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+  
++ # Use a proper internal environment variable to ensure we don't fall
++   # into an infinite loop, continuously re-executing ourselves.
++   if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
++     _as_can_reexec=no; export _as_can_reexec;
++     # We cannot yet assume a decent shell, so we have to provide a
++ # neutralization value for shells without unset; and this also
++ # works around shells that cannot unset nonexistent variables.
++ # Preserve -v and -x to the replacement shell.
++ BASH_ENV=/dev/null
++ ENV=/dev/null
++ (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
++ case $- in # ((((
++   *v*x* | *x*v* ) as_opts=-vx ;;
++   *v* ) as_opts=-v ;;
++   *x* ) as_opts=-x ;;
++   * ) as_opts= ;;
++ esac
++ exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
++ # Admittedly, this is quite paranoid, since all the known shells bail
++ # out after a failed `exec'.
++ $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
++ as_fn_exit 255
++   fi
++   # We don't want this to propagate to other subprocesses.
++           { _as_can_reexec=; unset _as_can_reexec;}
+  if test "x$CONFIG_SHELL" = x; then
+    as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+    emulate sh
+***************
+*** 166,172 ****
+  else
+    exitcode=1; echo positional parameters were not saved.
+  fi
+! test x\$exitcode = x0 || exit 1"
+    as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+    as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+    eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+--- 190,197 ----
+  else
+    exitcode=1; echo positional parameters were not saved.
+  fi
+! test x\$exitcode = x0 || exit 1
+! test -x / || exit 1"
+    as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+    as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+    eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+***************
+*** 211,224 ****
+  
+  
+        if test "x$CONFIG_SHELL" != x; then :
+!   # We cannot yet assume a decent shell, so we have to provide a
+! 	# neutralization value for shells without unset; and this also
+! 	# works around shells that cannot unset nonexistent variables.
+! 	BASH_ENV=/dev/null
+! 	ENV=/dev/null
+! 	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+! 	export CONFIG_SHELL
+! 	exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+  fi
+  
+      if test x$as_have_required = xno; then :
+--- 236,260 ----
+  
+  
+        if test "x$CONFIG_SHELL" != x; then :
+!   export CONFIG_SHELL
+!              # We cannot yet assume a decent shell, so we have to provide a
+! # neutralization value for shells without unset; and this also
+! # works around shells that cannot unset nonexistent variables.
+! # Preserve -v and -x to the replacement shell.
+! BASH_ENV=/dev/null
+! ENV=/dev/null
+! (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+! case $- in # ((((
+!   *v*x* | *x*v* ) as_opts=-vx ;;
+!   *v* ) as_opts=-v ;;
+!   *x* ) as_opts=-x ;;
+!   * ) as_opts= ;;
+! esac
+! exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+! # Admittedly, this is quite paranoid, since all the known shells bail
+! # out after a failed `exec'.
+! $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+! exit 255
+  fi
+  
+      if test x$as_have_required = xno; then :
+***************
+*** 316,325 ****
+        test -d "$as_dir" && break
+      done
+      test -z "$as_dirs" || eval "mkdir $as_dirs"
+!   } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
+  
+  
+  } # as_fn_mkdir_p
+  # as_fn_append VAR VALUE
+  # ----------------------
+  # Append the text in VALUE to the end of the definition contained in VAR. Take
+--- 352,369 ----
+        test -d "$as_dir" && break
+      done
+      test -z "$as_dirs" || eval "mkdir $as_dirs"
+!   } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+  
+  
+  } # as_fn_mkdir_p
++ 
++ # as_fn_executable_p FILE
++ # -----------------------
++ # Test if FILE is an executable regular file.
++ as_fn_executable_p ()
++ {
++   test -f "$1" && test -x "$1"
++ } # as_fn_executable_p
+  # as_fn_append VAR VALUE
+  # ----------------------
+  # Append the text in VALUE to the end of the definition contained in VAR. Take
+***************
+*** 356,374 ****
+  fi # as_fn_arith
+  
+  
+! # as_fn_error ERROR [LINENO LOG_FD]
+! # ---------------------------------
+  # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+  # provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+! # script with status $?, using 1 if that was 0.
+  as_fn_error ()
+  {
+!   as_status=$?; test $as_status -eq 0 && as_status=1
+!   if test "$3"; then
+!     as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+!     $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+    fi
+!   $as_echo "$as_me: error: $1" >&2
+    as_fn_exit $as_status
+  } # as_fn_error
+  
+--- 400,418 ----
+  fi # as_fn_arith
+  
+  
+! # as_fn_error STATUS ERROR [LINENO LOG_FD]
+! # ----------------------------------------
+  # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+  # provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+! # script with STATUS, using 1 if that was 0.
+  as_fn_error ()
+  {
+!   as_status=$1; test $as_status -eq 0 && as_status=1
+!   if test "$4"; then
+!     as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+!     $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+    fi
+!   $as_echo "$as_me: error: $2" >&2
+    as_fn_exit $as_status
+  } # as_fn_error
+  
+***************
+*** 441,446 ****
+--- 485,494 ----
+    chmod +x "$as_me.lineno" ||
+      { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+  
++   # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
++   # already done that, so ensure we don't try to do so again and fall
++   # in an infinite loop.  This has already happened in practice.
++   _as_can_reexec=no; export _as_can_reexec
+    # Don't try to exec as it changes $[0], causing all sort of problems
+    # (the dirname of $[0] is not the place where we might find the
+    # original and so on.  Autoconf is especially sensitive to this).
+***************
+*** 475,490 ****
+      # ... but there are two gotchas:
+      # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+      # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+!     # In both cases, we have to default to `cp -p'.
+      ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+!       as_ln_s='cp -p'
+    elif ln conf$$.file conf$$ 2>/dev/null; then
+      as_ln_s=ln
+    else
+!     as_ln_s='cp -p'
+    fi
+  else
+!   as_ln_s='cp -p'
+  fi
+  rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+  rmdir conf$$.dir 2>/dev/null
+--- 523,538 ----
+      # ... but there are two gotchas:
+      # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+      # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+!     # In both cases, we have to default to `cp -pR'.
+      ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+!       as_ln_s='cp -pR'
+    elif ln conf$$.file conf$$ 2>/dev/null; then
+      as_ln_s=ln
+    else
+!     as_ln_s='cp -pR'
+    fi
+  else
+!   as_ln_s='cp -pR'
+  fi
+  rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+  rmdir conf$$.dir 2>/dev/null
+***************
+*** 496,523 ****
+    as_mkdir_p=false
+  fi
+  
+! if test -x / >/dev/null 2>&1; then
+!   as_test_x='test -x'
+! else
+!   if ls -dL / >/dev/null 2>&1; then
+!     as_ls_L_option=L
+!   else
+!     as_ls_L_option=
+!   fi
+!   as_test_x='
+!     eval sh -c '\''
+!       if test -d "$1"; then
+! 	test -d "$1/.";
+!       else
+! 	case $1 in #(
+! 	-*)set "./$1";;
+! 	esac;
+! 	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+! 	???[sx]*):;;*)false;;esac;fi
+!     '\'' sh
+!   '
+! fi
+! as_executable_p=$as_test_x
+  
+  # Sed expression to map a string onto a valid CPP name.
+  as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+--- 544,551 ----
+    as_mkdir_p=false
+  fi
+  
+! as_test_x='test -x'
+! as_executable_p=as_fn_executable_p
+  
+  # Sed expression to map a string onto a valid CPP name.
+  as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+***************
+*** 530,536 ****
+  exec 6>&1
+  
+  # Name of the host.
+! # hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+  # so uname gets run too.
+  ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+  
+--- 558,564 ----
+  exec 6>&1
+  
+  # Name of the host.
+! # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+  # so uname gets run too.
+  ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+  
+***************
+*** 872,879 ****
+    fi
+  
+    case $ac_option in
+!   *=*)	ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+!   *)	ac_optarg=yes ;;
+    esac
+  
+    # Accept the important Cygnus configure options, so we can diagnose typos.
+--- 900,908 ----
+    fi
+  
+    case $ac_option in
+!   *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+!   *=)   ac_optarg= ;;
+!   *)    ac_optarg=yes ;;
+    esac
+  
+    # Accept the important Cygnus configure options, so we can diagnose typos.
+***************
+*** 918,924 ****
+      ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+      # Reject names that are not valid shell variable names.
+      expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+!       as_fn_error "invalid feature name: $ac_useropt"
+      ac_useropt_orig=$ac_useropt
+      ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+      case $ac_user_opts in
+--- 947,953 ----
+      ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+      # Reject names that are not valid shell variable names.
+      expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+!       as_fn_error $? "invalid feature name: $ac_useropt"
+      ac_useropt_orig=$ac_useropt
+      ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+      case $ac_user_opts in
+***************
+*** 944,950 ****
+      ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+      # Reject names that are not valid shell variable names.
+      expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+!       as_fn_error "invalid feature name: $ac_useropt"
+      ac_useropt_orig=$ac_useropt
+      ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+      case $ac_user_opts in
+--- 973,979 ----
+      ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+      # Reject names that are not valid shell variable names.
+      expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+!       as_fn_error $? "invalid feature name: $ac_useropt"
+      ac_useropt_orig=$ac_useropt
+      ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+      case $ac_user_opts in
+***************
+*** 1148,1154 ****
+      ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+      # Reject names that are not valid shell variable names.
+      expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+!       as_fn_error "invalid package name: $ac_useropt"
+      ac_useropt_orig=$ac_useropt
+      ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+      case $ac_user_opts in
+--- 1177,1183 ----
+      ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+      # Reject names that are not valid shell variable names.
+      expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+!       as_fn_error $? "invalid package name: $ac_useropt"
+      ac_useropt_orig=$ac_useropt
+      ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+      case $ac_user_opts in
+***************
+*** 1164,1170 ****
+      ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+      # Reject names that are not valid shell variable names.
+      expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+!       as_fn_error "invalid package name: $ac_useropt"
+      ac_useropt_orig=$ac_useropt
+      ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+      case $ac_user_opts in
+--- 1193,1199 ----
+      ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+      # Reject names that are not valid shell variable names.
+      expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+!       as_fn_error $? "invalid package name: $ac_useropt"
+      ac_useropt_orig=$ac_useropt
+      ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+      case $ac_user_opts in
+***************
+*** 1194,1201 ****
+    | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+      x_libraries=$ac_optarg ;;
+  
+!   -*) as_fn_error "unrecognized option: \`$ac_option'
+! Try \`$0 --help' for more information."
+      ;;
+  
+    *=*)
+--- 1223,1230 ----
+    | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+      x_libraries=$ac_optarg ;;
+  
+!   -*) as_fn_error $? "unrecognized option: \`$ac_option'
+! Try \`$0 --help' for more information"
+      ;;
+  
+    *=*)
+***************
+*** 1203,1209 ****
+      # Reject names that are not valid shell variable names.
+      case $ac_envvar in #(
+        '' | [0-9]* | *[!_$as_cr_alnum]* )
+!       as_fn_error "invalid variable name: \`$ac_envvar'" ;;
+      esac
+      eval $ac_envvar=\$ac_optarg
+      export $ac_envvar ;;
+--- 1232,1238 ----
+      # Reject names that are not valid shell variable names.
+      case $ac_envvar in #(
+        '' | [0-9]* | *[!_$as_cr_alnum]* )
+!       as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+      esac
+      eval $ac_envvar=\$ac_optarg
+      export $ac_envvar ;;
+***************
+*** 1213,1219 ****
+      $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+      expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+        $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+!     : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+      ;;
+  
+    esac
+--- 1242,1248 ----
+      $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+      expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+        $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+!     : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+      ;;
+  
+    esac
+***************
+*** 1221,1233 ****
+  
+  if test -n "$ac_prev"; then
+    ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+!   as_fn_error "missing argument to $ac_option"
+  fi
+  
+  if test -n "$ac_unrecognized_opts"; then
+    case $enable_option_checking in
+      no) ;;
+!     fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;;
+      *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+    esac
+  fi
+--- 1250,1262 ----
+  
+  if test -n "$ac_prev"; then
+    ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+!   as_fn_error $? "missing argument to $ac_option"
+  fi
+  
+  if test -n "$ac_unrecognized_opts"; then
+    case $enable_option_checking in
+      no) ;;
+!     fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+      *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+    esac
+  fi
+***************
+*** 1250,1256 ****
+      [\\/$]* | ?:[\\/]* )  continue;;
+      NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+    esac
+!   as_fn_error "expected an absolute directory name for --$ac_var: $ac_val"
+  done
+  
+  # There might be people who depend on the old broken behavior: `$host'
+--- 1279,1285 ----
+      [\\/$]* | ?:[\\/]* )  continue;;
+      NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+    esac
+!   as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+  done
+  
+  # There might be people who depend on the old broken behavior: `$host'
+***************
+*** 1264,1271 ****
+  if test "x$host_alias" != x; then
+    if test "x$build_alias" = x; then
+      cross_compiling=maybe
+-     $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+-     If a cross compiler is detected then cross compile mode will be used." >&2
+    elif test "x$build_alias" != "x$host_alias"; then
+      cross_compiling=yes
+    fi
+--- 1293,1298 ----
+***************
+*** 1280,1288 ****
+  ac_pwd=`pwd` && test -n "$ac_pwd" &&
+  ac_ls_di=`ls -di .` &&
+  ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+!   as_fn_error "working directory cannot be determined"
+  test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+!   as_fn_error "pwd does not report name of working directory"
+  
+  
+  # Find the source files, if location was not specified.
+--- 1307,1315 ----
+  ac_pwd=`pwd` && test -n "$ac_pwd" &&
+  ac_ls_di=`ls -di .` &&
+  ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+!   as_fn_error $? "working directory cannot be determined"
+  test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+!   as_fn_error $? "pwd does not report name of working directory"
+  
+  
+  # Find the source files, if location was not specified.
+***************
+*** 1321,1331 ****
+  fi
+  if test ! -r "$srcdir/$ac_unique_file"; then
+    test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+!   as_fn_error "cannot find sources ($ac_unique_file) in $srcdir"
+  fi
+  ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+  ac_abs_confdir=`(
+! 	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg"
+  	pwd)`
+  # When building in place, set srcdir=.
+  if test "$ac_abs_confdir" = "$ac_pwd"; then
+--- 1348,1358 ----
+  fi
+  if test ! -r "$srcdir/$ac_unique_file"; then
+    test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+!   as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+  fi
+  ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+  ac_abs_confdir=`(
+! 	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+  	pwd)`
+  # When building in place, set srcdir=.
+  if test "$ac_abs_confdir" = "$ac_pwd"; then
+***************
+*** 1365,1371 ****
+        --help=short        display options specific to this package
+        --help=recursive    display the short help of all the included packages
+    -V, --version           display version information and exit
+!   -q, --quiet, --silent   do not print \`checking...' messages
+        --cache-file=FILE   cache test results in FILE [disabled]
+    -C, --config-cache      alias for \`--cache-file=config.cache'
+    -n, --no-create         do not create output files
+--- 1392,1398 ----
+        --help=short        display options specific to this package
+        --help=recursive    display the short help of all the included packages
+    -V, --version           display version information and exit
+!   -q, --quiet, --silent   do not print \`checking ...' messages
+        --cache-file=FILE   cache test results in FILE [disabled]
+    -C, --config-cache      alias for \`--cache-file=config.cache'
+    -n, --no-create         do not create output files
+***************
+*** 1563,1571 ****
+  if $ac_init_version; then
+    cat <<\_ACEOF
+  configure
+! generated by GNU Autoconf 2.65
+  
+! Copyright (C) 2009 Free Software Foundation, Inc.
+  This configure script is free software; the Free Software Foundation
+  gives unlimited permission to copy, distribute and modify it.
+  _ACEOF
+--- 1590,1598 ----
+  if $ac_init_version; then
+    cat <<\_ACEOF
+  configure
+! generated by GNU Autoconf 2.69
+  
+! Copyright (C) 2012 Free Software Foundation, Inc.
+  This configure script is free software; the Free Software Foundation
+  gives unlimited permission to copy, distribute and modify it.
+  _ACEOF
+***************
+*** 1609,1615 ****
+  
+  	ac_retval=1
+  fi
+!   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+    as_fn_set_status $ac_retval
+  
+  } # ac_fn_c_try_compile
+--- 1636,1642 ----
+  
+  	ac_retval=1
+  fi
+!   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+    as_fn_set_status $ac_retval
+  
+  } # ac_fn_c_try_compile
+***************
+*** 1635,1641 ****
+      mv -f conftest.er1 conftest.err
+    fi
+    $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+!   test $ac_status = 0; } >/dev/null && {
+  	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+  	 test ! -s conftest.err
+         }; then :
+--- 1662,1668 ----
+      mv -f conftest.er1 conftest.err
+    fi
+    $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+!   test $ac_status = 0; } > conftest.i && {
+  	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+  	 test ! -s conftest.err
+         }; then :
+***************
+*** 1646,1652 ****
+  
+      ac_retval=1
+  fi
+!   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+    as_fn_set_status $ac_retval
+  
+  } # ac_fn_c_try_cpp
+--- 1673,1679 ----
+  
+      ac_retval=1
+  fi
+!   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+    as_fn_set_status $ac_retval
+  
+  } # ac_fn_c_try_cpp
+***************
+*** 1678,1684 ****
+  	 test ! -s conftest.err
+         } && test -s conftest$ac_exeext && {
+  	 test "$cross_compiling" = yes ||
+! 	 $as_test_x conftest$ac_exeext
+         }; then :
+    ac_retval=0
+  else
+--- 1705,1711 ----
+  	 test ! -s conftest.err
+         } && test -s conftest$ac_exeext && {
+  	 test "$cross_compiling" = yes ||
+! 	 test -x conftest$ac_exeext
+         }; then :
+    ac_retval=0
+  else
+***************
+*** 1692,1698 ****
+    # interfere with the next link command; also delete a directory that is
+    # left behind by Apple's compiler.  We do this before executing the actions.
+    rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+!   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+    as_fn_set_status $ac_retval
+  
+  } # ac_fn_c_try_link
+--- 1719,1725 ----
+    # interfere with the next link command; also delete a directory that is
+    # left behind by Apple's compiler.  We do this before executing the actions.
+    rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+!   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+    as_fn_set_status $ac_retval
+  
+  } # ac_fn_c_try_link
+***************
+*** 1734,1740 ****
+         ac_retval=$ac_status
+  fi
+    rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+!   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+    as_fn_set_status $ac_retval
+  
+  } # ac_fn_c_try_run
+--- 1761,1767 ----
+         ac_retval=$ac_status
+  fi
+    rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+!   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+    as_fn_set_status $ac_retval
+  
+  } # ac_fn_c_try_run
+***************
+*** 1747,1756 ****
+  ac_fn_c_check_header_mongrel ()
+  {
+    as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+!   if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+  $as_echo_n "checking for $2... " >&6; }
+! if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+    $as_echo_n "(cached) " >&6
+  fi
+  eval ac_res=\$$3
+--- 1774,1783 ----
+  ac_fn_c_check_header_mongrel ()
+  {
+    as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+!   if eval \${$3+:} false; then :
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+  $as_echo_n "checking for $2... " >&6; }
+! if eval \${$3+:} false; then :
+    $as_echo_n "(cached) " >&6
+  fi
+  eval ac_res=\$$3
+***************
+*** 1786,1792 ****
+  else
+    ac_header_preproc=no
+  fi
+! rm -f conftest.err conftest.$ac_ext
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+  $as_echo "$ac_header_preproc" >&6; }
+  
+--- 1813,1819 ----
+  else
+    ac_header_preproc=no
+  fi
+! rm -f conftest.err conftest.i conftest.$ac_ext
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+  $as_echo "$ac_header_preproc" >&6; }
+  
+***************
+*** 1813,1819 ****
+  esac
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+  $as_echo_n "checking for $2... " >&6; }
+! if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+    $as_echo_n "(cached) " >&6
+  else
+    eval "$3=\$ac_header_compiler"
+--- 1840,1846 ----
+  esac
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+  $as_echo_n "checking for $2... " >&6; }
+! if eval \${$3+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    eval "$3=\$ac_header_compiler"
+***************
+*** 1822,1828 ****
+  	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+  $as_echo "$ac_res" >&6; }
+  fi
+!   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  
+  } # ac_fn_c_check_header_mongrel
+  
+--- 1849,1855 ----
+  	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+  $as_echo "$ac_res" >&6; }
+  fi
+!   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  
+  } # ac_fn_c_check_header_mongrel
+  
+***************
+*** 1835,1841 ****
+    as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+  $as_echo_n "checking for $2... " >&6; }
+! if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+    $as_echo_n "(cached) " >&6
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+--- 1862,1868 ----
+    as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+  $as_echo_n "checking for $2... " >&6; }
+! if eval \${$3+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+***************
+*** 1853,1859 ****
+  eval ac_res=\$$3
+  	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+  $as_echo "$ac_res" >&6; }
+!   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  
+  } # ac_fn_c_check_header_compile
+  
+--- 1880,1886 ----
+  eval ac_res=\$$3
+  	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+  $as_echo "$ac_res" >&6; }
+!   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  
+  } # ac_fn_c_check_header_compile
+  
+***************
+*** 1865,1871 ****
+    as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+  $as_echo_n "checking for $2... " >&6; }
+! if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+    $as_echo_n "(cached) " >&6
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+--- 1892,1898 ----
+    as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+  $as_echo_n "checking for $2... " >&6; }
+! if eval \${$3+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+***************
+*** 1920,1926 ****
+  eval ac_res=\$$3
+  	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+  $as_echo "$ac_res" >&6; }
+!   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  
+  } # ac_fn_c_check_func
+  
+--- 1947,1953 ----
+  eval ac_res=\$$3
+  	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+  $as_echo "$ac_res" >&6; }
+!   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  
+  } # ac_fn_c_check_func
+  
+***************
+*** 1933,1939 ****
+    as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+  $as_echo_n "checking for $2... " >&6; }
+! if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+    $as_echo_n "(cached) " >&6
+  else
+    eval "$3=no"
+--- 1960,1966 ----
+    as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+  $as_echo_n "checking for $2... " >&6; }
+! if eval \${$3+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    eval "$3=no"
+***************
+*** 1974,1980 ****
+  eval ac_res=\$$3
+  	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+  $as_echo "$ac_res" >&6; }
+!   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  
+  } # ac_fn_c_check_type
+  
+--- 2001,2007 ----
+  eval ac_res=\$$3
+  	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+  $as_echo "$ac_res" >&6; }
+!   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  
+  } # ac_fn_c_check_type
+  
+***************
+*** 1987,1993 ****
+    as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5
+  $as_echo_n "checking for uint$2_t... " >&6; }
+! if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+    $as_echo_n "(cached) " >&6
+  else
+    eval "$3=no"
+--- 2014,2020 ----
+    as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5
+  $as_echo_n "checking for uint$2_t... " >&6; }
+! if eval \${$3+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    eval "$3=no"
+***************
+*** 2002,2008 ****
+  main ()
+  {
+  static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)];
+! test_array [0] = 0
+  
+    ;
+    return 0;
+--- 2029,2036 ----
+  main ()
+  {
+  static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)];
+! test_array [0] = 0;
+! return test_array [0];
+  
+    ;
+    return 0;
+***************
+*** 2017,2024 ****
+  esac
+  fi
+  rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+!        eval as_val=\$$3
+!    if test "x$as_val" = x""no; then :
+  
+  else
+    break
+--- 2045,2051 ----
+  esac
+  fi
+  rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+!        if eval test \"x\$"$3"\" = x"no"; then :
+  
+  else
+    break
+***************
+*** 2028,2034 ****
+  eval ac_res=\$$3
+  	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+  $as_echo "$ac_res" >&6; }
+!   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  
+  } # ac_fn_c_find_uintX_t
+  
+--- 2055,2061 ----
+  eval ac_res=\$$3
+  	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+  $as_echo "$ac_res" >&6; }
+!   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  
+  } # ac_fn_c_find_uintX_t
+  
+***************
+*** 2049,2055 ****
+  main ()
+  {
+  static int test_array [1 - 2 * !(($2) >= 0)];
+! test_array [0] = 0
+  
+    ;
+    return 0;
+--- 2076,2083 ----
+  main ()
+  {
+  static int test_array [1 - 2 * !(($2) >= 0)];
+! test_array [0] = 0;
+! return test_array [0];
+  
+    ;
+    return 0;
+***************
+*** 2065,2071 ****
+  main ()
+  {
+  static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+! test_array [0] = 0
+  
+    ;
+    return 0;
+--- 2093,2100 ----
+  main ()
+  {
+  static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+! test_array [0] = 0;
+! return test_array [0];
+  
+    ;
+    return 0;
+***************
+*** 2091,2097 ****
+  main ()
+  {
+  static int test_array [1 - 2 * !(($2) < 0)];
+! test_array [0] = 0
+  
+    ;
+    return 0;
+--- 2120,2127 ----
+  main ()
+  {
+  static int test_array [1 - 2 * !(($2) < 0)];
+! test_array [0] = 0;
+! return test_array [0];
+  
+    ;
+    return 0;
+***************
+*** 2107,2113 ****
+  main ()
+  {
+  static int test_array [1 - 2 * !(($2) >= $ac_mid)];
+! test_array [0] = 0
+  
+    ;
+    return 0;
+--- 2137,2144 ----
+  main ()
+  {
+  static int test_array [1 - 2 * !(($2) >= $ac_mid)];
+! test_array [0] = 0;
+! return test_array [0];
+  
+    ;
+    return 0;
+***************
+*** 2141,2147 ****
+  main ()
+  {
+  static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+! test_array [0] = 0
+  
+    ;
+    return 0;
+--- 2172,2179 ----
+  main ()
+  {
+  static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+! test_array [0] = 0;
+! return test_array [0];
+  
+    ;
+    return 0;
+***************
+*** 2205,2211 ****
+  rm -f conftest.val
+  
+    fi
+!   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+    as_fn_set_status $ac_retval
+  
+  } # ac_fn_c_compute_int
+--- 2237,2243 ----
+  rm -f conftest.val
+  
+    fi
+!   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+    as_fn_set_status $ac_retval
+  
+  } # ac_fn_c_compute_int
+***************
+*** 2214,2220 ****
+  running configure, to aid debugging if configure makes a mistake.
+  
+  It was created by $as_me, which was
+! generated by GNU Autoconf 2.65.  Invocation command line was
+  
+    $ $0 $@
+  
+--- 2246,2252 ----
+  running configure, to aid debugging if configure makes a mistake.
+  
+  It was created by $as_me, which was
+! generated by GNU Autoconf 2.69.  Invocation command line was
+  
+    $ $0 $@
+  
+***************
+*** 2324,2334 ****
+    {
+      echo
+  
+!     cat <<\_ASBOX
+! ## ---------------- ##
+  ## Cache variables. ##
+! ## ---------------- ##
+! _ASBOX
+      echo
+      # The following way of writing the cache mishandles newlines in values,
+  (
+--- 2356,2364 ----
+    {
+      echo
+  
+!     $as_echo "## ---------------- ##
+  ## Cache variables. ##
+! ## ---------------- ##"
+      echo
+      # The following way of writing the cache mishandles newlines in values,
+  (
+***************
+*** 2362,2372 ****
+  )
+      echo
+  
+!     cat <<\_ASBOX
+! ## ----------------- ##
+  ## Output variables. ##
+! ## ----------------- ##
+! _ASBOX
+      echo
+      for ac_var in $ac_subst_vars
+      do
+--- 2392,2400 ----
+  )
+      echo
+  
+!     $as_echo "## ----------------- ##
+  ## Output variables. ##
+! ## ----------------- ##"
+      echo
+      for ac_var in $ac_subst_vars
+      do
+***************
+*** 2379,2389 ****
+      echo
+  
+      if test -n "$ac_subst_files"; then
+!       cat <<\_ASBOX
+! ## ------------------- ##
+  ## File substitutions. ##
+! ## ------------------- ##
+! _ASBOX
+        echo
+        for ac_var in $ac_subst_files
+        do
+--- 2407,2415 ----
+      echo
+  
+      if test -n "$ac_subst_files"; then
+!       $as_echo "## ------------------- ##
+  ## File substitutions. ##
+! ## ------------------- ##"
+        echo
+        for ac_var in $ac_subst_files
+        do
+***************
+*** 2397,2407 ****
+      fi
+  
+      if test -s confdefs.h; then
+!       cat <<\_ASBOX
+! ## ----------- ##
+  ## confdefs.h. ##
+! ## ----------- ##
+! _ASBOX
+        echo
+        cat confdefs.h
+        echo
+--- 2423,2431 ----
+      fi
+  
+      if test -s confdefs.h; then
+!       $as_echo "## ----------- ##
+  ## confdefs.h. ##
+! ## ----------- ##"
+        echo
+        cat confdefs.h
+        echo
+***************
+*** 2456,2462 ****
+  ac_site_file1=NONE
+  ac_site_file2=NONE
+  if test -n "$CONFIG_SITE"; then
+!   ac_site_file1=$CONFIG_SITE
+  elif test "x$prefix" != xNONE; then
+    ac_site_file1=$prefix/share/config.site
+    ac_site_file2=$prefix/etc/config.site
+--- 2480,2491 ----
+  ac_site_file1=NONE
+  ac_site_file2=NONE
+  if test -n "$CONFIG_SITE"; then
+!   # We do not want a PATH search for config.site.
+!   case $CONFIG_SITE in #((
+!     -*)  ac_site_file1=./$CONFIG_SITE;;
+!     */*) ac_site_file1=$CONFIG_SITE;;
+!     *)   ac_site_file1=./$CONFIG_SITE;;
+!   esac
+  elif test "x$prefix" != xNONE; then
+    ac_site_file1=$prefix/share/config.site
+    ac_site_file2=$prefix/etc/config.site
+***************
+*** 2471,2477 ****
+      { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+  $as_echo "$as_me: loading site script $ac_site_file" >&6;}
+      sed 's/^/| /' "$ac_site_file" >&5
+!     . "$ac_site_file"
+    fi
+  done
+  
+--- 2500,2510 ----
+      { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+  $as_echo "$as_me: loading site script $ac_site_file" >&6;}
+      sed 's/^/| /' "$ac_site_file" >&5
+!     . "$ac_site_file" \
+!       || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+! $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+! as_fn_error $? "failed to load site script $ac_site_file
+! See \`config.log' for more details" "$LINENO" 5; }
+    fi
+  done
+  
+***************
+*** 2547,2553 ****
+  $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+  $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+!   as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+  fi
+  ## -------------------- ##
+  ## Main body of script. ##
+--- 2580,2586 ----
+  $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+  $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+!   as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+  fi
+  ## -------------------- ##
+  ## Main body of script. ##
+***************
+*** 2569,2575 ****
+  $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+  set x ${MAKE-make}
+  ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+! if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then :
+    $as_echo_n "(cached) " >&6
+  else
+    cat >conftest.make <<\_ACEOF
+--- 2602,2608 ----
+  $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+  set x ${MAKE-make}
+  ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+! if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    cat >conftest.make <<\_ACEOF
+***************
+*** 2577,2583 ****
+  all:
+  	@echo '@@@%%%=$(MAKE)=@@@%%%'
+  _ACEOF
+! # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+  case `${MAKE-make} -f conftest.make 2>/dev/null` in
+    *@@@%%%=?*=@@@%%%*)
+      eval ac_cv_prog_make_${ac_make}_set=yes;;
+--- 2610,2616 ----
+  all:
+  	@echo '@@@%%%=$(MAKE)=@@@%%%'
+  _ACEOF
+! # GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+  case `${MAKE-make} -f conftest.make 2>/dev/null` in
+    *@@@%%%=?*=@@@%%%*)
+      eval ac_cv_prog_make_${ac_make}_set=yes;;
+***************
+*** 2607,2613 ****
+  set dummy ${ac_tool_prefix}gcc; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if test "${ac_cv_prog_CC+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if test -n "$CC"; then
+--- 2640,2646 ----
+  set dummy ${ac_tool_prefix}gcc; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if ${ac_cv_prog_CC+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if test -n "$CC"; then
+***************
+*** 2619,2625 ****
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+      ac_cv_prog_CC="${ac_tool_prefix}gcc"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+--- 2652,2658 ----
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+      ac_cv_prog_CC="${ac_tool_prefix}gcc"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+***************
+*** 2647,2653 ****
+  set dummy gcc; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if test -n "$ac_ct_CC"; then
+--- 2680,2686 ----
+  set dummy gcc; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if ${ac_cv_prog_ac_ct_CC+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if test -n "$ac_ct_CC"; then
+***************
+*** 2659,2665 ****
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+      ac_cv_prog_ac_ct_CC="gcc"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+--- 2692,2698 ----
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+      ac_cv_prog_ac_ct_CC="gcc"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+***************
+*** 2700,2706 ****
+  set dummy ${ac_tool_prefix}cc; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if test "${ac_cv_prog_CC+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if test -n "$CC"; then
+--- 2733,2739 ----
+  set dummy ${ac_tool_prefix}cc; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if ${ac_cv_prog_CC+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if test -n "$CC"; then
+***************
+*** 2712,2718 ****
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+      ac_cv_prog_CC="${ac_tool_prefix}cc"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+--- 2745,2751 ----
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+      ac_cv_prog_CC="${ac_tool_prefix}cc"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+***************
+*** 2740,2746 ****
+  set dummy cc; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if test "${ac_cv_prog_CC+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if test -n "$CC"; then
+--- 2773,2779 ----
+  set dummy cc; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if ${ac_cv_prog_CC+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if test -n "$CC"; then
+***************
+*** 2753,2759 ****
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+      if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+         ac_prog_rejected=yes
+         continue
+--- 2786,2792 ----
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+      if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+         ac_prog_rejected=yes
+         continue
+***************
+*** 2799,2805 ****
+  set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if test "${ac_cv_prog_CC+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if test -n "$CC"; then
+--- 2832,2838 ----
+  set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if ${ac_cv_prog_CC+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if test -n "$CC"; then
+***************
+*** 2811,2817 ****
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+      ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+--- 2844,2850 ----
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+      ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+***************
+*** 2843,2849 ****
+  set dummy $ac_prog; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if test -n "$ac_ct_CC"; then
+--- 2876,2882 ----
+  set dummy $ac_prog; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if ${ac_cv_prog_ac_ct_CC+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if test -n "$ac_ct_CC"; then
+***************
+*** 2855,2861 ****
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+      ac_cv_prog_ac_ct_CC="$ac_prog"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+--- 2888,2894 ----
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+      ac_cv_prog_ac_ct_CC="$ac_prog"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+***************
+*** 2897,2904 ****
+  
+  test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+  $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+! as_fn_error "no acceptable C compiler found in \$PATH
+! See \`config.log' for more details." "$LINENO" 5; }
+  
+  # Provide some information about the compiler.
+  $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+--- 2930,2937 ----
+  
+  test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+  $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+! as_fn_error $? "no acceptable C compiler found in \$PATH
+! See \`config.log' for more details" "$LINENO" 5; }
+  
+  # Provide some information about the compiler.
+  $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+***************
+*** 3012,3020 ****
+  
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+  $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+! { as_fn_set_status 77
+! as_fn_error "C compiler cannot create executables
+! See \`config.log' for more details." "$LINENO" 5; }; }
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+  $as_echo "yes" >&6; }
+--- 3045,3052 ----
+  
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+  $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+! as_fn_error 77 "C compiler cannot create executables
+! See \`config.log' for more details" "$LINENO" 5; }
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+  $as_echo "yes" >&6; }
+***************
+*** 3056,3063 ****
+  else
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+  $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+! as_fn_error "cannot compute suffix of executables: cannot compile and link
+! See \`config.log' for more details." "$LINENO" 5; }
+  fi
+  rm -f conftest conftest$ac_cv_exeext
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+--- 3088,3095 ----
+  else
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+  $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+! as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+! See \`config.log' for more details" "$LINENO" 5; }
+  fi
+  rm -f conftest conftest$ac_cv_exeext
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+***************
+*** 3114,3122 ****
+      else
+  	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+  $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+! as_fn_error "cannot run C compiled programs.
+  If you meant to cross compile, use \`--host'.
+! See \`config.log' for more details." "$LINENO" 5; }
+      fi
+    fi
+  fi
+--- 3146,3154 ----
+      else
+  	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+  $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+! as_fn_error $? "cannot run C compiled programs.
+  If you meant to cross compile, use \`--host'.
+! See \`config.log' for more details" "$LINENO" 5; }
+      fi
+    fi
+  fi
+***************
+*** 3127,3133 ****
+  ac_clean_files=$ac_clean_files_save
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+  $as_echo_n "checking for suffix of object files... " >&6; }
+! if test "${ac_cv_objext+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+--- 3159,3165 ----
+  ac_clean_files=$ac_clean_files_save
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+  $as_echo_n "checking for suffix of object files... " >&6; }
+! if ${ac_cv_objext+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+***************
+*** 3167,3174 ****
+  
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+  $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+! as_fn_error "cannot compute suffix of object files: cannot compile
+! See \`config.log' for more details." "$LINENO" 5; }
+  fi
+  rm -f conftest.$ac_cv_objext conftest.$ac_ext
+  fi
+--- 3199,3206 ----
+  
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+  $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+! as_fn_error $? "cannot compute suffix of object files: cannot compile
+! See \`config.log' for more details" "$LINENO" 5; }
+  fi
+  rm -f conftest.$ac_cv_objext conftest.$ac_ext
+  fi
+***************
+*** 3178,3184 ****
+  ac_objext=$OBJEXT
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+  $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+! if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+--- 3210,3216 ----
+  ac_objext=$OBJEXT
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+  $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+! if ${ac_cv_c_compiler_gnu+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+***************
+*** 3215,3221 ****
+  ac_save_CFLAGS=$CFLAGS
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+  $as_echo_n "checking whether $CC accepts -g... " >&6; }
+! if test "${ac_cv_prog_cc_g+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_save_c_werror_flag=$ac_c_werror_flag
+--- 3247,3253 ----
+  ac_save_CFLAGS=$CFLAGS
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+  $as_echo_n "checking whether $CC accepts -g... " >&6; }
+! if ${ac_cv_prog_cc_g+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_save_c_werror_flag=$ac_c_werror_flag
+***************
+*** 3293,3299 ****
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+  $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+! if test "${ac_cv_prog_cc_c89+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_cv_prog_cc_c89=no
+--- 3325,3331 ----
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+  $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+! if ${ac_cv_prog_cc_c89+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_cv_prog_cc_c89=no
+***************
+*** 3302,3309 ****
+  /* end confdefs.h.  */
+  #include <stdarg.h>
+  #include <stdio.h>
+! #include <sys/types.h>
+! #include <sys/stat.h>
+  /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+  struct buf { int x; };
+  FILE * (*rcsopen) (struct buf *, struct stat *, int);
+--- 3334,3340 ----
+  /* end confdefs.h.  */
+  #include <stdarg.h>
+  #include <stdio.h>
+! struct stat;
+  /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+  struct buf { int x; };
+  FILE * (*rcsopen) (struct buf *, struct stat *, int);
+***************
+*** 3399,3405 ****
+    CPP=
+  fi
+  if test -z "$CPP"; then
+!   if test "${ac_cv_prog_CPP+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+        # Double quotes because CPP needs to be expanded
+--- 3430,3436 ----
+    CPP=
+  fi
+  if test -z "$CPP"; then
+!   if ${ac_cv_prog_CPP+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+        # Double quotes because CPP needs to be expanded
+***************
+*** 3429,3435 ****
+    # Broken: fails on valid input.
+  continue
+  fi
+! rm -f conftest.err conftest.$ac_ext
+  
+    # OK, works on sane cases.  Now check whether nonexistent headers
+    # can be detected and how.
+--- 3460,3466 ----
+    # Broken: fails on valid input.
+  continue
+  fi
+! rm -f conftest.err conftest.i conftest.$ac_ext
+  
+    # OK, works on sane cases.  Now check whether nonexistent headers
+    # can be detected and how.
+***************
+*** 3445,3455 ****
+  ac_preproc_ok=:
+  break
+  fi
+! rm -f conftest.err conftest.$ac_ext
+  
+  done
+  # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+! rm -f conftest.err conftest.$ac_ext
+  if $ac_preproc_ok; then :
+    break
+  fi
+--- 3476,3486 ----
+  ac_preproc_ok=:
+  break
+  fi
+! rm -f conftest.err conftest.i conftest.$ac_ext
+  
+  done
+  # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+! rm -f conftest.i conftest.err conftest.$ac_ext
+  if $ac_preproc_ok; then :
+    break
+  fi
+***************
+*** 3488,3494 ****
+    # Broken: fails on valid input.
+  continue
+  fi
+! rm -f conftest.err conftest.$ac_ext
+  
+    # OK, works on sane cases.  Now check whether nonexistent headers
+    # can be detected and how.
+--- 3519,3525 ----
+    # Broken: fails on valid input.
+  continue
+  fi
+! rm -f conftest.err conftest.i conftest.$ac_ext
+  
+    # OK, works on sane cases.  Now check whether nonexistent headers
+    # can be detected and how.
+***************
+*** 3504,3521 ****
+  ac_preproc_ok=:
+  break
+  fi
+! rm -f conftest.err conftest.$ac_ext
+  
+  done
+  # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+! rm -f conftest.err conftest.$ac_ext
+  if $ac_preproc_ok; then :
+  
+  else
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+  $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+! as_fn_error "C preprocessor \"$CPP\" fails sanity check
+! See \`config.log' for more details." "$LINENO" 5; }
+  fi
+  
+  ac_ext=c
+--- 3535,3552 ----
+  ac_preproc_ok=:
+  break
+  fi
+! rm -f conftest.err conftest.i conftest.$ac_ext
+  
+  done
+  # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+! rm -f conftest.i conftest.err conftest.$ac_ext
+  if $ac_preproc_ok; then :
+  
+  else
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+  $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+! as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+! See \`config.log' for more details" "$LINENO" 5; }
+  fi
+  
+  ac_ext=c
+***************
+*** 3527,3533 ****
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+  $as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+! if test "${ac_cv_path_GREP+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if test -z "$GREP"; then
+--- 3558,3564 ----
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+  $as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+! if ${ac_cv_path_GREP+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if test -z "$GREP"; then
+***************
+*** 3541,3547 ****
+      for ac_prog in grep ggrep; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+!       { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+  # Check for GNU ac_path_GREP and select it if it is found.
+    # Check for GNU $ac_path_GREP
+  case `"$ac_path_GREP" --version 2>&1` in
+--- 3572,3578 ----
+      for ac_prog in grep ggrep; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+!       as_fn_executable_p "$ac_path_GREP" || continue
+  # Check for GNU ac_path_GREP and select it if it is found.
+    # Check for GNU $ac_path_GREP
+  case `"$ac_path_GREP" --version 2>&1` in
+***************
+*** 3576,3582 ****
+    done
+  IFS=$as_save_IFS
+    if test -z "$ac_cv_path_GREP"; then
+!     as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+    fi
+  else
+    ac_cv_path_GREP=$GREP
+--- 3607,3613 ----
+    done
+  IFS=$as_save_IFS
+    if test -z "$ac_cv_path_GREP"; then
+!     as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+    fi
+  else
+    ac_cv_path_GREP=$GREP
+***************
+*** 3590,3596 ****
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+  $as_echo_n "checking for egrep... " >&6; }
+! if test "${ac_cv_path_EGREP+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+--- 3621,3627 ----
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+  $as_echo_n "checking for egrep... " >&6; }
+! if ${ac_cv_path_EGREP+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+***************
+*** 3607,3613 ****
+      for ac_prog in egrep; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+!       { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+  # Check for GNU ac_path_EGREP and select it if it is found.
+    # Check for GNU $ac_path_EGREP
+  case `"$ac_path_EGREP" --version 2>&1` in
+--- 3638,3644 ----
+      for ac_prog in egrep; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+!       as_fn_executable_p "$ac_path_EGREP" || continue
+  # Check for GNU ac_path_EGREP and select it if it is found.
+    # Check for GNU $ac_path_EGREP
+  case `"$ac_path_EGREP" --version 2>&1` in
+***************
+*** 3642,3648 ****
+    done
+  IFS=$as_save_IFS
+    if test -z "$ac_cv_path_EGREP"; then
+!     as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+    fi
+  else
+    ac_cv_path_EGREP=$EGREP
+--- 3673,3679 ----
+    done
+  IFS=$as_save_IFS
+    if test -z "$ac_cv_path_EGREP"; then
+!     as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+    fi
+  else
+    ac_cv_path_EGREP=$EGREP
+***************
+*** 3666,3672 ****
+  rm -f conftest*
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5
+  $as_echo_n "checking for library containing strerror... " >&6; }
+! if test "${ac_cv_search_strerror+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_func_search_save_LIBS=$LIBS
+--- 3697,3703 ----
+  rm -f conftest*
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5
+  $as_echo_n "checking for library containing strerror... " >&6; }
+! if ${ac_cv_search_strerror+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_func_search_save_LIBS=$LIBS
+***************
+*** 3700,3710 ****
+  fi
+  rm -f core conftest.err conftest.$ac_objext \
+      conftest$ac_exeext
+!   if test "${ac_cv_search_strerror+set}" = set; then :
+    break
+  fi
+  done
+! if test "${ac_cv_search_strerror+set}" = set; then :
+  
+  else
+    ac_cv_search_strerror=no
+--- 3731,3741 ----
+  fi
+  rm -f core conftest.err conftest.$ac_objext \
+      conftest$ac_exeext
+!   if ${ac_cv_search_strerror+:} false; then :
+    break
+  fi
+  done
+! if ${ac_cv_search_strerror+:} false; then :
+  
+  else
+    ac_cv_search_strerror=no
+***************
+*** 3725,3731 ****
+  set dummy $ac_prog; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if test "${ac_cv_prog_AWK+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if test -n "$AWK"; then
+--- 3756,3762 ----
+  set dummy $ac_prog; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if ${ac_cv_prog_AWK+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if test -n "$AWK"; then
+***************
+*** 3737,3743 ****
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+      ac_cv_prog_AWK="$ac_prog"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+--- 3768,3774 ----
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+      ac_cv_prog_AWK="$ac_prog"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+***************
+*** 3765,3771 ****
+  set dummy strip; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if test "${ac_cv_prog_STRIP+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if test -n "$STRIP"; then
+--- 3796,3802 ----
+  set dummy strip; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if ${ac_cv_prog_STRIP+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if test -n "$STRIP"; then
+***************
+*** 3777,3783 ****
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+      ac_cv_prog_STRIP="strip"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+--- 3808,3814 ----
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+      ac_cv_prog_STRIP="strip"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+***************
+*** 3804,3810 ****
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+  $as_echo_n "checking for ANSI C header files... " >&6; }
+! if test "${ac_cv_header_stdc+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+--- 3835,3841 ----
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+  $as_echo_n "checking for ANSI C header files... " >&6; }
+! if ${ac_cv_header_stdc+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+***************
+*** 3916,3922 ****
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5
+  $as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; }
+! if test "${ac_cv_header_sys_wait_h+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+--- 3947,3953 ----
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5
+  $as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; }
+! if ${ac_cv_header_sys_wait_h+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+***************
+*** 4107,4113 ****
+  set dummy xcode-select; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if test "${ac_cv_path_XCODE_SELECT+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    case $XCODE_SELECT in
+--- 4138,4144 ----
+  set dummy xcode-select; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if ${ac_cv_path_XCODE_SELECT+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    case $XCODE_SELECT in
+***************
+*** 4121,4127 ****
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+      ac_cv_path_XCODE_SELECT="$as_dir/$ac_word$ac_exec_ext"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+--- 4152,4158 ----
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+      ac_cv_path_XCODE_SELECT="$as_dir/$ac_word$ac_exec_ext"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+***************
+*** 4230,4237 ****
+    as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+  ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+  "
+! eval as_val=\$$as_ac_Header
+!    if test "x$as_val" = x""yes; then :
+    cat >>confdefs.h <<_ACEOF
+  #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+  _ACEOF
+--- 4261,4267 ----
+    as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+  ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+  "
+! if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+    cat >>confdefs.h <<_ACEOF
+  #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+  _ACEOF
+***************
+*** 4242,4248 ****
+  
+  
+  ac_fn_c_check_header_mongrel "$LINENO" "Carbon/Carbon.h" "ac_cv_header_Carbon_Carbon_h" "$ac_includes_default"
+! if test "x$ac_cv_header_Carbon_Carbon_h" = x""yes; then :
+    CARBON=yes
+  fi
+  
+--- 4272,4278 ----
+  
+  
+  ac_fn_c_check_header_mongrel "$LINENO" "Carbon/Carbon.h" "ac_cv_header_Carbon_Carbon_h" "$ac_includes_default"
+! if test "x$ac_cv_header_Carbon_Carbon_h" = xyes; then :
+    CARBON=yes
+  fi
+  
+***************
+*** 4266,4272 ****
+  for ac_header in AvailabilityMacros.h
+  do :
+    ac_fn_c_check_header_mongrel "$LINENO" "AvailabilityMacros.h" "ac_cv_header_AvailabilityMacros_h" "$ac_includes_default"
+! if test "x$ac_cv_header_AvailabilityMacros_h" = x""yes; then :
+    cat >>confdefs.h <<_ACEOF
+  #define HAVE_AVAILABILITYMACROS_H 1
+  _ACEOF
+--- 4296,4302 ----
+  for ac_header in AvailabilityMacros.h
+  do :
+    ac_fn_c_check_header_mongrel "$LINENO" "AvailabilityMacros.h" "ac_cv_header_AvailabilityMacros_h" "$ac_includes_default"
+! if test "x$ac_cv_header_AvailabilityMacros_h" = xyes; then :
+    cat >>confdefs.h <<_ACEOF
+  #define HAVE_AVAILABILITYMACROS_H 1
+  _ACEOF
+***************
+*** 4296,4302 ****
+        have_local_include=yes
+        have_local_lib=yes
+        ;;
+!     *) as_fn_error "must pass path argument to --with-local-dir" "$LINENO" 5 ;;
+      esac
+  	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $local_dir" >&5
+  $as_echo "$local_dir" >&6; }
+--- 4326,4332 ----
+        have_local_include=yes
+        have_local_lib=yes
+        ;;
+!     *) as_fn_error $? "must pass path argument to --with-local-dir" "$LINENO" 5 ;;
+      esac
+  	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $local_dir" >&5
+  $as_echo "$local_dir" >&6; }
+***************
+*** 4505,4511 ****
+  $as_echo "no" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for is_selinux_enabled in -lselinux" >&5
+  $as_echo_n "checking for is_selinux_enabled in -lselinux... " >&6; }
+! if test "${ac_cv_lib_selinux_is_selinux_enabled+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+--- 4535,4541 ----
+  $as_echo "no" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for is_selinux_enabled in -lselinux" >&5
+  $as_echo_n "checking for is_selinux_enabled in -lselinux... " >&6; }
+! if ${ac_cv_lib_selinux_is_selinux_enabled+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+***************
+*** 4539,4545 ****
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_selinux_is_selinux_enabled" >&5
+  $as_echo "$ac_cv_lib_selinux_is_selinux_enabled" >&6; }
+! if test "x$ac_cv_lib_selinux_is_selinux_enabled" = x""yes; then :
+    LIBS="$LIBS -lselinux"
+  	   $as_echo "#define HAVE_SELINUX 1" >>confdefs.h
+  
+--- 4569,4575 ----
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_selinux_is_selinux_enabled" >&5
+  $as_echo "$ac_cv_lib_selinux_is_selinux_enabled" >&6; }
+! if test "x$ac_cv_lib_selinux_is_selinux_enabled" = xyes; then :
+    LIBS="$LIBS -lselinux"
+  	   $as_echo "#define HAVE_SELINUX 1" >>confdefs.h
+  
+***************
+*** 4701,4707 ****
+  set dummy luajit; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if test "${ac_cv_path_vi_cv_path_luajit+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    case $vi_cv_path_luajit in
+--- 4731,4737 ----
+  set dummy luajit; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if ${ac_cv_path_vi_cv_path_luajit+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    case $vi_cv_path_luajit in
+***************
+*** 4715,4721 ****
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+      ac_cv_path_vi_cv_path_luajit="$as_dir/$ac_word$ac_exec_ext"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+--- 4745,4751 ----
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+      ac_cv_path_vi_cv_path_luajit="$as_dir/$ac_word$ac_exec_ext"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+***************
+*** 4740,4746 ****
+        if test "X$vi_cv_path_luajit" != "X"; then
+  		{ $as_echo "$as_me:${as_lineno-$LINENO}: checking LuaJIT version" >&5
+  $as_echo_n "checking LuaJIT version... " >&6; }
+! if test "${vi_cv_version_luajit+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+     vi_cv_version_luajit=`${vi_cv_path_luajit} -v 2>&1 | sed 's/LuaJIT \([0-9.]*\)\.[0-9]\(-[a-z0-9]*\)* .*/\1/'`
+--- 4770,4776 ----
+        if test "X$vi_cv_path_luajit" != "X"; then
+  		{ $as_echo "$as_me:${as_lineno-$LINENO}: checking LuaJIT version" >&5
+  $as_echo_n "checking LuaJIT version... " >&6; }
+! if ${vi_cv_version_luajit+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+     vi_cv_version_luajit=`${vi_cv_path_luajit} -v 2>&1 | sed 's/LuaJIT \([0-9.]*\)\.[0-9]\(-[a-z0-9]*\)* .*/\1/'`
+***************
+*** 4749,4755 ****
+  $as_echo "$vi_cv_version_luajit" >&6; }
+  	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Lua version of LuaJIT" >&5
+  $as_echo_n "checking Lua version of LuaJIT... " >&6; }
+! if test "${vi_cv_version_lua_luajit+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+     vi_cv_version_lua_luajit=`${vi_cv_path_luajit} -e "print(_VERSION)" | sed 's/.* //'`
+--- 4779,4785 ----
+  $as_echo "$vi_cv_version_luajit" >&6; }
+  	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Lua version of LuaJIT" >&5
+  $as_echo_n "checking Lua version of LuaJIT... " >&6; }
+! if ${vi_cv_version_lua_luajit+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+     vi_cv_version_lua_luajit=`${vi_cv_path_luajit} -e "print(_VERSION)" | sed 's/.* //'`
+***************
+*** 4764,4770 ****
+  set dummy lua; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if test "${ac_cv_path_vi_cv_path_plain_lua+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    case $vi_cv_path_plain_lua in
+--- 4794,4800 ----
+  set dummy lua; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if ${ac_cv_path_vi_cv_path_plain_lua+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    case $vi_cv_path_plain_lua in
+***************
+*** 4778,4784 ****
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+      ac_cv_path_vi_cv_path_plain_lua="$as_dir/$ac_word$ac_exec_ext"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+--- 4808,4814 ----
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+      ac_cv_path_vi_cv_path_plain_lua="$as_dir/$ac_word$ac_exec_ext"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+***************
+*** 4803,4809 ****
+        if test "X$vi_cv_path_plain_lua" != "X"; then
+  		{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Lua version" >&5
+  $as_echo_n "checking Lua version... " >&6; }
+! if test "${vi_cv_version_plain_lua+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+     vi_cv_version_plain_lua=`${vi_cv_path_plain_lua} -e "print(_VERSION)" | sed 's/.* //'`
+--- 4833,4839 ----
+        if test "X$vi_cv_path_plain_lua" != "X"; then
+  		{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Lua version" >&5
+  $as_echo_n "checking Lua version... " >&6; }
+! if ${vi_cv_version_plain_lua+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+     vi_cv_version_plain_lua=`${vi_cv_path_plain_lua} -e "print(_VERSION)" | sed 's/.* //'`
+***************
+*** 4963,4969 ****
+      fi
+    fi
+    if test "$fail_if_missing" = "yes" -a "$lua_ok" != "yes"; then
+!     as_fn_error "could not configure lua" "$LINENO" 5
+    fi
+  
+  
+--- 4993,4999 ----
+      fi
+    fi
+    if test "$fail_if_missing" = "yes" -a "$lua_ok" != "yes"; then
+!     as_fn_error $? "could not configure lua" "$LINENO" 5
+    fi
+  
+  
+***************
+*** 5017,5023 ****
+  set dummy mzscheme; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if test "${ac_cv_path_vi_cv_path_mzscheme+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    case $vi_cv_path_mzscheme in
+--- 5047,5053 ----
+  set dummy mzscheme; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if ${ac_cv_path_vi_cv_path_mzscheme+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    case $vi_cv_path_mzscheme in
+***************
+*** 5031,5037 ****
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+      ac_cv_path_vi_cv_path_mzscheme="$as_dir/$ac_word$ac_exec_ext"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+--- 5061,5067 ----
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+      ac_cv_path_vi_cv_path_mzscheme="$as_dir/$ac_word$ac_exec_ext"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+***************
+*** 5064,5070 ****
+  	if test "X$vi_cv_path_mzscheme" != "X"; then
+  	    	    { $as_echo "$as_me:${as_lineno-$LINENO}: checking MzScheme install prefix" >&5
+  $as_echo_n "checking MzScheme install prefix... " >&6; }
+! if test "${vi_cv_path_mzscheme_pfx+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    	    	    echo "(display (simplify-path		\
+--- 5094,5100 ----
+  	if test "X$vi_cv_path_mzscheme" != "X"; then
+  	    	    { $as_echo "$as_me:${as_lineno-$LINENO}: checking MzScheme install prefix" >&5
+  $as_echo_n "checking MzScheme install prefix... " >&6; }
+! if ${vi_cv_path_mzscheme_pfx+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    	    	    echo "(display (simplify-path		\
+***************
+*** 5226,5232 ****
+  
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ffi_type_void in -lffi" >&5
+  $as_echo_n "checking for ffi_type_void in -lffi... " >&6; }
+! if test "${ac_cv_lib_ffi_ffi_type_void+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+--- 5256,5262 ----
+  
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ffi_type_void in -lffi" >&5
+  $as_echo_n "checking for ffi_type_void in -lffi... " >&6; }
+! if ${ac_cv_lib_ffi_ffi_type_void+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+***************
+*** 5260,5266 ****
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ffi_ffi_type_void" >&5
+  $as_echo "$ac_cv_lib_ffi_ffi_type_void" >&6; }
+! if test "x$ac_cv_lib_ffi_ffi_type_void" = x""yes; then :
+    MZSCHEME_LIBS="$MZSCHEME_LIBS -lffi"
+  fi
+  
+--- 5290,5296 ----
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ffi_ffi_type_void" >&5
+  $as_echo "$ac_cv_lib_ffi_ffi_type_void" >&6; }
+! if test "x$ac_cv_lib_ffi_ffi_type_void" = xyes; then :
+    MZSCHEME_LIBS="$MZSCHEME_LIBS -lffi"
+  fi
+  
+***************
+*** 5336,5342 ****
+  set dummy perl; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if test "${ac_cv_path_vi_cv_path_perl+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    case $vi_cv_path_perl in
+--- 5366,5372 ----
+  set dummy perl; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if ${ac_cv_path_vi_cv_path_perl+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    case $vi_cv_path_perl in
+***************
+*** 5350,5356 ****
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+      ac_cv_path_vi_cv_path_perl="$as_dir/$ac_word$ac_exec_ext"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+--- 5380,5386 ----
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+      ac_cv_path_vi_cv_path_perl="$as_dir/$ac_word$ac_exec_ext"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+***************
+*** 5498,5504 ****
+    fi
+  
+    if test "$fail_if_missing" = "yes" -a "$perl_ok" != "yes"; then
+!     as_fn_error "could not configure perl" "$LINENO" 5
+    fi
+  fi
+  
+--- 5528,5534 ----
+    fi
+  
+    if test "$fail_if_missing" = "yes" -a "$perl_ok" != "yes"; then
+!     as_fn_error $? "could not configure perl" "$LINENO" 5
+    fi
+  fi
+  
+***************
+*** 5526,5532 ****
+  set dummy $ac_prog; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if test "${ac_cv_path_vi_cv_path_python+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    case $vi_cv_path_python in
+--- 5556,5562 ----
+  set dummy $ac_prog; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if ${ac_cv_path_vi_cv_path_python+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    case $vi_cv_path_python in
+***************
+*** 5540,5546 ****
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+      ac_cv_path_vi_cv_path_python="$as_dir/$ac_word$ac_exec_ext"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+--- 5570,5576 ----
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+      ac_cv_path_vi_cv_path_python="$as_dir/$ac_word$ac_exec_ext"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+***************
+*** 5569,5575 ****
+  
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python version" >&5
+  $as_echo_n "checking Python version... " >&6; }
+! if test "${vi_cv_var_python_version+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    vi_cv_var_python_version=`
+--- 5599,5605 ----
+  
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python version" >&5
+  $as_echo_n "checking Python version... " >&6; }
+! if ${vi_cv_var_python_version+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    vi_cv_var_python_version=`
+***************
+*** 5589,5595 ****
+  
+              { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's install prefix" >&5
+  $as_echo_n "checking Python's install prefix... " >&6; }
+! if test "${vi_cv_path_python_pfx+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+     vi_cv_path_python_pfx=`
+--- 5619,5625 ----
+  
+              { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's install prefix" >&5
+  $as_echo_n "checking Python's install prefix... " >&6; }
+! if ${vi_cv_path_python_pfx+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+     vi_cv_path_python_pfx=`
+***************
+*** 5601,5607 ****
+  
+              { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's execution prefix" >&5
+  $as_echo_n "checking Python's execution prefix... " >&6; }
+! if test "${vi_cv_path_python_epfx+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+     vi_cv_path_python_epfx=`
+--- 5631,5637 ----
+  
+              { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's execution prefix" >&5
+  $as_echo_n "checking Python's execution prefix... " >&6; }
+! if ${vi_cv_path_python_epfx+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+     vi_cv_path_python_epfx=`
+***************
+*** 5612,5618 ****
+  $as_echo "$vi_cv_path_python_epfx" >&6; }
+  
+  
+!       if test "${vi_cv_path_pythonpath+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+     vi_cv_path_pythonpath=`
+--- 5642,5648 ----
+  $as_echo "$vi_cv_path_python_epfx" >&6; }
+  
+  
+!       if ${vi_cv_path_pythonpath+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+     vi_cv_path_pythonpath=`
+***************
+*** 5632,5638 ****
+  
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's configuration directory" >&5
+  $as_echo_n "checking Python's configuration directory... " >&6; }
+! if test "${vi_cv_path_python_conf+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+  
+--- 5662,5668 ----
+  
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's configuration directory" >&5
+  $as_echo_n "checking Python's configuration directory... " >&6; }
+! if ${vi_cv_path_python_conf+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+  
+***************
+*** 5662,5668 ****
+  $as_echo "can't find it!" >&6; }
+        else
+  
+! 			if test "${vi_cv_path_python_plibs+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+  
+--- 5692,5698 ----
+  $as_echo "can't find it!" >&6; }
+        else
+  
+! 			if ${vi_cv_path_python_plibs+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+  
+***************
+*** 5803,5809 ****
+    fi
+  
+    if test "$fail_if_missing" = "yes" -a "$python_ok" != "yes"; then
+!     as_fn_error "could not configure python" "$LINENO" 5
+    fi
+  fi
+  
+--- 5833,5839 ----
+    fi
+  
+    if test "$fail_if_missing" = "yes" -a "$python_ok" != "yes"; then
+!     as_fn_error $? "could not configure python" "$LINENO" 5
+    fi
+  fi
+  
+***************
+*** 5833,5839 ****
+  set dummy $ac_prog; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if test "${ac_cv_path_vi_cv_path_python3+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    case $vi_cv_path_python3 in
+--- 5863,5869 ----
+  set dummy $ac_prog; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if ${ac_cv_path_vi_cv_path_python3+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    case $vi_cv_path_python3 in
+***************
+*** 5847,5853 ****
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+      ac_cv_path_vi_cv_path_python3="$as_dir/$ac_word$ac_exec_ext"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+--- 5877,5883 ----
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+      ac_cv_path_vi_cv_path_python3="$as_dir/$ac_word$ac_exec_ext"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+***************
+*** 5876,5882 ****
+  
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python version" >&5
+  $as_echo_n "checking Python version... " >&6; }
+! if test "${vi_cv_var_python3_version+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    vi_cv_var_python3_version=`
+--- 5906,5912 ----
+  
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python version" >&5
+  $as_echo_n "checking Python version... " >&6; }
+! if ${vi_cv_var_python3_version+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    vi_cv_var_python3_version=`
+***************
+*** 5896,5902 ****
+  
+              { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's abiflags" >&5
+  $as_echo_n "checking Python's abiflags... " >&6; }
+! if test "${vi_cv_var_python3_abiflags+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+  
+--- 5926,5932 ----
+  
+              { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's abiflags" >&5
+  $as_echo_n "checking Python's abiflags... " >&6; }
+! if ${vi_cv_var_python3_abiflags+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+  
+***************
+*** 5913,5919 ****
+  
+              { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's install prefix" >&5
+  $as_echo_n "checking Python's install prefix... " >&6; }
+! if test "${vi_cv_path_python3_pfx+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+     vi_cv_path_python3_pfx=`
+--- 5943,5949 ----
+  
+              { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's install prefix" >&5
+  $as_echo_n "checking Python's install prefix... " >&6; }
+! if ${vi_cv_path_python3_pfx+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+     vi_cv_path_python3_pfx=`
+***************
+*** 5925,5931 ****
+  
+              { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's execution prefix" >&5
+  $as_echo_n "checking Python's execution prefix... " >&6; }
+! if test "${vi_cv_path_python3_epfx+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+     vi_cv_path_python3_epfx=`
+--- 5955,5961 ----
+  
+              { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's execution prefix" >&5
+  $as_echo_n "checking Python's execution prefix... " >&6; }
+! if ${vi_cv_path_python3_epfx+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+     vi_cv_path_python3_epfx=`
+***************
+*** 5936,5942 ****
+  $as_echo "$vi_cv_path_python3_epfx" >&6; }
+  
+  
+!       if test "${vi_cv_path_python3path+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+     vi_cv_path_python3path=`
+--- 5966,5972 ----
+  $as_echo "$vi_cv_path_python3_epfx" >&6; }
+  
+  
+!       if ${vi_cv_path_python3path+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+     vi_cv_path_python3path=`
+***************
+*** 5956,5962 ****
+  
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's configuration directory" >&5
+  $as_echo_n "checking Python's configuration directory... " >&6; }
+! if test "${vi_cv_path_python3_conf+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+  
+--- 5986,5992 ----
+  
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's configuration directory" >&5
+  $as_echo_n "checking Python's configuration directory... " >&6; }
+! if ${vi_cv_path_python3_conf+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+  
+***************
+*** 5987,5993 ****
+  $as_echo "can't find it!" >&6; }
+        else
+  
+!                         if test "${vi_cv_path_python3_plibs+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+  
+--- 6017,6023 ----
+  $as_echo "can't find it!" >&6; }
+        else
+  
+!                         if ${vi_cv_path_python3_plibs+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+  
+***************
+*** 6114,6120 ****
+      fi
+    fi
+    if test "$fail_if_missing" = "yes" -a "$python3_ok" != "yes"; then
+!     as_fn_error "could not configure python3" "$LINENO" 5
+    fi
+  fi
+  
+--- 6144,6150 ----
+      fi
+    fi
+    if test "$fail_if_missing" = "yes" -a "$python3_ok" != "yes"; then
+!     as_fn_error $? "could not configure python3" "$LINENO" 5
+    fi
+  fi
+  
+***************
+*** 6138,6145 ****
+    if test "$cross_compiling" = yes; then :
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+  $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+! as_fn_error "cannot run test program while cross compiling
+! See \`config.log' for more details." "$LINENO" 5; }
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  /* end confdefs.h.  */
+--- 6168,6175 ----
+    if test "$cross_compiling" = yes; then :
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+  $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+! as_fn_error $? "cannot run test program while cross compiling
+! See \`config.log' for more details" "$LINENO" 5; }
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  /* end confdefs.h.  */
+***************
+*** 6203,6210 ****
+    if test "$cross_compiling" = yes; then :
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+  $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+! as_fn_error "cannot run test program while cross compiling
+! See \`config.log' for more details." "$LINENO" 5; }
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  /* end confdefs.h.  */
+--- 6233,6240 ----
+    if test "$cross_compiling" = yes; then :
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+  $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+! as_fn_error $? "cannot run test program while cross compiling
+! See \`config.log' for more details" "$LINENO" 5; }
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  /* end confdefs.h.  */
+***************
+*** 6378,6384 ****
+  set dummy $tclsh_name; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if test "${ac_cv_path_vi_cv_path_tcl+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    case $vi_cv_path_tcl in
+--- 6408,6414 ----
+  set dummy $tclsh_name; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if ${ac_cv_path_vi_cv_path_tcl+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    case $vi_cv_path_tcl in
+***************
+*** 6392,6398 ****
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+      ac_cv_path_vi_cv_path_tcl="$as_dir/$ac_word$ac_exec_ext"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+--- 6422,6428 ----
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+      ac_cv_path_vi_cv_path_tcl="$as_dir/$ac_word$ac_exec_ext"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+***************
+*** 6422,6428 ****
+  set dummy $tclsh_name; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if test "${ac_cv_path_vi_cv_path_tcl+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    case $vi_cv_path_tcl in
+--- 6452,6458 ----
+  set dummy $tclsh_name; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if ${ac_cv_path_vi_cv_path_tcl+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    case $vi_cv_path_tcl in
+***************
+*** 6436,6442 ****
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+      ac_cv_path_vi_cv_path_tcl="$as_dir/$ac_word$ac_exec_ext"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+--- 6466,6472 ----
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+      ac_cv_path_vi_cv_path_tcl="$as_dir/$ac_word$ac_exec_ext"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+***************
+*** 6465,6471 ****
+  set dummy $tclsh_name; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if test "${ac_cv_path_vi_cv_path_tcl+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    case $vi_cv_path_tcl in
+--- 6495,6501 ----
+  set dummy $tclsh_name; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if ${ac_cv_path_vi_cv_path_tcl+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    case $vi_cv_path_tcl in
+***************
+*** 6479,6485 ****
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+      ac_cv_path_vi_cv_path_tcl="$as_dir/$ac_word$ac_exec_ext"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+--- 6509,6515 ----
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+      ac_cv_path_vi_cv_path_tcl="$as_dir/$ac_word$ac_exec_ext"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+***************
+*** 6508,6514 ****
+  set dummy $tclsh_name; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if test "${ac_cv_path_vi_cv_path_tcl+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    case $vi_cv_path_tcl in
+--- 6538,6544 ----
+  set dummy $tclsh_name; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if ${ac_cv_path_vi_cv_path_tcl+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    case $vi_cv_path_tcl in
+***************
+*** 6522,6528 ****
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+      ac_cv_path_vi_cv_path_tcl="$as_dir/$ac_word$ac_exec_ext"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+--- 6552,6558 ----
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+      ac_cv_path_vi_cv_path_tcl="$as_dir/$ac_word$ac_exec_ext"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+***************
+*** 6551,6557 ****
+  set dummy $tclsh_name; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if test "${ac_cv_path_vi_cv_path_tcl+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    case $vi_cv_path_tcl in
+--- 6581,6587 ----
+  set dummy $tclsh_name; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if ${ac_cv_path_vi_cv_path_tcl+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    case $vi_cv_path_tcl in
+***************
+*** 6565,6571 ****
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+      ac_cv_path_vi_cv_path_tcl="$as_dir/$ac_word$ac_exec_ext"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+--- 6595,6601 ----
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+      ac_cv_path_vi_cv_path_tcl="$as_dir/$ac_word$ac_exec_ext"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+***************
+*** 6682,6688 ****
+      fi
+    fi
+    if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
+!     as_fn_error "could not configure Tcl" "$LINENO" 5
+    fi
+  fi
+  
+--- 6712,6718 ----
+      fi
+    fi
+    if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
+!     as_fn_error $? "could not configure Tcl" "$LINENO" 5
+    fi
+  fi
+  
+***************
+*** 6720,6726 ****
+  set dummy $RUBY_CMD; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if test "${ac_cv_path_vi_cv_path_ruby+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    case $vi_cv_path_ruby in
+--- 6750,6756 ----
+  set dummy $RUBY_CMD; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if ${ac_cv_path_vi_cv_path_ruby+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    case $vi_cv_path_ruby in
+***************
+*** 6734,6740 ****
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+      ac_cv_path_vi_cv_path_ruby="$as_dir/$ac_word$ac_exec_ext"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+--- 6764,6770 ----
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+      ac_cv_path_vi_cv_path_ruby="$as_dir/$ac_word$ac_exec_ext"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+***************
+*** 6836,6842 ****
+    fi
+  
+    if test "$fail_if_missing" = "yes" -a -z "$RUBY_OBJ"; then
+!     as_fn_error "could not configure Ruby" "$LINENO" 5
+    fi
+  fi
+  
+--- 6866,6872 ----
+    fi
+  
+    if test "$fail_if_missing" = "yes" -a -z "$RUBY_OBJ"; then
+!     as_fn_error $? "could not configure Ruby" "$LINENO" 5
+    fi
+  fi
+  
+***************
+*** 6898,6904 ****
+  $as_echo "no" >&6; }
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket" >&5
+  $as_echo_n "checking for socket in -lsocket... " >&6; }
+! if test "${ac_cv_lib_socket_socket+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+--- 6928,6934 ----
+  $as_echo "no" >&6; }
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket" >&5
+  $as_echo_n "checking for socket in -lsocket... " >&6; }
+! if ${ac_cv_lib_socket_socket+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+***************
+*** 6932,6938 ****
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_socket" >&5
+  $as_echo "$ac_cv_lib_socket_socket" >&6; }
+! if test "x$ac_cv_lib_socket_socket" = x""yes; then :
+    cat >>confdefs.h <<_ACEOF
+  #define HAVE_LIBSOCKET 1
+  _ACEOF
+--- 6962,6968 ----
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_socket" >&5
+  $as_echo "$ac_cv_lib_socket_socket" >&6; }
+! if test "x$ac_cv_lib_socket_socket" = xyes; then :
+    cat >>confdefs.h <<_ACEOF
+  #define HAVE_LIBSOCKET 1
+  _ACEOF
+***************
+*** 6943,6949 ****
+  
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5
+  $as_echo_n "checking for gethostbyname in -lnsl... " >&6; }
+! if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+--- 6973,6979 ----
+  
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5
+  $as_echo_n "checking for gethostbyname in -lnsl... " >&6; }
+! if ${ac_cv_lib_nsl_gethostbyname+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+***************
+*** 6977,6983 ****
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5
+  $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; }
+! if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then :
+    cat >>confdefs.h <<_ACEOF
+  #define HAVE_LIBNSL 1
+  _ACEOF
+--- 7007,7013 ----
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5
+  $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; }
+! if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then :
+    cat >>confdefs.h <<_ACEOF
+  #define HAVE_LIBNSL 1
+  _ACEOF
+***************
+*** 7127,7133 ****
+  set dummy xmkmf; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if test "${ac_cv_path_xmkmfpath+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    case $xmkmfpath in
+--- 7157,7163 ----
+  set dummy xmkmf; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if ${ac_cv_path_xmkmfpath+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    case $xmkmfpath in
+***************
+*** 7141,7147 ****
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+      ac_cv_path_xmkmfpath="$as_dir/$ac_word$ac_exec_ext"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+--- 7171,7177 ----
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+      ac_cv_path_xmkmfpath="$as_dir/$ac_word$ac_exec_ext"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+***************
+*** 7179,7186 ****
+    have_x=disabled
+  else
+    case $x_includes,$x_libraries in #(
+!     *\'*) as_fn_error "cannot use X directory names containing '" "$LINENO" 5;; #(
+!     *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    # One or both of the vars are not set, and there is no cached value.
+--- 7209,7216 ----
+    have_x=disabled
+  else
+    case $x_includes,$x_libraries in #(
+!     *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #(
+!     *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    # One or both of the vars are not set, and there is no cached value.
+***************
+*** 7197,7203 ****
+  	@echo libdir='${LIBDIR}'
+  _ACEOF
+    if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then
+!     # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+      for ac_var in incroot usrlibdir libdir; do
+        eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`"
+      done
+--- 7227,7233 ----
+  	@echo libdir='${LIBDIR}'
+  _ACEOF
+    if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then
+!     # GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+      for ac_var in incroot usrlibdir libdir; do
+        eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`"
+      done
+***************
+*** 7283,7289 ****
+    fi
+  done
+  fi
+! rm -f conftest.err conftest.$ac_ext
+  fi # $ac_x_includes = no
+  
+  if test "$ac_x_libraries" = no; then
+--- 7313,7319 ----
+    fi
+  done
+  fi
+! rm -f conftest.err conftest.i conftest.$ac_ext
+  fi # $ac_x_includes = no
+  
+  if test "$ac_x_libraries" = no; then
+***************
+*** 7457,7463 ****
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5
+  $as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; }
+! if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+--- 7487,7493 ----
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5
+  $as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; }
+! if ${ac_cv_lib_dnet_dnet_ntoa+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+***************
+*** 7491,7504 ****
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
+  $as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; }
+! if test "x$ac_cv_lib_dnet_dnet_ntoa" = x""yes; then :
+    X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
+  fi
+  
+      if test $ac_cv_lib_dnet_dnet_ntoa = no; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5
+  $as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; }
+! if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+--- 7521,7534 ----
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
+  $as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; }
+! if test "x$ac_cv_lib_dnet_dnet_ntoa" = xyes; then :
+    X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
+  fi
+  
+      if test $ac_cv_lib_dnet_dnet_ntoa = no; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5
+  $as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; }
+! if ${ac_cv_lib_dnet_stub_dnet_ntoa+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+***************
+*** 7532,7538 ****
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
+  $as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; }
+! if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = x""yes; then :
+    X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
+  fi
+  
+--- 7562,7568 ----
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
+  $as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; }
+! if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = xyes; then :
+    X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
+  fi
+  
+***************
+*** 7551,7564 ****
+      # The functions gethostbyname, getservbyname, and inet_addr are
+      # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
+      ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname"
+! if test "x$ac_cv_func_gethostbyname" = x""yes; then :
+  
+  fi
+  
+      if test $ac_cv_func_gethostbyname = no; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5
+  $as_echo_n "checking for gethostbyname in -lnsl... " >&6; }
+! if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+--- 7581,7594 ----
+      # The functions gethostbyname, getservbyname, and inet_addr are
+      # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
+      ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname"
+! if test "x$ac_cv_func_gethostbyname" = xyes; then :
+  
+  fi
+  
+      if test $ac_cv_func_gethostbyname = no; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5
+  $as_echo_n "checking for gethostbyname in -lnsl... " >&6; }
+! if ${ac_cv_lib_nsl_gethostbyname+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+***************
+*** 7592,7605 ****
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5
+  $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; }
+! if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then :
+    X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
+  fi
+  
+        if test $ac_cv_lib_nsl_gethostbyname = no; then
+  	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5
+  $as_echo_n "checking for gethostbyname in -lbsd... " >&6; }
+! if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+--- 7622,7635 ----
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5
+  $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; }
+! if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then :
+    X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
+  fi
+  
+        if test $ac_cv_lib_nsl_gethostbyname = no; then
+  	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5
+  $as_echo_n "checking for gethostbyname in -lbsd... " >&6; }
+! if ${ac_cv_lib_bsd_gethostbyname+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+***************
+*** 7633,7639 ****
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5
+  $as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; }
+! if test "x$ac_cv_lib_bsd_gethostbyname" = x""yes; then :
+    X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
+  fi
+  
+--- 7663,7669 ----
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5
+  $as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; }
+! if test "x$ac_cv_lib_bsd_gethostbyname" = xyes; then :
+    X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
+  fi
+  
+***************
+*** 7648,7661 ****
+      # must be given before -lnsl if both are needed.  We assume that
+      # if connect needs -lnsl, so does gethostbyname.
+      ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect"
+! if test "x$ac_cv_func_connect" = x""yes; then :
+  
+  fi
+  
+      if test $ac_cv_func_connect = no; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5
+  $as_echo_n "checking for connect in -lsocket... " >&6; }
+! if test "${ac_cv_lib_socket_connect+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+--- 7678,7691 ----
+      # must be given before -lnsl if both are needed.  We assume that
+      # if connect needs -lnsl, so does gethostbyname.
+      ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect"
+! if test "x$ac_cv_func_connect" = xyes; then :
+  
+  fi
+  
+      if test $ac_cv_func_connect = no; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5
+  $as_echo_n "checking for connect in -lsocket... " >&6; }
+! if ${ac_cv_lib_socket_connect+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+***************
+*** 7689,7695 ****
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5
+  $as_echo "$ac_cv_lib_socket_connect" >&6; }
+! if test "x$ac_cv_lib_socket_connect" = x""yes; then :
+    X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
+  fi
+  
+--- 7719,7725 ----
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5
+  $as_echo "$ac_cv_lib_socket_connect" >&6; }
+! if test "x$ac_cv_lib_socket_connect" = xyes; then :
+    X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
+  fi
+  
+***************
+*** 7697,7710 ****
+  
+      # Guillermo Gomez says -lposix is necessary on A/UX.
+      ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove"
+! if test "x$ac_cv_func_remove" = x""yes; then :
+  
+  fi
+  
+      if test $ac_cv_func_remove = no; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5
+  $as_echo_n "checking for remove in -lposix... " >&6; }
+! if test "${ac_cv_lib_posix_remove+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+--- 7727,7740 ----
+  
+      # Guillermo Gomez says -lposix is necessary on A/UX.
+      ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove"
+! if test "x$ac_cv_func_remove" = xyes; then :
+  
+  fi
+  
+      if test $ac_cv_func_remove = no; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5
+  $as_echo_n "checking for remove in -lposix... " >&6; }
+! if ${ac_cv_lib_posix_remove+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+***************
+*** 7738,7744 ****
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5
+  $as_echo "$ac_cv_lib_posix_remove" >&6; }
+! if test "x$ac_cv_lib_posix_remove" = x""yes; then :
+    X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
+  fi
+  
+--- 7768,7774 ----
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5
+  $as_echo "$ac_cv_lib_posix_remove" >&6; }
+! if test "x$ac_cv_lib_posix_remove" = xyes; then :
+    X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
+  fi
+  
+***************
+*** 7746,7759 ****
+  
+      # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
+      ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat"
+! if test "x$ac_cv_func_shmat" = x""yes; then :
+  
+  fi
+  
+      if test $ac_cv_func_shmat = no; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5
+  $as_echo_n "checking for shmat in -lipc... " >&6; }
+! if test "${ac_cv_lib_ipc_shmat+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+--- 7776,7789 ----
+  
+      # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
+      ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat"
+! if test "x$ac_cv_func_shmat" = xyes; then :
+  
+  fi
+  
+      if test $ac_cv_func_shmat = no; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5
+  $as_echo_n "checking for shmat in -lipc... " >&6; }
+! if ${ac_cv_lib_ipc_shmat+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+***************
+*** 7787,7793 ****
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5
+  $as_echo "$ac_cv_lib_ipc_shmat" >&6; }
+! if test "x$ac_cv_lib_ipc_shmat" = x""yes; then :
+    X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
+  fi
+  
+--- 7817,7823 ----
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5
+  $as_echo "$ac_cv_lib_ipc_shmat" >&6; }
+! if test "x$ac_cv_lib_ipc_shmat" = xyes; then :
+    X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
+  fi
+  
+***************
+*** 7805,7811 ****
+    # John Interrante, Karl Berry
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5
+  $as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; }
+! if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+--- 7835,7841 ----
+    # John Interrante, Karl Berry
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5
+  $as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; }
+! if ${ac_cv_lib_ICE_IceConnectionNumber+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+***************
+*** 7839,7845 ****
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
+  $as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; }
+! if test "x$ac_cv_lib_ICE_IceConnectionNumber" = x""yes; then :
+    X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
+  fi
+  
+--- 7869,7875 ----
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
+  $as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; }
+! if test "x$ac_cv_lib_ICE_IceConnectionNumber" = xyes; then :
+    X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
+  fi
+  
+***************
+*** 7917,7923 ****
+  
+              { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _XdmcpAuthDoIt in -lXdmcp" >&5
+  $as_echo_n "checking for _XdmcpAuthDoIt in -lXdmcp... " >&6; }
+! if test "${ac_cv_lib_Xdmcp__XdmcpAuthDoIt+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+--- 7947,7953 ----
+  
+              { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _XdmcpAuthDoIt in -lXdmcp" >&5
+  $as_echo_n "checking for _XdmcpAuthDoIt in -lXdmcp... " >&6; }
+! if ${ac_cv_lib_Xdmcp__XdmcpAuthDoIt+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+***************
+*** 7951,7964 ****
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xdmcp__XdmcpAuthDoIt" >&5
+  $as_echo "$ac_cv_lib_Xdmcp__XdmcpAuthDoIt" >&6; }
+! if test "x$ac_cv_lib_Xdmcp__XdmcpAuthDoIt" = x""yes; then :
+    X_EXTRA_LIBS="$X_EXTRA_LIBS -lXdmcp"
+  fi
+  
+  
+                      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceOpenConnection in -lICE" >&5
+  $as_echo_n "checking for IceOpenConnection in -lICE... " >&6; }
+! if test "${ac_cv_lib_ICE_IceOpenConnection+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+--- 7981,7994 ----
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xdmcp__XdmcpAuthDoIt" >&5
+  $as_echo "$ac_cv_lib_Xdmcp__XdmcpAuthDoIt" >&6; }
+! if test "x$ac_cv_lib_Xdmcp__XdmcpAuthDoIt" = xyes; then :
+    X_EXTRA_LIBS="$X_EXTRA_LIBS -lXdmcp"
+  fi
+  
+  
+                      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceOpenConnection in -lICE" >&5
+  $as_echo_n "checking for IceOpenConnection in -lICE... " >&6; }
+! if ${ac_cv_lib_ICE_IceOpenConnection+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+***************
+*** 7992,7998 ****
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceOpenConnection" >&5
+  $as_echo "$ac_cv_lib_ICE_IceOpenConnection" >&6; }
+! if test "x$ac_cv_lib_ICE_IceOpenConnection" = x""yes; then :
+    X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE"
+  fi
+  
+--- 8022,8028 ----
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceOpenConnection" >&5
+  $as_echo "$ac_cv_lib_ICE_IceOpenConnection" >&6; }
+! if test "x$ac_cv_lib_ICE_IceOpenConnection" = xyes; then :
+    X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE"
+  fi
+  
+***************
+*** 8000,8006 ****
+          LDFLAGS="$X_LIBS $ac_save_LDFLAGS"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XpmCreatePixmapFromData in -lXpm" >&5
+  $as_echo_n "checking for XpmCreatePixmapFromData in -lXpm... " >&6; }
+! if test "${ac_cv_lib_Xpm_XpmCreatePixmapFromData+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+--- 8030,8036 ----
+          LDFLAGS="$X_LIBS $ac_save_LDFLAGS"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XpmCreatePixmapFromData in -lXpm" >&5
+  $as_echo_n "checking for XpmCreatePixmapFromData in -lXpm... " >&6; }
+! if ${ac_cv_lib_Xpm_XpmCreatePixmapFromData+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+***************
+*** 8034,8040 ****
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xpm_XpmCreatePixmapFromData" >&5
+  $as_echo "$ac_cv_lib_Xpm_XpmCreatePixmapFromData" >&6; }
+! if test "x$ac_cv_lib_Xpm_XpmCreatePixmapFromData" = x""yes; then :
+    X_PRE_LIBS="$X_PRE_LIBS -lXpm"
+  fi
+  
+--- 8064,8070 ----
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xpm_XpmCreatePixmapFromData" >&5
+  $as_echo "$ac_cv_lib_Xpm_XpmCreatePixmapFromData" >&6; }
+! if test "x$ac_cv_lib_Xpm_XpmCreatePixmapFromData" = xyes; then :
+    X_PRE_LIBS="$X_PRE_LIBS -lXpm"
+  fi
+  
+***************
+*** 8092,8102 ****
+  
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of wchar_t is 2 bytes" >&5
+  $as_echo_n "checking size of wchar_t is 2 bytes... " >&6; }
+!     if test "${ac_cv_small_wchar_t+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if test "$cross_compiling" = yes; then :
+!   as_fn_error "failed to compile test program" "$LINENO" 5
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  /* end confdefs.h.  */
+--- 8122,8132 ----
+  
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of wchar_t is 2 bytes" >&5
+  $as_echo_n "checking size of wchar_t is 2 bytes... " >&6; }
+!     if ${ac_cv_small_wchar_t+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if test "$cross_compiling" = yes; then :
+!   as_fn_error $? "failed to compile test program" "$LINENO" 5
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  /* end confdefs.h.  */
+***************
+*** 8395,8401 ****
+  set dummy pkg-config; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if test "${ac_cv_path_PKG_CONFIG+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    case $PKG_CONFIG in
+--- 8425,8431 ----
+  set dummy pkg-config; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if ${ac_cv_path_PKG_CONFIG+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    case $PKG_CONFIG in
+***************
+*** 8409,8415 ****
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+      ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+--- 8439,8445 ----
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+      ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+***************
+*** 8634,8640 ****
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
+  $as_echo "not found" >&6; }
+        if test "x" = xfail; then
+! 	as_fn_error "Could not find libgnomeui-2.0 via pkg-config" "$LINENO" 5
+        fi
+      fi
+    }
+--- 8664,8670 ----
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
+  $as_echo "not found" >&6; }
+        if test "x" = xfail; then
+! 	as_fn_error $? "Could not find libgnomeui-2.0 via pkg-config" "$LINENO" 5
+        fi
+      fi
+    }
+***************
+*** 8827,8833 ****
+    LDFLAGS="$X_LIBS $LDFLAGS"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XShapeQueryExtension in -lXext" >&5
+  $as_echo_n "checking for XShapeQueryExtension in -lXext... " >&6; }
+! if test "${ac_cv_lib_Xext_XShapeQueryExtension+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+--- 8857,8863 ----
+    LDFLAGS="$X_LIBS $LDFLAGS"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XShapeQueryExtension in -lXext" >&5
+  $as_echo_n "checking for XShapeQueryExtension in -lXext... " >&6; }
+! if ${ac_cv_lib_Xext_XShapeQueryExtension+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+***************
+*** 8861,8873 ****
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xext_XShapeQueryExtension" >&5
+  $as_echo "$ac_cv_lib_Xext_XShapeQueryExtension" >&6; }
+! if test "x$ac_cv_lib_Xext_XShapeQueryExtension" = x""yes; then :
+    GUI_X_LIBS="-lXext"
+  fi
+  
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wslen in -lw" >&5
+  $as_echo_n "checking for wslen in -lw... " >&6; }
+! if test "${ac_cv_lib_w_wslen+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+--- 8891,8903 ----
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xext_XShapeQueryExtension" >&5
+  $as_echo "$ac_cv_lib_Xext_XShapeQueryExtension" >&6; }
+! if test "x$ac_cv_lib_Xext_XShapeQueryExtension" = xyes; then :
+    GUI_X_LIBS="-lXext"
+  fi
+  
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wslen in -lw" >&5
+  $as_echo_n "checking for wslen in -lw... " >&6; }
+! if ${ac_cv_lib_w_wslen+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+***************
+*** 8901,8913 ****
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_w_wslen" >&5
+  $as_echo "$ac_cv_lib_w_wslen" >&6; }
+! if test "x$ac_cv_lib_w_wslen" = x""yes; then :
+    X_EXTRA_LIBS="$X_EXTRA_LIBS -lw"
+  fi
+  
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlsym in -ldl" >&5
+  $as_echo_n "checking for dlsym in -ldl... " >&6; }
+! if test "${ac_cv_lib_dl_dlsym+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+--- 8931,8943 ----
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_w_wslen" >&5
+  $as_echo "$ac_cv_lib_w_wslen" >&6; }
+! if test "x$ac_cv_lib_w_wslen" = xyes; then :
+    X_EXTRA_LIBS="$X_EXTRA_LIBS -lw"
+  fi
+  
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlsym in -ldl" >&5
+  $as_echo_n "checking for dlsym in -ldl... " >&6; }
+! if ${ac_cv_lib_dl_dlsym+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+***************
+*** 8941,8953 ****
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlsym" >&5
+  $as_echo "$ac_cv_lib_dl_dlsym" >&6; }
+! if test "x$ac_cv_lib_dl_dlsym" = x""yes; then :
+    X_EXTRA_LIBS="$X_EXTRA_LIBS -ldl"
+  fi
+  
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XmuCreateStippledPixmap in -lXmu" >&5
+  $as_echo_n "checking for XmuCreateStippledPixmap in -lXmu... " >&6; }
+! if test "${ac_cv_lib_Xmu_XmuCreateStippledPixmap+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+--- 8971,8983 ----
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlsym" >&5
+  $as_echo "$ac_cv_lib_dl_dlsym" >&6; }
+! if test "x$ac_cv_lib_dl_dlsym" = xyes; then :
+    X_EXTRA_LIBS="$X_EXTRA_LIBS -ldl"
+  fi
+  
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XmuCreateStippledPixmap in -lXmu" >&5
+  $as_echo_n "checking for XmuCreateStippledPixmap in -lXmu... " >&6; }
+! if ${ac_cv_lib_Xmu_XmuCreateStippledPixmap+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+***************
+*** 8981,8994 ****
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xmu_XmuCreateStippledPixmap" >&5
+  $as_echo "$ac_cv_lib_Xmu_XmuCreateStippledPixmap" >&6; }
+! if test "x$ac_cv_lib_Xmu_XmuCreateStippledPixmap" = x""yes; then :
+    GUI_X_LIBS="-lXmu $GUI_X_LIBS"
+  fi
+  
+    if test -z "$SKIP_MOTIF"; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XpEndJob in -lXp" >&5
+  $as_echo_n "checking for XpEndJob in -lXp... " >&6; }
+! if test "${ac_cv_lib_Xp_XpEndJob+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+--- 9011,9024 ----
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xmu_XmuCreateStippledPixmap" >&5
+  $as_echo "$ac_cv_lib_Xmu_XmuCreateStippledPixmap" >&6; }
+! if test "x$ac_cv_lib_Xmu_XmuCreateStippledPixmap" = xyes; then :
+    GUI_X_LIBS="-lXmu $GUI_X_LIBS"
+  fi
+  
+    if test -z "$SKIP_MOTIF"; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XpEndJob in -lXp" >&5
+  $as_echo_n "checking for XpEndJob in -lXp... " >&6; }
+! if ${ac_cv_lib_Xp_XpEndJob+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+***************
+*** 9022,9028 ****
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xp_XpEndJob" >&5
+  $as_echo "$ac_cv_lib_Xp_XpEndJob" >&6; }
+! if test "x$ac_cv_lib_Xp_XpEndJob" = x""yes; then :
+    GUI_X_LIBS="-lXp $GUI_X_LIBS"
+  fi
+  
+--- 9052,9058 ----
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xp_XpEndJob" >&5
+  $as_echo "$ac_cv_lib_Xp_XpEndJob" >&6; }
+! if test "x$ac_cv_lib_Xp_XpEndJob" = xyes; then :
+    GUI_X_LIBS="-lXp $GUI_X_LIBS"
+  fi
+  
+***************
+*** 9061,9067 ****
+    for ac_header in X11/SM/SMlib.h
+  do :
+    ac_fn_c_check_header_mongrel "$LINENO" "X11/SM/SMlib.h" "ac_cv_header_X11_SM_SMlib_h" "$ac_includes_default"
+! if test "x$ac_cv_header_X11_SM_SMlib_h" = x""yes; then :
+    cat >>confdefs.h <<_ACEOF
+  #define HAVE_X11_SM_SMLIB_H 1
+  _ACEOF
+--- 9091,9097 ----
+    for ac_header in X11/SM/SMlib.h
+  do :
+    ac_fn_c_check_header_mongrel "$LINENO" "X11/SM/SMlib.h" "ac_cv_header_X11_SM_SMlib_h" "$ac_includes_default"
+! if test "x$ac_cv_header_X11_SM_SMlib_h" = xyes; then :
+    cat >>confdefs.h <<_ACEOF
+  #define HAVE_X11_SM_SMLIB_H 1
+  _ACEOF
+***************
+*** 9081,9088 ****
+  do :
+    as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+  ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+! eval as_val=\$$as_ac_Header
+!    if test "x$as_val" = x""yes; then :
+    cat >>confdefs.h <<_ACEOF
+  #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+  _ACEOF
+--- 9111,9117 ----
+  do :
+    as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+  ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+! if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+    cat >>confdefs.h <<_ACEOF
+  #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+  _ACEOF
+***************
+*** 9164,9171 ****
+  do :
+    as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+  ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+! eval as_val=\$$as_ac_Header
+!    if test "x$as_val" = x""yes; then :
+    cat >>confdefs.h <<_ACEOF
+  #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+  _ACEOF
+--- 9193,9199 ----
+  do :
+    as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+  ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+! if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+    cat >>confdefs.h <<_ACEOF
+  #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+  _ACEOF
+***************
+*** 9233,9239 ****
+  
+  
+  if test "$enable_workshop" = "yes" -a -n "$SKIP_MOTIF"; then
+!   as_fn_error "cannot use workshop without Motif" "$LINENO" 5
+  fi
+  
+  if test "$enable_xim" = "yes"; then
+--- 9261,9267 ----
+  
+  
+  if test "$enable_workshop" = "yes" -a -n "$SKIP_MOTIF"; then
+!   as_fn_error $? "cannot use workshop without Motif" "$LINENO" 5
+  fi
+  
+  if test "$enable_xim" = "yes"; then
+***************
+*** 9287,9299 ****
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether toupper is broken" >&5
+  $as_echo_n "checking whether toupper is broken... " >&6; }
+! if test "${vim_cv_toupper_broken+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+  
+      if test "$cross_compiling" = yes; then :
+  
+!     as_fn_error "cross-compiling: please set 'vim_cv_toupper_broken'" "$LINENO" 5
+  
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+--- 9315,9327 ----
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether toupper is broken" >&5
+  $as_echo_n "checking whether toupper is broken... " >&6; }
+! if ${vim_cv_toupper_broken+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+  
+      if test "$cross_compiling" = yes; then :
+  
+!     as_fn_error $? "cross-compiling: please set 'vim_cv_toupper_broken'" "$LINENO" 5
+  
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+***************
+*** 9377,9383 ****
+  rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  
+  ac_fn_c_check_header_mongrel "$LINENO" "elf.h" "ac_cv_header_elf_h" "$ac_includes_default"
+! if test "x$ac_cv_header_elf_h" = x""yes; then :
+    HAS_ELF=1
+  fi
+  
+--- 9405,9411 ----
+  rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  
+  ac_fn_c_check_header_mongrel "$LINENO" "elf.h" "ac_cv_header_elf_h" "$ac_includes_default"
+! if test "x$ac_cv_header_elf_h" = xyes; then :
+    HAS_ELF=1
+  fi
+  
+***************
+*** 9385,9391 ****
+  if test "$HAS_ELF" = 1; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lelf" >&5
+  $as_echo_n "checking for main in -lelf... " >&6; }
+! if test "${ac_cv_lib_elf_main+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+--- 9413,9419 ----
+  if test "$HAS_ELF" = 1; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lelf" >&5
+  $as_echo_n "checking for main in -lelf... " >&6; }
+! if ${ac_cv_lib_elf_main+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+***************
+*** 9413,9419 ****
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_elf_main" >&5
+  $as_echo "$ac_cv_lib_elf_main" >&6; }
+! if test "x$ac_cv_lib_elf_main" = x""yes; then :
+    cat >>confdefs.h <<_ACEOF
+  #define HAVE_LIBELF 1
+  _ACEOF
+--- 9441,9447 ----
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_elf_main" >&5
+  $as_echo "$ac_cv_lib_elf_main" >&6; }
+! if test "x$ac_cv_lib_elf_main" = xyes; then :
+    cat >>confdefs.h <<_ACEOF
+  #define HAVE_LIBELF 1
+  _ACEOF
+***************
+*** 9429,9435 ****
+    as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5
+  $as_echo_n "checking for $ac_hdr that defines DIR... " >&6; }
+! if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then :
+    $as_echo_n "(cached) " >&6
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+--- 9457,9463 ----
+    as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5
+  $as_echo_n "checking for $ac_hdr that defines DIR... " >&6; }
+! if eval \${$as_ac_Header+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+***************
+*** 9456,9463 ****
+  eval ac_res=\$$as_ac_Header
+  	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+  $as_echo "$ac_res" >&6; }
+! eval as_val=\$$as_ac_Header
+!    if test "x$as_val" = x""yes; then :
+    cat >>confdefs.h <<_ACEOF
+  #define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
+  _ACEOF
+--- 9484,9490 ----
+  eval ac_res=\$$as_ac_Header
+  	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+  $as_echo "$ac_res" >&6; }
+! if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+    cat >>confdefs.h <<_ACEOF
+  #define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
+  _ACEOF
+***************
+*** 9470,9476 ****
+  if test $ac_header_dirent = dirent.h; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
+  $as_echo_n "checking for library containing opendir... " >&6; }
+! if test "${ac_cv_search_opendir+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_func_search_save_LIBS=$LIBS
+--- 9497,9503 ----
+  if test $ac_header_dirent = dirent.h; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
+  $as_echo_n "checking for library containing opendir... " >&6; }
+! if ${ac_cv_search_opendir+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_func_search_save_LIBS=$LIBS
+***************
+*** 9504,9514 ****
+  fi
+  rm -f core conftest.err conftest.$ac_objext \
+      conftest$ac_exeext
+!   if test "${ac_cv_search_opendir+set}" = set; then :
+    break
+  fi
+  done
+! if test "${ac_cv_search_opendir+set}" = set; then :
+  
+  else
+    ac_cv_search_opendir=no
+--- 9531,9541 ----
+  fi
+  rm -f core conftest.err conftest.$ac_objext \
+      conftest$ac_exeext
+!   if ${ac_cv_search_opendir+:} false; then :
+    break
+  fi
+  done
+! if ${ac_cv_search_opendir+:} false; then :
+  
+  else
+    ac_cv_search_opendir=no
+***************
+*** 9527,9533 ****
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
+  $as_echo_n "checking for library containing opendir... " >&6; }
+! if test "${ac_cv_search_opendir+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_func_search_save_LIBS=$LIBS
+--- 9554,9560 ----
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
+  $as_echo_n "checking for library containing opendir... " >&6; }
+! if ${ac_cv_search_opendir+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_func_search_save_LIBS=$LIBS
+***************
+*** 9561,9571 ****
+  fi
+  rm -f core conftest.err conftest.$ac_objext \
+      conftest$ac_exeext
+!   if test "${ac_cv_search_opendir+set}" = set; then :
+    break
+  fi
+  done
+! if test "${ac_cv_search_opendir+set}" = set; then :
+  
+  else
+    ac_cv_search_opendir=no
+--- 9588,9598 ----
+  fi
+  rm -f core conftest.err conftest.$ac_objext \
+      conftest$ac_exeext
+!   if ${ac_cv_search_opendir+:} false; then :
+    break
+  fi
+  done
+! if ${ac_cv_search_opendir+:} false; then :
+  
+  else
+    ac_cv_search_opendir=no
+***************
+*** 9625,9632 ****
+  do :
+    as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+  ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+! eval as_val=\$$as_ac_Header
+!    if test "x$as_val" = x""yes; then :
+    cat >>confdefs.h <<_ACEOF
+  #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+  _ACEOF
+--- 9652,9658 ----
+  do :
+    as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+  ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+! if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+    cat >>confdefs.h <<_ACEOF
+  #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+  _ACEOF
+***************
+*** 9642,9648 ****
+  #  include <sys/stream.h>
+  #endif
+  "
+! if test "x$ac_cv_header_sys_ptem_h" = x""yes; then :
+    cat >>confdefs.h <<_ACEOF
+  #define HAVE_SYS_PTEM_H 1
+  _ACEOF
+--- 9668,9674 ----
+  #  include <sys/stream.h>
+  #endif
+  "
+! if test "x$ac_cv_header_sys_ptem_h" = xyes; then :
+    cat >>confdefs.h <<_ACEOF
+  #define HAVE_SYS_PTEM_H 1
+  _ACEOF
+***************
+*** 9658,9664 ****
+  #  include <sys/param.h>
+  #endif
+  "
+! if test "x$ac_cv_header_sys_sysctl_h" = x""yes; then :
+    cat >>confdefs.h <<_ACEOF
+  #define HAVE_SYS_SYSCTL_H 1
+  _ACEOF
+--- 9684,9690 ----
+  #  include <sys/param.h>
+  #endif
+  "
+! if test "x$ac_cv_header_sys_sysctl_h" = xyes; then :
+    cat >>confdefs.h <<_ACEOF
+  #define HAVE_SYS_SYSCTL_H 1
+  _ACEOF
+***************
+*** 9698,9704 ****
+  for ac_header in strings.h
+  do :
+    ac_fn_c_check_header_mongrel "$LINENO" "strings.h" "ac_cv_header_strings_h" "$ac_includes_default"
+! if test "x$ac_cv_header_strings_h" = x""yes; then :
+    cat >>confdefs.h <<_ACEOF
+  #define HAVE_STRINGS_H 1
+  _ACEOF
+--- 9724,9730 ----
+  for ac_header in strings.h
+  do :
+    ac_fn_c_check_header_mongrel "$LINENO" "strings.h" "ac_cv_header_strings_h" "$ac_includes_default"
+! if test "x$ac_cv_header_strings_h" = xyes; then :
+    cat >>confdefs.h <<_ACEOF
+  #define HAVE_STRINGS_H 1
+  _ACEOF
+***************
+*** 9757,9763 ****
+  if test $ac_cv_c_compiler_gnu = yes; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5
+  $as_echo_n "checking whether $CC needs -traditional... " >&6; }
+! if test "${ac_cv_prog_gcc_traditional+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+      ac_pattern="Autoconf.*'x'"
+--- 9783,9789 ----
+  if test $ac_cv_c_compiler_gnu = yes; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5
+  $as_echo_n "checking whether $CC needs -traditional... " >&6; }
+! if ${ac_cv_prog_gcc_traditional+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+      ac_pattern="Autoconf.*'x'"
+***************
+*** 9798,9804 ****
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
+  $as_echo_n "checking for an ANSI C-conforming const... " >&6; }
+! if test "${ac_cv_c_const+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+--- 9824,9830 ----
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
+  $as_echo_n "checking for an ANSI C-conforming const... " >&6; }
+! if ${ac_cv_c_const+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+***************
+*** 9807,9817 ****
+  int
+  main ()
+  {
+! /* FIXME: Include the comments suggested by Paul. */
+  #ifndef __cplusplus
+!   /* Ultrix mips cc rejects this.  */
+    typedef int charset[2];
+!   const charset cs;
+    /* SunOS 4.1.1 cc rejects this.  */
+    char const *const *pcpcc;
+    char **ppc;
+--- 9833,9843 ----
+  int
+  main ()
+  {
+! 
+  #ifndef __cplusplus
+!   /* Ultrix mips cc rejects this sort of thing.  */
+    typedef int charset[2];
+!   const charset cs = { 0, 0 };
+    /* SunOS 4.1.1 cc rejects this.  */
+    char const *const *pcpcc;
+    char **ppc;
+***************
+*** 9828,9835 ****
+    ++pcpcc;
+    ppc = (char**) pcpcc;
+    pcpcc = (char const *const *) ppc;
+!   { /* SCO 3.2v4 cc rejects this.  */
+!     char *t;
+      char const *s = 0 ? (char *) 0 : (char const *) 0;
+  
+      *t++ = 0;
+--- 9854,9862 ----
+    ++pcpcc;
+    ppc = (char**) pcpcc;
+    pcpcc = (char const *const *) ppc;
+!   { /* SCO 3.2v4 cc rejects this sort of thing.  */
+!     char tx;
+!     char *t = &tx;
+      char const *s = 0 ? (char *) 0 : (char const *) 0;
+  
+      *t++ = 0;
+***************
+*** 9845,9854 ****
+      iptr p = 0;
+      ++p;
+    }
+!   { /* AIX XL C 1.02.0.0 rejects this saying
+         "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+!     struct s { int j; const int *ap[3]; };
+!     struct s *b; b->j = 5;
+    }
+    { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+      const int foo = 10;
+--- 9872,9881 ----
+      iptr p = 0;
+      ++p;
+    }
+!   { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying
+         "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+!     struct s { int j; const int *ap[3]; } bx;
+!     struct s *b = &bx; b->j = 5;
+    }
+    { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+      const int foo = 10;
+***************
+*** 9878,9884 ****
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working volatile" >&5
+  $as_echo_n "checking for working volatile... " >&6; }
+! if test "${ac_cv_c_volatile+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+--- 9905,9911 ----
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working volatile" >&5
+  $as_echo_n "checking for working volatile... " >&6; }
+! if ${ac_cv_c_volatile+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+***************
+*** 9911,9917 ****
+  fi
+  
+  ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default"
+! if test "x$ac_cv_type_mode_t" = x""yes; then :
+  
+  else
+  
+--- 9938,9944 ----
+  fi
+  
+  ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default"
+! if test "x$ac_cv_type_mode_t" = xyes; then :
+  
+  else
+  
+***************
+*** 9922,9928 ****
+  fi
+  
+  ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default"
+! if test "x$ac_cv_type_off_t" = x""yes; then :
+  
+  else
+  
+--- 9949,9955 ----
+  fi
+  
+  ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default"
+! if test "x$ac_cv_type_off_t" = xyes; then :
+  
+  else
+  
+***************
+*** 9933,9939 ****
+  fi
+  
+  ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default"
+! if test "x$ac_cv_type_pid_t" = x""yes; then :
+  
+  else
+  
+--- 9960,9966 ----
+  fi
+  
+  ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default"
+! if test "x$ac_cv_type_pid_t" = xyes; then :
+  
+  else
+  
+***************
+*** 9944,9950 ****
+  fi
+  
+  ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
+! if test "x$ac_cv_type_size_t" = x""yes; then :
+  
+  else
+  
+--- 9971,9977 ----
+  fi
+  
+  ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
+! if test "x$ac_cv_type_size_t" = xyes; then :
+  
+  else
+  
+***************
+*** 9956,9962 ****
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5
+  $as_echo_n "checking for uid_t in sys/types.h... " >&6; }
+! if test "${ac_cv_type_uid_t+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+--- 9983,9989 ----
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5
+  $as_echo_n "checking for uid_t in sys/types.h... " >&6; }
+! if ${ac_cv_type_uid_t+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+***************
+*** 10001,10007 ****
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5
+  $as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }
+! if test "${ac_cv_header_time+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+--- 10028,10034 ----
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5
+  $as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }
+! if ${ac_cv_header_time+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+***************
+*** 10035,10041 ****
+  fi
+  
+  ac_fn_c_check_type "$LINENO" "ino_t" "ac_cv_type_ino_t" "$ac_includes_default"
+! if test "x$ac_cv_type_ino_t" = x""yes; then :
+  
+  else
+  
+--- 10062,10068 ----
+  fi
+  
+  ac_fn_c_check_type "$LINENO" "ino_t" "ac_cv_type_ino_t" "$ac_includes_default"
+! if test "x$ac_cv_type_ino_t" = xyes; then :
+  
+  else
+  
+***************
+*** 10046,10052 ****
+  fi
+  
+  ac_fn_c_check_type "$LINENO" "dev_t" "ac_cv_type_dev_t" "$ac_includes_default"
+! if test "x$ac_cv_type_dev_t" = x""yes; then :
+  
+  else
+  
+--- 10073,10079 ----
+  fi
+  
+  ac_fn_c_check_type "$LINENO" "dev_t" "ac_cv_type_dev_t" "$ac_includes_default"
+! if test "x$ac_cv_type_dev_t" = xyes; then :
+  
+  else
+  
+***************
+*** 10058,10064 ****
+  
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
+  $as_echo_n "checking whether byte ordering is bigendian... " >&6; }
+! if test "${ac_cv_c_bigendian+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_cv_c_bigendian=unknown
+--- 10085,10091 ----
+  
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
+  $as_echo_n "checking whether byte ordering is bigendian... " >&6; }
+! if ${ac_cv_c_bigendian+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_cv_c_bigendian=unknown
+***************
+*** 10276,10282 ****
+  
+       ;; #(
+     *)
+!      as_fn_error "unknown endianness
+   presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
+   esac
+  
+--- 10303,10309 ----
+  
+       ;; #(
+     *)
+!      as_fn_error $? "unknown endianness
+   presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
+   esac
+  
+***************
+*** 10412,10418 ****
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: OK" >&5
+  $as_echo "OK" >&6; }
+  else
+!   as_fn_error "FAILED" "$LINENO" 5
+  fi
+  rm -f core conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+--- 10439,10445 ----
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: OK" >&5
+  $as_echo "OK" >&6; }
+  else
+!   as_fn_error $? "FAILED" "$LINENO" 5
+  fi
+  rm -f core conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+***************
+*** 10428,10434 ****
+      as_ac_Lib=`$as_echo "ac_cv_lib_${libname}''_tgetent" | $as_tr_sh`
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -l${libname}" >&5
+  $as_echo_n "checking for tgetent in -l${libname}... " >&6; }
+! if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+--- 10455,10461 ----
+      as_ac_Lib=`$as_echo "ac_cv_lib_${libname}''_tgetent" | $as_tr_sh`
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -l${libname}" >&5
+  $as_echo_n "checking for tgetent in -l${libname}... " >&6; }
+! if eval \${$as_ac_Lib+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+***************
+*** 10463,10470 ****
+  eval ac_res=\$$as_ac_Lib
+  	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+  $as_echo "$ac_res" >&6; }
+! eval as_val=\$$as_ac_Lib
+!    if test "x$as_val" = x""yes; then :
+    cat >>confdefs.h <<_ACEOF
+  #define `$as_echo "HAVE_LIB${libname}" | $as_tr_cpp` 1
+  _ACEOF
+--- 10490,10496 ----
+  eval ac_res=\$$as_ac_Lib
+  	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+  $as_echo "$ac_res" >&6; }
+! if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
+    cat >>confdefs.h <<_ACEOF
+  #define `$as_echo "HAVE_LIB${libname}" | $as_tr_cpp` 1
+  _ACEOF
+***************
+*** 10530,10536 ****
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+  $as_echo "yes" >&6; }
+  else
+!   as_fn_error "NOT FOUND!
+        You need to install a terminal library; for example ncurses.
+        Or specify the name of the library with --with-tlib." "$LINENO" 5
+  fi
+--- 10556,10562 ----
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+  $as_echo "yes" >&6; }
+  else
+!   as_fn_error $? "NOT FOUND!
+        You need to install a terminal library; for example ncurses.
+        Or specify the name of the library with --with-tlib." "$LINENO" 5
+  fi
+***************
+*** 10540,10552 ****
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we talk terminfo" >&5
+  $as_echo_n "checking whether we talk terminfo... " >&6; }
+! if test "${vim_cv_terminfo+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+  
+      if test "$cross_compiling" = yes; then :
+  
+!       as_fn_error "cross-compiling: please set 'vim_cv_terminfo'" "$LINENO" 5
+  
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+--- 10566,10578 ----
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we talk terminfo" >&5
+  $as_echo_n "checking whether we talk terminfo... " >&6; }
+! if ${vim_cv_terminfo+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+  
+      if test "$cross_compiling" = yes; then :
+  
+!       as_fn_error $? "cross-compiling: please set 'vim_cv_terminfo'" "$LINENO" 5
+  
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+***************
+*** 10593,10605 ****
+  if test "x$olibs" != "x$LIBS"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking what tgetent() returns for an unknown terminal" >&5
+  $as_echo_n "checking what tgetent() returns for an unknown terminal... " >&6; }
+! if test "${vim_cv_tgent+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+  
+        if test "$cross_compiling" = yes; then :
+  
+! 	as_fn_error "failed to compile test program." "$LINENO" 5
+  
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+--- 10619,10631 ----
+  if test "x$olibs" != "x$LIBS"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking what tgetent() returns for an unknown terminal" >&5
+  $as_echo_n "checking what tgetent() returns for an unknown terminal... " >&6; }
+! if ${vim_cv_tgent+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+  
+        if test "$cross_compiling" = yes; then :
+  
+! 	as_fn_error $? "failed to compile test program." "$LINENO" 5
+  
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+***************
+*** 10894,10906 ****
+  rm -f conftest_grp
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking default tty permissions/group" >&5
+  $as_echo_n "checking default tty permissions/group... " >&6; }
+! if test "${vim_cv_tty_group+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+  
+      if test "$cross_compiling" = yes; then :
+  
+!       as_fn_error "cross-compiling: please set 'vim_cv_tty_group' and 'vim_cv_tty_mode'" "$LINENO" 5
+  
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+--- 10920,10932 ----
+  rm -f conftest_grp
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking default tty permissions/group" >&5
+  $as_echo_n "checking default tty permissions/group... " >&6; }
+! if ${vim_cv_tty_group+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+  
+      if test "$cross_compiling" = yes; then :
+  
+!       as_fn_error $? "cross-compiling: please set 'vim_cv_tty_group' and 'vim_cv_tty_mode'" "$LINENO" 5
+  
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+***************
+*** 10981,10987 ****
+  _ACEOF
+  
+    if test "x$vim_cv_tty_mode" = "x" ; then
+!     as_fn_error "It seems you're cross compiling and have 'vim_cv_tty_group' set, please also set the environment variable 'vim_cv_tty_mode' to the correct mode (probably 0620)" "$LINENO" 5
+    else
+      $as_echo "#define PTYMODE 0620" >>confdefs.h
+  
+--- 11007,11013 ----
+  _ACEOF
+  
+    if test "x$vim_cv_tty_mode" = "x" ; then
+!     as_fn_error $? "It seems you're cross compiling and have 'vim_cv_tty_group' set, please also set the environment variable 'vim_cv_tty_mode' to the correct mode (probably 0620)" "$LINENO" 5
+    else
+      $as_echo "#define PTYMODE 0620" >>confdefs.h
+  
+***************
+*** 10991,10997 ****
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5
+  $as_echo_n "checking return type of signal handlers... " >&6; }
+! if test "${ac_cv_type_signal+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+--- 11017,11023 ----
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5
+  $as_echo_n "checking return type of signal handlers... " >&6; }
+! if ${ac_cv_type_signal+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+***************
+*** 11064,11076 ****
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking getcwd implementation is broken" >&5
+  $as_echo_n "checking getcwd implementation is broken... " >&6; }
+! if test "${vim_cv_getcwd_broken+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+  
+      if test "$cross_compiling" = yes; then :
+  
+!       as_fn_error "cross-compiling: please set 'vim_cv_getcwd_broken'" "$LINENO" 5
+  
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+--- 11090,11102 ----
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking getcwd implementation is broken" >&5
+  $as_echo_n "checking getcwd implementation is broken... " >&6; }
+! if ${vim_cv_getcwd_broken+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+  
+      if test "$cross_compiling" = yes; then :
+  
+!       as_fn_error $? "cross-compiling: please set 'vim_cv_getcwd_broken'" "$LINENO" 5
+  
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+***************
+*** 11123,11130 ****
+  do :
+    as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+  ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+! eval as_val=\$$as_ac_var
+!    if test "x$as_val" = x""yes; then :
+    cat >>confdefs.h <<_ACEOF
+  #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+  _ACEOF
+--- 11149,11155 ----
+  do :
+    as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+  ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+! if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+    cat >>confdefs.h <<_ACEOF
+  #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+  _ACEOF
+***************
+*** 11134,11140 ****
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5
+  $as_echo_n "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; }
+! if test "${ac_cv_sys_largefile_source+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    while :; do
+--- 11159,11165 ----
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5
+  $as_echo_n "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; }
+! if ${ac_cv_sys_largefile_source+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    while :; do
+***************
+*** 11210,11216 ****
+  
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
+  $as_echo_n "checking for special C compiler options needed for large files... " >&6; }
+! if test "${ac_cv_sys_largefile_CC+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_cv_sys_largefile_CC=no
+--- 11235,11241 ----
+  
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
+  $as_echo_n "checking for special C compiler options needed for large files... " >&6; }
+! if ${ac_cv_sys_largefile_CC+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_cv_sys_largefile_CC=no
+***************
+*** 11261,11267 ****
+  
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+  $as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
+! if test "${ac_cv_sys_file_offset_bits+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    while :; do
+--- 11286,11292 ----
+  
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+  $as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
+! if ${ac_cv_sys_file_offset_bits+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    while :; do
+***************
+*** 11330,11336 ****
+    if test $ac_cv_sys_file_offset_bits = unknown; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
+  $as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
+! if test "${ac_cv_sys_large_files+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    while :; do
+--- 11355,11361 ----
+    if test $ac_cv_sys_file_offset_bits = unknown; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
+  $as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
+! if ${ac_cv_sys_large_files+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    while :; do
+***************
+*** 11397,11402 ****
+--- 11422,11429 ----
+  esac
+  rm -rf conftest*
+    fi
++ 
++ 
+  fi
+  
+  
+***************
+*** 11430,11442 ****
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat() ignores a trailing slash" >&5
+  $as_echo_n "checking whether stat() ignores a trailing slash... " >&6; }
+! if test "${vim_cv_stat_ignores_slash+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+  
+      if test "$cross_compiling" = yes; then :
+  
+!       as_fn_error "cross-compiling: please set 'vim_cv_stat_ignores_slash'" "$LINENO" 5
+  
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+--- 11457,11469 ----
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat() ignores a trailing slash" >&5
+  $as_echo_n "checking whether stat() ignores a trailing slash... " >&6; }
+! if ${vim_cv_stat_ignores_slash+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+  
+      if test "$cross_compiling" = yes; then :
+  
+!       as_fn_error $? "cross-compiling: please set 'vim_cv_stat_ignores_slash'" "$LINENO" 5
+  
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+***************
+*** 11560,11566 ****
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strtod in -lm" >&5
+  $as_echo_n "checking for strtod in -lm... " >&6; }
+! if test "${ac_cv_lib_m_strtod+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+--- 11587,11593 ----
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strtod in -lm" >&5
+  $as_echo_n "checking for strtod in -lm... " >&6; }
+! if ${ac_cv_lib_m_strtod+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+***************
+*** 11594,11600 ****
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_strtod" >&5
+  $as_echo "$ac_cv_lib_m_strtod" >&6; }
+! if test "x$ac_cv_lib_m_strtod" = x""yes; then :
+    cat >>confdefs.h <<_ACEOF
+  #define HAVE_LIBM 1
+  _ACEOF
+--- 11621,11627 ----
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_strtod" >&5
+  $as_echo "$ac_cv_lib_m_strtod" >&6; }
+! if test "x$ac_cv_lib_m_strtod" = xyes; then :
+    cat >>confdefs.h <<_ACEOF
+  #define HAVE_LIBM 1
+  _ACEOF
+***************
+*** 11660,11666 ****
+  $as_echo "no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for acl_get_file in -lposix1e" >&5
+  $as_echo_n "checking for acl_get_file in -lposix1e... " >&6; }
+! if test "${ac_cv_lib_posix1e_acl_get_file+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+--- 11687,11693 ----
+  $as_echo "no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for acl_get_file in -lposix1e" >&5
+  $as_echo_n "checking for acl_get_file in -lposix1e... " >&6; }
+! if ${ac_cv_lib_posix1e_acl_get_file+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+***************
+*** 11694,11705 ****
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix1e_acl_get_file" >&5
+  $as_echo "$ac_cv_lib_posix1e_acl_get_file" >&6; }
+! if test "x$ac_cv_lib_posix1e_acl_get_file" = x""yes; then :
+    LIBS="$LIBS -lposix1e"
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for acl_get_file in -lacl" >&5
+  $as_echo_n "checking for acl_get_file in -lacl... " >&6; }
+! if test "${ac_cv_lib_acl_acl_get_file+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+--- 11721,11732 ----
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix1e_acl_get_file" >&5
+  $as_echo "$ac_cv_lib_posix1e_acl_get_file" >&6; }
+! if test "x$ac_cv_lib_posix1e_acl_get_file" = xyes; then :
+    LIBS="$LIBS -lposix1e"
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for acl_get_file in -lacl" >&5
+  $as_echo_n "checking for acl_get_file in -lacl... " >&6; }
+! if ${ac_cv_lib_acl_acl_get_file+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+***************
+*** 11733,11743 ****
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_acl_acl_get_file" >&5
+  $as_echo "$ac_cv_lib_acl_acl_get_file" >&6; }
+! if test "x$ac_cv_lib_acl_acl_get_file" = x""yes; then :
+    LIBS="$LIBS -lacl"
+  		  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgetxattr in -lattr" >&5
+  $as_echo_n "checking for fgetxattr in -lattr... " >&6; }
+! if test "${ac_cv_lib_attr_fgetxattr+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+--- 11760,11770 ----
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_acl_acl_get_file" >&5
+  $as_echo "$ac_cv_lib_acl_acl_get_file" >&6; }
+! if test "x$ac_cv_lib_acl_acl_get_file" = xyes; then :
+    LIBS="$LIBS -lacl"
+  		  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgetxattr in -lattr" >&5
+  $as_echo_n "checking for fgetxattr in -lattr... " >&6; }
+! if ${ac_cv_lib_attr_fgetxattr+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+***************
+*** 11771,11777 ****
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_attr_fgetxattr" >&5
+  $as_echo "$ac_cv_lib_attr_fgetxattr" >&6; }
+! if test "x$ac_cv_lib_attr_fgetxattr" = x""yes; then :
+    LIBS="$LIBS -lattr"
+  fi
+  
+--- 11798,11804 ----
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_attr_fgetxattr" >&5
+  $as_echo "$ac_cv_lib_attr_fgetxattr" >&6; }
+! if test "x$ac_cv_lib_attr_fgetxattr" = xyes; then :
+    LIBS="$LIBS -lattr"
+  fi
+  
+***************
+*** 11813,11819 ****
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for acl_get in -lsec" >&5
+  $as_echo_n "checking for acl_get in -lsec... " >&6; }
+! if test "${ac_cv_lib_sec_acl_get+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+--- 11840,11846 ----
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for acl_get in -lsec" >&5
+  $as_echo_n "checking for acl_get in -lsec... " >&6; }
+! if ${ac_cv_lib_sec_acl_get+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+***************
+*** 11847,11853 ****
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sec_acl_get" >&5
+  $as_echo "$ac_cv_lib_sec_acl_get" >&6; }
+! if test "x$ac_cv_lib_sec_acl_get" = x""yes; then :
+    LIBS="$LIBS -lsec"; $as_echo "#define HAVE_SOLARIS_ZFS_ACL 1" >>confdefs.h
+  
+  else
+--- 11874,11880 ----
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sec_acl_get" >&5
+  $as_echo "$ac_cv_lib_sec_acl_get" >&6; }
+! if test "x$ac_cv_lib_sec_acl_get" = xyes; then :
+    LIBS="$LIBS -lsec"; $as_echo "#define HAVE_SOLARIS_ZFS_ACL 1" >>confdefs.h
+  
+  else
+***************
+*** 11943,11949 ****
+  $as_echo "no" >&6; }
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gpm" >&5
+  $as_echo_n "checking for gpm... " >&6; }
+! if test "${vi_cv_have_gpm+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    olibs="$LIBS" ; LIBS="-lgpm"
+--- 11970,11976 ----
+  $as_echo "no" >&6; }
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gpm" >&5
+  $as_echo_n "checking for gpm... " >&6; }
+! if ${vi_cv_have_gpm+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    olibs="$LIBS" ; LIBS="-lgpm"
+***************
+*** 11996,12002 ****
+  $as_echo "no" >&6; }
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysmouse" >&5
+  $as_echo_n "checking for sysmouse... " >&6; }
+! if test "${vi_cv_have_sysmouse+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+--- 12023,12029 ----
+  $as_echo "no" >&6; }
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysmouse" >&5
+  $as_echo_n "checking for sysmouse... " >&6; }
+! if ${vi_cv_have_sysmouse+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+***************
+*** 12202,12208 ****
+  # This bug is HP SR number 8606223364.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
+  $as_echo_n "checking size of int... " >&6; }
+! if test "${ac_cv_sizeof_int+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int"        "$ac_includes_default"; then :
+--- 12229,12235 ----
+  # This bug is HP SR number 8606223364.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
+  $as_echo_n "checking size of int... " >&6; }
+! if ${ac_cv_sizeof_int+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int"        "$ac_includes_default"; then :
+***************
+*** 12211,12219 ****
+    if test "$ac_cv_type_int" = yes; then
+       { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+  $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+! { as_fn_set_status 77
+! as_fn_error "cannot compute sizeof (int)
+! See \`config.log' for more details." "$LINENO" 5; }; }
+     else
+       ac_cv_sizeof_int=0
+     fi
+--- 12238,12245 ----
+    if test "$ac_cv_type_int" = yes; then
+       { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+  $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+! as_fn_error 77 "cannot compute sizeof (int)
+! See \`config.log' for more details" "$LINENO" 5; }
+     else
+       ac_cv_sizeof_int=0
+     fi
+***************
+*** 12236,12242 ****
+  # This bug is HP SR number 8606223364.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
+  $as_echo_n "checking size of long... " >&6; }
+! if test "${ac_cv_sizeof_long+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long"        "$ac_includes_default"; then :
+--- 12262,12268 ----
+  # This bug is HP SR number 8606223364.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
+  $as_echo_n "checking size of long... " >&6; }
+! if ${ac_cv_sizeof_long+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long"        "$ac_includes_default"; then :
+***************
+*** 12245,12253 ****
+    if test "$ac_cv_type_long" = yes; then
+       { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+  $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+! { as_fn_set_status 77
+! as_fn_error "cannot compute sizeof (long)
+! See \`config.log' for more details." "$LINENO" 5; }; }
+     else
+       ac_cv_sizeof_long=0
+     fi
+--- 12271,12278 ----
+    if test "$ac_cv_type_long" = yes; then
+       { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+  $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+! as_fn_error 77 "cannot compute sizeof (long)
+! See \`config.log' for more details" "$LINENO" 5; }
+     else
+       ac_cv_sizeof_long=0
+     fi
+***************
+*** 12270,12276 ****
+  # This bug is HP SR number 8606223364.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of time_t" >&5
+  $as_echo_n "checking size of time_t... " >&6; }
+! if test "${ac_cv_sizeof_time_t+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (time_t))" "ac_cv_sizeof_time_t"        "$ac_includes_default"; then :
+--- 12295,12301 ----
+  # This bug is HP SR number 8606223364.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of time_t" >&5
+  $as_echo_n "checking size of time_t... " >&6; }
+! if ${ac_cv_sizeof_time_t+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (time_t))" "ac_cv_sizeof_time_t"        "$ac_includes_default"; then :
+***************
+*** 12279,12287 ****
+    if test "$ac_cv_type_time_t" = yes; then
+       { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+  $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+! { as_fn_set_status 77
+! as_fn_error "cannot compute sizeof (time_t)
+! See \`config.log' for more details." "$LINENO" 5; }; }
+     else
+       ac_cv_sizeof_time_t=0
+     fi
+--- 12304,12311 ----
+    if test "$ac_cv_type_time_t" = yes; then
+       { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+  $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+! as_fn_error 77 "cannot compute sizeof (time_t)
+! See \`config.log' for more details" "$LINENO" 5; }
+     else
+       ac_cv_sizeof_time_t=0
+     fi
+***************
+*** 12304,12310 ****
+  # This bug is HP SR number 8606223364.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of off_t" >&5
+  $as_echo_n "checking size of off_t... " >&6; }
+! if test "${ac_cv_sizeof_off_t+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (off_t))" "ac_cv_sizeof_off_t"        "$ac_includes_default"; then :
+--- 12328,12334 ----
+  # This bug is HP SR number 8606223364.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of off_t" >&5
+  $as_echo_n "checking size of off_t... " >&6; }
+! if ${ac_cv_sizeof_off_t+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (off_t))" "ac_cv_sizeof_off_t"        "$ac_includes_default"; then :
+***************
+*** 12313,12321 ****
+    if test "$ac_cv_type_off_t" = yes; then
+       { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+  $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+! { as_fn_set_status 77
+! as_fn_error "cannot compute sizeof (off_t)
+! See \`config.log' for more details." "$LINENO" 5; }; }
+     else
+       ac_cv_sizeof_off_t=0
+     fi
+--- 12337,12344 ----
+    if test "$ac_cv_type_off_t" = yes; then
+       { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+  $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+! as_fn_error 77 "cannot compute sizeof (off_t)
+! See \`config.log' for more details" "$LINENO" 5; }
+     else
+       ac_cv_sizeof_off_t=0
+     fi
+***************
+*** 12368,12374 ****
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+  $as_echo "ok" >&6; }
+  else
+!   as_fn_error "WRONG!  uint32_t not defined correctly." "$LINENO" 5
+  fi
+  rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+    conftest.$ac_objext conftest.beam conftest.$ac_ext
+--- 12391,12397 ----
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+  $as_echo "ok" >&6; }
+  else
+!   as_fn_error $? "WRONG!  uint32_t not defined correctly." "$LINENO" 5
+  fi
+  rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+    conftest.$ac_objext conftest.beam conftest.$ac_ext
+***************
+*** 12400,12412 ****
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether memmove handles overlaps" >&5
+  $as_echo_n "checking whether memmove handles overlaps... " >&6; }
+! if test "${vim_cv_memmove_handles_overlap+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+  
+      if test "$cross_compiling" = yes; then :
+  
+! 	as_fn_error "cross-compiling: please set 'vim_cv_memmove_handles_overlap'" "$LINENO" 5
+  
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+--- 12423,12435 ----
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether memmove handles overlaps" >&5
+  $as_echo_n "checking whether memmove handles overlaps... " >&6; }
+! if ${vim_cv_memmove_handles_overlap+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+  
+      if test "$cross_compiling" = yes; then :
+  
+! 	as_fn_error $? "cross-compiling: please set 'vim_cv_memmove_handles_overlap'" "$LINENO" 5
+  
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+***************
+*** 12437,12449 ****
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bcopy handles overlaps" >&5
+  $as_echo_n "checking whether bcopy handles overlaps... " >&6; }
+! if test "${vim_cv_bcopy_handles_overlap+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+  
+        if test "$cross_compiling" = yes; then :
+  
+! 	as_fn_error "cross-compiling: please set 'vim_cv_bcopy_handles_overlap'" "$LINENO" 5
+  
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+--- 12460,12472 ----
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bcopy handles overlaps" >&5
+  $as_echo_n "checking whether bcopy handles overlaps... " >&6; }
+! if ${vim_cv_bcopy_handles_overlap+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+  
+        if test "$cross_compiling" = yes; then :
+  
+! 	as_fn_error $? "cross-compiling: please set 'vim_cv_bcopy_handles_overlap'" "$LINENO" 5
+  
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+***************
+*** 12474,12486 ****
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether memcpy handles overlaps" >&5
+  $as_echo_n "checking whether memcpy handles overlaps... " >&6; }
+! if test "${vim_cv_memcpy_handles_overlap+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+  
+  	if test "$cross_compiling" = yes; then :
+  
+! 	    as_fn_error "cross-compiling: please set 'vim_cv_memcpy_handles_overlap'" "$LINENO" 5
+  
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+--- 12497,12509 ----
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether memcpy handles overlaps" >&5
+  $as_echo_n "checking whether memcpy handles overlaps... " >&6; }
+! if ${vim_cv_memcpy_handles_overlap+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+  
+  	if test "$cross_compiling" = yes; then :
+  
+! 	    as_fn_error $? "cross-compiling: please set 'vim_cv_memcpy_handles_overlap'" "$LINENO" 5
+  
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+***************
+*** 12575,12581 ****
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _xpg4_setrunelocale in -lxpg4" >&5
+  $as_echo_n "checking for _xpg4_setrunelocale in -lxpg4... " >&6; }
+! if test "${ac_cv_lib_xpg4__xpg4_setrunelocale+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+--- 12598,12604 ----
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _xpg4_setrunelocale in -lxpg4" >&5
+  $as_echo_n "checking for _xpg4_setrunelocale in -lxpg4... " >&6; }
+! if ${ac_cv_lib_xpg4__xpg4_setrunelocale+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+***************
+*** 12609,12615 ****
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_xpg4__xpg4_setrunelocale" >&5
+  $as_echo "$ac_cv_lib_xpg4__xpg4_setrunelocale" >&6; }
+! if test "x$ac_cv_lib_xpg4__xpg4_setrunelocale" = x""yes; then :
+    LIBS="$LIBS -lxpg4"
+  fi
+  
+--- 12632,12638 ----
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_xpg4__xpg4_setrunelocale" >&5
+  $as_echo "$ac_cv_lib_xpg4__xpg4_setrunelocale" >&6; }
+! if test "x$ac_cv_lib_xpg4__xpg4_setrunelocale" = xyes; then :
+    LIBS="$LIBS -lxpg4"
+  fi
+  
+***************
+*** 12671,12677 ****
+  set dummy msgfmt; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if test "${ac_cv_prog_MSGFMT+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if test -n "$MSGFMT"; then
+--- 12694,12700 ----
+  set dummy msgfmt; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+! if ${ac_cv_prog_MSGFMT+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    if test -n "$MSGFMT"; then
+***************
+*** 12683,12689 ****
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+      ac_cv_prog_MSGFMT="msgfmt"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+--- 12706,12712 ----
+    IFS=$as_save_IFS
+    test -z "$as_dir" && as_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+!   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+      ac_cv_prog_MSGFMT="msgfmt"
+      $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+      break 2
+***************
+*** 12764,12770 ****
+              for ac_func in bind_textdomain_codeset
+  do :
+    ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset"
+! if test "x$ac_cv_func_bind_textdomain_codeset" = x""yes; then :
+    cat >>confdefs.h <<_ACEOF
+  #define HAVE_BIND_TEXTDOMAIN_CODESET 1
+  _ACEOF
+--- 12787,12793 ----
+              for ac_func in bind_textdomain_codeset
+  do :
+    ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset"
+! if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then :
+    cat >>confdefs.h <<_ACEOF
+  #define HAVE_BIND_TEXTDOMAIN_CODESET 1
+  _ACEOF
+***************
+*** 12807,12817 ****
+  fi
+  
+  ac_fn_c_check_header_mongrel "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default"
+! if test "x$ac_cv_header_dlfcn_h" = x""yes; then :
+    DLL=dlfcn.h
+  else
+    ac_fn_c_check_header_mongrel "$LINENO" "dl.h" "ac_cv_header_dl_h" "$ac_includes_default"
+! if test "x$ac_cv_header_dl_h" = x""yes; then :
+    DLL=dl.h
+  fi
+  
+--- 12830,12840 ----
+  fi
+  
+  ac_fn_c_check_header_mongrel "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default"
+! if test "x$ac_cv_header_dlfcn_h" = xyes; then :
+    DLL=dlfcn.h
+  else
+    ac_fn_c_check_header_mongrel "$LINENO" "dl.h" "ac_cv_header_dl_h" "$ac_includes_default"
+! if test "x$ac_cv_header_dl_h" = xyes; then :
+    DLL=dl.h
+  fi
+  
+***************
+*** 13008,13014 ****
+  for ac_header in setjmp.h
+  do :
+    ac_fn_c_check_header_mongrel "$LINENO" "setjmp.h" "ac_cv_header_setjmp_h" "$ac_includes_default"
+! if test "x$ac_cv_header_setjmp_h" = x""yes; then :
+    cat >>confdefs.h <<_ACEOF
+  #define HAVE_SETJMP_H 1
+  _ACEOF
+--- 13031,13037 ----
+  for ac_header in setjmp.h
+  do :
+    ac_fn_c_check_header_mongrel "$LINENO" "setjmp.h" "ac_cv_header_setjmp_h" "$ac_includes_default"
+! if test "x$ac_cv_header_setjmp_h" = xyes; then :
+    cat >>confdefs.h <<_ACEOF
+  #define HAVE_SETJMP_H 1
+  _ACEOF
+***************
+*** 13159,13168 ****
+       :end' >>confcache
+  if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+    if test -w "$cache_file"; then
+!     test "x$cache_file" != "x/dev/null" &&
+        { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+  $as_echo "$as_me: updating cache $cache_file" >&6;}
+!     cat confcache >$cache_file
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+  $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+--- 13182,13202 ----
+       :end' >>confcache
+  if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+    if test -w "$cache_file"; then
+!     if test "x$cache_file" != "x/dev/null"; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+  $as_echo "$as_me: updating cache $cache_file" >&6;}
+!       if test ! -f "$cache_file" || test -h "$cache_file"; then
+! 	cat confcache >"$cache_file"
+!       else
+!         case $cache_file in #(
+!         */* | ?:*)
+! 	  mv -f confcache "$cache_file"$$ &&
+! 	  mv -f "$cache_file"$$ "$cache_file" ;; #(
+!         *)
+! 	  mv -f confcache "$cache_file" ;;
+! 	esac
+!       fi
+!     fi
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+  $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+***************
+*** 13178,13183 ****
+--- 13212,13218 ----
+  
+  ac_libobjs=
+  ac_ltlibobjs=
++ U=
+  for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+    # 1. Remove the extension, and $U if already installed.
+    ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+***************
+*** 13194,13200 ****
+  
+  
+  
+! : ${CONFIG_STATUS=./config.status}
+  ac_write_fail=0
+  ac_clean_files_save=$ac_clean_files
+  ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+--- 13229,13235 ----
+  
+  
+  
+! : "${CONFIG_STATUS=./config.status}"
+  ac_write_fail=0
+  ac_clean_files_save=$ac_clean_files
+  ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+***************
+*** 13295,13300 ****
+--- 13330,13336 ----
+  IFS=" ""	$as_nl"
+  
+  # Find who we are.  Look in the path if we contain no directory separator.
++ as_myself=
+  case $0 in #((
+    *[\\/]* ) as_myself=$0 ;;
+    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+***************
+*** 13340,13358 ****
+  (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+  
+  
+! # as_fn_error ERROR [LINENO LOG_FD]
+! # ---------------------------------
+  # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+  # provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+! # script with status $?, using 1 if that was 0.
+  as_fn_error ()
+  {
+!   as_status=$?; test $as_status -eq 0 && as_status=1
+!   if test "$3"; then
+!     as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+!     $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+    fi
+!   $as_echo "$as_me: error: $1" >&2
+    as_fn_exit $as_status
+  } # as_fn_error
+  
+--- 13376,13394 ----
+  (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+  
+  
+! # as_fn_error STATUS ERROR [LINENO LOG_FD]
+! # ----------------------------------------
+  # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+  # provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+! # script with STATUS, using 1 if that was 0.
+  as_fn_error ()
+  {
+!   as_status=$1; test $as_status -eq 0 && as_status=1
+!   if test "$4"; then
+!     as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+!     $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+    fi
+!   $as_echo "$as_me: error: $2" >&2
+    as_fn_exit $as_status
+  } # as_fn_error
+  
+***************
+*** 13490,13505 ****
+      # ... but there are two gotchas:
+      # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+      # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+!     # In both cases, we have to default to `cp -p'.
+      ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+!       as_ln_s='cp -p'
+    elif ln conf$$.file conf$$ 2>/dev/null; then
+      as_ln_s=ln
+    else
+!     as_ln_s='cp -p'
+    fi
+  else
+!   as_ln_s='cp -p'
+  fi
+  rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+  rmdir conf$$.dir 2>/dev/null
+--- 13526,13541 ----
+      # ... but there are two gotchas:
+      # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+      # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+!     # In both cases, we have to default to `cp -pR'.
+      ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+!       as_ln_s='cp -pR'
+    elif ln conf$$.file conf$$ 2>/dev/null; then
+      as_ln_s=ln
+    else
+!     as_ln_s='cp -pR'
+    fi
+  else
+!   as_ln_s='cp -pR'
+  fi
+  rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+  rmdir conf$$.dir 2>/dev/null
+***************
+*** 13548,13554 ****
+        test -d "$as_dir" && break
+      done
+      test -z "$as_dirs" || eval "mkdir $as_dirs"
+!   } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
+  
+  
+  } # as_fn_mkdir_p
+--- 13584,13590 ----
+        test -d "$as_dir" && break
+      done
+      test -z "$as_dirs" || eval "mkdir $as_dirs"
+!   } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+  
+  
+  } # as_fn_mkdir_p
+***************
+*** 13559,13586 ****
+    as_mkdir_p=false
+  fi
+  
+! if test -x / >/dev/null 2>&1; then
+!   as_test_x='test -x'
+! else
+!   if ls -dL / >/dev/null 2>&1; then
+!     as_ls_L_option=L
+!   else
+!     as_ls_L_option=
+!   fi
+!   as_test_x='
+!     eval sh -c '\''
+!       if test -d "$1"; then
+! 	test -d "$1/.";
+!       else
+! 	case $1 in #(
+! 	-*)set "./$1";;
+! 	esac;
+! 	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+! 	???[sx]*):;;*)false;;esac;fi
+!     '\'' sh
+!   '
+! fi
+! as_executable_p=$as_test_x
+  
+  # Sed expression to map a string onto a valid CPP name.
+  as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+--- 13595,13610 ----
+    as_mkdir_p=false
+  fi
+  
+! 
+! # as_fn_executable_p FILE
+! # -----------------------
+! # Test if FILE is an executable regular file.
+! as_fn_executable_p ()
+! {
+!   test -f "$1" && test -x "$1"
+! } # as_fn_executable_p
+! as_test_x='test -x'
+! as_executable_p=as_fn_executable_p
+  
+  # Sed expression to map a string onto a valid CPP name.
+  as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+***************
+*** 13602,13608 ****
+  # values after options handling.
+  ac_log="
+  This file was extended by $as_me, which was
+! generated by GNU Autoconf 2.65.  Invocation command line was
+  
+    CONFIG_FILES    = $CONFIG_FILES
+    CONFIG_HEADERS  = $CONFIG_HEADERS
+--- 13626,13632 ----
+  # values after options handling.
+  ac_log="
+  This file was extended by $as_me, which was
+! generated by GNU Autoconf 2.69.  Invocation command line was
+  
+    CONFIG_FILES    = $CONFIG_FILES
+    CONFIG_HEADERS  = $CONFIG_HEADERS
+***************
+*** 13664,13673 ****
+  ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+  ac_cs_version="\\
+  config.status
+! configured by $0, generated by GNU Autoconf 2.65,
+    with options \\"\$ac_cs_config\\"
+  
+! Copyright (C) 2009 Free Software Foundation, Inc.
+  This config.status script is free software; the Free Software Foundation
+  gives unlimited permission to copy, distribute and modify it."
+  
+--- 13688,13697 ----
+  ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+  ac_cs_version="\\
+  config.status
+! configured by $0, generated by GNU Autoconf 2.69,
+    with options \\"\$ac_cs_config\\"
+  
+! Copyright (C) 2012 Free Software Foundation, Inc.
+  This config.status script is free software; the Free Software Foundation
+  gives unlimited permission to copy, distribute and modify it."
+  
+***************
+*** 13683,13693 ****
+  while test $# != 0
+  do
+    case $1 in
+!   --*=*)
+      ac_option=`expr "X$1" : 'X\([^=]*\)='`
+      ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+      ac_shift=:
+      ;;
+    *)
+      ac_option=$1
+      ac_optarg=$2
+--- 13707,13722 ----
+  while test $# != 0
+  do
+    case $1 in
+!   --*=?*)
+      ac_option=`expr "X$1" : 'X\([^=]*\)='`
+      ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+      ac_shift=:
+      ;;
++   --*=)
++     ac_option=`expr "X$1" : 'X\([^=]*\)='`
++     ac_optarg=
++     ac_shift=:
++     ;;
+    *)
+      ac_option=$1
+      ac_optarg=$2
+***************
+*** 13709,13714 ****
+--- 13738,13744 ----
+      $ac_shift
+      case $ac_optarg in
+      *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
++     '') as_fn_error $? "missing file argument" ;;
+      esac
+      as_fn_append CONFIG_FILES " '$ac_optarg'"
+      ac_need_defaults=false;;
+***************
+*** 13721,13727 ****
+      ac_need_defaults=false;;
+    --he | --h)
+      # Conflict between --help and --header
+!     as_fn_error "ambiguous option: \`$1'
+  Try \`$0 --help' for more information.";;
+    --help | --hel | -h )
+      $as_echo "$ac_cs_usage"; exit ;;
+--- 13751,13757 ----
+      ac_need_defaults=false;;
+    --he | --h)
+      # Conflict between --help and --header
+!     as_fn_error $? "ambiguous option: \`$1'
+  Try \`$0 --help' for more information.";;
+    --help | --hel | -h )
+      $as_echo "$ac_cs_usage"; exit ;;
+***************
+*** 13730,13736 ****
+      ac_cs_silent=: ;;
+  
+    # This is an error.
+!   -*) as_fn_error "unrecognized option: \`$1'
+  Try \`$0 --help' for more information." ;;
+  
+    *) as_fn_append ac_config_targets " $1"
+--- 13760,13766 ----
+      ac_cs_silent=: ;;
+  
+    # This is an error.
+!   -*) as_fn_error $? "unrecognized option: \`$1'
+  Try \`$0 --help' for more information." ;;
+  
+    *) as_fn_append ac_config_targets " $1"
+***************
+*** 13750,13756 ****
+  _ACEOF
+  cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  if \$ac_cs_recheck; then
+!   set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+    shift
+    \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+    CONFIG_SHELL='$SHELL'
+--- 13780,13786 ----
+  _ACEOF
+  cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  if \$ac_cs_recheck; then
+!   set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+    shift
+    \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+    CONFIG_SHELL='$SHELL'
+***************
+*** 13782,13788 ****
+      "auto/config.h") CONFIG_HEADERS="$CONFIG_HEADERS auto/config.h:config.h.in" ;;
+      "auto/config.mk") CONFIG_FILES="$CONFIG_FILES auto/config.mk:config.mk.in" ;;
+  
+!   *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+    esac
+  done
+  
+--- 13812,13818 ----
+      "auto/config.h") CONFIG_HEADERS="$CONFIG_HEADERS auto/config.h:config.h.in" ;;
+      "auto/config.mk") CONFIG_FILES="$CONFIG_FILES auto/config.mk:config.mk.in" ;;
+  
+!   *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+    esac
+  done
+  
+***************
+*** 13804,13812 ****
+  # after its creation but before its name has been assigned to `$tmp'.
+  $debug ||
+  {
+!   tmp=
+    trap 'exit_status=$?
+!   { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+  ' 0
+    trap 'as_fn_exit 1' 1 2 13 15
+  }
+--- 13834,13843 ----
+  # after its creation but before its name has been assigned to `$tmp'.
+  $debug ||
+  {
+!   tmp= ac_tmp=
+    trap 'exit_status=$?
+!   : "${ac_tmp:=$tmp}"
+!   { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+  ' 0
+    trap 'as_fn_exit 1' 1 2 13 15
+  }
+***************
+*** 13814,13825 ****
+  
+  {
+    tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+!   test -n "$tmp" && test -d "$tmp"
+  }  ||
+  {
+    tmp=./conf$$-$RANDOM
+    (umask 077 && mkdir "$tmp")
+! } || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5
+  
+  # Set up the scripts for CONFIG_FILES section.
+  # No need to generate them if there are no CONFIG_FILES.
+--- 13845,13857 ----
+  
+  {
+    tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+!   test -d "$tmp"
+  }  ||
+  {
+    tmp=./conf$$-$RANDOM
+    (umask 077 && mkdir "$tmp")
+! } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+! ac_tmp=$tmp
+  
+  # Set up the scripts for CONFIG_FILES section.
+  # No need to generate them if there are no CONFIG_FILES.
+***************
+*** 13836,13847 ****
+  fi
+  ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+  if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+!   ac_cs_awk_cr='\r'
+  else
+    ac_cs_awk_cr=$ac_cr
+  fi
+  
+! echo 'BEGIN {' >"$tmp/subs1.awk" &&
+  _ACEOF
+  
+  
+--- 13868,13879 ----
+  fi
+  ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+  if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+!   ac_cs_awk_cr='\\r'
+  else
+    ac_cs_awk_cr=$ac_cr
+  fi
+  
+! echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+  _ACEOF
+  
+  
+***************
+*** 13850,13867 ****
+    echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+    echo "_ACEOF"
+  } >conf$$subs.sh ||
+!   as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+! ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
+  ac_delim='%!_!# '
+  for ac_last_try in false false false false false :; do
+    . ./conf$$subs.sh ||
+!     as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+  
+    ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+    if test $ac_delim_n = $ac_delim_num; then
+      break
+    elif $ac_last_try; then
+!     as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+    else
+      ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+    fi
+--- 13882,13899 ----
+    echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+    echo "_ACEOF"
+  } >conf$$subs.sh ||
+!   as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+! ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+  ac_delim='%!_!# '
+  for ac_last_try in false false false false false :; do
+    . ./conf$$subs.sh ||
+!     as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+  
+    ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+    if test $ac_delim_n = $ac_delim_num; then
+      break
+    elif $ac_last_try; then
+!     as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+    else
+      ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+    fi
+***************
+*** 13869,13875 ****
+  rm -f conf$$subs.sh
+  
+  cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+! cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+  _ACEOF
+  sed -n '
+  h
+--- 13901,13907 ----
+  rm -f conf$$subs.sh
+  
+  cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+! cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+  _ACEOF
+  sed -n '
+  h
+***************
+*** 13917,13923 ****
+  rm -f conf$$subs.awk
+  cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  _ACAWK
+! cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+    for (key in S) S_is_set[key] = 1
+    FS = ""
+  
+--- 13949,13955 ----
+  rm -f conf$$subs.awk
+  cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  _ACAWK
+! cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+    for (key in S) S_is_set[key] = 1
+    FS = ""
+  
+***************
+*** 13949,13969 ****
+    sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+  else
+    cat
+! fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+!   || as_fn_error "could not setup config files machinery" "$LINENO" 5
+  _ACEOF
+  
+! # VPATH may cause trouble with some makes, so we remove $(srcdir),
+! # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+  # trailing colons and then remove the whole line if VPATH becomes empty
+  # (actually we leave an empty line to preserve line numbers).
+  if test "x$srcdir" = x.; then
+!   ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
+! s/:*\$(srcdir):*/:/
+! s/:*\${srcdir}:*/:/
+! s/:*@srcdir@:*/:/
+! s/^\([^=]*=[	 ]*\):*/\1/
+  s/:*$//
+  s/^[^=]*=[	 ]*$//
+  }'
+  fi
+--- 13981,14009 ----
+    sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+  else
+    cat
+! fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+!   || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+  _ACEOF
+  
+! # VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+! # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+  # trailing colons and then remove the whole line if VPATH becomes empty
+  # (actually we leave an empty line to preserve line numbers).
+  if test "x$srcdir" = x.; then
+!   ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
+! h
+! s///
+! s/^/:/
+! s/[	 ]*$/:/
+! s/:\$(srcdir):/:/g
+! s/:\${srcdir}:/:/g
+! s/:@srcdir@:/:/g
+! s/^:*//
+  s/:*$//
++ x
++ s/\(=[	 ]*\).*/\1/
++ G
++ s/\n//
+  s/^[^=]*=[	 ]*$//
+  }'
+  fi
+***************
+*** 13975,13981 ****
+  # No need to generate them if there are no CONFIG_HEADERS.
+  # This happens for instance with `./config.status Makefile'.
+  if test -n "$CONFIG_HEADERS"; then
+! cat >"$tmp/defines.awk" <<\_ACAWK ||
+  BEGIN {
+  _ACEOF
+  
+--- 14015,14021 ----
+  # No need to generate them if there are no CONFIG_HEADERS.
+  # This happens for instance with `./config.status Makefile'.
+  if test -n "$CONFIG_HEADERS"; then
+! cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
+  BEGIN {
+  _ACEOF
+  
+***************
+*** 13987,13997 ****
+  # handling of long lines.
+  ac_delim='%!_!# '
+  for ac_last_try in false false :; do
+!   ac_t=`sed -n "/$ac_delim/p" confdefs.h`
+!   if test -z "$ac_t"; then
+      break
+    elif $ac_last_try; then
+!     as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5
+    else
+      ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+    fi
+--- 14027,14037 ----
+  # handling of long lines.
+  ac_delim='%!_!# '
+  for ac_last_try in false false :; do
+!   ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+!   if test -z "$ac_tt"; then
+      break
+    elif $ac_last_try; then
+!     as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+    else
+      ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+    fi
+***************
+*** 14076,14082 ****
+  _ACAWK
+  _ACEOF
+  cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+!   as_fn_error "could not setup config headers machinery" "$LINENO" 5
+  fi # test -n "$CONFIG_HEADERS"
+  
+  
+--- 14116,14122 ----
+  _ACAWK
+  _ACEOF
+  cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+!   as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+  fi # test -n "$CONFIG_HEADERS"
+  
+  
+***************
+*** 14089,14095 ****
+    esac
+    case $ac_mode$ac_tag in
+    :[FHL]*:*);;
+!   :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;;
+    :[FH]-) ac_tag=-:-;;
+    :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+    esac
+--- 14129,14135 ----
+    esac
+    case $ac_mode$ac_tag in
+    :[FHL]*:*);;
+!   :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+    :[FH]-) ac_tag=-:-;;
+    :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+    esac
+***************
+*** 14108,14114 ****
+      for ac_f
+      do
+        case $ac_f in
+!       -) ac_f="$tmp/stdin";;
+        *) # Look for the file first in the build tree, then in the source tree
+  	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
+  	 # because $ac_f cannot contain `:'.
+--- 14148,14154 ----
+      for ac_f
+      do
+        case $ac_f in
+!       -) ac_f="$ac_tmp/stdin";;
+        *) # Look for the file first in the build tree, then in the source tree
+  	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
+  	 # because $ac_f cannot contain `:'.
+***************
+*** 14117,14123 ****
+  	   [\\/$]*) false;;
+  	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+  	   esac ||
+! 	   as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+        esac
+        case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+        as_fn_append ac_file_inputs " '$ac_f'"
+--- 14157,14163 ----
+  	   [\\/$]*) false;;
+  	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+  	   esac ||
+! 	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+        esac
+        case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+        as_fn_append ac_file_inputs " '$ac_f'"
+***************
+*** 14143,14150 ****
+      esac
+  
+      case $ac_tag in
+!     *:-:* | *:-) cat >"$tmp/stdin" \
+!       || as_fn_error "could not create $ac_file" "$LINENO" 5 ;;
+      esac
+      ;;
+    esac
+--- 14183,14190 ----
+      esac
+  
+      case $ac_tag in
+!     *:-:* | *:-) cat >"$ac_tmp/stdin" \
+!       || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+      esac
+      ;;
+    esac
+***************
+*** 14269,14291 ****
+  s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+  $ac_datarootdir_hack
+  "
+! eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
+!   || as_fn_error "could not create $ac_file" "$LINENO" 5
+  
+  test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+!   { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+!   { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+! which seems to be undefined.  Please make sure it is defined." >&5
+  $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+! which seems to be undefined.  Please make sure it is defined." >&2;}
+  
+!   rm -f "$tmp/stdin"
+    case $ac_file in
+!   -) cat "$tmp/out" && rm -f "$tmp/out";;
+!   *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+    esac \
+!   || as_fn_error "could not create $ac_file" "$LINENO" 5
+   ;;
+    :H)
+    #
+--- 14309,14332 ----
+  s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+  $ac_datarootdir_hack
+  "
+! eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+!   >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+  
+  test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+!   { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+!   { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
+!       "$ac_tmp/out"`; test -z "$ac_out"; } &&
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+! which seems to be undefined.  Please make sure it is defined" >&5
+  $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+! which seems to be undefined.  Please make sure it is defined" >&2;}
+  
+!   rm -f "$ac_tmp/stdin"
+    case $ac_file in
+!   -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+!   *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+    esac \
+!   || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+   ;;
+    :H)
+    #
+***************
+*** 14294,14314 ****
+    if test x"$ac_file" != x-; then
+      {
+        $as_echo "/* $configure_input  */" \
+!       && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
+!     } >"$tmp/config.h" \
+!       || as_fn_error "could not create $ac_file" "$LINENO" 5
+!     if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+  $as_echo "$as_me: $ac_file is unchanged" >&6;}
+      else
+        rm -f "$ac_file"
+!       mv "$tmp/config.h" "$ac_file" \
+! 	|| as_fn_error "could not create $ac_file" "$LINENO" 5
+      fi
+    else
+      $as_echo "/* $configure_input  */" \
+!       && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+!       || as_fn_error "could not create -" "$LINENO" 5
+    fi
+   ;;
+  
+--- 14335,14355 ----
+    if test x"$ac_file" != x-; then
+      {
+        $as_echo "/* $configure_input  */" \
+!       && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+!     } >"$ac_tmp/config.h" \
+!       || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+!     if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+  $as_echo "$as_me: $ac_file is unchanged" >&6;}
+      else
+        rm -f "$ac_file"
+!       mv "$ac_tmp/config.h" "$ac_file" \
+! 	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
+      fi
+    else
+      $as_echo "/* $configure_input  */" \
+!       && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+!       || as_fn_error $? "could not create -" "$LINENO" 5
+    fi
+   ;;
+  
+***************
+*** 14323,14329 ****
+  ac_clean_files=$ac_clean_files_save
+  
+  test $ac_write_fail = 0 ||
+!   as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5
+  
+  
+  # configure is writing to config.log, and then calls config.status.
+--- 14364,14370 ----
+  ac_clean_files=$ac_clean_files_save
+  
+  test $ac_write_fail = 0 ||
+!   as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+  
+  
+  # configure is writing to config.log, and then calls config.status.
+***************
+*** 14344,14350 ****
+    exec 5>>auto/config.log
+    # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+    # would make configure fail if this is the last instruction.
+!   $ac_cs_success || as_fn_exit $?
+  fi
+  if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+--- 14385,14391 ----
+    exec 5>>auto/config.log
+    # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+    # would make configure fail if this is the last instruction.
+!   $ac_cs_success || as_fn_exit 1
+  fi
+  if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+*** ../vim-7.4.222/src/version.c	2014-03-27 17:19:05.868676325 +0100
+--- src/version.c	2014-03-27 17:37:52.608693590 +0100
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     223,
+  /**/
+
+-- 
+For humans, honesty is a matter of degree.  Engineers are always honest in
+matters of technology and human relationships.  That's why it's a good idea
+to keep engineers away from customers, romantic interests, and other people
+who can't handle the truth.
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.224 b/SOURCES/7.4.224
new file mode 100644
index 0000000..977cd82
--- /dev/null
+++ b/SOURCES/7.4.224
@@ -0,0 +1,210 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.224
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.224
+Problem:    /usr/bin/grep on Solaris does not support -F.
+Solution:   Add configure check to find a good grep. (Danek Duvall)
+Files:	    src/configure.in, src/auto/configure
+
+
+*** ../vim-7.4.223/src/configure.in	2014-03-27 17:40:53.384696360 +0100
+--- src/configure.in	2014-03-27 18:49:24.900759361 +0100
+***************
+*** 14,19 ****
+--- 14,20 ----
+  AC_PROG_CC	dnl required by almost everything
+  AC_PROG_CPP	dnl required by header file checks
+  AC_PROGRAM_EGREP dnl required by AC_EGREP_CPP
++ AC_PROG_FGREP	dnl finds working grep -F
+  AC_ISC_POSIX	dnl required by AC_C_CROSS
+  AC_PROG_AWK	dnl required for "make html" in ../doc
+  
+***************
+*** 936,942 ****
+  	  PERL_CFLAGS=`echo "$perlcppflags" | sed -e 's/-pipe //' -e 's/-W[[^ ]]*//'`
+  	fi
+  	if test "X$perlldflags" != "X"; then
+! 	  if test "X`echo \"$LDFLAGS\" | grep -F -e \"$perlldflags\"`" = "X"; then
+  	    LDFLAGS="$perlldflags $LDFLAGS"
+  	  fi
+  	fi
+--- 937,943 ----
+  	  PERL_CFLAGS=`echo "$perlcppflags" | sed -e 's/-pipe //' -e 's/-W[[^ ]]*//'`
+  	fi
+  	if test "X$perlldflags" != "X"; then
+! 	  if test "X`echo \"$LDFLAGS\" | $FGREP -e \"$perlldflags\"`" = "X"; then
+  	    LDFLAGS="$perlldflags $LDFLAGS"
+  	  fi
+  	fi
+***************
+*** 1727,1733 ****
+  	  dnl configure, so strip these flags first (if present)
+  	  rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
+  	  if test "X$rubyldflags" != "X"; then
+! 	    if test "X`echo \"$LDFLAGS\" | grep -F -e \"$rubyldflags\"`" = "X"; then
+  	      LDFLAGS="$rubyldflags $LDFLAGS"
+  	    fi
+  	  fi
+--- 1728,1734 ----
+  	  dnl configure, so strip these flags first (if present)
+  	  rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
+  	  if test "X$rubyldflags" != "X"; then
+! 	    if test "X`echo \"$LDFLAGS\" | $FGREP -e \"$rubyldflags\"`" = "X"; then
+  	      LDFLAGS="$rubyldflags $LDFLAGS"
+  	    fi
+  	  fi
+*** ../vim-7.4.223/src/auto/configure	2014-03-27 17:40:53.396696361 +0100
+--- src/auto/configure	2014-03-27 18:49:34.356759506 +0100
+***************
+*** 719,724 ****
+--- 719,725 ----
+  CPP_MM
+  STRIP
+  AWK
++ FGREP
+  EGREP
+  GREP
+  CPP
+***************
+*** 3695,3701 ****
+  
+  fi
+  rm -f conftest*
+!  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5
+  $as_echo_n "checking for library containing strerror... " >&6; }
+  if ${ac_cv_search_strerror+:} false; then :
+    $as_echo_n "(cached) " >&6
+--- 3696,3768 ----
+  
+  fi
+  rm -f conftest*
+!  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
+! $as_echo_n "checking for fgrep... " >&6; }
+! if ${ac_cv_path_FGREP+:} false; then :
+!   $as_echo_n "(cached) " >&6
+! else
+!   if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+!    then ac_cv_path_FGREP="$GREP -F"
+!    else
+!      if test -z "$FGREP"; then
+!   ac_path_FGREP_found=false
+!   # Loop through the user's path and test for each of PROGNAME-LIST
+!   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+! for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+! do
+!   IFS=$as_save_IFS
+!   test -z "$as_dir" && as_dir=.
+!     for ac_prog in fgrep; do
+!     for ac_exec_ext in '' $ac_executable_extensions; do
+!       ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+!       as_fn_executable_p "$ac_path_FGREP" || continue
+! # Check for GNU ac_path_FGREP and select it if it is found.
+!   # Check for GNU $ac_path_FGREP
+! case `"$ac_path_FGREP" --version 2>&1` in
+! *GNU*)
+!   ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+! *)
+!   ac_count=0
+!   $as_echo_n 0123456789 >"conftest.in"
+!   while :
+!   do
+!     cat "conftest.in" "conftest.in" >"conftest.tmp"
+!     mv "conftest.tmp" "conftest.in"
+!     cp "conftest.in" "conftest.nl"
+!     $as_echo 'FGREP' >> "conftest.nl"
+!     "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+!     diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+!     as_fn_arith $ac_count + 1 && ac_count=$as_val
+!     if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+!       # Best one so far, save it but keep looking for a better one
+!       ac_cv_path_FGREP="$ac_path_FGREP"
+!       ac_path_FGREP_max=$ac_count
+!     fi
+!     # 10*(2^10) chars as input seems more than enough
+!     test $ac_count -gt 10 && break
+!   done
+!   rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+! esac
+! 
+!       $ac_path_FGREP_found && break 3
+!     done
+!   done
+!   done
+! IFS=$as_save_IFS
+!   if test -z "$ac_cv_path_FGREP"; then
+!     as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+!   fi
+! else
+!   ac_cv_path_FGREP=$FGREP
+! fi
+! 
+!    fi
+! fi
+! { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+! $as_echo "$ac_cv_path_FGREP" >&6; }
+!  FGREP="$ac_cv_path_FGREP"
+! 
+! 	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5
+  $as_echo_n "checking for library containing strerror... " >&6; }
+  if ${ac_cv_search_strerror+:} false; then :
+    $as_echo_n "(cached) " >&6
+***************
+*** 5480,5486 ****
+  	  	  PERL_CFLAGS=`echo "$perlcppflags" | sed -e 's/-pipe //' -e 's/-W[^ ]*//'`
+  	fi
+  	if test "X$perlldflags" != "X"; then
+! 	  if test "X`echo \"$LDFLAGS\" | grep -F -e \"$perlldflags\"`" = "X"; then
+  	    LDFLAGS="$perlldflags $LDFLAGS"
+  	  fi
+  	fi
+--- 5547,5553 ----
+  	  	  PERL_CFLAGS=`echo "$perlcppflags" | sed -e 's/-pipe //' -e 's/-W[^ ]*//'`
+  	fi
+  	if test "X$perlldflags" != "X"; then
+! 	  if test "X`echo \"$LDFLAGS\" | $FGREP -e \"$perlldflags\"`" = "X"; then
+  	    LDFLAGS="$perlldflags $LDFLAGS"
+  	  fi
+  	fi
+***************
+*** 6838,6844 ****
+  	if test "X$rubyldflags" != "X"; then
+  	  	  	  	  rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
+  	  if test "X$rubyldflags" != "X"; then
+! 	    if test "X`echo \"$LDFLAGS\" | grep -F -e \"$rubyldflags\"`" = "X"; then
+  	      LDFLAGS="$rubyldflags $LDFLAGS"
+  	    fi
+  	  fi
+--- 6905,6911 ----
+  	if test "X$rubyldflags" != "X"; then
+  	  	  	  	  rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
+  	  if test "X$rubyldflags" != "X"; then
+! 	    if test "X`echo \"$LDFLAGS\" | $FGREP -e \"$rubyldflags\"`" = "X"; then
+  	      LDFLAGS="$rubyldflags $LDFLAGS"
+  	    fi
+  	  fi
+*** ../vim-7.4.223/src/version.c	2014-03-27 17:40:53.396696361 +0100
+--- src/version.c	2014-03-27 18:48:59.488758971 +0100
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     224,
+  /**/
+
+-- 
+Female engineers become irresistible at the age of consent and remain that
+way until about thirty minutes after their clinical death.  Longer if it's a
+warm day.
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.225 b/SOURCES/7.4.225
new file mode 100644
index 0000000..ba2207b
--- /dev/null
+++ b/SOURCES/7.4.225
@@ -0,0 +1,83 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.225
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.225
+Problem:    Dynamic Ruby doesn't work on Solaris.
+Solution:   Always use the stubs. (Danek Duvall, Yukihiro Nakadaira)
+Files:	    src/if_ruby.c
+
+
+*** ../vim-7.4.224/src/if_ruby.c	2014-02-23 22:52:33.352764716 +0100
+--- src/if_ruby.c	2014-03-27 18:56:37.428765988 +0100
+***************
+*** 88,95 ****
+  # define rb_int2big rb_int2big_stub
+  #endif
+  
+! #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20 \
+! 	&& VIM_SIZEOF_INT < VIM_SIZEOF_LONG
+  /* Ruby 2.0 defines a number of static functions which use rb_fix2int and
+   * rb_num2int if VIM_SIZEOF_INT < VIM_SIZEOF_LONG (64bit) */
+  # define rb_fix2int rb_fix2int_stub
+--- 88,94 ----
+  # define rb_int2big rb_int2big_stub
+  #endif
+  
+! #if defined(DYNAMIC_RUBY_VER) && VIM_SIZEOF_INT < VIM_SIZEOF_LONG
+  /* Ruby 2.0 defines a number of static functions which use rb_fix2int and
+   * rb_num2int if VIM_SIZEOF_INT < VIM_SIZEOF_LONG (64bit) */
+  # define rb_fix2int rb_fix2int_stub
+***************
+*** 203,210 ****
+  # define rb_inspect			dll_rb_inspect
+  # define rb_int2inum			dll_rb_int2inum
+  # if VIM_SIZEOF_INT < VIM_SIZEOF_LONG /* 64 bits only */
+- #  define rb_fix2int			dll_rb_fix2int
+- #  define rb_num2int			dll_rb_num2int
+  #  define rb_num2uint			dll_rb_num2uint
+  # endif
+  # define rb_lastline_get			dll_rb_lastline_get
+--- 202,207 ----
+***************
+*** 392,399 ****
+  {
+      return dll_rb_int2big(x);
+  }
+! #  if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20 \
+! 	&& VIM_SIZEOF_INT < VIM_SIZEOF_LONG
+  long rb_fix2int_stub(VALUE x)
+  {
+      return dll_rb_fix2int(x);
+--- 389,395 ----
+  {
+      return dll_rb_int2big(x);
+  }
+! #  if defined(DYNAMIC_RUBY_VER) && VIM_SIZEOF_INT < VIM_SIZEOF_LONG
+  long rb_fix2int_stub(VALUE x)
+  {
+      return dll_rb_fix2int(x);
+*** ../vim-7.4.224/src/version.c	2014-03-27 18:51:06.612760919 +0100
+--- src/version.c	2014-03-27 18:55:21.412764824 +0100
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     225,
+  /**/
+
+-- 
+Engineers are widely recognized as superior marriage material: intelligent,
+dependable, employed, honest, and handy around the house.
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.226 b/SOURCES/7.4.226
new file mode 100644
index 0000000..7c00c3d
--- /dev/null
+++ b/SOURCES/7.4.226
@@ -0,0 +1,136 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.226
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.226 (after 7.4.219)
+Problem:    Cursurline highlighting not redrawn when scrolling. (John
+	    Marriott)
+Solution:   Check for required redraw in two places.
+Files:	    src/move.c
+
+
+*** ../vim-7.4.225/src/move.c	2014-03-27 12:11:43.888393741 +0100
+--- src/move.c	2014-03-28 21:45:56.958245561 +0100
+***************
+*** 20,25 ****
+--- 20,26 ----
+  #include "vim.h"
+  
+  static void comp_botline __ARGS((win_T *wp));
++ static void redraw_for_cursorline __ARGS((win_T *wp));
+  static int scrolljump_value __ARGS((void));
+  static int check_top_offset __ARGS((void));
+  static void curs_rows __ARGS((win_T *wp, int do_botline));
+***************
+*** 106,111 ****
+--- 107,113 ----
+  #ifdef FEAT_FOLDING
+  	    wp->w_cline_folded = folded;
+  #endif
++ 	    redraw_for_cursorline(wp);
+  	    wp->w_valid |= (VALID_CROW|VALID_CHEIGHT);
+  	}
+  	if (done + n > wp->w_height)
+***************
+*** 124,129 ****
+--- 126,152 ----
+  }
+  
+  /*
++  * Redraw when w_cline_row changes and 'relativenumber' or 'cursorline' is
++  * set.
++  */
++     static void
++ redraw_for_cursorline(wp)
++     win_T *wp;
++ {
++     if ((wp->w_p_rnu
++ #ifdef FEAT_SYN_HL
++ 		|| wp->w_p_cul
++ #endif
++ 		)
++ 	    && (wp->w_valid & VALID_CROW) == 0
++ # ifdef FEAT_INS_EXPAND
++ 	    && !pum_visible()
++ # endif
++ 	    )
++ 	redraw_win_later(wp, SOME_VALID);
++ }
++ 
++ /*
+   * Update curwin->w_topline and redraw if necessary.
+   * Used to update the screen before printing a message.
+   */
+***************
+*** 772,791 ****
+  	}
+      }
+  
+!     /* Redraw when w_cline_row changes and 'relativenumber' or 'cursorline' is
+!      * set. */
+!     if ((curwin->w_p_rnu
+! #ifdef FEAT_SYN_HL
+! 		|| curwin->w_p_cul
+! #endif
+! 		)
+! 	    && (curwin->w_valid & VALID_CROW) == 0
+! # ifdef FEAT_INS_EXPAND
+! 	    && !pum_visible()
+! # endif
+! 	    )
+! 	redraw_later(SOME_VALID);
+! 
+      wp->w_valid |= VALID_CROW|VALID_CHEIGHT;
+  
+      /* validate botline too, if update_screen doesn't do it */
+--- 795,801 ----
+  	}
+      }
+  
+!     redraw_for_cursorline(curwin);
+      wp->w_valid |= VALID_CROW|VALID_CHEIGHT;
+  
+      /* validate botline too, if update_screen doesn't do it */
+***************
+*** 2504,2511 ****
+  		    }
+  		    comp_botline(curwin);
+  		    curwin->w_cursor.lnum = curwin->w_botline - 1;
+! 		    curwin->w_valid &= ~(VALID_WCOL|VALID_CHEIGHT|
+! 			    VALID_WROW|VALID_CROW);
+  		}
+  		else
+  		{
+--- 2514,2521 ----
+  		    }
+  		    comp_botline(curwin);
+  		    curwin->w_cursor.lnum = curwin->w_botline - 1;
+! 		    curwin->w_valid &=
+! 			    ~(VALID_WCOL|VALID_CHEIGHT|VALID_WROW|VALID_CROW);
+  		}
+  		else
+  		{
+*** ../vim-7.4.225/src/version.c	2014-03-27 19:08:52.008777244 +0100
+--- src/version.c	2014-03-28 21:48:45.330248141 +0100
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     226,
+  /**/
+
+-- 
+Bad fashion can discourage normal people from interacting with the engineer
+and talking about the cute things their children do.
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.227 b/SOURCES/7.4.227
new file mode 100644
index 0000000..a7204bc
--- /dev/null
+++ b/SOURCES/7.4.227
@@ -0,0 +1,87 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.227
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.227 (after 7.4.225)
+Problem:    Can't build with Ruby 1.8.
+Solution:   Do include a check for the Ruby version. (Ken Takata)
+Files:	    src/if_ruby.c
+
+
+*** ../vim-7.4.226/src/if_ruby.c	2014-03-27 19:08:52.004777244 +0100
+--- src/if_ruby.c	2014-03-28 21:54:06.414253061 +0100
+***************
+*** 88,95 ****
+  # define rb_int2big rb_int2big_stub
+  #endif
+  
+! #if defined(DYNAMIC_RUBY_VER) && VIM_SIZEOF_INT < VIM_SIZEOF_LONG
+! /* Ruby 2.0 defines a number of static functions which use rb_fix2int and
+   * rb_num2int if VIM_SIZEOF_INT < VIM_SIZEOF_LONG (64bit) */
+  # define rb_fix2int rb_fix2int_stub
+  # define rb_num2int rb_num2int_stub
+--- 88,96 ----
+  # define rb_int2big rb_int2big_stub
+  #endif
+  
+! #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 19 \
+! 	&& VIM_SIZEOF_INT < VIM_SIZEOF_LONG
+! /* Ruby 1.9 defines a number of static functions which use rb_fix2int and
+   * rb_num2int if VIM_SIZEOF_INT < VIM_SIZEOF_LONG (64bit) */
+  # define rb_fix2int rb_fix2int_stub
+  # define rb_num2int rb_num2int_stub
+***************
+*** 202,207 ****
+--- 203,212 ----
+  # define rb_inspect			dll_rb_inspect
+  # define rb_int2inum			dll_rb_int2inum
+  # if VIM_SIZEOF_INT < VIM_SIZEOF_LONG /* 64 bits only */
++ #  if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER <= 18
++ #   define rb_fix2int			dll_rb_fix2int
++ #   define rb_num2int			dll_rb_num2int
++ #  endif
+  #  define rb_num2uint			dll_rb_num2uint
+  # endif
+  # define rb_lastline_get			dll_rb_lastline_get
+***************
+*** 389,395 ****
+  {
+      return dll_rb_int2big(x);
+  }
+! #  if defined(DYNAMIC_RUBY_VER) && VIM_SIZEOF_INT < VIM_SIZEOF_LONG
+  long rb_fix2int_stub(VALUE x)
+  {
+      return dll_rb_fix2int(x);
+--- 394,401 ----
+  {
+      return dll_rb_int2big(x);
+  }
+! #  if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 19 \
+! 	&& VIM_SIZEOF_INT < VIM_SIZEOF_LONG
+  long rb_fix2int_stub(VALUE x)
+  {
+      return dll_rb_fix2int(x);
+*** ../vim-7.4.226/src/version.c	2014-03-28 21:49:26.854248777 +0100
+--- src/version.c	2014-03-28 21:53:51.546252833 +0100
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     227,
+  /**/
+
+-- 
+No engineer can take a shower without wondering if some sort of Teflon coating
+would make showering unnecessary.
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.228 b/SOURCES/7.4.228
new file mode 100644
index 0000000..0ce909c
--- /dev/null
+++ b/SOURCES/7.4.228
@@ -0,0 +1,189 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.228
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.228
+Problem:    Compiler warnings when building with Python 3.2.
+Solution:   Make type cast depend on Python version. (Ken Takata)
+Files:	    src/if_py_both.h, src/if_python.c, src/if_python3.c
+
+
+*** ../vim-7.4.227/src/if_py_both.h	2014-03-08 16:13:39.115462069 +0100
+--- src/if_py_both.h	2014-03-30 15:58:40.948518929 +0200
+***************
+*** 2328,2334 ****
+      {
+  	Py_ssize_t start, stop, step, slicelen;
+  
+! 	if (PySlice_GetIndicesEx((PySliceObject *)idx, ListLength(self),
+  				 &start, &stop, &step, &slicelen) < 0)
+  	    return NULL;
+  	return ListSlice(self, start, step, slicelen);
+--- 2328,2334 ----
+      {
+  	Py_ssize_t start, stop, step, slicelen;
+  
+! 	if (PySlice_GetIndicesEx((PySliceObject_T *)idx, ListLength(self),
+  				 &start, &stop, &step, &slicelen) < 0)
+  	    return NULL;
+  	return ListSlice(self, start, step, slicelen);
+***************
+*** 2618,2624 ****
+      {
+  	Py_ssize_t start, stop, step, slicelen;
+  
+! 	if (PySlice_GetIndicesEx((PySliceObject *)idx, ListLength(self),
+  				 &start, &stop, &step, &slicelen) < 0)
+  	    return -1;
+  	return ListAssSlice(self, start, step, slicelen,
+--- 2618,2624 ----
+      {
+  	Py_ssize_t start, stop, step, slicelen;
+  
+! 	if (PySlice_GetIndicesEx((PySliceObject_T *)idx, ListLength(self),
+  				 &start, &stop, &step, &slicelen) < 0)
+  	    return -1;
+  	return ListAssSlice(self, start, step, slicelen,
+*** ../vim-7.4.227/src/if_python.c	2014-02-23 22:52:33.368764715 +0100
+--- src/if_python.c	2014-03-30 15:58:35.768518850 +0200
+***************
+*** 803,808 ****
+--- 803,810 ----
+  # define PY_STRSAVE(s) ((char_u *) py_memsave(s, STRLEN(s) + 1))
+  #endif
+  
++ typedef PySliceObject PySliceObject_T;
++ 
+  /*
+   * Include the code shared with if_python3.c
+   */
+*** ../vim-7.4.227/src/if_python3.c	2014-01-14 19:35:49.000000000 +0100
+--- src/if_python3.c	2014-03-30 15:59:24.752519600 +0200
+***************
+*** 100,105 ****
+--- 100,115 ----
+  #define PyIntArgFunc	ssizeargfunc
+  #define PyIntObjArgProc	ssizeobjargproc
+  
++ /*
++  * PySlice_GetIndicesEx(): first argument type changed from PySliceObject
++  * to PyObject in Python 3.2 or later.
++  */
++ #if PY_VERSION_HEX >= 0x030200f0
++ typedef PyObject PySliceObject_T;
++ #else
++ typedef PySliceObject PySliceObject_T;
++ #endif
++ 
+  #if defined(DYNAMIC_PYTHON3) || defined(PROTO)
+  
+  # ifndef WIN3264
+***************
+*** 294,300 ****
+  static PyObject* (*py3_PyTuple_GetItem)(PyObject *, Py_ssize_t);
+  static int (*py3_PyMapping_Check)(PyObject *);
+  static PyObject* (*py3_PyMapping_Keys)(PyObject *);
+! static int (*py3_PySlice_GetIndicesEx)(PySliceObject *r, Py_ssize_t length,
+  		     Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step,
+  		     Py_ssize_t *slicelen);
+  static PyObject* (*py3_PyErr_NoMemory)(void);
+--- 304,310 ----
+  static PyObject* (*py3_PyTuple_GetItem)(PyObject *, Py_ssize_t);
+  static int (*py3_PyMapping_Check)(PyObject *);
+  static PyObject* (*py3_PyMapping_Keys)(PyObject *);
+! static int (*py3_PySlice_GetIndicesEx)(PySliceObject_T *r, Py_ssize_t length,
+  		     Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step,
+  		     Py_ssize_t *slicelen);
+  static PyObject* (*py3_PyErr_NoMemory)(void);
+***************
+*** 1190,1196 ****
+  	if (CheckBuffer((BufferObject *) self))
+  	    return NULL;
+  
+! 	if (PySlice_GetIndicesEx((PySliceObject *)idx,
+  	      (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
+  	      &start, &stop,
+  	      &step, &slicelen) < 0)
+--- 1200,1206 ----
+  	if (CheckBuffer((BufferObject *) self))
+  	    return NULL;
+  
+! 	if (PySlice_GetIndicesEx((PySliceObject_T *)idx,
+  	      (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
+  	      &start, &stop,
+  	      &step, &slicelen) < 0)
+***************
+*** 1222,1228 ****
+  	if (CheckBuffer((BufferObject *) self))
+  	    return -1;
+  
+! 	if (PySlice_GetIndicesEx((PySliceObject *)idx,
+  	      (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
+  	      &start, &stop,
+  	      &step, &slicelen) < 0)
+--- 1232,1238 ----
+  	if (CheckBuffer((BufferObject *) self))
+  	    return -1;
+  
+! 	if (PySlice_GetIndicesEx((PySliceObject_T *)idx,
+  	      (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
+  	      &start, &stop,
+  	      &step, &slicelen) < 0)
+***************
+*** 1306,1312 ****
+      {
+  	Py_ssize_t start, stop, step, slicelen;
+  
+! 	if (PySlice_GetIndicesEx((PySliceObject *)idx,
+  		((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
+  		&start, &stop,
+  		&step, &slicelen) < 0)
+--- 1316,1322 ----
+      {
+  	Py_ssize_t start, stop, step, slicelen;
+  
+! 	if (PySlice_GetIndicesEx((PySliceObject_T *)idx,
+  		((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
+  		&start, &stop,
+  		&step, &slicelen) < 0)
+***************
+*** 1333,1339 ****
+      {
+  	Py_ssize_t start, stop, step, slicelen;
+  
+! 	if (PySlice_GetIndicesEx((PySliceObject *)idx,
+  		((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
+  		&start, &stop,
+  		&step, &slicelen) < 0)
+--- 1343,1349 ----
+      {
+  	Py_ssize_t start, stop, step, slicelen;
+  
+! 	if (PySlice_GetIndicesEx((PySliceObject_T *)idx,
+  		((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
+  		&start, &stop,
+  		&step, &slicelen) < 0)
+*** ../vim-7.4.227/src/version.c	2014-03-28 21:58:17.878256914 +0100
+--- src/version.c	2014-03-30 15:52:27.784513211 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     228,
+  /**/
+
+-- 
+The average life of an organization chart is six months.  You can safely
+ignore any order from your boss that would take six months to complete.
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.229 b/SOURCES/7.4.229
new file mode 100644
index 0000000..e77a98c
--- /dev/null
+++ b/SOURCES/7.4.229
@@ -0,0 +1,141 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.229
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.229
+Problem:    Using ":let" for listing variables and the second one is a curly
+	    braces expression may fail.
+Solution:   Check for an "=" in a better way. (ZyX)
+Files:	    src/eval.c, src/testdir/test104.in, src/testdir/test104.ok
+
+
+*** ../vim-7.4.228/src/eval.c	2014-03-25 18:23:27.062087691 +0100
+--- src/eval.c	2014-03-30 16:46:24.464562806 +0200
+***************
+*** 1856,1863 ****
+  	return;
+      if (argend > arg && argend[-1] == '.')  /* for var.='str' */
+  	--argend;
+!     expr = vim_strchr(argend, '=');
+!     if (expr == NULL)
+      {
+  	/*
+  	 * ":let" without "=": list variables
+--- 1856,1864 ----
+  	return;
+      if (argend > arg && argend[-1] == '.')  /* for var.='str' */
+  	--argend;
+!     expr = skipwhite(argend);
+!     if (*expr != '=' && !(vim_strchr((char_u *)"+-.", *expr) != NULL
+! 			  && expr[1] == '='))
+      {
+  	/*
+  	 * ":let" without "=": list variables
+***************
+*** 1886,1897 ****
+      {
+  	op[0] = '=';
+  	op[1] = NUL;
+! 	if (expr > argend)
+  	{
+! 	    if (vim_strchr((char_u *)"+-.", expr[-1]) != NULL)
+! 		op[0] = expr[-1];   /* +=, -= or .= */
+  	}
+! 	expr = skipwhite(expr + 1);
+  
+  	if (eap->skip)
+  	    ++emsg_skip;
+--- 1887,1900 ----
+      {
+  	op[0] = '=';
+  	op[1] = NUL;
+! 	if (*expr != '=')
+  	{
+! 	    if (vim_strchr((char_u *)"+-.", *expr) != NULL)
+! 		op[0] = *expr;   /* +=, -= or .= */
+! 	    expr = skipwhite(expr + 2);
+  	}
+! 	else
+! 	    expr = skipwhite(expr + 1);
+  
+  	if (eap->skip)
+  	    ++emsg_skip;
+*** ../vim-7.4.228/src/testdir/test104.in	2014-02-05 22:25:29.982568243 +0100
+--- src/testdir/test104.in	2014-03-30 16:44:39.432561197 +0200
+***************
+*** 1,4 ****
+! Tests for autoload.  vim: set ft=vim ts=8 :
+  
+  STARTTEST
+  :so small.vim
+--- 1,4 ----
+! Tests for :let.  vim: set ft=vim ts=8 :
+  
+  STARTTEST
+  :so small.vim
+***************
+*** 10,15 ****
+--- 10,29 ----
+  :catch
+  :  $put ='FAIL: ' . v:exception
+  :endtry
++ :let a = 1
++ :let b = 2
++ :for letargs in ['a b', '{0 == 1 ? "a" : "b"}', '{0 == 1 ? "a" : "b"} a', 'a {0 == 1 ? "a" : "b"}']
++ :  try
++ :    redir => messages
++ :    execute 'let' letargs
++ :    redir END
++ :    $put ='OK:'
++ :    $put =split(substitute(messages, '\n', '\0  ', 'g'), '\n')
++ :  catch
++ :    $put ='FAIL: ' . v:exception
++ :    redir END
++ :  endtry
++ :endfor
+  :/^Results/,$wq! test.out
+  ENDTEST
+  
+*** ../vim-7.4.228/src/testdir/test104.ok	2014-02-05 22:25:29.982568243 +0100
+--- src/testdir/test104.ok	2014-03-30 16:44:39.432561197 +0200
+***************
+*** 1,2 ****
+--- 1,13 ----
+  Results of test104:
+  OK: function('tr')
++ OK:
++   a                     #1
++   b                     #2
++ OK:
++   b                     #2
++ OK:
++   b                     #2
++   a                     #1
++ OK:
++   a                     #1
++   b                     #2
+*** ../vim-7.4.228/src/version.c	2014-03-30 16:11:37.180530823 +0200
+--- src/version.c	2014-03-30 16:46:39.660563039 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     229,
+  /**/
+
+-- 
+You have heard the saying that if you put a thousand monkeys in a room with a
+thousand typewriters and waited long enough, eventually you would have a room
+full of dead monkeys.
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.230 b/SOURCES/7.4.230
new file mode 100644
index 0000000..933de67
--- /dev/null
+++ b/SOURCES/7.4.230
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.230
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.230
+Problem:    Error when using ":options".
+Solution:   Fix the entry for 'lispwords'. (Kenichi Ito)
+Files:	    runtime/optwin.vim
+
+
+*** ../vim-7.4.229/runtime/optwin.vim	2014-03-12 18:55:52.100906804 +0100
+--- runtime/optwin.vim	2014-04-01 12:25:09.825159207 +0200
+***************
+*** 855,861 ****
+    call append("$", "\t(local to buffer)")
+    call <SID>BinOptionL("lisp")
+    call append("$", "lispwords\twords that change how lisp indenting works")
+!   call <SID>OptionL("lw", &lw)
+  endif
+  
+  
+--- 855,861 ----
+    call append("$", "\t(local to buffer)")
+    call <SID>BinOptionL("lisp")
+    call append("$", "lispwords\twords that change how lisp indenting works")
+!   call <SID>OptionL("lw")
+  endif
+  
+  
+*** ../vim-7.4.229/src/version.c	2014-03-30 16:49:06.412565288 +0200
+--- src/version.c	2014-04-01 12:23:07.629160888 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     230,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+9. All your daydreaming is preoccupied with getting a faster connection to the
+   net: 28.8...ISDN...cable modem...T1...T3.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.231 b/SOURCES/7.4.231
new file mode 100644
index 0000000..eb66144
--- /dev/null
+++ b/SOURCES/7.4.231
@@ -0,0 +1,267 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.231
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.231
+Problem:    An error in ":options" is not caught by the tests.
+Solution:   Add a test for ":options".  Set $VIMRUNTIME for the tests so that
+	    it uses the current runtime files instead of the installed ones.
+Files:	    src/Makefile, src/testdir/Makefile, src/testdir/test_options.in,
+	    src/testdir/test_options.ok, src/testdir/Make_amiga.mak,
+	    src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+	    src/testdir/Make_os2.mak, src/testdir/Make_vms.mms
+
+
+*** ../vim-7.4.230/src/Makefile	2014-03-27 17:40:53.384696360 +0100
+--- src/Makefile	2014-04-01 13:49:14.025089820 +0200
+***************
+*** 1867,1873 ****
+  	-if test $(VIMTARGET) != vim -a ! -r vim; then \
+  		ln -s $(VIMTARGET) vim; \
+  	fi
+! 	cd testdir; $(MAKE) -f Makefile $(GUI_TESTTARGET) VIMPROG=../$(VIMTARGET) $(GUI_TESTARG)
+  	$(MAKE) -f Makefile unittest
+  
+  unittesttargets:
+--- 1867,1873 ----
+  	-if test $(VIMTARGET) != vim -a ! -r vim; then \
+  		ln -s $(VIMTARGET) vim; \
+  	fi
+! 	cd testdir; $(MAKE) -f Makefile $(GUI_TESTTARGET) VIMPROG=../$(VIMTARGET) $(GUI_TESTARG) SCRIPTSOURCE=../$(SCRIPTSOURCE)
+  	$(MAKE) -f Makefile unittest
+  
+  unittesttargets:
+***************
+*** 1880,1885 ****
+--- 1880,1886 ----
+  
+  # Run individual test, assuming that Vim was already compiled.
+  test1 test2 test3 test4 test5 test6 test7 test8 test9 \
++ 	test_options \
+  	test10 test11 test12 test13 test14 test15 test16 test17 test18 test19 \
+  	test20 test21 test22 test23 test24 test25 test26 test27 test28 test29 \
+  	test30 test31 test32 test33 test34 test35 test36 test37 test38 test39 \
+***************
+*** 1890,1896 ****
+  	test80 test81 test82 test83 test84 test85 test86 test87 test88 test89 \
+  	test90 test91 test92 test93 test94 test95 test96 test97 test98 test99 \
+  	test100 test101 test102 test103 test104 test105 test106 test107:
+! 	cd testdir; rm $@.out; $(MAKE) -f Makefile $@.out VIMPROG=../$(VIMTARGET)
+  
+  testclean:
+  	cd testdir; $(MAKE) -f Makefile clean
+--- 1891,1897 ----
+  	test80 test81 test82 test83 test84 test85 test86 test87 test88 test89 \
+  	test90 test91 test92 test93 test94 test95 test96 test97 test98 test99 \
+  	test100 test101 test102 test103 test104 test105 test106 test107:
+! 	cd testdir; rm $@.out; $(MAKE) -f Makefile $@.out VIMPROG=../$(VIMTARGET) $(GUI_TESTARG) SCRIPTSOURCE=../$(SCRIPTSOURCE)
+  
+  testclean:
+  	cd testdir; $(MAKE) -f Makefile clean
+*** ../vim-7.4.230/src/testdir/Makefile	2014-03-12 19:41:37.100948866 +0100
+--- src/testdir/Makefile	2014-04-01 13:48:07.593090734 +0200
+***************
+*** 3,8 ****
+--- 3,9 ----
+  #
+  
+  VIMPROG = ../vim
++ SCRIPTSOURCE = ../../runtime
+  
+  # Uncomment this line to use valgrind for memory leaks and extra warnings.
+  #   The output goes into a file "valgrind.testN"
+***************
+*** 31,37 ****
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test97.out test98.out \
+  		test99.out test100.out test101.out test102.out test103.out \
+! 		test104.out test105.out test106.out
+  
+  SCRIPTS_GUI = test16.out
+  
+--- 32,39 ----
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test97.out test98.out \
+  		test99.out test100.out test101.out test102.out test103.out \
+! 		test104.out test105.out test106.out \
+! 		test_options.out
+  
+  SCRIPTS_GUI = test16.out
+  
+***************
+*** 53,59 ****
+  
+  RM_ON_RUN = test.out X* viminfo
+  RM_ON_START = tiny.vim small.vim mbyte.vim mzscheme.vim lua.vim test.ok
+! RUN_VIM = $(VALGRIND) $(VIMPROG) -u unix.vim -U NONE --noplugin -s dotest.in
+  
+  clean:
+  	-rm -rf *.out *.failed *.rej *.orig test.log $(RM_ON_RUN) $(RM_ON_START) valgrind.*
+--- 55,61 ----
+  
+  RM_ON_RUN = test.out X* viminfo
+  RM_ON_START = tiny.vim small.vim mbyte.vim mzscheme.vim lua.vim test.ok
+! RUN_VIM = export VIMRUNTIME=$(SCRIPTSOURCE); $(VALGRIND) $(VIMPROG) -u unix.vim -U NONE --noplugin -s dotest.in
+  
+  clean:
+  	-rm -rf *.out *.failed *.rej *.orig test.log $(RM_ON_RUN) $(RM_ON_START) valgrind.*
+*** ../vim-7.4.230/src/testdir/test_options.in	2014-04-01 14:07:21.057074867 +0200
+--- src/testdir/test_options.in	2014-04-01 13:19:34.073114305 +0200
+***************
+*** 0 ****
+--- 1,17 ----
++ Test for ":options".
++ 
++ STARTTEST
++ :so small.vim
++ :let caught = 'ok'
++ :try
++   :options
++ :catch 
++   :let caught = v:throwpoint . "\n" . v:exception
++ :endtry
++ :buf 1
++ :$put =caught
++ :/^result/,$w! test.out
++ :qa!
++ ENDTEST
++ 
++ result
+*** ../vim-7.4.230/src/testdir/test_options.ok	2014-04-01 14:07:21.065074867 +0200
+--- src/testdir/test_options.ok	2014-04-01 13:04:45.041126534 +0200
+***************
+*** 0 ****
+--- 1,2 ----
++ result
++ ok
+*** ../vim-7.4.230/src/testdir/Make_amiga.mak	2014-03-12 19:41:37.096948866 +0100
+--- src/testdir/Make_amiga.mak	2014-04-01 13:13:31.561119292 +0200
+***************
+*** 35,41 ****
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test97.out test98.out \
+  		test99.out test100.out test101.out test102.out test103.out \
+! 		test104.out test105.out test106.out
+  
+  .SUFFIXES: .in .out
+  
+--- 35,42 ----
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test97.out test98.out \
+  		test99.out test100.out test101.out test102.out test103.out \
+! 		test104.out test105.out test106.out \
+! 		test_options.out
+  
+  .SUFFIXES: .in .out
+  
+***************
+*** 158,160 ****
+--- 159,162 ----
+  test104.out: test104.in
+  test105.out: test105.in
+  test106.out: test106.in
++ test_options.out: test_options.in
+*** ../vim-7.4.230/src/testdir/Make_dos.mak	2014-03-12 19:41:37.096948866 +0100
+--- src/testdir/Make_dos.mak	2014-04-01 13:14:07.909118792 +0200
+***************
+*** 34,40 ****
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test98.out test99.out \
+  		test100.out test101.out test102.out test103.out test104.out \
+! 		test105.out test106.out
+  
+  SCRIPTS32 =	test50.out test70.out
+  
+--- 34,41 ----
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test98.out test99.out \
+  		test100.out test101.out test102.out test103.out test104.out \
+! 		test105.out test106.out \
+! 		test_options.out
+  
+  SCRIPTS32 =	test50.out test70.out
+  
+*** ../vim-7.4.230/src/testdir/Make_ming.mak	2014-03-12 19:41:37.096948866 +0100
+--- src/testdir/Make_ming.mak	2014-04-01 13:14:23.889118572 +0200
+***************
+*** 54,60 ****
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test98.out test99.out \
+  		test100.out test101.out test102.out test103.out test104.out \
+! 		test105.out test106.out
+  
+  SCRIPTS32 =	test50.out test70.out
+  
+--- 54,61 ----
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test98.out test99.out \
+  		test100.out test101.out test102.out test103.out test104.out \
+! 		test105.out test106.out \
+! 		test_options.out
+  
+  SCRIPTS32 =	test50.out test70.out
+  
+*** ../vim-7.4.230/src/testdir/Make_os2.mak	2014-03-12 19:41:37.096948866 +0100
+--- src/testdir/Make_os2.mak	2014-04-01 13:14:34.377118428 +0200
+***************
+*** 36,42 ****
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test98.out test99.out \
+  		test100.out test101.out test102.out test103.out test104.out \
+! 		test105.out test106.out
+  
+  .SUFFIXES: .in .out
+  
+--- 36,43 ----
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test98.out test99.out \
+  		test100.out test101.out test102.out test103.out test104.out \
+! 		test105.out test106.out \
+! 		test_options.out
+  
+  .SUFFIXES: .in .out
+  
+*** ../vim-7.4.230/src/testdir/Make_vms.mms	2014-03-12 19:41:37.096948866 +0100
+--- src/testdir/Make_vms.mms	2014-04-01 13:14:47.821118243 +0200
+***************
+*** 95,101 ****
+  	 test90.out test91.out test92.out test93.out test94.out \
+  	 test95.out test96.out test98.out test99.out \
+  	 test100.out test101.out test103.out test104.out \
+! 	 test105.out test106.out
+  
+  # Known problems:
+  # test17: ?
+--- 95,102 ----
+  	 test90.out test91.out test92.out test93.out test94.out \
+  	 test95.out test96.out test98.out test99.out \
+  	 test100.out test101.out test103.out test104.out \
+! 	 test105.out test106.out \
+! 	 test_options.out
+  
+  # Known problems:
+  # test17: ?
+*** ../vim-7.4.230/src/version.c	2014-04-01 12:26:40.245157964 +0200
+--- src/version.c	2014-04-01 13:14:57.549118109 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     231,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+11. You find yourself typing "com" after every period when using a word
+    processor.com
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.232 b/SOURCES/7.4.232
new file mode 100644
index 0000000..3e2dfe2
--- /dev/null
+++ b/SOURCES/7.4.232
@@ -0,0 +1,109 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.232
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.232
+Problem:    ":%s/\n//" uses a lot of memory. (Aidan Marlin)
+Solution:   Turn this into a join command. (Christian Brabandt)
+Files:	    src/ex_cmds.c, src/ex_docmd.c, src/proto/ex_docmd.pro
+
+
+*** ../vim-7.4.231/src/ex_cmds.c	2014-03-23 15:12:29.919264336 +0100
+--- src/ex_cmds.c	2014-04-01 17:37:59.560901015 +0200
+***************
+*** 4420,4425 ****
+--- 4420,4450 ----
+  	endcolumn = (curwin->w_curswant == MAXCOL);
+      }
+  
++     /* Recognize ":%s/\n//" and turn it into a join command, which is much
++      * more efficient.
++      * TODO: find a generic solution to make line-joining operations more
++      * efficient, avoid allocating a string that grows in size.
++      */
++     if (STRCMP(pat, "\\n") == 0 && STRLEN(pat) == 2
++ 	    && *sub == NUL
++ 	    && (*cmd == NUL || (cmd[1] == NUL && (*cmd == 'g' || *cmd == 'l'
++ 					     || *cmd == 'p' || *cmd == '#'))))
++     {
++ 	curwin->w_cursor.lnum = eap->line1;
++ 	if (*cmd == 'l')
++ 	    eap->flags = EXFLAG_LIST;
++ 	else if (*cmd == '#')
++ 	    eap->flags = EXFLAG_NR;
++ 	else if (*cmd == 'p')
++ 	    eap->flags = EXFLAG_PRINT;
++ 
++ 	(void)do_join(eap->line2 - eap->line1 + 1, FALSE, TRUE, FALSE);
++ 	sub_nlines = sub_nsubs = eap->line2 - eap->line1 + 1;
++ 	(void)do_sub_msg(FALSE);
++ 	ex_may_print(eap);
++ 	return;
++     }
++ 
+      /*
+       * Find trailing options.  When '&' is used, keep old options.
+       */
+*** ../vim-7.4.231/src/ex_docmd.c	2014-03-25 13:03:44.937793766 +0100
+--- src/ex_docmd.c	2014-04-01 17:31:59.708905965 +0200
+***************
+*** 316,322 ****
+  static void	ex_operators __ARGS((exarg_T *eap));
+  static void	ex_put __ARGS((exarg_T *eap));
+  static void	ex_copymove __ARGS((exarg_T *eap));
+- static void	ex_may_print __ARGS((exarg_T *eap));
+  static void	ex_submagic __ARGS((exarg_T *eap));
+  static void	ex_join __ARGS((exarg_T *eap));
+  static void	ex_at __ARGS((exarg_T *eap));
+--- 316,321 ----
+***************
+*** 8683,8689 ****
+  /*
+   * Print the current line if flags were given to the Ex command.
+   */
+!     static void
+  ex_may_print(eap)
+      exarg_T	*eap;
+  {
+--- 8682,8688 ----
+  /*
+   * Print the current line if flags were given to the Ex command.
+   */
+!     void
+  ex_may_print(eap)
+      exarg_T	*eap;
+  {
+*** ../vim-7.4.231/src/proto/ex_docmd.pro	2013-08-10 13:37:10.000000000 +0200
+--- src/proto/ex_docmd.pro	2014-04-01 17:31:59.708905965 +0200
+***************
+*** 54,57 ****
+--- 54,58 ----
+  int put_line __ARGS((FILE *fd, char *s));
+  void dialog_msg __ARGS((char_u *buff, char *format, char_u *fname));
+  char_u *get_behave_arg __ARGS((expand_T *xp, int idx));
++ void ex_may_print __ARGS((exarg_T *eap));
+  /* vim: set ft=c : */
+*** ../vim-7.4.231/src/version.c	2014-04-01 14:08:14.689074130 +0200
+--- src/version.c	2014-04-01 17:33:03.920905082 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     232,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+16. You step out of your room and realize that your parents have moved and
+    you don't have a clue when it happened.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.233 b/SOURCES/7.4.233
new file mode 100644
index 0000000..0ae1bca
--- /dev/null
+++ b/SOURCES/7.4.233
@@ -0,0 +1,80 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.233
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.233
+Problem:    Escaping special characters for using "%" with a shell command is
+	    inconsistant, parenthesis are escaped but spaces are not.
+Solution:   Only escape "!". (Gary Johnson)
+Files:	    src/ex_docmd.c
+
+
+*** ../vim-7.4.232/src/ex_docmd.c	2014-04-01 17:49:40.140891378 +0200
+--- src/ex_docmd.c	2014-04-01 18:26:16.036861171 +0200
+***************
+*** 4580,4604 ****
+  
+  	/* For a shell command a '!' must be escaped. */
+  	if ((eap->usefilter || eap->cmdidx == CMD_bang)
+! 			    && vim_strpbrk(repl, (char_u *)"!&;()<>") != NULL)
+  	{
+  	    char_u	*l;
+  
+! 	    l = vim_strsave_escaped(repl, (char_u *)"!&;()<>");
+  	    if (l != NULL)
+  	    {
+  		vim_free(repl);
+  		repl = l;
+- 		/* For a sh-like shell escape "!" another time. */
+- 		if (strstr((char *)p_sh, "sh") != NULL)
+- 		{
+- 		    l = vim_strsave_escaped(repl, (char_u *)"!");
+- 		    if (l != NULL)
+- 		    {
+- 			vim_free(repl);
+- 			repl = l;
+- 		    }
+- 		}
+  	    }
+  	}
+  
+--- 4580,4594 ----
+  
+  	/* For a shell command a '!' must be escaped. */
+  	if ((eap->usefilter || eap->cmdidx == CMD_bang)
+! 			    && vim_strpbrk(repl, (char_u *)"!") != NULL)
+  	{
+  	    char_u	*l;
+  
+! 	    l = vim_strsave_escaped(repl, (char_u *)"!");
+  	    if (l != NULL)
+  	    {
+  		vim_free(repl);
+  		repl = l;
+  	    }
+  	}
+  
+*** ../vim-7.4.232/src/version.c	2014-04-01 17:49:40.144891378 +0200
+--- src/version.c	2014-04-01 18:54:13.276838100 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     233,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+17. You turn on your intercom when leaving the room so you can hear if new
+    e-mail arrives.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.234 b/SOURCES/7.4.234
new file mode 100644
index 0000000..d70b7a0
--- /dev/null
+++ b/SOURCES/7.4.234
@@ -0,0 +1,95 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.234
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.234
+Problem:    Can't get the command that was used to start Vim.
+Solution:   Add v:progpath. (Viktor Kojouharov)
+Files:	    runtime/doc/eval.txt, src/eval.c, src/main.c, src/vim.h
+
+
+*** ../vim-7.4.233/runtime/doc/eval.txt	2014-03-25 18:23:27.054087691 +0100
+--- runtime/doc/eval.txt	2014-04-01 19:33:25.516805743 +0200
+***************
+*** 1557,1562 ****
+--- 1558,1569 ----
+  		|evim| etc., or any other name you might symlink to Vim.
+  		Read-only.
+  
++ 					*v:progpath* *progpath-variable*
++ v:progpath	Contains the command with which Vim was invoked, including the
++ 		path.  Useful if you want to message a Vim server using a
++ 		|--remote-expr|.
++ 		Read-only.
++ 
+  					*v:register* *register-variable*
+  v:register	The name of the register in effect for the current normal mode
+  		command (regardless of whether that command actually used a
+*** ../vim-7.4.233/src/eval.c	2014-03-30 16:49:06.412565288 +0200
+--- src/eval.c	2014-04-01 19:34:13.164805087 +0200
+***************
+*** 361,366 ****
+--- 361,367 ----
+      {VV_NAME("hlsearch",	 VAR_NUMBER), 0},
+      {VV_NAME("oldfiles",	 VAR_LIST), 0},
+      {VV_NAME("windowid",	 VAR_NUMBER), VV_RO},
++     {VV_NAME("progpath",	 VAR_STRING), VV_RO},
+  };
+  
+  /* shorthand */
+*** ../vim-7.4.233/src/main.c	2014-03-23 15:12:29.923264336 +0100
+--- src/main.c	2014-04-01 19:34:13.164805087 +0200
+***************
+*** 1602,1607 ****
+--- 1602,1608 ----
+  
+  #ifdef FEAT_EVAL
+      set_vim_var_string(VV_PROGNAME, initstr, -1);
++     set_vim_var_string(VV_PROGPATH, (char_u *)parmp->argv[0], -1);
+  #endif
+  
+      if (TOLOWER_ASC(initstr[0]) == 'r')
+*** ../vim-7.4.233/src/vim.h	2014-03-24 19:43:56.600837795 +0100
+--- src/vim.h	2014-04-01 19:34:13.164805087 +0200
+***************
+*** 1880,1886 ****
+  #define VV_HLSEARCH	54
+  #define VV_OLDFILES	55
+  #define VV_WINDOWID	56
+! #define VV_LEN		57	/* number of v: vars */
+  
+  #ifdef FEAT_CLIPBOARD
+  
+--- 1880,1887 ----
+  #define VV_HLSEARCH	54
+  #define VV_OLDFILES	55
+  #define VV_WINDOWID	56
+! #define VV_PROGPATH	57
+! #define VV_LEN		58	/* number of v: vars */
+  
+  #ifdef FEAT_CLIPBOARD
+  
+*** ../vim-7.4.233/src/version.c	2014-04-01 18:54:44.316837673 +0200
+--- src/version.c	2014-04-01 19:28:05.092810150 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     234,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+18. Your wife drapes a blond wig over your monitor to remind you of what she
+    looks like.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.235 b/SOURCES/7.4.235
new file mode 100644
index 0000000..1f12ee7
--- /dev/null
+++ b/SOURCES/7.4.235
@@ -0,0 +1,552 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.235
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.235
+Problem:    It is not easy to get the full path of a command.
+Solution:   Add the exepath() function.
+Files:	    src/eval.c, src/misc1.c, src/os_amiga.c, src/os_msdos.c,
+	    src/os_unix.c, src/os_vms.c, src/os_win32.c,
+	    src/proto/os_amiga.pro, src/proto/os_msdos.pro,
+	    src/proto/os_unix.pro, src/proto/os_win32.pro,
+	    runtime/doc/eval.txt
+
+
+*** ../vim-7.4.234/src/eval.c	2014-04-01 19:55:46.252787300 +0200
+--- src/eval.c	2014-04-01 20:18:39.212768414 +0200
+***************
+*** 514,519 ****
+--- 514,520 ----
+  static void f_eval __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_eventhandler __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_executable __ARGS((typval_T *argvars, typval_T *rettv));
++ static void f_exepath __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_exists __ARGS((typval_T *argvars, typval_T *rettv));
+  #ifdef FEAT_FLOAT
+  static void f_exp __ARGS((typval_T *argvars, typval_T *rettv));
+***************
+*** 7920,7925 ****
+--- 7921,7927 ----
+      {"eval",		1, 1, f_eval},
+      {"eventhandler",	0, 0, f_eventhandler},
+      {"executable",	1, 1, f_executable},
++     {"exepath",		1, 1, f_exepath},
+      {"exists",		1, 1, f_exists},
+  #ifdef FEAT_FLOAT
+      {"exp",		1, 1, f_exp},
+***************
+*** 10046,10052 ****
+      typval_T	*argvars;
+      typval_T	*rettv;
+  {
+!     rettv->vval.v_number = mch_can_exe(get_tv_string(&argvars[0]));
+  }
+  
+  /*
+--- 10048,10069 ----
+      typval_T	*argvars;
+      typval_T	*rettv;
+  {
+!     rettv->vval.v_number = mch_can_exe(get_tv_string(&argvars[0]), NULL);
+! }
+! 
+! /*
+!  * "exepath()" function
+!  */
+!     static void
+! f_exepath(argvars, rettv)
+!     typval_T	*argvars;
+!     typval_T	*rettv;
+! {
+!     char_u *p = NULL;
+! 
+!     (void)mch_can_exe(get_tv_string(&argvars[0]), &p);
+!     rettv->v_type = VAR_STRING;
+!     rettv->vval.v_string = p;
+  }
+  
+  /*
+*** ../vim-7.4.234/src/misc1.c	2014-03-12 18:55:52.100906804 +0100
+--- src/misc1.c	2014-04-01 20:01:08.752782864 +0200
+***************
+*** 10728,10734 ****
+  	return;
+  
+      /* If the file isn't executable, may not add it.  Do accept directories. */
+!     if (!isdir && (flags & EW_EXEC) && !mch_can_exe(f))
+  	return;
+  
+      /* Make room for another item in the file list. */
+--- 10728,10734 ----
+  	return;
+  
+      /* If the file isn't executable, may not add it.  Do accept directories. */
+!     if (!isdir && (flags & EW_EXEC) && !mch_can_exe(f, NULL))
+  	return;
+  
+      /* Make room for another item in the file list. */
+*** ../vim-7.4.234/src/os_amiga.c	2013-05-06 04:06:04.000000000 +0200
+--- src/os_amiga.c	2014-04-01 20:19:50.804767429 +0200
+***************
+*** 884,891 ****
+   * Return -1 if unknown.
+   */
+      int
+! mch_can_exe(name)
+      char_u	*name;
+  {
+      /* TODO */
+      return -1;
+--- 884,892 ----
+   * Return -1 if unknown.
+   */
+      int
+! mch_can_exe(name, path)
+      char_u	*name;
++     char_u	**path;
+  {
+      /* TODO */
+      return -1;
+*** ../vim-7.4.234/src/os_msdos.c	2014-03-23 15:12:29.931264336 +0100
+--- src/os_msdos.c	2014-04-01 20:02:39.996781608 +0200
+***************
+*** 2945,2958 ****
+   * Return -1 if unknown.
+   */
+      int
+! mch_can_exe(name)
+      char_u	*name;
+  {
+      char	*p;
+  
+      p = searchpath(name);
+      if (p == NULL || mch_isdir(p))
+  	return FALSE;
+      return TRUE;
+  }
+  
+--- 2945,2961 ----
+   * Return -1 if unknown.
+   */
+      int
+! mch_can_exe(name, path)
+      char_u	*name;
++     char_u	**path;
+  {
+      char	*p;
+  
+      p = searchpath(name);
+      if (p == NULL || mch_isdir(p))
+  	return FALSE;
++     if (path != NULL)
++ 	*path = vim_strsave(p);
+      return TRUE;
+  }
+  
+*** ../vim-7.4.234/src/os_unix.c	2014-03-12 16:51:35.060792541 +0100
+--- src/os_unix.c	2014-04-01 20:46:21.304745550 +0200
+***************
+*** 2992,2999 ****
+   * Return -1 if unknown.
+   */
+      int
+! mch_can_exe(name)
+      char_u	*name;
+  {
+      char_u	*buf;
+      char_u	*p, *e;
+--- 2992,3000 ----
+   * Return -1 if unknown.
+   */
+      int
+! mch_can_exe(name, path)
+      char_u	*name;
++     char_u	**path;
+  {
+      char_u	*buf;
+      char_u	*p, *e;
+***************
+*** 3003,3009 ****
+      if (mch_isFullName(name) || (name[0] == '.' && (name[1] == '/'
+  				      || (name[1] == '.' && name[2] == '/'))))
+      {
+! 	return executable_file(name);
+      }
+  
+      p = (char_u *)getenv("PATH");
+--- 3004,3021 ----
+      if (mch_isFullName(name) || (name[0] == '.' && (name[1] == '/'
+  				      || (name[1] == '.' && name[2] == '/'))))
+      {
+! 	if (executable_file(name))
+! 	{
+! 	    if (path != NULL)
+! 	    {
+! 		if (name[0] == '.')
+! 		    *path = FullName_save(name, TRUE);
+! 		else
+! 		    *path = vim_strsave(name);
+! 	    }
+! 	    return TRUE;
+! 	}
+! 	return FALSE;
+      }
+  
+      p = (char_u *)getenv("PATH");
+***************
+*** 3032,3038 ****
+--- 3044,3059 ----
+  	STRCAT(buf, name);
+  	retval = executable_file(buf);
+  	if (retval == 1)
++ 	{
++ 	    if (path != NULL)
++ 	    {
++ 		if (buf[0] == '.')
++ 		    *path = FullName_save(buf, TRUE);
++ 		else
++ 		    *path = vim_strsave(buf);
++ 	    }
+  	    break;
++ 	}
+  
+  	if (*e != ':')
+  	    break;
+***************
+*** 5592,5598 ****
+  		    continue;
+  
+  		/* Skip files that are not executable if we check for that. */
+! 		if (!dir && (flags & EW_EXEC) && !mch_can_exe(p))
+  		    continue;
+  
+  		if (--files_free == 0)
+--- 5613,5619 ----
+  		    continue;
+  
+  		/* Skip files that are not executable if we check for that. */
+! 		if (!dir && (flags & EW_EXEC) && !mch_can_exe(p, NULL))
+  		    continue;
+  
+  		if (--files_free == 0)
+***************
+*** 6090,6096 ****
+  	    continue;
+  
+  	/* Skip files that are not executable if we check for that. */
+! 	if (!dir && (flags & EW_EXEC) && !mch_can_exe((*file)[i]))
+  	    continue;
+  
+  	p = alloc((unsigned)(STRLEN((*file)[i]) + 1 + dir));
+--- 6111,6117 ----
+  	    continue;
+  
+  	/* Skip files that are not executable if we check for that. */
+! 	if (!dir && (flags & EW_EXEC) && !mch_can_exe((*file)[i], NULL))
+  	    continue;
+  
+  	p = alloc((unsigned)(STRLEN((*file)[i]) + 1 + dir));
+***************
+*** 6317,6323 ****
+  
+  /* Reads gpm event and adds special keys to input buf. Returns length of
+   * generated key sequence.
+!  * This function is made after gui_send_mouse_event
+   */
+      static int
+  mch_gpm_process()
+--- 6338,6344 ----
+  
+  /* Reads gpm event and adds special keys to input buf. Returns length of
+   * generated key sequence.
+!  * This function is styled after gui_send_mouse_event().
+   */
+      static int
+  mch_gpm_process()
+*** ../vim-7.4.234/src/os_vms.c	2014-03-12 16:51:35.060792541 +0100
+--- src/os_vms.c	2014-04-01 20:05:52.960778954 +0200
+***************
+*** 483,489 ****
+  		continue;
+  
+  	    /* Skip files that are not executable if we check for that. */
+! 	    if (!dir && (flags & EW_EXEC) && !mch_can_exe(vms_fmatch[i]))
+  		continue;
+  
+  	    /* allocate memory for pointers */
+--- 483,489 ----
+  		continue;
+  
+  	    /* Skip files that are not executable if we check for that. */
+! 	    if (!dir && (flags & EW_EXEC) && !mch_can_exe(vms_fmatch[i], NULL))
+  		continue;
+  
+  	    /* allocate memory for pointers */
+*** ../vim-7.4.234/src/os_win32.c	2014-02-11 17:05:57.282217857 +0100
+--- src/os_win32.c	2014-04-01 20:26:07.432762248 +0200
+***************
+*** 1882,1888 ****
+   * TODO: Should somehow check if it's really executable.
+   */
+      static int
+! executable_exists(char *name)
+  {
+      char	*dum;
+      char	fname[_MAX_PATH];
+--- 1882,1888 ----
+   * TODO: Should somehow check if it's really executable.
+   */
+      static int
+! executable_exists(char *name, char_u **path)
+  {
+      char	*dum;
+      char	fname[_MAX_PATH];
+***************
+*** 1905,1910 ****
+--- 1905,1912 ----
+  		    return FALSE;
+  		if (GetFileAttributesW(fnamew) & FILE_ATTRIBUTE_DIRECTORY)
+  		    return FALSE;
++ 		if (path != NULL)
++ 		    *path = utf16_to_enc(fnamew, NULL);
+  		return TRUE;
+  	    }
+  	    /* Retry with non-wide function (for Windows 98). */
+***************
+*** 1915,1920 ****
+--- 1917,1924 ----
+  	return FALSE;
+      if (mch_isdir(fname))
+  	return FALSE;
++     if (path != NULL)
++ 	*path = vim_strsave(fname);
+      return TRUE;
+  }
+  
+***************
+*** 1996,2002 ****
+  	    vimrun_path = (char *)vim_strsave(vimrun_location);
+  	    s_dont_use_vimrun = FALSE;
+  	}
+! 	else if (executable_exists("vimrun.exe"))
+  	    s_dont_use_vimrun = FALSE;
+  
+  	/* Don't give the warning for a missing vimrun.exe right now, but only
+--- 2000,2006 ----
+  	    vimrun_path = (char *)vim_strsave(vimrun_location);
+  	    s_dont_use_vimrun = FALSE;
+  	}
+! 	else if (executable_exists("vimrun.exe", NULL))
+  	    s_dont_use_vimrun = FALSE;
+  
+  	/* Don't give the warning for a missing vimrun.exe right now, but only
+***************
+*** 2010,2016 ****
+       * If "finstr.exe" doesn't exist, use "grep -n" for 'grepprg'.
+       * Otherwise the default "findstr /n" is used.
+       */
+!     if (!executable_exists("findstr.exe"))
+  	set_option_value((char_u *)"grepprg", 0, (char_u *)"grep -n", 0);
+  
+  #ifdef FEAT_CLIPBOARD
+--- 2014,2020 ----
+       * If "finstr.exe" doesn't exist, use "grep -n" for 'grepprg'.
+       * Otherwise the default "findstr /n" is used.
+       */
+!     if (!executable_exists("findstr.exe", NULL))
+  	set_option_value((char_u *)"grepprg", 0, (char_u *)"grep -n", 0);
+  
+  #ifdef FEAT_CLIPBOARD
+***************
+*** 3330,3336 ****
+   * Return -1 if unknown.
+   */
+      int
+! mch_can_exe(char_u *name)
+  {
+      char_u	buf[_MAX_PATH];
+      int		len = (int)STRLEN(name);
+--- 3334,3340 ----
+   * Return -1 if unknown.
+   */
+      int
+! mch_can_exe(char_u *name, char_u **path)
+  {
+      char_u	buf[_MAX_PATH];
+      int		len = (int)STRLEN(name);
+***************
+*** 3343,3349 ****
+       * this with a Unix-shell like 'shell'. */
+      if (vim_strchr(gettail(name), '.') != NULL
+  			       || strstr((char *)gettail(p_sh), "sh") != NULL)
+! 	if (executable_exists((char *)name))
+  	    return TRUE;
+  
+      /*
+--- 3347,3353 ----
+       * this with a Unix-shell like 'shell'. */
+      if (vim_strchr(gettail(name), '.') != NULL
+  			       || strstr((char *)gettail(p_sh), "sh") != NULL)
+! 	if (executable_exists((char *)name, path))
+  	    return TRUE;
+  
+      /*
+***************
+*** 3365,3371 ****
+  	}
+  	else
+  	    copy_option_part(&p, buf + len, _MAX_PATH - len, ";");
+! 	if (executable_exists((char *)buf))
+  	    return TRUE;
+      }
+      return FALSE;
+--- 3369,3375 ----
+  	}
+  	else
+  	    copy_option_part(&p, buf + len, _MAX_PATH - len, ";");
+! 	if (executable_exists((char *)buf, path))
+  	    return TRUE;
+      }
+      return FALSE;
+*** ../vim-7.4.234/src/proto/os_amiga.pro	2013-08-10 13:37:37.000000000 +0200
+--- src/proto/os_amiga.pro	2014-04-01 20:41:23.672749644 +0200
+***************
+*** 26,32 ****
+  void mch_hide __ARGS((char_u *name));
+  int mch_isdir __ARGS((char_u *name));
+  int mch_mkdir __ARGS((char_u *name));
+! int mch_can_exe __ARGS((char_u *name));
+  int mch_nodetype __ARGS((char_u *name));
+  void mch_early_init __ARGS((void));
+  void mch_exit __ARGS((int r));
+--- 26,32 ----
+  void mch_hide __ARGS((char_u *name));
+  int mch_isdir __ARGS((char_u *name));
+  int mch_mkdir __ARGS((char_u *name));
+! int mch_can_exe __ARGS((char_u *name, char_u **path));
+  int mch_nodetype __ARGS((char_u *name));
+  void mch_early_init __ARGS((void));
+  void mch_exit __ARGS((int r));
+*** ../vim-7.4.234/src/proto/os_msdos.pro	2013-08-10 13:37:37.000000000 +0200
+--- src/proto/os_msdos.pro	2014-04-01 20:41:32.432749524 +0200
+***************
+*** 38,44 ****
+  int mch_setperm __ARGS((char_u *name, long perm));
+  void mch_hide __ARGS((char_u *name));
+  int mch_isdir __ARGS((char_u *name));
+! int mch_can_exe __ARGS((char_u *name));
+  int mch_nodetype __ARGS((char_u *name));
+  int mch_dirname __ARGS((char_u *buf, int len));
+  int mch_remove __ARGS((char_u *name));
+--- 38,44 ----
+  int mch_setperm __ARGS((char_u *name, long perm));
+  void mch_hide __ARGS((char_u *name));
+  int mch_isdir __ARGS((char_u *name));
+! int mch_can_exe __ARGS((char_u *name, char_u **path));
+  int mch_nodetype __ARGS((char_u *name));
+  int mch_dirname __ARGS((char_u *buf, int len));
+  int mch_remove __ARGS((char_u *name));
+*** ../vim-7.4.234/src/proto/os_unix.pro	2013-08-10 13:37:23.000000000 +0200
+--- src/proto/os_unix.pro	2014-04-01 20:41:58.712749162 +0200
+***************
+*** 42,48 ****
+  void mch_free_acl __ARGS((vim_acl_T aclent));
+  void mch_hide __ARGS((char_u *name));
+  int mch_isdir __ARGS((char_u *name));
+! int mch_can_exe __ARGS((char_u *name));
+  int mch_nodetype __ARGS((char_u *name));
+  void mch_early_init __ARGS((void));
+  void mch_free_mem __ARGS((void));
+--- 42,48 ----
+  void mch_free_acl __ARGS((vim_acl_T aclent));
+  void mch_hide __ARGS((char_u *name));
+  int mch_isdir __ARGS((char_u *name));
+! int mch_can_exe __ARGS((char_u *name, char_u **path));
+  int mch_nodetype __ARGS((char_u *name));
+  void mch_early_init __ARGS((void));
+  void mch_free_mem __ARGS((void));
+*** ../vim-7.4.234/src/proto/os_win32.pro	2013-08-10 13:37:38.000000000 +0200
+--- src/proto/os_win32.pro	2014-04-01 20:42:16.992748911 +0200
+***************
+*** 26,32 ****
+  int mch_is_linked __ARGS((char_u *fname));
+  int win32_fileinfo __ARGS((char_u *fname, BY_HANDLE_FILE_INFORMATION *info));
+  int mch_writable __ARGS((char_u *name));
+! int mch_can_exe __ARGS((char_u *name));
+  int mch_nodetype __ARGS((char_u *name));
+  vim_acl_T mch_get_acl __ARGS((char_u *fname));
+  void mch_set_acl __ARGS((char_u *fname, vim_acl_T acl));
+--- 26,32 ----
+  int mch_is_linked __ARGS((char_u *fname));
+  int win32_fileinfo __ARGS((char_u *fname, BY_HANDLE_FILE_INFORMATION *info));
+  int mch_writable __ARGS((char_u *name));
+! int mch_can_exe __ARGS((char_u *name, char_u **path));
+  int mch_nodetype __ARGS((char_u *name));
+  vim_acl_T mch_get_acl __ARGS((char_u *fname));
+  void mch_set_acl __ARGS((char_u *fname, vim_acl_T acl));
+*** ../vim-7.4.234/runtime/doc/eval.txt	2014-04-01 19:55:46.244787300 +0200
+--- runtime/doc/eval.txt	2014-04-01 20:54:37.832738720 +0200
+***************
+*** 1561,1566 ****
+--- 1562,1571 ----
+  v:progpath	Contains the command with which Vim was invoked, including the
+  		path.  Useful if you want to message a Vim server using a
+  		|--remote-expr|.
++ 		To get the full path use: >
++ 			echo exepath(v:progpath)
++ <		NOTE: This does not work when the command is a relative path
++ 		and the current directory has changed.
+  		Read-only.
+  
+  					*v:register* *register-variable*
+***************
+*** 1761,1766 ****
+--- 1766,1772 ----
+  eval( {string})			any	evaluate {string} into its value
+  eventhandler( )			Number	TRUE if inside an event handler
+  executable( {expr})		Number	1 if executable {expr} exists
++ exepath( {expr})		String  full path of the command {expr}
+  exists( {expr})			Number	TRUE if {expr} exists
+  extend( {expr1}, {expr2} [, {expr3}])
+  				List/Dict insert items of {expr2} into {expr1}
+***************
+*** 2705,2710 ****
+--- 2711,2725 ----
+  			0	does not exist
+  			-1	not implemented on this system
+  
++ exepath({expr})						*exepath()*
++ 		If {expr} is an executable and is either an absolute path, a
++ 		relative path or found in $PATH, return the full path.
++ 		Note that the current directory is used when {expr} starts
++ 		with "./", which may be a problem for Vim: >
++ 			echo exepath(v:progpath)
++ < 		If {expr} cannot be found in $PATH or is not executable then
++ 		an empty string is returned.
++ 
+  							*exists()*
+  exists({expr})	The result is a Number, which is non-zero if {expr} is
+  		defined, zero otherwise.  The {expr} argument is a string,
+*** ../vim-7.4.234/src/version.c	2014-04-01 19:55:46.252787300 +0200
+--- src/version.c	2014-04-01 20:00:44.108783203 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     235,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+19. All of your friends have an @ in their names.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.236 b/SOURCES/7.4.236
new file mode 100644
index 0000000..927b043
--- /dev/null
+++ b/SOURCES/7.4.236
@@ -0,0 +1,159 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.236
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.236
+Problem:    It's not that easy to check the Vim patch version.
+Solution:   Make has("patch-7.4.123") work. (partly by Marc Weber)
+Files:	    runtime/doc/eval.txt, src/eval.c, src/testdir/test60.in,
+	    src/testdir/test60.ok
+
+
+*** ../vim-7.4.235/runtime/doc/eval.txt	2014-04-01 21:00:45.440733663 +0200
+--- runtime/doc/eval.txt	2014-04-01 21:19:52.232717888 +0200
+***************
+*** 6395,6407 ****
+      Example: >
+  	:if has("gui_running")
+  <							*has-patch*
+! 3.  Included patches.  First check |v:version| for the version of Vim.
+!     Then the "patch123" feature means that patch 123 has been included for
+!     this version.  Example (checking version 6.2.148 or later): >
+  	:if v:version > 602 || v:version == 602 && has("patch148")
+! <   Note that it's possible for patch 147 to be omitted even though 148 is
+      included.
+  
+  all_builtin_terms	Compiled with all builtin terminals enabled.
+  amiga			Amiga version of Vim.
+  arabic			Compiled with Arabic support |Arabic|.
+--- 6408,6430 ----
+      Example: >
+  	:if has("gui_running")
+  <							*has-patch*
+! 3.  Included patches.  The "patch123" feature means that patch 123 has been
+!     included.  Note that this form does not check the version of Vim, you need
+!     to inspect |v:version| for that:
+!     Example (checking version 6.2.148 or later): >
+  	:if v:version > 602 || v:version == 602 && has("patch148")
+! <    Note that it's possible for patch 147 to be omitted even though 148 is
+      included.
+  
++ 4.  Beyond a certain patch level.  The "patch-7.4.123" feature means that
++     the Vim version is 7.4 and patch 123 or later was included, or the Vim
++     version is later than 7.4.
++     The example above can be simplified to: >
++ 	:if has("patch-6.2.148")
++ <    Note that this does not check if the patch was actually included, some
++     patches may have been skipped.  That is unusual though.
++ 
++ acl			Compiled with |ACL| support.
+  all_builtin_terms	Compiled with all builtin terminals enabled.
+  amiga			Amiga version of Vim.
+  arabic			Compiled with Arabic support |Arabic|.
+*** ../vim-7.4.235/src/eval.c	2014-04-01 21:00:45.428733664 +0200
+--- src/eval.c	2014-04-01 21:50:59.084692208 +0200
+***************
+*** 12638,12644 ****
+      if (n == FALSE)
+      {
+  	if (STRNICMP(name, "patch", 5) == 0)
+! 	    n = has_patch(atoi((char *)name + 5));
+  	else if (STRICMP(name, "vim_starting") == 0)
+  	    n = (starting != 0);
+  #ifdef FEAT_MBYTE
+--- 12638,12664 ----
+      if (n == FALSE)
+      {
+  	if (STRNICMP(name, "patch", 5) == 0)
+! 	{
+! 	    if (name[5] == '-'
+! 		    && STRLEN(name) > 11
+! 		    && vim_isdigit(name[6])
+! 		    && vim_isdigit(name[8])
+! 		    && vim_isdigit(name[10]))
+! 	    {
+! 		int major = atoi((char *)name + 6);
+! 		int minor = atoi((char *)name + 8);
+! 		int patch = atoi((char *)name + 10);
+! 
+! 		/* Expect "patch-9.9.01234". */
+! 		n = (major < VIM_VERSION_MAJOR
+! 		     || (major == VIM_VERSION_MAJOR
+! 			 && (minor < VIM_VERSION_MINOR
+! 			     || (minor == VIM_VERSION_MINOR
+! 				 && patch <= highest_patch()))));
+! 	    }
+! 	    else
+! 		n = has_patch(atoi((char *)name + 5));
+! 	}
+  	else if (STRICMP(name, "vim_starting") == 0)
+  	    n = (starting != 0);
+  #ifdef FEAT_MBYTE
+*** ../vim-7.4.235/src/testdir/test60.in	2014-01-14 15:24:24.000000000 +0100
+--- src/testdir/test60.in	2014-04-01 22:01:40.256683388 +0200
+***************
+*** 1,4 ****
+! Tests for the exists() function.  vim: set ft=vim ts=8 :
+  
+  STARTTEST
+  :so small.vim
+--- 1,4 ----
+! Tests for the exists() and has() functions.  vim: set ft=vim ts=8 sw=2 :
+  
+  STARTTEST
+  :so small.vim
+***************
+*** 588,593 ****
+--- 588,603 ----
+      redir END
+  endfunction
+  :call TestExists()
++ :"
++ :function TestHas()
++   redir >> test.out
++   for pl in ['6.9.999', '7.1.999', '7.4.123', '9.1.0', '9.9.1']
++     echo 'has patch ' . pl . ': ' . has('patch-' . pl)
++   endfor
++   redir END
++ endfunc
++ :call TestHas()
++ :"
+  :delfunc TestExists
+  :delfunc RunTest
+  :delfunc TestFuncArg
+*** ../vim-7.4.235/src/testdir/test60.ok	2014-01-14 15:24:24.000000000 +0100
+--- src/testdir/test60.ok	2014-04-01 22:01:46.664683300 +0200
+***************
+*** 204,206 ****
+--- 204,211 ----
+   g:footest#x = 1
+     footest#F() 0
+  UndefFun() 0
++ has patch 6.9.999: 1
++ has patch 7.1.999: 1
++ has patch 7.4.123: 1
++ has patch 9.1.0: 0
++ has patch 9.9.1: 0
+*** ../vim-7.4.235/src/version.c	2014-04-01 21:00:45.440733663 +0200
+--- src/version.c	2014-04-01 21:22:27.964715746 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     236,
+  /**/
+
+-- 
+When a fly lands on the ceiling, does it do a half roll or
+a half loop?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.237 b/SOURCES/7.4.237
new file mode 100644
index 0000000..02f9405
--- /dev/null
+++ b/SOURCES/7.4.237
@@ -0,0 +1,127 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.237
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.237 (after 7.4.236)
+Problem:    When some patches was not included has("patch-7.4.123") may return
+	    true falsely.
+Solution:   Check for the specific patch number.
+Files:	    runtime/doc/eval.txt, src/eval.c
+
+
+*** ../vim-7.4.236/runtime/doc/eval.txt	2014-04-01 22:08:51.008677463 +0200
+--- runtime/doc/eval.txt	2014-04-02 12:09:35.991983552 +0200
+***************
+*** 1681,1687 ****
+  		is 501.  Read-only.  "version" also works, for backwards
+  		compatibility.
+  		Use |has()| to check if a certain patch was included, e.g.: >
+! 			if has("patch123")
+  <		Note that patch numbers are specific to the version, thus both
+  		version 5.0 and 5.1 may have a patch 123, but these are
+  		completely different.
+--- 1682,1688 ----
+  		is 501.  Read-only.  "version" also works, for backwards
+  		compatibility.
+  		Use |has()| to check if a certain patch was included, e.g.: >
+! 			if has("patch-7.4.123")
+  <		Note that patch numbers are specific to the version, thus both
+  		version 5.0 and 5.1 may have a patch 123, but these are
+  		completely different.
+***************
+*** 6397,6415 ****
+  <							*has-patch*
+  3.  Included patches.  The "patch123" feature means that patch 123 has been
+      included.  Note that this form does not check the version of Vim, you need
+!     to inspect |v:version| for that:
+      Example (checking version 6.2.148 or later): >
+  	:if v:version > 602 || v:version == 602 && has("patch148")
+  <    Note that it's possible for patch 147 to be omitted even though 148 is
+      included.
+  
+! 4.  Beyond a certain patch level.  The "patch-7.4.123" feature means that
+!     the Vim version is 7.4 and patch 123 or later was included, or the Vim
+!     version is later than 7.4.
+      The example above can be simplified to: >
+  	:if has("patch-6.2.148")
+! <    Note that this does not check if the patch was actually included, some
+!     patches may have been skipped.  That is unusual though.
+  
+  acl			Compiled with |ACL| support.
+  all_builtin_terms	Compiled with all builtin terminals enabled.
+--- 6410,6428 ----
+  <							*has-patch*
+  3.  Included patches.  The "patch123" feature means that patch 123 has been
+      included.  Note that this form does not check the version of Vim, you need
+!     to inspect |v:version| for that.
+      Example (checking version 6.2.148 or later): >
+  	:if v:version > 602 || v:version == 602 && has("patch148")
+  <    Note that it's possible for patch 147 to be omitted even though 148 is
+      included.
+  
+! 4.  Beyond a certain version or at a certain version and including a specific
+!     patch.  The "patch-7.4.123" feature means that the Vim version is 7.5 or
+!     later, or it is version 7.4 and patch 123 was included.
+      The example above can be simplified to: >
+  	:if has("patch-6.2.148")
+! <    Note that it's possible for patch 147 to be omitted even though 148 is
+!     included.
+  
+  acl			Compiled with |ACL| support.
+  all_builtin_terms	Compiled with all builtin terminals enabled.
+*** ../vim-7.4.236/src/eval.c	2014-04-01 22:08:51.016677463 +0200
+--- src/eval.c	2014-04-02 12:04:41.179987607 +0200
+***************
+*** 12647,12660 ****
+  	    {
+  		int major = atoi((char *)name + 6);
+  		int minor = atoi((char *)name + 8);
+- 		int patch = atoi((char *)name + 10);
+  
+  		/* Expect "patch-9.9.01234". */
+  		n = (major < VIM_VERSION_MAJOR
+  		     || (major == VIM_VERSION_MAJOR
+  			 && (minor < VIM_VERSION_MINOR
+  			     || (minor == VIM_VERSION_MINOR
+! 				 && patch <= highest_patch()))));
+  	    }
+  	    else
+  		n = has_patch(atoi((char *)name + 5));
+--- 12647,12659 ----
+  	    {
+  		int major = atoi((char *)name + 6);
+  		int minor = atoi((char *)name + 8);
+  
+  		/* Expect "patch-9.9.01234". */
+  		n = (major < VIM_VERSION_MAJOR
+  		     || (major == VIM_VERSION_MAJOR
+  			 && (minor < VIM_VERSION_MINOR
+  			     || (minor == VIM_VERSION_MINOR
+! 				 && has_patch(atoi((char *)name + 10))))));
+  	    }
+  	    else
+  		n = has_patch(atoi((char *)name + 5));
+*** ../vim-7.4.236/src/version.c	2014-04-01 22:08:51.016677463 +0200
+--- src/version.c	2014-04-02 12:10:48.911982549 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     237,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+22. You've already visited all the links at Yahoo and you're halfway through
+    Lycos.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.238 b/SOURCES/7.4.238
new file mode 100644
index 0000000..bec9098
--- /dev/null
+++ b/SOURCES/7.4.238
@@ -0,0 +1,505 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.238
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.238
+Problem:    Vim does not support the smack library.
+Solution:   Add smack support (Jose Bollo)
+Files:	    src/config.h.in, src/configure.in, src/fileio.c, src/memfile.c,
+	    src/os_unix.c, src/undo.c, src/auto/configure
+
+
+*** ../vim-7.4.237/src/config.h.in	2014-02-23 22:52:33.364764715 +0100
+--- src/config.h.in	2014-04-02 13:37:41.095910851 +0200
+***************
+*** 191,196 ****
+--- 191,197 ----
+  #undef HAVE_SIGSETJMP
+  #undef HAVE_SIGSTACK
+  #undef HAVE_SIGVEC
++ #undef HAVE_SMACK
+  #undef HAVE_STRCASECMP
+  #undef HAVE_STRERROR
+  #undef HAVE_STRFTIME
+*** ../vim-7.4.237/src/configure.in	2014-03-27 18:51:06.604760919 +0100
+--- src/configure.in	2014-04-02 13:49:36.955901004 +0200
+***************
+*** 387,406 ****
+  AC_SUBST(QUOTESED)
+  
+  
+! dnl Link with -lselinux for SELinux stuff; if not found
+! AC_MSG_CHECKING(--disable-selinux argument)
+! AC_ARG_ENABLE(selinux,
+! 	[  --disable-selinux	  Don't check for SELinux support.],
+! 	, enable_selinux="yes")
+! if test "$enable_selinux" = "yes"; then
+    AC_MSG_RESULT(no)
+!   AC_CHECK_LIB(selinux, is_selinux_enabled,
+! 	  [LIBS="$LIBS -lselinux"
+! 	   AC_DEFINE(HAVE_SELINUX)])
+  else
+     AC_MSG_RESULT(yes)
+  fi
+  
+  dnl Check user requested features.
+  
+  AC_MSG_CHECKING(--with-features argument)
+--- 387,427 ----
+  AC_SUBST(QUOTESED)
+  
+  
+! dnl Link with -lsmack for Smack stuff; if not found
+! AC_MSG_CHECKING(--disable-smack argument)
+! AC_ARG_ENABLE(smack,
+! 	[  --disable-smack	  Do not check for Smack support.],
+! 	, enable_smack="yes")
+! if test "$enable_smack" = "yes"; then
+!   AC_CHECK_HEADER([linux/xattr.h], true, enable_smack="no")
+! fi
+! if test "$enable_smack" = "yes"; then
+    AC_MSG_RESULT(no)
+!   AC_CHECK_LIB(attr, llistxattr,
+! 	  [LIBS="$LIBS -lattr"
+! 	   found_smack="yes"
+! 	   AC_DEFINE(HAVE_SMACK)])
+  else
+     AC_MSG_RESULT(yes)
+  fi
+  
++ dnl When smack was found don't search for SELinux
++ if test "x$found_smack" = "x"; then
++   dnl Link with -lselinux for SELinux stuff; if not found
++   AC_MSG_CHECKING(--disable-selinux argument)
++   AC_ARG_ENABLE(selinux,
++ 	  [  --disable-selinux	  Do not check for SELinux support.],
++ 	  , enable_selinux="yes")
++   if test "$enable_selinux" = "yes"; then
++     AC_MSG_RESULT(no)
++     AC_CHECK_LIB(selinux, is_selinux_enabled,
++ 	    [LIBS="$LIBS -lselinux"
++ 	     AC_DEFINE(HAVE_SELINUX)])
++   else
++      AC_MSG_RESULT(yes)
++   fi
++ fi
++ 
+  dnl Check user requested features.
+  
+  AC_MSG_CHECKING(--with-features argument)
+*** ../vim-7.4.237/src/fileio.c	2014-03-12 16:51:35.056792541 +0100
+--- src/fileio.c	2014-04-02 13:39:28.983909367 +0200
+***************
+*** 4030,4036 ****
+  						)
+  			    mch_setperm(backup,
+  					  (perm & 0707) | ((perm & 07) << 3));
+! # ifdef HAVE_SELINUX
+  			mch_copy_sec(fname, backup);
+  # endif
+  #endif
+--- 4030,4036 ----
+  						)
+  			    mch_setperm(backup,
+  					  (perm & 0707) | ((perm & 07) << 3));
+! # if defined(HAVE_SELINUX) || defined(HAVE_SMACK)
+  			mch_copy_sec(fname, backup);
+  # endif
+  #endif
+***************
+*** 4069,4075 ****
+  #ifdef HAVE_ACL
+  			mch_set_acl(backup, acl);
+  #endif
+! #ifdef HAVE_SELINUX
+  			mch_copy_sec(fname, backup);
+  #endif
+  			break;
+--- 4069,4075 ----
+  #ifdef HAVE_ACL
+  			mch_set_acl(backup, acl);
+  #endif
+! #if defined(HAVE_SELINUX) || defined(HAVE_SMACK)
+  			mch_copy_sec(fname, backup);
+  #endif
+  			break;
+***************
+*** 4718,4724 ****
+      }
+  #endif
+  
+! #ifdef HAVE_SELINUX
+      /* Probably need to set the security context. */
+      if (!backup_copy)
+  	mch_copy_sec(backup, wfname);
+--- 4718,4724 ----
+      }
+  #endif
+  
+! #if defined(HAVE_SELINUX) || defined(HAVE_SMACK)
+      /* Probably need to set the security context. */
+      if (!backup_copy)
+  	mch_copy_sec(backup, wfname);
+***************
+*** 6707,6713 ****
+      mch_set_acl(to, acl);
+      mch_free_acl(acl);
+  #endif
+! #ifdef HAVE_SELINUX
+      mch_copy_sec(from, to);
+  #endif
+      if (errmsg != NULL)
+--- 6707,6713 ----
+      mch_set_acl(to, acl);
+      mch_free_acl(acl);
+  #endif
+! #if defined(HAVE_SELINUX) || defined(HAVE_SMACK)
+      mch_copy_sec(from, to);
+  #endif
+      if (errmsg != NULL)
+*** ../vim-7.4.237/src/memfile.c	2013-05-23 22:22:22.000000000 +0200
+--- src/memfile.c	2014-04-02 13:37:41.103910851 +0200
+***************
+*** 1358,1364 ****
+  	if (fdflags >= 0 && (fdflags & FD_CLOEXEC) == 0)
+  	    fcntl(mfp->mf_fd, F_SETFD, fdflags | FD_CLOEXEC);
+  #endif
+! #ifdef HAVE_SELINUX
+  	mch_copy_sec(fname, mfp->mf_fname);
+  #endif
+  	mch_hide(mfp->mf_fname);    /* try setting the 'hidden' flag */
+--- 1358,1364 ----
+  	if (fdflags >= 0 && (fdflags & FD_CLOEXEC) == 0)
+  	    fcntl(mfp->mf_fd, F_SETFD, fdflags | FD_CLOEXEC);
+  #endif
+! #if defined(HAVE_SELINUX) || defined(HAVE_SMACK)
+  	mch_copy_sec(fname, mfp->mf_fname);
+  #endif
+  	mch_hide(mfp->mf_fname);    /* try setting the 'hidden' flag */
+*** ../vim-7.4.237/src/os_unix.c	2014-04-01 21:00:45.436733663 +0200
+--- src/os_unix.c	2014-04-02 13:58:55.427893322 +0200
+***************
+*** 46,51 ****
+--- 46,59 ----
+  static int selinux_enabled = -1;
+  #endif
+  
++ #ifdef HAVE_SMACK
++ # include <attr/xattr.h>
++ # include <linux/xattr.h>
++ # ifndef SMACK_LABEL_LEN
++ #  define SMACK_LABEL_LEN 1024
++ # endif
++ #endif
++ 
+  /*
+   * Use this prototype for select, some include files have a wrong prototype
+   */
+***************
+*** 2798,2803 ****
+--- 2806,2895 ----
+  }
+  #endif /* HAVE_SELINUX */
+  
++ #if defined(HAVE_SMACK) && !defined(PROTO)
++ /*
++  * Copy security info from "from_file" to "to_file".
++  */
++     void
++ mch_copy_sec(from_file, to_file)
++     char_u	*from_file;
++     char_u	*to_file;
++ {
++     static const char const *smack_copied_attributes[] =
++ 	{
++ 	    XATTR_NAME_SMACK,
++ 	    XATTR_NAME_SMACKEXEC,
++ 	    XATTR_NAME_SMACKMMAP
++ 	};
++ 
++     char	buffer[SMACK_LABEL_LEN];
++     const char	*name;
++     int		index;
++     int		ret;
++     ssize_t	size;
++ 
++     if (from_file == NULL)
++ 	return;
++ 
++     for (index = 0 ; index < (int)(sizeof(smack_copied_attributes)
++ 			      / sizeof(smack_copied_attributes)[0]) ; index++)
++     {
++ 	/* get the name of the attribute to copy */
++ 	name = smack_copied_attributes[index];
++ 
++ 	/* get the value of the attribute in buffer */
++ 	size = getxattr((char*)from_file, name, buffer, sizeof(buffer));
++ 	if (size >= 0)
++ 	{
++ 	    /* copy the attribute value of buffer */
++ 	    ret = setxattr((char*)to_file, name, buffer, (size_t)size, 0);
++ 	    if (ret < 0)
++ 	    {
++ 		MSG_PUTS(_("Could not set security context "));
++ 		MSG_PUTS(name);
++ 		MSG_PUTS(_(" for "));
++ 		msg_outtrans(to_file);
++ 		msg_putchar('\n');
++ 	    }
++ 	}
++ 	else
++ 	{
++ 	    /* what reason of not having the attribute value? */
++ 	    switch (errno)
++ 	    {
++ 		case ENOTSUP:
++ 		    /* extended attributes aren't supported or enabled */
++ 		    /* should a message be echoed? not sure... */
++ 		    return; /* leave because it isn't usefull to continue */
++ 
++ 		case ERANGE:
++ 		default:
++ 		    /* no enough size OR unexpected error */
++ 		    MSG_PUTS(_("Could not get security context "));
++ 		    MSG_PUTS(name);
++ 		    MSG_PUTS(_(" for "));
++ 		    msg_outtrans(from_file);
++ 		    MSG_PUTS(_(". Removing it!\n"));
++ 		    /* FALLTHROUGH to remove the attribute */
++ 
++ 		case ENODATA:
++ 		    /* no attribute of this name */
++ 		    ret = removexattr((char*)to_file, name);
++ 		    if (ret < 0 && errno != ENODATA)
++ 		    {
++ 			MSG_PUTS(_("Could not remove security context "));
++ 			MSG_PUTS(name);
++ 			MSG_PUTS(_(" for "));
++ 			msg_outtrans(to_file);
++ 			msg_putchar('\n');
++ 		    }
++ 		    break;
++ 	    }
++ 	}
++     }
++ }
++ #endif /* HAVE_SMACK */
++ 
+  /*
+   * Return a pointer to the ACL of file "fname" in allocated memory.
+   * Return NULL if the ACL is not available for whatever reason.
+*** ../vim-7.4.237/src/undo.c	2014-03-23 15:12:29.943264337 +0100
+--- src/undo.c	2014-04-02 13:42:15.387907078 +0200
+***************
+*** 1455,1461 ****
+  # endif
+         )
+  	mch_setperm(file_name, (perm & 0707) | ((perm & 07) << 3));
+! # ifdef HAVE_SELINUX
+      if (buf->b_ffname != NULL)
+  	mch_copy_sec(buf->b_ffname, file_name);
+  # endif
+--- 1455,1461 ----
+  # endif
+         )
+  	mch_setperm(file_name, (perm & 0707) | ((perm & 07) << 3));
+! # if defined(HAVE_SELINUX) || defined(HAVE_SMACK)
+      if (buf->b_ffname != NULL)
+  	mch_copy_sec(buf->b_ffname, file_name);
+  # endif
+*** ../vim-7.4.237/src/auto/configure	2014-03-27 18:51:06.612760919 +0100
+--- src/auto/configure	2014-04-02 13:50:11.375900531 +0200
+***************
+*** 782,787 ****
+--- 782,788 ----
+  with_view_name
+  with_global_runtime
+  with_modified_by
++ enable_smack
+  enable_selinux
+  with_features
+  with_compiledby
+***************
+*** 1453,1459 ****
+    --enable-fail-if-missing    Fail if dependencies on additional features
+       specified on the command line are missing.
+    --disable-darwin        Disable Darwin (Mac OS X) support.
+!   --disable-selinux	  Don't check for SELinux support.
+    --disable-xsmp          Disable XSMP session management
+    --disable-xsmp-interact Disable XSMP interaction
+    --enable-luainterp=OPTS     Include Lua interpreter.  default=no OPTS=no/yes/dynamic
+--- 1454,1461 ----
+    --enable-fail-if-missing    Fail if dependencies on additional features
+       specified on the command line are missing.
+    --disable-darwin        Disable Darwin (Mac OS X) support.
+!   --disable-smack	  Do not check for Smack support.
+!   --disable-selinux	  Do not check for SELinux support.
+    --disable-xsmp          Disable XSMP session management
+    --disable-xsmp-interact Disable XSMP interaction
+    --enable-luainterp=OPTS     Include Lua interpreter.  default=no OPTS=no/yes/dynamic
+***************
+*** 4588,4606 ****
+  
+  
+  
+! { $as_echo "$as_me:${as_lineno-$LINENO}: checking --disable-selinux argument" >&5
+  $as_echo_n "checking --disable-selinux argument... " >&6; }
+! # Check whether --enable-selinux was given.
+  if test "${enable_selinux+set}" = set; then :
+    enableval=$enable_selinux;
+  else
+    enable_selinux="yes"
+  fi
+  
+! if test "$enable_selinux" = "yes"; then
+!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+  $as_echo "no" >&6; }
+!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for is_selinux_enabled in -lselinux" >&5
+  $as_echo_n "checking for is_selinux_enabled in -lselinux... " >&6; }
+  if ${ac_cv_lib_selinux_is_selinux_enabled+:} false; then :
+    $as_echo_n "(cached) " >&6
+--- 4590,4679 ----
+  
+  
+  
+! { $as_echo "$as_me:${as_lineno-$LINENO}: checking --disable-smack argument" >&5
+! $as_echo_n "checking --disable-smack argument... " >&6; }
+! # Check whether --enable-smack was given.
+! if test "${enable_smack+set}" = set; then :
+!   enableval=$enable_smack;
+! else
+!   enable_smack="yes"
+! fi
+! 
+! if test "$enable_smack" = "yes"; then
+!   ac_fn_c_check_header_mongrel "$LINENO" "linux/xattr.h" "ac_cv_header_linux_xattr_h" "$ac_includes_default"
+! if test "x$ac_cv_header_linux_xattr_h" = xyes; then :
+!   true
+! else
+!   enable_smack="no"
+! fi
+! 
+! 
+! fi
+! if test "$enable_smack" = "yes"; then
+!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+! $as_echo "no" >&6; }
+!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for llistxattr in -lattr" >&5
+! $as_echo_n "checking for llistxattr in -lattr... " >&6; }
+! if ${ac_cv_lib_attr_llistxattr+:} false; then :
+!   $as_echo_n "(cached) " >&6
+! else
+!   ac_check_lib_save_LIBS=$LIBS
+! LIBS="-lattr  $LIBS"
+! cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+! /* end confdefs.h.  */
+! 
+! /* Override any GCC internal prototype to avoid an error.
+!    Use char because int might match the return type of a GCC
+!    builtin and then its argument prototype would still apply.  */
+! #ifdef __cplusplus
+! extern "C"
+! #endif
+! char llistxattr ();
+! int
+! main ()
+! {
+! return llistxattr ();
+!   ;
+!   return 0;
+! }
+! _ACEOF
+! if ac_fn_c_try_link "$LINENO"; then :
+!   ac_cv_lib_attr_llistxattr=yes
+! else
+!   ac_cv_lib_attr_llistxattr=no
+! fi
+! rm -f core conftest.err conftest.$ac_objext \
+!     conftest$ac_exeext conftest.$ac_ext
+! LIBS=$ac_check_lib_save_LIBS
+! fi
+! { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_attr_llistxattr" >&5
+! $as_echo "$ac_cv_lib_attr_llistxattr" >&6; }
+! if test "x$ac_cv_lib_attr_llistxattr" = xyes; then :
+!   LIBS="$LIBS -lattr"
+! 	   found_smack="yes"
+! 	   $as_echo "#define HAVE_SMACK 1" >>confdefs.h
+! 
+! fi
+! 
+! else
+!    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+! $as_echo "yes" >&6; }
+! fi
+! 
+! if test "x$found_smack" = "x"; then
+!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking --disable-selinux argument" >&5
+  $as_echo_n "checking --disable-selinux argument... " >&6; }
+!   # Check whether --enable-selinux was given.
+  if test "${enable_selinux+set}" = set; then :
+    enableval=$enable_selinux;
+  else
+    enable_selinux="yes"
+  fi
+  
+!   if test "$enable_selinux" = "yes"; then
+!     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+  $as_echo "no" >&6; }
+!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for is_selinux_enabled in -lselinux" >&5
+  $as_echo_n "checking for is_selinux_enabled in -lselinux... " >&6; }
+  if ${ac_cv_lib_selinux_is_selinux_enabled+:} false; then :
+    $as_echo_n "(cached) " >&6
+***************
+*** 4638,4650 ****
+  $as_echo "$ac_cv_lib_selinux_is_selinux_enabled" >&6; }
+  if test "x$ac_cv_lib_selinux_is_selinux_enabled" = xyes; then :
+    LIBS="$LIBS -lselinux"
+! 	   $as_echo "#define HAVE_SELINUX 1" >>confdefs.h
+  
+  fi
+  
+! else
+!    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+  $as_echo "yes" >&6; }
+  fi
+  
+  
+--- 4711,4724 ----
+  $as_echo "$ac_cv_lib_selinux_is_selinux_enabled" >&6; }
+  if test "x$ac_cv_lib_selinux_is_selinux_enabled" = xyes; then :
+    LIBS="$LIBS -lselinux"
+! 	     $as_echo "#define HAVE_SELINUX 1" >>confdefs.h
+  
+  fi
+  
+!   else
+!      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+  $as_echo "yes" >&6; }
++   fi
+  fi
+  
+  
+*** ../vim-7.4.237/src/version.c	2014-04-02 12:12:04.163981514 +0200
+--- src/version.c	2014-04-02 13:38:22.511910282 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     238,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+25. You believe nothing looks sexier than a man in boxer shorts illuminated
+    only by a 17" inch svga monitor.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.239 b/SOURCES/7.4.239
new file mode 100644
index 0000000..5943d69
--- /dev/null
+++ b/SOURCES/7.4.239
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.239
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.239
+Problem:    ":e +" does not position cursor at end of the file.
+Solution:   Check for "+" being the last character (ZyX)
+Files:	    src/ex_docmd.c
+
+
+*** ../vim-7.4.238/src/ex_docmd.c	2014-04-01 18:54:44.312837673 +0200
+--- src/ex_docmd.c	2014-04-02 14:18:02.247877546 +0200
+***************
+*** 4841,4847 ****
+      if (*arg == '+')	    /* +[command] */
+      {
+  	++arg;
+! 	if (vim_isspace(*arg))
+  	    command = dollar_command;
+  	else
+  	{
+--- 4841,4847 ----
+      if (*arg == '+')	    /* +[command] */
+      {
+  	++arg;
+! 	if (vim_isspace(*arg) || *arg == NUL)
+  	    command = dollar_command;
+  	else
+  	{
+*** ../vim-7.4.238/src/version.c	2014-04-02 14:05:34.003887839 +0200
+--- src/version.c	2014-04-02 14:17:40.923877840 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     239,
+  /**/
+
+-- 
+Q: What is the difference betwee open-source and commercial software?
+A: If you have a problem with commercial software you can call a phone
+   number and they will tell you it might be solved in a future version.
+   For open-source software there isn't a phone number to call, but you
+   get the solution within a day.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.240 b/SOURCES/7.4.240
new file mode 100644
index 0000000..e51e2e6
--- /dev/null
+++ b/SOURCES/7.4.240
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.240
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.240
+Problem:    ":tjump" shows "\n" as "\\n".
+Solution:   Skip over "\" that escapes a backslash. (Gary Johnson)
+Files:	    src/tag.c
+
+
+*** ../vim-7.4.239/src/tag.c	2013-11-28 14:36:24.000000000 +0100
+--- src/tag.c	2014-04-02 17:14:27.087731943 +0200
+***************
+*** 741,748 ****
+  			    break;
+  			msg_advance(15);
+  
+! 			/* skip backslash used for escaping command char */
+! 			if (*p == '\\' && *(p + 1) == *tagp.command)
+  			    ++p;
+  
+  			if (*p == TAB)
+--- 741,750 ----
+  			    break;
+  			msg_advance(15);
+  
+! 			/* skip backslash used for escaping a command char or
+! 			 * a backslash */
+! 			if (*p == '\\' && (*(p + 1) == *tagp.command
+! 				        || *(p + 1) == '\\'))
+  			    ++p;
+  
+  			if (*p == TAB)
+*** ../vim-7.4.239/src/version.c	2014-04-02 14:22:00.123874274 +0200
+--- src/version.c	2014-04-02 17:15:26.395731128 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     240,
+  /**/
+
+-- 
+Anyone who is capable of getting themselves made President should on no
+account be allowed to do the job.
+		-- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.242 b/SOURCES/7.4.242
new file mode 100644
index 0000000..5076878
--- /dev/null
+++ b/SOURCES/7.4.242
@@ -0,0 +1,520 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.242
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.242
+Problem:    getreg() does not distinguish between a NL used for a line break
+	    and a NL used for a NUL character.
+Solution:   Add another argument to return a list. (ZyX)
+Files:	    runtime/doc/eval.txt, src/eval.c src/ops.c, src/proto/ops.pro,
+	    src/vim.h, src/Makefile, src/testdir/test_eval.in,
+	    src/testdir/test_eval.ok, src/testdir/Make_amiga.mak,
+	    src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+	    src/testdir/Make_os2.mak, src/testdir/Make_vms.mms
+
+
+*** ../vim-7.4.241/runtime/doc/eval.txt	2014-04-02 19:00:53.035644100 +0200
+--- runtime/doc/eval.txt	2014-04-02 19:15:31.847632011 +0200
+***************
+*** 1818,1824 ****
+  getpid()			Number	process ID of Vim
+  getpos( {expr})			List	position of cursor, mark, etc.
+  getqflist()			List	list of quickfix items
+! getreg( [{regname} [, 1]])	String	contents of register
+  getregtype( [{regname}])	String	type of register
+  gettabvar( {nr}, {varname} [, {def}])
+  				any	variable {varname} in tab {nr} or {def}
+--- 1819,1826 ----
+  getpid()			Number	process ID of Vim
+  getpos( {expr})			List	position of cursor, mark, etc.
+  getqflist()			List	list of quickfix items
+! getreg( [{regname} [, 1 [, {list}]]])
+! 				String or List   contents of register
+  getregtype( [{regname}])	String	type of register
+  gettabvar( {nr}, {varname} [, {def}])
+  				any	variable {varname} in tab {nr} or {def}
+***************
+*** 3466,3472 ****
+  			:endfor
+  
+  
+! getreg([{regname} [, 1]])				*getreg()*
+  		The result is a String, which is the contents of register
+  		{regname}.  Example: >
+  			:let cliptext = getreg('*')
+--- 3468,3474 ----
+  			:endfor
+  
+  
+! getreg([{regname} [, 1 [, {list}]]])			*getreg()*
+  		The result is a String, which is the contents of register
+  		{regname}.  Example: >
+  			:let cliptext = getreg('*')
+***************
+*** 3475,3480 ****
+--- 3477,3487 ----
+  		getreg('=', 1) returns the expression itself, so that it can
+  		be restored with |setreg()|.  For other registers the extra
+  		argument is ignored, thus you can always give it.
++ 		If {list} is present and non-zero result type is changed to 
++ 		|List|. Each list item is one text line. Use it if you care
++ 		about zero bytes possibly present inside register: without
++ 		third argument both NLs and zero bytes are represented as NLs
++ 		(see |NL-used-for-Nul|).
+  		If {regname} is not specified, |v:register| is used.
+  
+  
+*** ../vim-7.4.241/src/eval.c	2014-04-02 19:00:53.043644100 +0200
+--- src/eval.c	2014-04-02 19:35:54.919615187 +0200
+***************
+*** 2458,2464 ****
+  	    p = get_tv_string_chk(tv);
+  	    if (p != NULL && op != NULL && *op == '.')
+  	    {
+! 		s = get_reg_contents(*arg == '@' ? '"' : *arg, TRUE, TRUE);
+  		if (s != NULL)
+  		{
+  		    p = ptofree = concat_str(s, p);
+--- 2458,2464 ----
+  	    p = get_tv_string_chk(tv);
+  	    if (p != NULL && op != NULL && *op == '.')
+  	    {
+! 		s = get_reg_contents(*arg == '@' ? '"' : *arg, GREG_EXPR_SRC);
+  		if (s != NULL)
+  		{
+  		    p = ptofree = concat_str(s, p);
+***************
+*** 5121,5127 ****
+  		if (evaluate)
+  		{
+  		    rettv->v_type = VAR_STRING;
+! 		    rettv->vval.v_string = get_reg_contents(**arg, TRUE, TRUE);
+  		}
+  		if (**arg != NUL)
+  		    ++*arg;
+--- 5121,5128 ----
+  		if (evaluate)
+  		{
+  		    rettv->v_type = VAR_STRING;
+! 		    rettv->vval.v_string = get_reg_contents(**arg,
+! 							    GREG_EXPR_SRC);
+  		}
+  		if (**arg != NUL)
+  		    ++*arg;
+***************
+*** 7970,7976 ****
+      {"getpid",		0, 0, f_getpid},
+      {"getpos",		1, 1, f_getpos},
+      {"getqflist",	0, 0, f_getqflist},
+!     {"getreg",		0, 2, f_getreg},
+      {"getregtype",	0, 1, f_getregtype},
+      {"gettabvar",	2, 3, f_gettabvar},
+      {"gettabwinvar",	3, 4, f_gettabwinvar},
+--- 7971,7977 ----
+      {"getpid",		0, 0, f_getpid},
+      {"getpos",		1, 1, f_getpos},
+      {"getqflist",	0, 0, f_getqflist},
+!     {"getreg",		0, 3, f_getreg},
+      {"getregtype",	0, 1, f_getregtype},
+      {"gettabvar",	2, 3, f_gettabvar},
+      {"gettabwinvar",	3, 4, f_gettabwinvar},
+***************
+*** 11799,11804 ****
+--- 11800,11806 ----
+      char_u	*strregname;
+      int		regname;
+      int		arg2 = FALSE;
++     int		return_list = FALSE;
+      int		error = FALSE;
+  
+      if (argvars[0].v_type != VAR_UNKNOWN)
+***************
+*** 11806,11822 ****
+  	strregname = get_tv_string_chk(&argvars[0]);
+  	error = strregname == NULL;
+  	if (argvars[1].v_type != VAR_UNKNOWN)
+  	    arg2 = get_tv_number_chk(&argvars[1], &error);
+      }
+      else
+  	strregname = vimvars[VV_REG].vv_str;
+      regname = (strregname == NULL ? '"' : *strregname);
+      if (regname == 0)
+  	regname = '"';
+  
+!     rettv->v_type = VAR_STRING;
+!     rettv->vval.v_string = error ? NULL :
+! 				    get_reg_contents(regname, TRUE, arg2);
+  }
+  
+  /*
+--- 11808,11841 ----
+  	strregname = get_tv_string_chk(&argvars[0]);
+  	error = strregname == NULL;
+  	if (argvars[1].v_type != VAR_UNKNOWN)
++ 	{
+  	    arg2 = get_tv_number_chk(&argvars[1], &error);
++ 	    if (!error && argvars[2].v_type != VAR_UNKNOWN)
++ 		return_list = get_tv_number_chk(&argvars[2], &error);
++ 	}
+      }
+      else
+  	strregname = vimvars[VV_REG].vv_str;
++ 
++     if (error)
++ 	return;
++ 
+      regname = (strregname == NULL ? '"' : *strregname);
+      if (regname == 0)
+  	regname = '"';
+  
+!     if (return_list)
+!     {
+! 	rettv->v_type = VAR_LIST;
+! 	rettv->vval.v_list = (list_T *)get_reg_contents(regname,
+! 				      (arg2 ? GREG_EXPR_SRC : 0) | GREG_LIST);
+!     }
+!     else
+!     {
+! 	rettv->v_type = VAR_STRING;
+! 	rettv->vval.v_string = get_reg_contents(regname,
+! 						    arg2 ? GREG_EXPR_SRC : 0);
+!     }
+  }
+  
+  /*
+***************
+*** 17891,17899 ****
+      typval_T	*rettv;
+  {
+      int		error = FALSE;
+-     char_u	**match;
+-     char_u	**s;
+-     listitem_T	*li;
+      int		no;
+      int		retList = 0;
+  
+--- 17910,17915 ----
+*** ../vim-7.4.241/src/ops.c	2014-03-23 15:12:29.931264336 +0100
+--- src/ops.c	2014-04-02 19:36:08.831614995 +0200
+***************
+*** 6166,6181 ****
+      return MAUTO;
+  }
+  
+  /*
+   * Return the contents of a register as a single allocated string.
+   * Used for "@r" in expressions and for getreg().
+   * Returns NULL for error.
+   */
+      char_u *
+! get_reg_contents(regname, allowexpr, expr_src)
+      int		regname;
+!     int		allowexpr;	/* allow "=" register */
+!     int		expr_src;	/* get expression for "=" register */
+  {
+      long	i;
+      char_u	*retval;
+--- 6166,6214 ----
+      return MAUTO;
+  }
+  
++ static char_u *getreg_wrap_one_line __ARGS((char_u *s, int flags));
++ 
++ /*
++  * When "flags" has GREG_LIST return a list with text "s".
++  * Otherwise just return "s".
++  */
++     static char_u *
++ getreg_wrap_one_line(s, flags)
++     char_u	*s;
++     int		flags;
++ {
++     if (flags & GREG_LIST)
++     {
++ 	list_T *list = list_alloc();
++ 
++ 	if (list != NULL)
++ 	{
++ 	    if (list_append_string(list, NULL, -1) == FAIL)
++ 	    {
++ 		list_free(list, TRUE);
++ 		return NULL;
++ 	    }
++ 	    list->lv_first->li_tv.vval.v_string = s;
++ 	}
++ 	return (char_u *)list;
++     }
++     return s;
++ }
++ 
+  /*
+   * Return the contents of a register as a single allocated string.
+   * Used for "@r" in expressions and for getreg().
+   * Returns NULL for error.
++  * Flags:
++  *	GREG_NO_EXPR	Do not allow expression register
++  *	GREG_EXPR_SRC	For the expression register: return expression itself,
++  *			not the result of its evaluation.
++  *	GREG_LIST	Return a list of lines in place of a single string.
+   */
+      char_u *
+! get_reg_contents(regname, flags)
+      int		regname;
+!     int		flags;
+  {
+      long	i;
+      char_u	*retval;
+***************
+*** 6185,6197 ****
+      /* Don't allow using an expression register inside an expression */
+      if (regname == '=')
+      {
+! 	if (allowexpr)
+! 	{
+! 	    if (expr_src)
+! 		return get_expr_line_src();
+! 	    return get_expr_line();
+! 	}
+! 	return NULL;
+      }
+  
+      if (regname == '@')	    /* "@@" is used for unnamed register */
+--- 6218,6228 ----
+      /* Don't allow using an expression register inside an expression */
+      if (regname == '=')
+      {
+! 	if (flags & GREG_NO_EXPR)
+! 	    return NULL;
+! 	if (flags & GREG_EXPR_SRC)
+! 	    return getreg_wrap_one_line(get_expr_line_src(), flags);
+! 	return getreg_wrap_one_line(get_expr_line(), flags);
+      }
+  
+      if (regname == '@')	    /* "@@" is used for unnamed register */
+***************
+*** 6209,6223 ****
+      {
+  	if (retval == NULL)
+  	    return NULL;
+! 	if (!allocated)
+! 	    retval = vim_strsave(retval);
+! 	return retval;
+      }
+  
+      get_yank_register(regname, FALSE);
+      if (y_current->y_array == NULL)
+  	return NULL;
+  
+      /*
+       * Compute length of resulting string.
+       */
+--- 6240,6272 ----
+      {
+  	if (retval == NULL)
+  	    return NULL;
+! 	if (allocated)
+! 	    return getreg_wrap_one_line(retval, flags);
+! 	return getreg_wrap_one_line(vim_strsave(retval), flags);
+      }
+  
+      get_yank_register(regname, FALSE);
+      if (y_current->y_array == NULL)
+  	return NULL;
+  
++     if (flags & GREG_LIST)
++     {
++ 	list_T	*list = list_alloc();
++ 	int	error = FALSE;
++ 
++ 	if (list == NULL)
++ 	    return NULL;
++ 	for (i = 0; i < y_current->y_size; ++i)
++ 	    if (list_append_string(list, y_current->y_array[i], -1) == FAIL)
++ 		error = TRUE;
++ 	if (error)
++ 	{
++ 	    list_free(list, TRUE);
++ 	    return NULL;
++ 	}
++ 	return (char_u *)list;
++     }
++ 
+      /*
+       * Compute length of resulting string.
+       */
+*** ../vim-7.4.241/src/proto/ops.pro	2013-08-10 13:37:22.000000000 +0200
+--- src/proto/ops.pro	2014-04-02 19:17:22.407630490 +0200
+***************
+*** 53,59 ****
+  int clip_convert_selection __ARGS((char_u **str, long_u *len, VimClipboard *cbd));
+  void dnd_yank_drag_data __ARGS((char_u *str, long len));
+  char_u get_reg_type __ARGS((int regname, long *reglen));
+! char_u *get_reg_contents __ARGS((int regname, int allowexpr, int expr_src));
+  void write_reg_contents __ARGS((int name, char_u *str, int maxlen, int must_append));
+  void write_reg_contents_ex __ARGS((int name, char_u *str, int maxlen, int must_append, int yank_type, long block_len));
+  void clear_oparg __ARGS((oparg_T *oap));
+--- 53,59 ----
+  int clip_convert_selection __ARGS((char_u **str, long_u *len, VimClipboard *cbd));
+  void dnd_yank_drag_data __ARGS((char_u *str, long len));
+  char_u get_reg_type __ARGS((int regname, long *reglen));
+! char_u *get_reg_contents __ARGS((int regname, int flags));
+  void write_reg_contents __ARGS((int name, char_u *str, int maxlen, int must_append));
+  void write_reg_contents_ex __ARGS((int name, char_u *str, int maxlen, int must_append, int yank_type, long block_len));
+  void clear_oparg __ARGS((oparg_T *oap));
+*** ../vim-7.4.241/src/vim.h	2014-04-01 19:55:46.252787300 +0200
+--- src/vim.h	2014-04-02 19:17:22.407630490 +0200
+***************
+*** 2259,2264 ****
+--- 2259,2269 ----
+  #define SREQ_WIN	1	/* Request window-local option */
+  #define SREQ_BUF	2	/* Request buffer-local option */
+  
++ /* Flags for get_reg_contents */
++ #define GREG_NO_EXPR	1	/* Do not allow expression register */
++ #define GREG_EXPR_SRC	2	/* Return expression itself for "=" register */
++ #define GREG_LIST	4	/* Return list */
++ 
+  /* Character used as separated in autoload function/variable names. */
+  #define AUTOLOAD_CHAR '#'
+  
+*** ../vim-7.4.241/src/Makefile	2014-04-01 14:08:14.685074130 +0200
+--- src/Makefile	2014-04-02 19:42:21.931609863 +0200
+***************
+*** 1880,1885 ****
+--- 1880,1886 ----
+  
+  # Run individual test, assuming that Vim was already compiled.
+  test1 test2 test3 test4 test5 test6 test7 test8 test9 \
++ 	test_eval \
+  	test_options \
+  	test10 test11 test12 test13 test14 test15 test16 test17 test18 test19 \
+  	test20 test21 test22 test23 test24 test25 test26 test27 test28 test29 \
+*** ../vim-7.4.241/src/testdir/test_eval.in	2014-04-02 19:51:32.391602291 +0200
+--- src/testdir/test_eval.in	2014-04-02 19:47:13.607605851 +0200
+***************
+*** 0 ****
+--- 1,21 ----
++ Test for various eval features.
++ 
++ STARTTEST
++ :so small.vim
++ :"
++ :" test getreg()
++ /^one
++ "ay3j:$put =string(getreg('a'))
++ :$put =string(getreg('a', 1, 1))
++ :"
++ :/^result/,$w! test.out
++ :qa!
++ ENDTEST
++ 
++ one
++ two
++ three
++ four
++ five
++ 
++ result
+*** ../vim-7.4.241/src/testdir/test_eval.ok	2014-04-02 19:51:32.399602291 +0200
+--- src/testdir/test_eval.ok	2014-04-02 19:48:51.595604503 +0200
+***************
+*** 0 ****
+--- 1,7 ----
++ result
++ 'one
++ two
++ three
++ four
++ '
++ ['one', 'two', 'three', 'four']
+*** ../vim-7.4.241/src/testdir/Make_amiga.mak	2014-04-01 14:08:14.685074130 +0200
+--- src/testdir/Make_amiga.mak	2014-04-02 19:41:24.331610655 +0200
+***************
+*** 36,41 ****
+--- 36,42 ----
+  		test94.out test95.out test96.out test97.out test98.out \
+  		test99.out test100.out test101.out test102.out test103.out \
+  		test104.out test105.out test106.out \
++ 		test_eval.out \
+  		test_options.out
+  
+  .SUFFIXES: .in .out
+***************
+*** 159,162 ****
+--- 160,164 ----
+  test104.out: test104.in
+  test105.out: test105.in
+  test106.out: test106.in
++ test_eval.out: test_eval.in
+  test_options.out: test_options.in
+*** ../vim-7.4.241/src/testdir/Make_dos.mak	2014-04-01 14:08:14.685074130 +0200
+--- src/testdir/Make_dos.mak	2014-04-02 19:41:34.419610516 +0200
+***************
+*** 35,40 ****
+--- 35,41 ----
+  		test94.out test95.out test96.out test98.out test99.out \
+  		test100.out test101.out test102.out test103.out test104.out \
+  		test105.out test106.out \
++ 		test_eval.out \
+  		test_options.out
+  
+  SCRIPTS32 =	test50.out test70.out
+*** ../vim-7.4.241/src/testdir/Make_ming.mak	2014-04-01 14:08:14.685074130 +0200
+--- src/testdir/Make_ming.mak	2014-04-02 19:41:43.131610397 +0200
+***************
+*** 55,60 ****
+--- 55,61 ----
+  		test94.out test95.out test96.out test98.out test99.out \
+  		test100.out test101.out test102.out test103.out test104.out \
+  		test105.out test106.out \
++ 		test_eval.out \
+  		test_options.out
+  
+  SCRIPTS32 =	test50.out test70.out
+*** ../vim-7.4.241/src/testdir/Make_os2.mak	2014-04-01 14:08:14.685074130 +0200
+--- src/testdir/Make_os2.mak	2014-04-02 19:41:50.659610293 +0200
+***************
+*** 37,42 ****
+--- 37,43 ----
+  		test94.out test95.out test96.out test98.out test99.out \
+  		test100.out test101.out test102.out test103.out test104.out \
+  		test105.out test106.out \
++ 		test_eval.out \
+  		test_options.out
+  
+  .SUFFIXES: .in .out
+*** ../vim-7.4.241/src/testdir/Make_vms.mms	2014-04-01 14:08:14.689074130 +0200
+--- src/testdir/Make_vms.mms	2014-04-02 19:41:58.971610179 +0200
+***************
+*** 96,101 ****
+--- 96,102 ----
+  	 test95.out test96.out test98.out test99.out \
+  	 test100.out test101.out test103.out test104.out \
+  	 test105.out test106.out \
++ 	 test_eval.out \
+  	 test_options.out
+  
+  # Known problems:
+*** ../vim-7.4.241/src/version.c	2014-04-02 19:00:53.047644099 +0200
+--- src/version.c	2014-04-02 19:46:41.867606287 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     242,
+  /**/
+
+-- 
+Don't Panic!
+		-- The Hitchhiker's Guide to the Galaxy
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.244 b/SOURCES/7.4.244
new file mode 100644
index 0000000..448edfa
--- /dev/null
+++ b/SOURCES/7.4.244
@@ -0,0 +1,60 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.244
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.244 (after 7.4.238)
+Problem:    The smack feature causes stray error messages.
+Solution:   Remove the error messages.
+Files:      src/os_unix.c
+
+
+*** ../vim-7.4.243/src/os_unix.c	2014-04-02 14:05:33.999887839 +0200
+--- src/os_unix.c	2014-04-02 23:08:25.967439786 +0200
+***************
+*** 2875,2888 ****
+  		case ENODATA:
+  		    /* no attribute of this name */
+  		    ret = removexattr((char*)to_file, name);
+! 		    if (ret < 0 && errno != ENODATA)
+! 		    {
+! 			MSG_PUTS(_("Could not remove security context "));
+! 			MSG_PUTS(name);
+! 			MSG_PUTS(_(" for "));
+! 			msg_outtrans(to_file);
+! 			msg_putchar('\n');
+! 		    }
+  		    break;
+  	    }
+  	}
+--- 2875,2882 ----
+  		case ENODATA:
+  		    /* no attribute of this name */
+  		    ret = removexattr((char*)to_file, name);
+! 		    /* Silently ignore errors, apparently this happens when
+! 		     * smack is not actually being used. */
+  		    break;
+  	    }
+  	}
+*** ../vim-7.4.243/src/version.c	2014-04-02 22:17:00.007482236 +0200
+--- src/version.c	2014-04-02 23:07:36.067440472 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     244,
+  /**/
+
+-- 
+How To Keep A Healthy Level Of Insanity:
+2. Page yourself over the intercom. Don't disguise your voice.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.245 b/SOURCES/7.4.245
new file mode 100644
index 0000000..83ca6a4
--- /dev/null
+++ b/SOURCES/7.4.245
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.245
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.245
+Problem:    Crash for "vim -u NONE -N  -c '&&'".
+Solution:   Check for the pattern to be NULL. (Dominique Pelle)
+Files:	    src/ex_cmds.c
+
+
+*** ../vim-7.4.244/src/ex_cmds.c	2014-04-01 17:49:40.136891378 +0200
+--- src/ex_cmds.c	2014-04-04 18:56:00.159939544 +0200
+***************
+*** 4425,4431 ****
+       * TODO: find a generic solution to make line-joining operations more
+       * efficient, avoid allocating a string that grows in size.
+       */
+!     if (STRCMP(pat, "\\n") == 0 && STRLEN(pat) == 2
+  	    && *sub == NUL
+  	    && (*cmd == NUL || (cmd[1] == NUL && (*cmd == 'g' || *cmd == 'l'
+  					     || *cmd == 'p' || *cmd == '#'))))
+--- 4425,4431 ----
+       * TODO: find a generic solution to make line-joining operations more
+       * efficient, avoid allocating a string that grows in size.
+       */
+!     if (pat != NULL && STRCMP(pat, "\\n") == 0
+  	    && *sub == NUL
+  	    && (*cmd == NUL || (cmd[1] == NUL && (*cmd == 'g' || *cmd == 'l'
+  					     || *cmd == 'p' || *cmd == '#'))))
+*** ../vim-7.4.244/src/version.c	2014-04-02 23:09:23.003439001 +0200
+--- src/version.c	2014-04-04 18:52:21.519939067 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     245,
+  /**/
+
+-- 
+One difference between a man and a machine is that a machine is quiet
+when well oiled.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.246 b/SOURCES/7.4.246
new file mode 100644
index 0000000..0ac7afa
--- /dev/null
+++ b/SOURCES/7.4.246
@@ -0,0 +1,121 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.246
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.246
+Problem:    Configure message for detecting smack are out of sequence.
+Solution:   Put the messages in the right place. (Kazunobu Kuriyama)
+Files:	    src/configure.in, src/auto/configure
+
+
+*** ../vim-7.4.245/src/configure.in	2014-04-02 14:05:33.999887839 +0200
+--- src/configure.in	2014-04-05 11:56:33.807099380 +0200
+***************
+*** 393,408 ****
+  	[  --disable-smack	  Do not check for Smack support.],
+  	, enable_smack="yes")
+  if test "$enable_smack" = "yes"; then
+    AC_CHECK_HEADER([linux/xattr.h], true, enable_smack="no")
+  fi
+  if test "$enable_smack" = "yes"; then
+-   AC_MSG_RESULT(no)
+    AC_CHECK_LIB(attr, llistxattr,
+  	  [LIBS="$LIBS -lattr"
+  	   found_smack="yes"
+  	   AC_DEFINE(HAVE_SMACK)])
+- else
+-    AC_MSG_RESULT(yes)
+  fi
+  
+  dnl When smack was found don't search for SELinux
+--- 393,408 ----
+  	[  --disable-smack	  Do not check for Smack support.],
+  	, enable_smack="yes")
+  if test "$enable_smack" = "yes"; then
++   AC_MSG_RESULT(no)
+    AC_CHECK_HEADER([linux/xattr.h], true, enable_smack="no")
++ else
++    AC_MSG_RESULT(yes)
+  fi
+  if test "$enable_smack" = "yes"; then
+    AC_CHECK_LIB(attr, llistxattr,
+  	  [LIBS="$LIBS -lattr"
+  	   found_smack="yes"
+  	   AC_DEFINE(HAVE_SMACK)])
+  fi
+  
+  dnl When smack was found don't search for SELinux
+*** ../vim-7.4.245/src/auto/configure	2014-04-02 14:05:34.003887839 +0200
+--- src/auto/configure	2014-04-05 11:56:37.123099387 +0200
+***************
+*** 4600,4605 ****
+--- 4600,4607 ----
+  fi
+  
+  if test "$enable_smack" = "yes"; then
++   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++ $as_echo "no" >&6; }
+    ac_fn_c_check_header_mongrel "$LINENO" "linux/xattr.h" "ac_cv_header_linux_xattr_h" "$ac_includes_default"
+  if test "x$ac_cv_header_linux_xattr_h" = xyes; then :
+    true
+***************
+*** 4608,4617 ****
+  fi
+  
+  
+  fi
+  if test "$enable_smack" = "yes"; then
+-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+- $as_echo "no" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for llistxattr in -lattr" >&5
+  $as_echo_n "checking for llistxattr in -lattr... " >&6; }
+  if ${ac_cv_lib_attr_llistxattr+:} false; then :
+--- 4610,4620 ----
+  fi
+  
+  
++ else
++    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++ $as_echo "yes" >&6; }
+  fi
+  if test "$enable_smack" = "yes"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for llistxattr in -lattr" >&5
+  $as_echo_n "checking for llistxattr in -lattr... " >&6; }
+  if ${ac_cv_lib_attr_llistxattr+:} false; then :
+***************
+*** 4655,4663 ****
+  
+  fi
+  
+- else
+-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+- $as_echo "yes" >&6; }
+  fi
+  
+  if test "x$found_smack" = "x"; then
+--- 4658,4663 ----
+*** ../vim-7.4.245/src/version.c	2014-04-04 19:00:46.351940169 +0200
+--- src/version.c	2014-04-05 11:57:29.503099502 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     246,
+  /**/
+
+-- 
+Apparently, 1 in 5 people in the world are Chinese.  And there are 5
+people in my family, so it must be one of them.  It's either my mum
+or my dad.  Or my older brother Colin.  Or my younger brother
+Ho-Cha-Chu.  But I think it's Colin.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.247 b/SOURCES/7.4.247
new file mode 100644
index 0000000..36006e1
--- /dev/null
+++ b/SOURCES/7.4.247
@@ -0,0 +1,227 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.247
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.247
+Problem:    When passing input to system() there is no way to keep NUL and
+	    NL characters separate.
+Solution:   Optionally use a list for the system() input. (ZyX)
+Files:	    runtime/doc/eval.txt, src/eval.c
+
+
+*** ../vim-7.4.246/runtime/doc/eval.txt	2014-04-02 22:16:59.995482236 +0200
+--- runtime/doc/eval.txt	2014-04-05 18:47:12.907153201 +0200
+***************
+*** 5951,5960 ****
+  
+  system({expr} [, {input}])				*system()* *E677*
+  		Get the output of the shell command {expr}.
+! 		When {input} is given, this string is written to a file and
+! 		passed as stdin to the command.  The string is written as-is,
+! 		you need to take care of using the correct line separators
+! 		yourself.  Pipes are not used.
+  		Note: Use |shellescape()| or |::S| with |expand()| or 
+  		|fnamemodify()| to escape special characters in a command 
+  		argument.  Newlines in {expr} may cause the command to fail.  
+--- 5964,5980 ----
+  
+  system({expr} [, {input}])				*system()* *E677*
+  		Get the output of the shell command {expr}.
+! 
+! 		When {input} is given and is a string this string is written 
+! 		to a file and passed as stdin to the command.  The string is 
+! 		written as-is, you need to take care of using the correct line 
+! 		separators yourself.
+! 		If {input} is given and is a |List| it is written to the file
+! 		in a way |writefile()| does with {binary} set to "b" (i.e.
+! 		with a newline between each list item with newlines inside
+! 		list items converted to NULs).  
+! 		Pipes are not used.
+! 
+  		Note: Use |shellescape()| or |::S| with |expand()| or 
+  		|fnamemodify()| to escape special characters in a command 
+  		argument.  Newlines in {expr} may cause the command to fail.  
+*** ../vim-7.4.246/src/eval.c	2014-04-02 22:17:00.003482236 +0200
+--- src/eval.c	2014-04-05 18:47:50.971153284 +0200
+***************
+*** 836,841 ****
+--- 836,842 ----
+  static int searchpair_cmn __ARGS((typval_T *argvars, pos_T *match_pos));
+  static int search_cmn __ARGS((typval_T *argvars, pos_T *match_pos, int *flagsp));
+  static void setwinvar __ARGS((typval_T *argvars, typval_T *rettv, int off));
++ static int write_list __ARGS((FILE *fd, list_T *list, int binary));
+  
+  
+  #ifdef EBCDIC
+***************
+*** 18267,18280 ****
+  	    EMSG2(_(e_notopen), infile);
+  	    goto done;
+  	}
+! 	p = get_tv_string_buf_chk(&argvars[1], buf);
+! 	if (p == NULL)
+  	{
+! 	    fclose(fd);
+! 	    goto done;		/* type error; errmsg already given */
+  	}
+- 	if (fwrite(p, STRLEN(p), 1, fd) != 1)
+- 	    err = TRUE;
+  	if (fclose(fd) != 0)
+  	    err = TRUE;
+  	if (err)
+--- 18268,18289 ----
+  	    EMSG2(_(e_notopen), infile);
+  	    goto done;
+  	}
+! 	if (argvars[1].v_type == VAR_LIST)
+  	{
+! 	    if (write_list(fd, argvars[1].vval.v_list, TRUE) == FAIL)
+! 		err = TRUE;
+! 	}
+! 	else
+! 	{
+! 	    p = get_tv_string_buf_chk(&argvars[1], buf);
+! 	    if (p == NULL)
+! 	    {
+! 		fclose(fd);
+! 		goto done;		/* type error; errmsg already given */
+! 	    }
+! 	    if (fwrite(p, STRLEN(p), 1, fd) != 1)
+! 		err = TRUE;
+  	}
+  	if (fclose(fd) != 0)
+  	    err = TRUE;
+  	if (err)
+***************
+*** 19173,19178 ****
+--- 19182,19230 ----
+  }
+  
+  /*
++  * Write list of strings to file
++  */
++     static int
++ write_list(fd, list, binary)
++     FILE	*fd;
++     list_T	*list;
++     int		binary;
++ {
++     listitem_T	*li;
++     int		c;
++     int		ret = OK;
++     char_u	*s;
++ 
++     for (li = list->lv_first; li != NULL; li = li->li_next)
++     {
++ 	for (s = get_tv_string(&li->li_tv); *s != NUL; ++s)
++ 	{
++ 	    if (*s == '\n')
++ 		c = putc(NUL, fd);
++ 	    else
++ 		c = putc(*s, fd);
++ 	    if (c == EOF)
++ 	    {
++ 		ret = FAIL;
++ 		break;
++ 	    }
++ 	}
++ 	if (!binary || li->li_next != NULL)
++ 	    if (putc('\n', fd) == EOF)
++ 	    {
++ 		ret = FAIL;
++ 		break;
++ 	    }
++ 	if (ret == FAIL)
++ 	{
++ 	    EMSG(_(e_write));
++ 	    break;
++ 	}
++     }
++     return ret;
++ }
++ 
++ /*
+   * "writefile()" function
+   */
+      static void
+***************
+*** 19183,19192 ****
+      int		binary = FALSE;
+      char_u	*fname;
+      FILE	*fd;
+-     listitem_T	*li;
+-     char_u	*s;
+      int		ret = 0;
+-     int		c;
+  
+      if (check_restricted() || check_secure())
+  	return;
+--- 19235,19241 ----
+***************
+*** 19213,19245 ****
+      }
+      else
+      {
+! 	for (li = argvars[0].vval.v_list->lv_first; li != NULL;
+! 							     li = li->li_next)
+! 	{
+! 	    for (s = get_tv_string(&li->li_tv); *s != NUL; ++s)
+! 	    {
+! 		if (*s == '\n')
+! 		    c = putc(NUL, fd);
+! 		else
+! 		    c = putc(*s, fd);
+! 		if (c == EOF)
+! 		{
+! 		    ret = -1;
+! 		    break;
+! 		}
+! 	    }
+! 	    if (!binary || li->li_next != NULL)
+! 		if (putc('\n', fd) == EOF)
+! 		{
+! 		    ret = -1;
+! 		    break;
+! 		}
+! 	    if (ret < 0)
+! 	    {
+! 		EMSG(_(e_write));
+! 		break;
+! 	    }
+! 	}
+  	fclose(fd);
+      }
+  
+--- 19262,19269 ----
+      }
+      else
+      {
+! 	if (write_list(fd, argvars[0].vval.v_list, binary) == FAIL)
+! 	    ret = -1;
+  	fclose(fd);
+      }
+  
+*** ../vim-7.4.246/src/version.c	2014-04-05 12:02:20.751100138 +0200
+--- src/version.c	2014-04-05 18:49:24.411153488 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     247,
+  /**/
+
+-- 
+Time is an illusion.  Lunchtime doubly so.
+		-- Ford Prefect, in Douglas Adams'
+		   "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.248 b/SOURCES/7.4.248
new file mode 100644
index 0000000..b41f6cb
--- /dev/null
+++ b/SOURCES/7.4.248
@@ -0,0 +1,515 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.248
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.248
+Problem:    Cannot distinguish between NL and NUL in output of system().
+Solution:   Add systemlist(). (ZyX)
+Files:	    runtime/doc/eval.txt, src/eval.c, src/ex_cmds2.c, src/misc1.c,
+	    src/proto/misc1.pro
+
+
+*** ../vim-7.4.247/runtime/doc/eval.txt	2014-04-05 18:55:40.471154309 +0200
+--- runtime/doc/eval.txt	2014-04-05 19:03:05.419155281 +0200
+***************
+*** 2001,2006 ****
+--- 2002,2008 ----
+  synconcealed( {lnum}, {col})	List    info about concealing
+  synstack( {lnum}, {col})	List	stack of syntax IDs at {lnum} and {col}
+  system( {expr} [, {input}])	String	output of shell command/filter {expr}
++ systemlist( {expr} [, {input}])	List	output of shell command/filter {expr}
+  tabpagebuflist( [{arg}])	List	list of buffer numbers in tab page
+  tabpagenr( [{arg}])		Number	number of current or last tab page
+  tabpagewinnr( {tabarg}[, {arg}])
+***************
+*** 5950,5956 ****
+  		valid positions.
+  
+  system({expr} [, {input}])				*system()* *E677*
+! 		Get the output of the shell command {expr}.
+  
+  		When {input} is given and is a string this string is written 
+  		to a file and passed as stdin to the command.  The string is 
+--- 5964,5971 ----
+  		valid positions.
+  
+  system({expr} [, {input}])				*system()* *E677*
+! 		Get the output of the shell command {expr} as a string.  See
+! 		|systemlist()| to get the output as a List.
+  
+  		When {input} is given and is a string this string is written 
+  		to a file and passed as stdin to the command.  The string is 
+***************
+*** 5998,6003 ****
+--- 6013,6028 ----
+  		Use |:checktime| to force a check.
+  
+  
++ systemlist({expr} [, {input}])				*systemlist()*
++ 		Same as |system()|, but returns a |List| with lines (parts of 
++ 		output separated by NL) with NULs transformed into NLs. Output 
++ 		is the same as |readfile()| will output with {binary} argument 
++ 		set to "b".
++ 
++ 		Returns an empty string on error, so be careful not to run 
++ 		into |E706|.
++ 
++ 
+  tabpagebuflist([{arg}])					*tabpagebuflist()*
+  		The result is a |List|, where each item is the number of the
+  		buffer associated with each window in the current tab page.
+*** ../vim-7.4.247/src/eval.c	2014-04-05 18:55:40.479154309 +0200
+--- src/eval.c	2014-04-05 19:42:37.675160463 +0200
+***************
+*** 726,731 ****
+--- 726,732 ----
+  static void f_synstack __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_synconcealed __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_system __ARGS((typval_T *argvars, typval_T *rettv));
++ static void f_systemlist __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_tabpagebuflist __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_tabpagenr __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_tabpagewinnr __ARGS((typval_T *argvars, typval_T *rettv));
+***************
+*** 837,842 ****
+--- 838,844 ----
+  static int search_cmn __ARGS((typval_T *argvars, pos_T *match_pos, int *flagsp));
+  static void setwinvar __ARGS((typval_T *argvars, typval_T *rettv, int off));
+  static int write_list __ARGS((FILE *fd, list_T *list, int binary));
++ static void get_cmd_output_as_rettv __ARGS((typval_T *argvars, typval_T *rettv, int retlist));
+  
+  
+  #ifdef EBCDIC
+***************
+*** 8139,8144 ****
+--- 8141,8147 ----
+      {"synconcealed",	2, 2, f_synconcealed},
+      {"synstack",	2, 2, f_synstack},
+      {"system",		1, 2, f_system},
++     {"systemlist",	1, 2, f_systemlist},
+      {"tabpagebuflist",	0, 1, f_tabpagebuflist},
+      {"tabpagenr",	0, 1, f_tabpagenr},
+      {"tabpagewinnr",	1, 2, f_tabpagewinnr},
+***************
+*** 18232,18244 ****
+  #endif
+  }
+  
+- /*
+-  * "system()" function
+-  */
+      static void
+! f_system(argvars, rettv)
+      typval_T	*argvars;
+      typval_T	*rettv;
+  {
+      char_u	*res = NULL;
+      char_u	*p;
+--- 18235,18245 ----
+  #endif
+  }
+  
+      static void
+! get_cmd_output_as_rettv(argvars, rettv, retlist)
+      typval_T	*argvars;
+      typval_T	*rettv;
++     int		retlist;
+  {
+      char_u	*res = NULL;
+      char_u	*p;
+***************
+*** 18246,18254 ****
+      char_u	buf[NUMBUFLEN];
+      int		err = FALSE;
+      FILE	*fd;
+  
+      if (check_restricted() || check_secure())
+! 	goto done;
+  
+      if (argvars[1].v_type != VAR_UNKNOWN)
+      {
+--- 18247,18258 ----
+      char_u	buf[NUMBUFLEN];
+      int		err = FALSE;
+      FILE	*fd;
++     list_T	*list = NULL;
+  
++     rettv->v_type = VAR_STRING;
++     rettv->vval.v_string = NULL;
+      if (check_restricted() || check_secure())
+! 	goto errret;
+  
+      if (argvars[1].v_type != VAR_UNKNOWN)
+      {
+***************
+*** 18259,18272 ****
+  	if ((infile = vim_tempname('i')) == NULL)
+  	{
+  	    EMSG(_(e_notmp));
+! 	    goto done;
+  	}
+  
+  	fd = mch_fopen((char *)infile, WRITEBIN);
+  	if (fd == NULL)
+  	{
+  	    EMSG2(_(e_notopen), infile);
+! 	    goto done;
+  	}
+  	if (argvars[1].v_type == VAR_LIST)
+  	{
+--- 18263,18276 ----
+  	if ((infile = vim_tempname('i')) == NULL)
+  	{
+  	    EMSG(_(e_notmp));
+! 	    goto errret;
+  	}
+  
+  	fd = mch_fopen((char *)infile, WRITEBIN);
+  	if (fd == NULL)
+  	{
+  	    EMSG2(_(e_notopen), infile);
+! 	    goto errret;
+  	}
+  	if (argvars[1].v_type == VAR_LIST)
+  	{
+***************
+*** 18279,18285 ****
+  	    if (p == NULL)
+  	    {
+  		fclose(fd);
+! 		goto done;		/* type error; errmsg already given */
+  	    }
+  	    if (fwrite(p, STRLEN(p), 1, fd) != 1)
+  		err = TRUE;
+--- 18283,18289 ----
+  	    if (p == NULL)
+  	    {
+  		fclose(fd);
+! 		goto errret;		/* type error; errmsg already given */
+  	    }
+  	    if (fwrite(p, STRLEN(p), 1, fd) != 1)
+  		err = TRUE;
+***************
+*** 18289,18340 ****
+  	if (err)
+  	{
+  	    EMSG(_("E677: Error writing temp file"));
+! 	    goto done;
+  	}
+      }
+  
+!     res = get_cmd_output(get_tv_string(&argvars[0]), infile,
+! 						 SHELL_SILENT | SHELL_COOKED);
+! 
+! #ifdef USE_CR
+!     /* translate <CR> into <NL> */
+!     if (res != NULL)
+      {
+! 	char_u	*s;
+  
+! 	for (s = res; *s; ++s)
+! 	{
+! 	    if (*s == CAR)
+! 		*s = NL;
+  	}
+      }
+! #else
+! # ifdef USE_CRNL
+!     /* translate <CR><NL> into <NL> */
+!     if (res != NULL)
+      {
+! 	char_u	*s, *d;
+  
+! 	d = res;
+! 	for (s = res; *s; ++s)
+  	{
+! 	    if (s[0] == CAR && s[1] == NL)
+! 		++s;
+! 	    *d++ = *s;
+  	}
+- 	*d = NUL;
+-     }
+  # endif
+  #endif
+  
+! done:
+      if (infile != NULL)
+      {
+  	mch_remove(infile);
+  	vim_free(infile);
+      }
+!     rettv->v_type = VAR_STRING;
+!     rettv->vval.v_string = res;
+  }
+  
+  /*
+--- 18293,18420 ----
+  	if (err)
+  	{
+  	    EMSG(_("E677: Error writing temp file"));
+! 	    goto errret;
+  	}
+      }
+  
+!     if (retlist)
+      {
+! 	int		len;
+! 	listitem_T	*li;
+! 	char_u		*s = NULL;
+! 	char_u		*start;
+! 	char_u		*end;
+! 	char_u		*p;
+! 	int		i;
+! 
+! 	res = get_cmd_output(get_tv_string(&argvars[0]), infile,
+! 					   SHELL_SILENT | SHELL_COOKED, &len);
+! 	if (res == NULL)
+! 	    goto errret;
+! 
+! 	list = list_alloc();
+! 	if (list == NULL)
+! 	    goto errret;
+! 
+! 	for (i = 0; i < len; ++i)
+! 	{
+! 	    start = res + i;
+! 	    for (end = start; i < len && *end != NL; ++end)
+! 		++i;
+  
+! 	    s = vim_strnsave(start, (int)(end - start));
+! 	    if (s == NULL)
+! 		goto errret;
+! 
+! 	    for (p = s, end = s + (end - start); p < end; ++p)
+! 		if (*p == NUL)
+! 		    *p = NL;
+! 
+! 	    li = listitem_alloc();
+! 	    if (li == NULL)
+! 	    {
+! 		vim_free(s);
+! 		goto errret;
+! 	    }
+! 	    li->li_tv.v_type = VAR_STRING;
+! 	    li->li_tv.vval.v_string = s;
+! 	    list_append(list, li);
+  	}
++ 
++ 	rettv->v_type = VAR_LIST;
++ 	rettv->vval.v_list = list;
++ 	list = NULL;
+      }
+!     else
+      {
+! 	res = get_cmd_output(get_tv_string(&argvars[0]), infile,
+! 					   SHELL_SILENT | SHELL_COOKED, NULL);
+! #ifdef USE_CR
+! 	/* translate <CR> into <NL> */
+! 	if (res != NULL)
+! 	{
+! 	    char_u	*s;
+  
+! 	    for (s = res; *s; ++s)
+! 	    {
+! 		if (*s == CAR)
+! 		    *s = NL;
+! 	    }
+! 	}
+! #else
+! # ifdef USE_CRNL
+! 	/* translate <CR><NL> into <NL> */
+! 	if (res != NULL)
+  	{
+! 	    char_u	*s, *d;
+! 
+! 	    d = res;
+! 	    for (s = res; *s; ++s)
+! 	    {
+! 		if (s[0] == CAR && s[1] == NL)
+! 		    ++s;
+! 		*d++ = *s;
+! 	    }
+! 	    *d = NUL;
+  	}
+  # endif
+  #endif
++ 	rettv->vval.v_string = res;
++ 	res = NULL;
++     }
+  
+! errret:
+      if (infile != NULL)
+      {
+  	mch_remove(infile);
+  	vim_free(infile);
+      }
+!     if (res != NULL)
+! 	vim_free(res);
+!     if (list != NULL)
+! 	list_free(list, TRUE);
+! }
+! 
+! /*
+!  * "system()" function
+!  */
+!     static void
+! f_system(argvars, rettv)
+!     typval_T	*argvars;
+!     typval_T	*rettv;
+! {
+!     get_cmd_output_as_rettv(argvars, rettv, FALSE);
+! }
+! 
+! /*
+!  * "systemlist()" function
+!  */
+!     static void
+! f_systemlist(argvars, rettv)
+!     typval_T	*argvars;
+!     typval_T	*rettv;
+! {
+!     get_cmd_output_as_rettv(argvars, rettv, TRUE);
+  }
+  
+  /*
+*** ../vim-7.4.247/src/ex_cmds2.c	2013-11-09 03:31:45.000000000 +0100
+--- src/ex_cmds2.c	2014-04-05 19:20:25.023157552 +0200
+***************
+*** 4341,4347 ****
+      /* Find all available locales by running command "locale -a".  If this
+       * doesn't work we won't have completion. */
+      char_u *locale_a = get_cmd_output((char_u *)"locale -a",
+! 							NULL, SHELL_SILENT);
+      if (locale_a == NULL)
+  	return NULL;
+      ga_init2(&locales_ga, sizeof(char_u *), 20);
+--- 4341,4347 ----
+      /* Find all available locales by running command "locale -a".  If this
+       * doesn't work we won't have completion. */
+      char_u *locale_a = get_cmd_output((char_u *)"locale -a",
+! 						    NULL, SHELL_SILENT, NULL);
+      if (locale_a == NULL)
+  	return NULL;
+      ga_init2(&locales_ga, sizeof(char_u *), 20);
+*** ../vim-7.4.247/src/misc1.c	2014-04-01 21:00:45.436733663 +0200
+--- src/misc1.c	2014-04-05 19:21:36.603157708 +0200
+***************
+*** 10665,10671 ****
+      else
+  #endif
+  	buffer = get_cmd_output(cmd, NULL,
+! 				      (flags & EW_SILENT) ? SHELL_SILENT : 0);
+      vim_free(cmd);
+      if (buffer == NULL)
+  	return 0;
+--- 10665,10671 ----
+      else
+  #endif
+  	buffer = get_cmd_output(cmd, NULL,
+! 				(flags & EW_SILENT) ? SHELL_SILENT : 0, NULL);
+      vim_free(cmd);
+      if (buffer == NULL)
+  	return 0;
+***************
+*** 10765,10777 ****
+  
+  /*
+   * Get the stdout of an external command.
+   * Returns an allocated string, or NULL for error.
+   */
+      char_u *
+! get_cmd_output(cmd, infile, flags)
+      char_u	*cmd;
+      char_u	*infile;	/* optional input file name */
+      int		flags;		/* can be SHELL_SILENT */
+  {
+      char_u	*tempname;
+      char_u	*command;
+--- 10765,10780 ----
+  
+  /*
+   * Get the stdout of an external command.
++  * If "ret_len" is NULL replace NUL characters with NL.  When "ret_len" is not
++  * NULL store the length there.
+   * Returns an allocated string, or NULL for error.
+   */
+      char_u *
+! get_cmd_output(cmd, infile, flags, ret_len)
+      char_u	*cmd;
+      char_u	*infile;	/* optional input file name */
+      int		flags;		/* can be SHELL_SILENT */
++     int		*ret_len;
+  {
+      char_u	*tempname;
+      char_u	*command;
+***************
+*** 10841,10847 ****
+  	vim_free(buffer);
+  	buffer = NULL;
+      }
+!     else
+      {
+  	/* Change NUL into SOH, otherwise the string is truncated. */
+  	for (i = 0; i < len; ++i)
+--- 10844,10850 ----
+  	vim_free(buffer);
+  	buffer = NULL;
+      }
+!     else if (ret_len == NULL)
+      {
+  	/* Change NUL into SOH, otherwise the string is truncated. */
+  	for (i = 0; i < len; ++i)
+***************
+*** 10850,10855 ****
+--- 10853,10860 ----
+  
+  	buffer[len] = NUL;	/* make sure the buffer is terminated */
+      }
++     else
++ 	*ret_len = len;
+  
+  done:
+      vim_free(tempname);
+*** ../vim-7.4.247/src/proto/misc1.pro	2013-11-06 04:01:31.000000000 +0100
+--- src/proto/misc1.pro	2014-04-05 19:06:26.427155720 +0200
+***************
+*** 100,106 ****
+  void remove_duplicates __ARGS((garray_T *gap));
+  int gen_expand_wildcards __ARGS((int num_pat, char_u **pat, int *num_file, char_u ***file, int flags));
+  void addfile __ARGS((garray_T *gap, char_u *f, int flags));
+! char_u *get_cmd_output __ARGS((char_u *cmd, char_u *infile, int flags));
+  void FreeWild __ARGS((int count, char_u **files));
+  int goto_im __ARGS((void));
+  /* vim: set ft=c : */
+--- 100,106 ----
+  void remove_duplicates __ARGS((garray_T *gap));
+  int gen_expand_wildcards __ARGS((int num_pat, char_u **pat, int *num_file, char_u ***file, int flags));
+  void addfile __ARGS((garray_T *gap, char_u *f, int flags));
+! char_u *get_cmd_output __ARGS((char_u *cmd, char_u *infile, int flags, int *ret_len));
+  void FreeWild __ARGS((int count, char_u **files));
+  int goto_im __ARGS((void));
+  /* vim: set ft=c : */
+*** ../vim-7.4.247/src/version.c	2014-04-05 18:55:40.479154309 +0200
+--- src/version.c	2014-04-05 19:07:12.447155821 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     248,
+  /**/
+
+-- 
+Tips for aliens in New York: Land anywhere.  Central Park, anywhere.
+No one will care or indeed even notice.
+		-- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.250 b/SOURCES/7.4.250
new file mode 100644
index 0000000..ff078aa
--- /dev/null
+++ b/SOURCES/7.4.250
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.250
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.250
+Problem:    Some test files missing from distribution.
+Solution:   Add pattern for newly added tests.
+Files:	    Filelist
+
+
+*** ../vim-7.4.249/Filelist	2014-01-23 14:26:18.815303381 +0100
+--- Filelist	2014-04-05 21:56:31.743178012 +0200
+***************
+*** 82,90 ****
+--- 82,93 ----
+  		src/testdir/*.in \
+  		src/testdir/sautest/autoload/*.vim \
+  		src/testdir/test[0-9]*.ok \
++ 		src/testdir/test[0-9]*a.ok \
++ 		src/testdir/test_[a-z]*.ok \
+  		src/testdir/test49.vim \
+  		src/testdir/test60.vim \
+  		src/testdir/test83-tags? \
++ 		src/testdir/test77a.com \
+  		src/testdir/python2/*.py \
+  		src/testdir/python3/*.py \
+  		src/testdir/pythonx/*.py \
+*** ../vim-7.4.249/src/version.c	2014-04-05 21:28:50.671174384 +0200
+--- src/version.c	2014-04-05 21:58:05.203178216 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     250,
+  /**/
+
+-- 
+Give a man a computer program and you give him a headache,
+but teach him to program computers and you give him the power
+to create headaches for others for the rest of his life...
+        R. B. Forest
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.251 b/SOURCES/7.4.251
new file mode 100644
index 0000000..e841b80
--- /dev/null
+++ b/SOURCES/7.4.251
@@ -0,0 +1,164 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.251
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.251
+Problem:    Crash when BufAdd autocommand wipes out the buffer.
+Solution:   Check for buffer to still be valid. Postpone freeing the buffer
+	    structure. (Hirohito Higashi)
+Files:	    src/buffer.c, src/ex_cmds.c, src/fileio.c, src/globals.h
+
+
+*** ../vim-7.4.250/src/buffer.c	2014-03-23 15:12:29.907264336 +0100
+--- src/buffer.c	2014-04-06 19:55:53.563350929 +0200
+***************
+*** 676,683 ****
+  #endif
+  #ifdef FEAT_AUTOCMD
+      aubuflocal_remove(buf);
+  #endif
+!     vim_free(buf);
+  }
+  
+  /*
+--- 676,691 ----
+  #endif
+  #ifdef FEAT_AUTOCMD
+      aubuflocal_remove(buf);
++     if (autocmd_busy)
++     {
++ 	/* Do not free the buffer structure while autocommands are executing,
++ 	 * it's still needed. Free it when autocmd_busy is reset. */
++ 	buf->b_next = au_pending_free_buf;
++ 	au_pending_free_buf = buf;
++     }
++     else
+  #endif
+! 	vim_free(buf);
+  }
+  
+  /*
+***************
+*** 1681,1687 ****
+--- 1689,1699 ----
+  	    buf->b_p_bl = TRUE;
+  #ifdef FEAT_AUTOCMD
+  	    if (!(flags & BLN_DUMMY))
++ 	    {
+  		apply_autocmds(EVENT_BUFADD, NULL, NULL, FALSE, buf);
++ 		if (!buf_valid(buf))
++ 		    return NULL;
++ 	    }
+  #endif
+  	}
+  	return buf;
+***************
+*** 1857,1864 ****
+--- 1869,1882 ----
+      if (!(flags & BLN_DUMMY))
+      {
+  	apply_autocmds(EVENT_BUFNEW, NULL, NULL, FALSE, buf);
++ 	if (!buf_valid(buf))
++ 	    return NULL;
+  	if (flags & BLN_LISTED)
++ 	{
+  	    apply_autocmds(EVENT_BUFADD, NULL, NULL, FALSE, buf);
++ 	    if (!buf_valid(buf))
++ 		return NULL;
++ 	}
+  # ifdef FEAT_EVAL
+  	if (aborting())		/* autocmds may abort script processing */
+  	    return NULL;
+*** ../vim-7.4.250/src/ex_cmds.c	2014-04-04 19:00:46.351940169 +0200
+--- src/ex_cmds.c	2014-04-06 20:41:37.899356924 +0200
+***************
+*** 3343,3348 ****
+--- 3343,3354 ----
+  #endif
+  	    buf = buflist_new(ffname, sfname, 0L,
+  		    BLN_CURBUF | ((flags & ECMD_SET_HELP) ? 0 : BLN_LISTED));
++ #ifdef FEAT_AUTOCMD
++ 	    /* autocommands may change curwin and curbuf */
++ 	    if (oldwin != NULL)
++ 		oldwin = curwin;
++ 	    old_curbuf = curbuf;
++ #endif
+  	}
+  	if (buf == NULL)
+  	    goto theend;
+*** ../vim-7.4.250/src/fileio.c	2014-04-02 14:05:33.999887839 +0200
+--- src/fileio.c	2014-04-06 20:34:24.063355976 +0200
+***************
+*** 9548,9560 ****
+  
+      /*
+       * When stopping to execute autocommands, restore the search patterns and
+!      * the redo buffer.
+       */
+      if (!autocmd_busy)
+      {
+  	restore_search_patterns();
+  	restoreRedobuff();
+  	did_filetype = FALSE;
+      }
+  
+      /*
+--- 9548,9566 ----
+  
+      /*
+       * When stopping to execute autocommands, restore the search patterns and
+!      * the redo buffer.  Free buffers in the au_pending_free_buf list.
+       */
+      if (!autocmd_busy)
+      {
+  	restore_search_patterns();
+  	restoreRedobuff();
+  	did_filetype = FALSE;
++ 	while (au_pending_free_buf != NULL)
++ 	{
++ 	    buf_T *b = au_pending_free_buf->b_next;
++ 	    vim_free(au_pending_free_buf);
++ 	    au_pending_free_buf = b;
++ 	}
+      }
+  
+      /*
+*** ../vim-7.4.250/src/globals.h	2014-03-23 15:12:29.943264337 +0100
+--- src/globals.h	2014-04-06 20:32:58.339355789 +0200
+***************
+*** 386,391 ****
+--- 386,396 ----
+  /* When deleting the current buffer, another one must be loaded.  If we know
+   * which one is preferred, au_new_curbuf is set to it */
+  EXTERN buf_T	*au_new_curbuf INIT(= NULL);
++ 
++ /* When deleting the buffer and autocmd_busy is TRUE, do not free the buffer
++  * but link it in the list starting with au_pending_free_buf, using b_next.
++  * Free the buffer when autocmd_busy is set to FALSE. */
++ EXTERN buf_T	*au_pending_free_buf INIT(= NULL);
+  #endif
+  
+  #ifdef FEAT_MOUSE
+*** ../vim-7.4.250/src/version.c	2014-04-05 21:59:35.939178415 +0200
+--- src/version.c	2014-04-06 19:52:46.887350521 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     251,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+37. You start looking for hot HTML addresses in public restrooms.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.252 b/SOURCES/7.4.252
new file mode 100644
index 0000000..2c02849
--- /dev/null
+++ b/SOURCES/7.4.252
@@ -0,0 +1,47 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.252
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.252
+Problem:    Critical error in GTK, removing timer twice.
+Solution:   Clear the timer after removing it. (James McCoy)
+Files:	    src/gui_gtk_x11.c
+
+
+*** ../vim-7.4.251/src/gui_gtk_x11.c	2013-06-30 17:42:13.000000000 +0200
+--- src/gui_gtk_x11.c	2014-04-06 21:04:57.595359981 +0200
+***************
+*** 732,738 ****
+--- 732,741 ----
+  gui_mch_start_blink(void)
+  {
+      if (blink_timer)
++     {
+  	gtk_timeout_remove(blink_timer);
++ 	blink_timer = 0;
++     }
+      /* Only switch blinking on if none of the times is zero */
+      if (blink_waittime && blink_ontime && blink_offtime && gui.in_focus)
+      {
+*** ../vim-7.4.251/src/version.c	2014-04-06 20:45:40.127357453 +0200
+--- src/version.c	2014-04-06 21:06:25.543360173 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     252,
+  /**/
+
+-- 
+Everyone has a photographic memory. Some don't have film.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.253 b/SOURCES/7.4.253
new file mode 100644
index 0000000..dadc81b
--- /dev/null
+++ b/SOURCES/7.4.253
@@ -0,0 +1,76 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.253
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.253
+Problem:    Crash when using cpp syntax file with pattern using external
+	    match. (Havard Garnes)
+Solution:   Discard match when end column is before start column.
+Files:	    src/regexp.c, src/regexp_nfa.c
+
+
+*** ../vim-7.4.252/src/regexp.c	2014-04-02 19:00:53.043644100 +0200
+--- src/regexp.c	2014-04-06 21:26:17.087362776 +0200
+***************
+*** 4146,4152 ****
+  	    {
+  		/* Only accept single line matches. */
+  		if (reg_startzpos[i].lnum >= 0
+! 			&& reg_endzpos[i].lnum == reg_startzpos[i].lnum)
+  		    re_extmatch_out->matches[i] =
+  			vim_strnsave(reg_getline(reg_startzpos[i].lnum)
+  						       + reg_startzpos[i].col,
+--- 4146,4153 ----
+  	    {
+  		/* Only accept single line matches. */
+  		if (reg_startzpos[i].lnum >= 0
+! 			&& reg_endzpos[i].lnum == reg_startzpos[i].lnum
+! 			&& reg_endzpos[i].col >= reg_startzpos[i].col)
+  		    re_extmatch_out->matches[i] =
+  			vim_strnsave(reg_getline(reg_startzpos[i].lnum)
+  						       + reg_startzpos[i].col,
+*** ../vim-7.4.252/src/regexp_nfa.c	2014-03-23 15:12:29.935264336 +0100
+--- src/regexp_nfa.c	2014-04-06 21:16:57.111361553 +0200
+***************
+*** 6781,6788 ****
+  	    {
+  		struct multipos *mpos = &subs.synt.list.multi[i];
+  
+! 		/* Only accept single line matches. */
+! 		if (mpos->start.lnum >= 0 && mpos->start.lnum == mpos->end.lnum)
+  		    re_extmatch_out->matches[i] =
+  			vim_strnsave(reg_getline(mpos->start.lnum)
+  							    + mpos->start.col,
+--- 6781,6790 ----
+  	    {
+  		struct multipos *mpos = &subs.synt.list.multi[i];
+  
+! 		/* Only accept single line matches that are valid. */
+! 		if (mpos->start.lnum >= 0
+! 			&& mpos->start.lnum == mpos->end.lnum
+! 			&& mpos->end.col >= mpos->start.col)
+  		    re_extmatch_out->matches[i] =
+  			vim_strnsave(reg_getline(mpos->start.lnum)
+  							    + mpos->start.col,
+*** ../vim-7.4.252/src/version.c	2014-04-06 21:08:41.315360470 +0200
+--- src/version.c	2014-04-06 21:33:17.271363694 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     253,
+  /**/
+
+-- 
+A day without sunshine is like, well, night.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.254 b/SOURCES/7.4.254
new file mode 100644
index 0000000..a5085ba
--- /dev/null
+++ b/SOURCES/7.4.254
@@ -0,0 +1,183 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.2
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.254
+Problem:    Smack support detection is incomplete.
+Solution:   Check for attr/xattr.h and specific macro.
+Files:	    src/configure.in, src/auto/configure
+
+
+*** ../vim-7.4.253/src/configure.in	2014-04-05 12:02:20.747100138 +0200
+--- src/configure.in	2014-04-10 11:02:59.256035996 +0200
+***************
+*** 396,405 ****
+    AC_MSG_RESULT(no)
+    AC_CHECK_HEADER([linux/xattr.h], true, enable_smack="no")
+  else
+!    AC_MSG_RESULT(yes)
+  fi
+  if test "$enable_smack" = "yes"; then
+!   AC_CHECK_LIB(attr, llistxattr,
+  	  [LIBS="$LIBS -lattr"
+  	   found_smack="yes"
+  	   AC_DEFINE(HAVE_SMACK)])
+--- 396,414 ----
+    AC_MSG_RESULT(no)
+    AC_CHECK_HEADER([linux/xattr.h], true, enable_smack="no")
+  else
+!   AC_MSG_RESULT(yes)
+  fi
+  if test "$enable_smack" = "yes"; then
+!   AC_CHECK_HEADER([attr/xattr.h], true, enable_smack="no")
+! fi
+! if test "$enable_smack" = "yes"; then
+!   AC_MSG_CHECKING(for XATTR_NAME_SMACKEXEC in linux/xattr.h)
+!   AC_EGREP_CPP(XATTR_NAME_SMACKEXEC, [#include <linux/xattr.h>],
+! 	       AC_MSG_RESULT(yes),
+! 	       AC_MSG_RESULT(no); enable_smack = "no")
+! fi
+! if test "$enable_smack" = "yes"; then
+!   AC_CHECK_LIB(attr, setxattr,
+  	  [LIBS="$LIBS -lattr"
+  	   found_smack="yes"
+  	   AC_DEFINE(HAVE_SMACK)])
+*** ../vim-7.4.253/src/auto/configure	2014-04-05 12:02:20.751100138 +0200
+--- src/auto/configure	2014-04-10 11:03:04.220036007 +0200
+***************
+*** 4611,4623 ****
+  
+  
+  else
+!    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+  $as_echo "yes" >&6; }
+  fi
+  if test "$enable_smack" = "yes"; then
+!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for llistxattr in -lattr" >&5
+! $as_echo_n "checking for llistxattr in -lattr... " >&6; }
+! if ${ac_cv_lib_attr_llistxattr+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+--- 4611,4651 ----
+  
+  
+  else
+!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+  $as_echo "yes" >&6; }
+  fi
+  if test "$enable_smack" = "yes"; then
+!   ac_fn_c_check_header_mongrel "$LINENO" "attr/xattr.h" "ac_cv_header_attr_xattr_h" "$ac_includes_default"
+! if test "x$ac_cv_header_attr_xattr_h" = xyes; then :
+!   true
+! else
+!   enable_smack="no"
+! fi
+! 
+! 
+! fi
+! if test "$enable_smack" = "yes"; then
+!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XATTR_NAME_SMACKEXEC in linux/xattr.h" >&5
+! $as_echo_n "checking for XATTR_NAME_SMACKEXEC in linux/xattr.h... " >&6; }
+!   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+! /* end confdefs.h.  */
+! #include <linux/xattr.h>
+! _ACEOF
+! if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+!   $EGREP "XATTR_NAME_SMACKEXEC" >/dev/null 2>&1; then :
+!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+! $as_echo "yes" >&6; }
+! else
+!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+! $as_echo "no" >&6; }; enable_smack = "no"
+! fi
+! rm -f conftest*
+! 
+! fi
+! if test "$enable_smack" = "yes"; then
+!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for setxattr in -lattr" >&5
+! $as_echo_n "checking for setxattr in -lattr... " >&6; }
+! if ${ac_cv_lib_attr_setxattr+:} false; then :
+    $as_echo_n "(cached) " >&6
+  else
+    ac_check_lib_save_LIBS=$LIBS
+***************
+*** 4631,4657 ****
+  #ifdef __cplusplus
+  extern "C"
+  #endif
+! char llistxattr ();
+  int
+  main ()
+  {
+! return llistxattr ();
+    ;
+    return 0;
+  }
+  _ACEOF
+  if ac_fn_c_try_link "$LINENO"; then :
+!   ac_cv_lib_attr_llistxattr=yes
+  else
+!   ac_cv_lib_attr_llistxattr=no
+  fi
+  rm -f core conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+  LIBS=$ac_check_lib_save_LIBS
+  fi
+! { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_attr_llistxattr" >&5
+! $as_echo "$ac_cv_lib_attr_llistxattr" >&6; }
+! if test "x$ac_cv_lib_attr_llistxattr" = xyes; then :
+    LIBS="$LIBS -lattr"
+  	   found_smack="yes"
+  	   $as_echo "#define HAVE_SMACK 1" >>confdefs.h
+--- 4659,4685 ----
+  #ifdef __cplusplus
+  extern "C"
+  #endif
+! char setxattr ();
+  int
+  main ()
+  {
+! return setxattr ();
+    ;
+    return 0;
+  }
+  _ACEOF
+  if ac_fn_c_try_link "$LINENO"; then :
+!   ac_cv_lib_attr_setxattr=yes
+  else
+!   ac_cv_lib_attr_setxattr=no
+  fi
+  rm -f core conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+  LIBS=$ac_check_lib_save_LIBS
+  fi
+! { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_attr_setxattr" >&5
+! $as_echo "$ac_cv_lib_attr_setxattr" >&6; }
+! if test "x$ac_cv_lib_attr_setxattr" = xyes; then :
+    LIBS="$LIBS -lattr"
+  	   found_smack="yes"
+  	   $as_echo "#define HAVE_SMACK 1" >>confdefs.h
+*** ../vim-7.4.253/src/version.c	2014-04-06 21:33:39.675363743 +0200
+--- src/version.c	2014-04-10 11:00:57.200035730 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     254,
+  /**/
+
+-- 
+George:  "I just got a new set of golf clubs for my wife!"
+  John:  "Great trade!"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.255 b/SOURCES/7.4.255
new file mode 100644
index 0000000..5741a5e
--- /dev/null
+++ b/SOURCES/7.4.255
@@ -0,0 +1,108 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.255
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.255
+Problem:    Configure check for smack doesn't work with all shells. (David
+	    Larson)
+Solution:   Remove spaces in set command.
+Files:	    src/configure.in, src/auto/configure
+
+
+*** ../vim-7.4.254/src/configure.in	2014-04-10 11:09:11.676036810 +0200
+--- src/configure.in	2014-04-10 19:53:38.884105545 +0200
+***************
+*** 405,411 ****
+    AC_MSG_CHECKING(for XATTR_NAME_SMACKEXEC in linux/xattr.h)
+    AC_EGREP_CPP(XATTR_NAME_SMACKEXEC, [#include <linux/xattr.h>],
+  	       AC_MSG_RESULT(yes),
+! 	       AC_MSG_RESULT(no); enable_smack = "no")
+  fi
+  if test "$enable_smack" = "yes"; then
+    AC_CHECK_LIB(attr, setxattr,
+--- 405,411 ----
+    AC_MSG_CHECKING(for XATTR_NAME_SMACKEXEC in linux/xattr.h)
+    AC_EGREP_CPP(XATTR_NAME_SMACKEXEC, [#include <linux/xattr.h>],
+  	       AC_MSG_RESULT(yes),
+! 	       AC_MSG_RESULT(no); enable_smack="no")
+  fi
+  if test "$enable_smack" = "yes"; then
+    AC_CHECK_LIB(attr, setxattr,
+***************
+*** 2643,2649 ****
+      AC_MSG_CHECKING(for XIMText in X11/Xlib.h)
+      AC_EGREP_CPP(XIMText, [#include <X11/Xlib.h>],
+  		  AC_MSG_RESULT(yes),
+! 		  AC_MSG_RESULT(no; xim has been disabled); enable_xim = "no")
+    fi
+    CPPFLAGS=$cppflags_save
+  
+--- 2643,2649 ----
+      AC_MSG_CHECKING(for XIMText in X11/Xlib.h)
+      AC_EGREP_CPP(XIMText, [#include <X11/Xlib.h>],
+  		  AC_MSG_RESULT(yes),
+! 		  AC_MSG_RESULT(no; xim has been disabled); enable_xim="no")
+    fi
+    CPPFLAGS=$cppflags_save
+  
+*** ../vim-7.4.254/src/auto/configure	2014-04-10 11:09:11.684036810 +0200
+--- src/auto/configure	2014-04-10 19:53:54.032105578 +0200
+***************
+*** 4637,4643 ****
+  $as_echo "yes" >&6; }
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+! $as_echo "no" >&6; }; enable_smack = "no"
+  fi
+  rm -f conftest*
+  
+--- 4637,4643 ----
+  $as_echo "yes" >&6; }
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+! $as_echo "no" >&6; }; enable_smack="no"
+  fi
+  rm -f conftest*
+  
+***************
+*** 9303,9309 ****
+  $as_echo "yes" >&6; }
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no; xim has been disabled" >&5
+! $as_echo "no; xim has been disabled" >&6; }; enable_xim = "no"
+  fi
+  rm -f conftest*
+  
+--- 9303,9309 ----
+  $as_echo "yes" >&6; }
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no; xim has been disabled" >&5
+! $as_echo "no; xim has been disabled" >&6; }; enable_xim="no"
+  fi
+  rm -f conftest*
+  
+*** ../vim-7.4.254/src/version.c	2014-04-10 11:09:11.684036810 +0200
+--- src/version.c	2014-04-10 19:56:55.272105974 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     255,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+40. You tell the cab driver you live at
+    http://123.elm.street/house/bluetrim.html
+41. You actually try that 123.elm.street address.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.256 b/SOURCES/7.4.256
new file mode 100644
index 0000000..ef2a859
--- /dev/null
+++ b/SOURCES/7.4.256
@@ -0,0 +1,83 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.2
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.256 (after 7.4.248)
+Problem:    Using systemlist() may cause a crash and does not handle NUL
+	    characters properly.
+Solution:   Increase the reference count, allocate memory by length. (Yasuhiro
+	    Matsumoto)
+Files:	    src/eval.c
+
+
+*** ../vim-7.4.255/src/eval.c	2014-04-05 21:28:50.667174384 +0200
+--- src/eval.c	2014-04-11 10:10:22.112217827 +0200
+***************
+*** 18334,18349 ****
+  	for (i = 0; i < len; ++i)
+  	{
+  	    start = res + i;
+! 	    for (end = start; i < len && *end != NL; ++end)
+  		++i;
+  
+! 	    s = vim_strnsave(start, (int)(end - start));
+  	    if (s == NULL)
+  		goto errret;
+  
+! 	    for (p = s, end = s + (end - start); p < end; ++p)
+! 		if (*p == NUL)
+! 		    *p = NL;
+  
+  	    li = listitem_alloc();
+  	    if (li == NULL)
+--- 18334,18350 ----
+  	for (i = 0; i < len; ++i)
+  	{
+  	    start = res + i;
+! 	    while (i < len && res[i] != NL)
+  		++i;
++ 	    end = res + i;
+  
+! 	    s = alloc((unsigned)(end - start + 1));
+  	    if (s == NULL)
+  		goto errret;
+  
+! 	    for (p = s; start < end; ++p, ++start)
+! 		*p = *start == NUL ? NL : *start;
+! 	    *p = NUL;
+  
+  	    li = listitem_alloc();
+  	    if (li == NULL)
+***************
+*** 18356,18361 ****
+--- 18357,18363 ----
+  	    list_append(list, li);
+  	}
+  
++ 	++list->lv_refcount;
+  	rettv->v_type = VAR_LIST;
+  	rettv->vval.v_list = list;
+  	list = NULL;
+*** ../vim-7.4.255/src/version.c	2014-04-10 20:00:03.720106386 +0200
+--- src/version.c	2014-04-11 09:44:05.208214383 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     256,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+46. Your wife makes a new rule: "The computer cannot come to bed."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.257 b/SOURCES/7.4.257
new file mode 100644
index 0000000..67974a8
--- /dev/null
+++ b/SOURCES/7.4.257
@@ -0,0 +1,64 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.257
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.257
+Problem:    Compiler warning, possibly for mismatch in parameter name.
+Solution:   Rename the parameter in the declaration.
+Files:	    src/ops.c
+
+*** ../vim-7.4.256/src/ops.c	2014-04-02 22:17:00.003482236 +0200
+--- src/ops.c	2014-04-12 12:23:59.308424067 +0200
+***************
+*** 113,119 ****
+  #endif
+  static void	block_prep __ARGS((oparg_T *oap, struct block_def *, linenr_T, int));
+  #if defined(FEAT_CLIPBOARD) || defined(FEAT_EVAL)
+! static void	str_to_reg __ARGS((struct yankreg *y_ptr, int type, char_u *str, long len, long blocklen, int str_list));
+  #endif
+  static int	ends_in_white __ARGS((linenr_T lnum));
+  #ifdef FEAT_COMMENTS
+--- 113,119 ----
+  #endif
+  static void	block_prep __ARGS((oparg_T *oap, struct block_def *, linenr_T, int));
+  #if defined(FEAT_CLIPBOARD) || defined(FEAT_EVAL)
+! static void	str_to_reg __ARGS((struct yankreg *y_ptr, int yank_type, char_u *str, long len, long blocklen, int str_list));
+  #endif
+  static int	ends_in_white __ARGS((linenr_T lnum));
+  #ifdef FEAT_COMMENTS
+*** ../vim-7.4.256/src/version.c	2014-04-11 10:22:46.288219453 +0200
+--- src/version.c	2014-04-12 12:25:44.176424296 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     257,
+  /**/
+
+-- 
+The real
+trick is
+this: to
+keep the
+lines as
+short as
+possible
+and keep
+the size
+the same
+yet free
+from the
+need for
+hyphena-
+Dammit!!  (Matthew Winn)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.258 b/SOURCES/7.4.258
new file mode 100644
index 0000000..d423345
--- /dev/null
+++ b/SOURCES/7.4.258
@@ -0,0 +1,114 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.258
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.258
+Problem:    Configure fails if $CC contains options.
+Solution:   Remove quotes around $CC. (Paul Barker)
+Files:	    src/configure.in, src/auto/configure
+
+
+*** ../vim-7.4.257/src/configure.in	2014-04-10 20:00:03.708106386 +0200
+--- src/configure.in	2014-04-12 13:00:51.332428899 +0200
+***************
+*** 46,55 ****
+  fi
+  if test "$GCC" = yes; then
+    dnl method that should work for nearly all versions
+!   gccversion=`"$CC" -dumpversion`
+    if test "x$gccversion" = "x"; then
+      dnl old method; fall-back for when -dumpversion doesn't work
+!     gccversion=`"$CC" --version | sed -e '2,$d' -e 's/darwin.//' -e 's/^[[^0-9]]*\([[0-9]]\.[[0-9.]]*\).*$/\1/g'`
+    fi
+    dnl version 4.0.1 was reported to cause trouble on Macintosh by Marcin Dalecki
+    if test "$gccversion" = "3.0.1" -o "$gccversion" = "3.0.2" -o "$gccversion" = "4.0.1"; then
+--- 46,55 ----
+  fi
+  if test "$GCC" = yes; then
+    dnl method that should work for nearly all versions
+!   gccversion=`$CC -dumpversion`
+    if test "x$gccversion" = "x"; then
+      dnl old method; fall-back for when -dumpversion doesn't work
+!     gccversion=`$CC --version | sed -e '2,$d' -e 's/darwin.//' -e 's/^[[^0-9]]*\([[0-9]]\.[[0-9.]]*\).*$/\1/g'`
+    fi
+    dnl version 4.0.1 was reported to cause trouble on Macintosh by Marcin Dalecki
+    if test "$gccversion" = "3.0.1" -o "$gccversion" = "3.0.2" -o "$gccversion" = "4.0.1"; then
+***************
+*** 68,74 ****
+  dnl the version number of the clang in use.
+  dnl Note that this does not work to get the version of clang 3.1 or 3.2.
+  AC_MSG_CHECKING(for recent clang version)
+! CLANG_VERSION_STRING=`"$CC" --version 2>/dev/null | sed  -n -e 's/^.*clang.*\([[0-9]][[0-9]]*\.[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*\).*$/\1/p'`
+  if test x"$CLANG_VERSION_STRING" != x"" ; then
+    CLANG_MAJOR=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*/\1/p'`
+    CLANG_MINOR=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*/\1/p'`
+--- 68,74 ----
+  dnl the version number of the clang in use.
+  dnl Note that this does not work to get the version of clang 3.1 or 3.2.
+  AC_MSG_CHECKING(for recent clang version)
+! CLANG_VERSION_STRING=`$CC --version 2>/dev/null | sed  -n -e 's/^.*clang.*\([[0-9]][[0-9]]*\.[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*\).*$/\1/p'`
+  if test x"$CLANG_VERSION_STRING" != x"" ; then
+    CLANG_MAJOR=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*\.[[0-9]][[0-9]]*/\1/p'`
+    CLANG_MINOR=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\)\.[[0-9]][[0-9]]*/\1/p'`
+*** ../vim-7.4.257/src/auto/configure	2014-04-10 20:00:03.716106386 +0200
+--- src/auto/configure	2014-04-12 13:00:58.436428915 +0200
+***************
+*** 4074,4082 ****
+    test "$GCC" = yes && CFLAGS="-O2 -fno-strength-reduce -Wall"
+  fi
+  if test "$GCC" = yes; then
+!     gccversion=`"$CC" -dumpversion`
+    if test "x$gccversion" = "x"; then
+!         gccversion=`"$CC" --version | sed -e '2,$d' -e 's/darwin.//' -e 's/^[^0-9]*\([0-9]\.[0-9.]*\).*$/\1/g'`
+    fi
+      if test "$gccversion" = "3.0.1" -o "$gccversion" = "3.0.2" -o "$gccversion" = "4.0.1"; then
+      echo 'GCC [34].0.[12] has a bug in the optimizer, disabling "-O#"'
+--- 4074,4082 ----
+    test "$GCC" = yes && CFLAGS="-O2 -fno-strength-reduce -Wall"
+  fi
+  if test "$GCC" = yes; then
+!     gccversion=`$CC -dumpversion`
+    if test "x$gccversion" = "x"; then
+!         gccversion=`$CC --version | sed -e '2,$d' -e 's/darwin.//' -e 's/^[^0-9]*\([0-9]\.[0-9.]*\).*$/\1/g'`
+    fi
+      if test "$gccversion" = "3.0.1" -o "$gccversion" = "3.0.2" -o "$gccversion" = "4.0.1"; then
+      echo 'GCC [34].0.[12] has a bug in the optimizer, disabling "-O#"'
+***************
+*** 4091,4097 ****
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for recent clang version" >&5
+  $as_echo_n "checking for recent clang version... " >&6; }
+! CLANG_VERSION_STRING=`"$CC" --version 2>/dev/null | sed  -n -e 's/^.*clang.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$/\1/p'`
+  if test x"$CLANG_VERSION_STRING" != x"" ; then
+    CLANG_MAJOR=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/\([0-9][0-9]*\)\.[0-9][0-9]*\.[0-9][0-9]*/\1/p'`
+    CLANG_MINOR=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/[0-9][0-9]*\.\([0-9][0-9]*\)\.[0-9][0-9]*/\1/p'`
+--- 4091,4097 ----
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for recent clang version" >&5
+  $as_echo_n "checking for recent clang version... " >&6; }
+! CLANG_VERSION_STRING=`$CC --version 2>/dev/null | sed  -n -e 's/^.*clang.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$/\1/p'`
+  if test x"$CLANG_VERSION_STRING" != x"" ; then
+    CLANG_MAJOR=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/\([0-9][0-9]*\)\.[0-9][0-9]*\.[0-9][0-9]*/\1/p'`
+    CLANG_MINOR=`echo "$CLANG_VERSION_STRING" | sed -n -e 's/[0-9][0-9]*\.\([0-9][0-9]*\)\.[0-9][0-9]*/\1/p'`
+*** ../vim-7.4.257/src/version.c	2014-04-12 12:26:25.856424387 +0200
+--- src/version.c	2014-04-12 13:05:09.372429463 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     258,
+  /**/
+
+-- 
+Never go to the toilet in a paperless office.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.259 b/SOURCES/7.4.259
new file mode 100644
index 0000000..e8f28b5
--- /dev/null
+++ b/SOURCES/7.4.259
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.259
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.259
+Problem:    Warning for misplaced "const".
+Solution:   Move the "const". (Yukihiro Nakadaira)
+Files:	    src/os_unix.c
+
+
+*** ../vim-7.4.258/src/os_unix.c	2014-04-02 23:09:23.003439001 +0200
+--- src/os_unix.c	2014-04-23 12:40:45.931386548 +0200
+***************
+*** 2815,2821 ****
+      char_u	*from_file;
+      char_u	*to_file;
+  {
+!     static const char const *smack_copied_attributes[] =
+  	{
+  	    XATTR_NAME_SMACK,
+  	    XATTR_NAME_SMACKEXEC,
+--- 2815,2821 ----
+      char_u	*from_file;
+      char_u	*to_file;
+  {
+!     static const char * const smack_copied_attributes[] =
+  	{
+  	    XATTR_NAME_SMACK,
+  	    XATTR_NAME_SMACKEXEC,
+*** ../vim-7.4.258/src/version.c	2014-04-12 13:11:58.272430356 +0200
+--- src/version.c	2014-04-23 12:49:22.587374098 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     259,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+91. It's Saturday afternoon in the middle of May and you
+    are on computer.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.260 b/SOURCES/7.4.260
new file mode 100644
index 0000000..2ac9669
--- /dev/null
+++ b/SOURCES/7.4.260
@@ -0,0 +1,281 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.260
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.260
+Problem:    It is possible to define a function with a colon in the name.  It
+	    is possible to define a function with a lower case character if a
+	    "#" appears after the name.
+Solution:   Disallow using a colon other than with "s:".  Ignore "#" after the
+	    name.
+Files:	    runtime/doc/eval.txt, src/eval.c, src/testdir/test_eval.in,
+	    src/testdir/test_eval.ok
+
+
+*** ../vim-7.4.259/runtime/doc/eval.txt	2014-04-05 19:44:36.891160723 +0200
+--- runtime/doc/eval.txt	2014-04-23 17:19:57.914982886 +0200
+***************
+*** 123,128 ****
+--- 123,129 ----
+  	:echo Fn()
+  <							*E704* *E705* *E707*
+  A Funcref variable must start with a capital, "s:", "w:", "t:" or "b:".  You
++ can use "g:" but the following name must still start with a capital.  You
+  cannot have both a Funcref variable and a function with the same name.
+  
+  A special case is defining a function and directly assigning its Funcref to a
+***************
+*** 6675,6680 ****
+--- 6691,6698 ----
+  and autocommands defined in the script.  It is also possible to call the
+  function from a mapping defined in the script, but then |<SID>| must be used
+  instead of "s:" when the mapping is expanded outside of the script.
++ There are only script-local functions, no buffer-local or window-local
++ functions.
+  
+  					*:fu* *:function* *E128* *E129* *E123*
+  :fu[nction]		List all functions and their arguments.
+***************
+*** 6698,6708 ****
+  <
+  See |:verbose-cmd| for more information.
+  
+! 							*E124* *E125* *E853*
+  :fu[nction][!] {name}([arguments]) [range] [abort] [dict]
+  			Define a new function by the name {name}.  The name
+  			must be made of alphanumeric characters and '_', and
+! 			must start with a capital or "s:" (see above).
+  
+  			{name} can also be a |Dictionary| entry that is a
+  			|Funcref|: >
+--- 6716,6727 ----
+  <
+  See |:verbose-cmd| for more information.
+  
+! 						*E124* *E125* *E853* *E884*
+  :fu[nction][!] {name}([arguments]) [range] [abort] [dict]
+  			Define a new function by the name {name}.  The name
+  			must be made of alphanumeric characters and '_', and
+! 			must start with a capital or "s:" (see above).  Note
+! 			that using "b:" or "g:" is not allowed.
+  
+  			{name} can also be a |Dictionary| entry that is a
+  			|Funcref|: >
+*** ../vim-7.4.259/src/eval.c	2014-04-11 10:22:46.288219453 +0200
+--- src/eval.c	2014-04-23 17:37:23.890957682 +0200
+***************
+*** 808,814 ****
+  static void list_func_head __ARGS((ufunc_T *fp, int indent));
+  static ufunc_T *find_func __ARGS((char_u *name));
+  static int function_exists __ARGS((char_u *name));
+! static int builtin_function __ARGS((char_u *name));
+  #ifdef FEAT_PROFILE
+  static void func_do_profile __ARGS((ufunc_T *fp));
+  static void prof_sort_list __ARGS((FILE *fd, ufunc_T **sorttab, int st_len, char *title, int prefer_self));
+--- 808,814 ----
+  static void list_func_head __ARGS((ufunc_T *fp, int indent));
+  static ufunc_T *find_func __ARGS((char_u *name));
+  static int function_exists __ARGS((char_u *name));
+! static int builtin_function __ARGS((char_u *name, int len));
+  #ifdef FEAT_PROFILE
+  static void func_do_profile __ARGS((ufunc_T *fp));
+  static void prof_sort_list __ARGS((FILE *fd, ufunc_T **sorttab, int st_len, char *title, int prefer_self));
+***************
+*** 8489,8495 ****
+  	rettv->vval.v_number = 0;
+  	error = ERROR_UNKNOWN;
+  
+! 	if (!builtin_function(fname))
+  	{
+  	    /*
+  	     * User defined function.
+--- 8489,8495 ----
+  	rettv->vval.v_number = 0;
+  	error = ERROR_UNKNOWN;
+  
+! 	if (!builtin_function(fname, -1))
+  	{
+  	    /*
+  	     * User defined function.
+***************
+*** 21584,21589 ****
+--- 21584,21590 ----
+       * Get the function name.  There are these situations:
+       * func	    normal function name
+       *		    "name" == func, "fudi.fd_dict" == NULL
++      * s:func	    script-local function name
+       * dict.func    new dictionary entry
+       *		    "name" == NULL, "fudi.fd_dict" set,
+       *		    "fudi.fd_di" == NULL, "fudi.fd_newkey" == func
+***************
+*** 22314,22324 ****
+  	    lead += (int)STRLEN(sid_buf);
+  	}
+      }
+!     else if (!(flags & TFN_INT) && builtin_function(lv.ll_name))
+      {
+! 	EMSG2(_("E128: Function name must start with a capital or contain a colon: %s"), lv.ll_name);
+  	goto theend;
+      }
+      name = alloc((unsigned)(len + lead + 1));
+      if (name != NULL)
+      {
+--- 22315,22338 ----
+  	    lead += (int)STRLEN(sid_buf);
+  	}
+      }
+!     else if (!(flags & TFN_INT) && builtin_function(lv.ll_name, len))
+      {
+! 	EMSG2(_("E128: Function name must start with a capital or \"s:\": %s"),
+! 								  lv.ll_name);
+  	goto theend;
+      }
++     if (!skip)
++     {
++ 	char_u *cp = vim_strchr(lv.ll_name, ':');
++ 
++ 	if (cp != NULL && cp < end)
++ 	{
++ 	    EMSG2(_("E884: Function name cannot contain a colon: %s"),
++ 								  lv.ll_name);
++ 	    goto theend;
++ 	}
++     }
++ 
+      name = alloc((unsigned)(len + lead + 1));
+      if (name != NULL)
+      {
+***************
+*** 22331,22337 ****
+  		STRCPY(name + 3, sid_buf);
+  	}
+  	mch_memmove(name + lead, lv.ll_name, (size_t)len);
+! 	name[len + lead] = NUL;
+      }
+      *pp = end;
+  
+--- 22345,22351 ----
+  		STRCPY(name + 3, sid_buf);
+  	}
+  	mch_memmove(name + lead, lv.ll_name, (size_t)len);
+! 	name[lead + len] = NUL;
+      }
+      *pp = end;
+  
+***************
+*** 22452,22458 ****
+  translated_function_exists(name)
+      char_u	*name;
+  {
+!     if (builtin_function(name))
+  	return find_internal_func(name) >= 0;
+      return find_func(name) != NULL;
+  }
+--- 22466,22472 ----
+  translated_function_exists(name)
+      char_u	*name;
+  {
+!     if (builtin_function(name, -1))
+  	return find_internal_func(name) >= 0;
+      return find_func(name) != NULL;
+  }
+***************
+*** 22500,22513 ****
+  
+  /*
+   * Return TRUE if "name" looks like a builtin function name: starts with a
+!  * lower case letter and doesn't contain a ':' or AUTOLOAD_CHAR.
+   */
+      static int
+! builtin_function(name)
+      char_u *name;
+  {
+!     return ASCII_ISLOWER(name[0]) && vim_strchr(name, ':') == NULL
+! 				   && vim_strchr(name, AUTOLOAD_CHAR) == NULL;
+  }
+  
+  #if defined(FEAT_PROFILE) || defined(PROTO)
+--- 22514,22533 ----
+  
+  /*
+   * Return TRUE if "name" looks like a builtin function name: starts with a
+!  * lower case letter and doesn't contain AUTOLOAD_CHAR.
+!  * "len" is the length of "name", or -1 for NUL terminated.
+   */
+      static int
+! builtin_function(name, len)
+      char_u *name;
++     int len;
+  {
+!     char_u *p;
+! 
+!     if (!ASCII_ISLOWER(name[0]))
+! 	return FALSE;
+!     p = vim_strchr(name, AUTOLOAD_CHAR);
+!     return p == NULL || (len > 0 && p > name + len);
+  }
+  
+  #if defined(FEAT_PROFILE) || defined(PROTO)
+*** ../vim-7.4.259/src/testdir/test_eval.in	2014-04-05 21:28:50.667174384 +0200
+--- src/testdir/test_eval.in	2014-04-23 17:35:12.086960858 +0200
+***************
+*** 144,149 ****
+--- 144,167 ----
+  :delcommand AR
+  :call garbagecollect(1)
+  :"
++ :" function name includes a colon
++ :try
++ :func! g:test()
++ :echo "test"
++ :endfunc
++ :catch
++ :$put =v:exception
++ :endtry
++ :"
++ :" function name folowed by #
++ :try
++ :func! test2() "#
++ :echo "test2"
++ :endfunc
++ :catch
++ :$put =v:exception
++ :endtry
++ :"
+  :/^start:/+1,$wq! test.out
+  :" vim: et ts=4 isk-=\: fmr=???,???
+  :call getchar()
+*** ../vim-7.4.259/src/testdir/test_eval.ok	2014-04-05 21:28:50.667174384 +0200
+--- src/testdir/test_eval.ok	2014-04-23 17:36:34.602958870 +0200
+***************
+*** 335,337 ****
+--- 335,339 ----
+  Vim(call):E883: search pattern and expression register may not contain two or more lines
+  Executing call setreg(1, ["", "", [], ""])
+  Vim(call):E730: using List as a String
++ Vim(function):E128: Function name must start with a capital or "s:": g:test()
++ Vim(function):E128: Function name must start with a capital or "s:": test2() "#
+*** ../vim-7.4.259/src/version.c	2014-04-23 12:52:36.499369426 +0200
+--- src/version.c	2014-04-23 17:17:50.994985945 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     260,
+  /**/
+
+-- 
+From "know your smileys":
+ ;-0	Can't find shift key
+ ,-9	Kann Umschalttaste nicht finden
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.261 b/SOURCES/7.4.261
new file mode 100644
index 0000000..a9ca118
--- /dev/null
+++ b/SOURCES/7.4.261
@@ -0,0 +1,106 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.261
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.261
+Problem:    When updating the window involves a regexp pattern, an interactive
+	    substitute to replace a "\n" with a line break fails. (Ingo
+	    Karkat)
+Solution:   Set reg_line_lbr in vim_regsub() and vim_regsub_multi().
+Files:	    src/regexp.c, src/testdir/test79.in, src/testdir/test79.ok
+
+
+*** ../vim-7.4.260/src/regexp.c	2014-04-06 21:33:39.671363743 +0200
+--- src/regexp.c	2014-04-23 18:40:37.094866280 +0200
+***************
+*** 7381,7386 ****
+--- 7381,7387 ----
+      reg_mmatch = NULL;
+      reg_maxline = 0;
+      reg_buf = curbuf;
++     reg_line_lbr = TRUE;
+      return vim_regsub_both(source, dest, copy, magic, backslash);
+  }
+  #endif
+***************
+*** 7400,7405 ****
+--- 7401,7407 ----
+      reg_buf = curbuf;		/* always works on the current buffer! */
+      reg_firstlnum = lnum;
+      reg_maxline = curbuf->b_ml.ml_line_count - lnum;
++     reg_line_lbr = FALSE;
+      return vim_regsub_both(source, dest, copy, magic, backslash);
+  }
+  
+*** ../vim-7.4.260/src/testdir/test79.in	2014-04-02 19:00:53.043644100 +0200
+--- src/testdir/test79.in	2014-04-23 18:36:29.158872254 +0200
+***************
+*** 1,6 ****
+--- 1,7 ----
+  Test for *sub-replace-special* and *sub-replace-expression* on :substitute.
+  Test for submatch() on :substitue.
+  Test for *:s%* on :substitute.
++ Test for :s replacing \n with  line break.
+  
+  STARTTEST
+  :so small.vim
+***************
+*** 234,239 ****
+--- 235,254 ----
+  Q
+  
+  STARTTEST
++ :function! TitleString()
++   let check = 'foo' =~ 'bar'
++   return ""
++ endfunction
++ :set titlestring=%{TitleString()}
++ :/^test_one/s/.*/\="foo\nbar"/
++ :/^test_two/s/.*/\="foo\nbar"/c
++ y
++ ENDTEST
++ 
++ test_one
++ test_two
++ 
++ STARTTEST
+  :g/^STARTTEST/.,/^ENDTEST/d
+  :1;/^Results/,$wq! test.out
+  :call getchar()
+*** ../vim-7.4.260/src/testdir/test79.ok	2014-04-02 19:00:53.043644100 +0200
+--- src/testdir/test79.ok	2014-04-23 18:35:30.650873664 +0200
+***************
+*** 126,128 ****
+--- 126,134 ----
+  Q
+  Q
+  
++ 
++ foo
++ bar
++ foo
++ bar
++ 
+*** ../vim-7.4.260/src/version.c	2014-04-23 17:43:37.366948683 +0200
+--- src/version.c	2014-04-23 18:46:45.250857408 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     261,
+  /**/
+
+-- 
+From "know your smileys":
+ !-|	I-am-a-Cylon-Centurian-with-one-red-eye-bouncing-back-and-forth
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.262 b/SOURCES/7.4.262
new file mode 100644
index 0000000..ef29032
--- /dev/null
+++ b/SOURCES/7.4.262
@@ -0,0 +1,314 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.262
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.262
+Problem:    Duplicate code in regexec().
+Solution:   Add line_lbr flag to regexec_nl().
+Files:	    src/regexp.c, src/regexp_nfa.c, src/regexp.h
+
+
+*** ../vim-7.4.261/src/regexp.c	2014-04-23 18:48:43.546854558 +0200
+--- src/regexp.c	2014-04-23 18:59:38.606838773 +0200
+***************
+*** 3709,3733 ****
+  /* TRUE if using multi-line regexp. */
+  #define REG_MULTI	(reg_match == NULL)
+  
+! static int  bt_regexec __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
+  
+  /*
+   * Match a regexp against a string.
+   * "rmp->regprog" is a compiled regexp as returned by vim_regcomp().
+   * Uses curbuf for line count and 'iskeyword'.
+   *
+   * Return TRUE if there is a match, FALSE if not.
+   */
+      static int
+! bt_regexec(rmp, line, col)
+      regmatch_T	*rmp;
+      char_u	*line;	/* string to match against */
+      colnr_T	col;	/* column to start looking for match */
+  {
+      reg_match = rmp;
+      reg_mmatch = NULL;
+      reg_maxline = 0;
+!     reg_line_lbr = FALSE;
+      reg_buf = curbuf;
+      reg_win = NULL;
+      ireg_ic = rmp->rm_ic;
+--- 3709,3736 ----
+  /* TRUE if using multi-line regexp. */
+  #define REG_MULTI	(reg_match == NULL)
+  
+! static int  bt_regexec_nl __ARGS((regmatch_T *rmp, char_u *line, colnr_T col, int line_lbr));
+! 
+  
+  /*
+   * Match a regexp against a string.
+   * "rmp->regprog" is a compiled regexp as returned by vim_regcomp().
+   * Uses curbuf for line count and 'iskeyword'.
++  * if "line_lbr" is TRUE  consider a "\n" in "line" to be a line break.
+   *
+   * Return TRUE if there is a match, FALSE if not.
+   */
+      static int
+! bt_regexec_nl(rmp, line, col, line_lbr)
+      regmatch_T	*rmp;
+      char_u	*line;	/* string to match against */
+      colnr_T	col;	/* column to start looking for match */
++     int		line_lbr;
+  {
+      reg_match = rmp;
+      reg_mmatch = NULL;
+      reg_maxline = 0;
+!     reg_line_lbr = line_lbr;
+      reg_buf = curbuf;
+      reg_win = NULL;
+      ireg_ic = rmp->rm_ic;
+***************
+*** 3738,3772 ****
+      return (bt_regexec_both(line, col, NULL) != 0);
+  }
+  
+- #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
+- 	|| defined(FIND_REPLACE_DIALOG) || defined(PROTO)
+- 
+- static int  bt_regexec_nl __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
+- 
+- /*
+-  * Like vim_regexec(), but consider a "\n" in "line" to be a line break.
+-  */
+-     static int
+- bt_regexec_nl(rmp, line, col)
+-     regmatch_T	*rmp;
+-     char_u	*line;	/* string to match against */
+-     colnr_T	col;	/* column to start looking for match */
+- {
+-     reg_match = rmp;
+-     reg_mmatch = NULL;
+-     reg_maxline = 0;
+-     reg_line_lbr = TRUE;
+-     reg_buf = curbuf;
+-     reg_win = NULL;
+-     ireg_ic = rmp->rm_ic;
+- #ifdef FEAT_MBYTE
+-     ireg_icombine = FALSE;
+- #endif
+-     ireg_maxcol = 0;
+-     return (bt_regexec_both(line, col, NULL) != 0);
+- }
+- #endif
+- 
+  static long bt_regexec_multi __ARGS((regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, proftime_T *tm));
+  
+  /*
+--- 3741,3746 ----
+***************
+*** 7985,7995 ****
+  {
+      bt_regcomp,
+      bt_regfree,
+-     bt_regexec,
+- #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
+- 	|| defined(FIND_REPLACE_DIALOG) || defined(PROTO)
+      bt_regexec_nl,
+- #endif
+      bt_regexec_multi
+  #ifdef DEBUG
+      ,(char_u *)""
+--- 7959,7965 ----
+***************
+*** 8003,8013 ****
+  {
+      nfa_regcomp,
+      nfa_regfree,
+-     nfa_regexec,
+- #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
+- 	|| defined(FIND_REPLACE_DIALOG) || defined(PROTO)
+      nfa_regexec_nl,
+- #endif
+      nfa_regexec_multi
+  #ifdef DEBUG
+      ,(char_u *)""
+--- 7973,7979 ----
+***************
+*** 8131,8137 ****
+      char_u      *line;  /* string to match against */
+      colnr_T     col;    /* column to start looking for match */
+  {
+!     return rmp->regprog->engine->regexec(rmp, line, col);
+  }
+  
+  #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
+--- 8097,8103 ----
+      char_u      *line;  /* string to match against */
+      colnr_T     col;    /* column to start looking for match */
+  {
+!     return rmp->regprog->engine->regexec_nl(rmp, line, col, FALSE);
+  }
+  
+  #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
+***************
+*** 8145,8151 ****
+      char_u *line;
+      colnr_T col;
+  {
+!     return rmp->regprog->engine->regexec_nl(rmp, line, col);
+  }
+  #endif
+  
+--- 8111,8117 ----
+      char_u *line;
+      colnr_T col;
+  {
+!     return rmp->regprog->engine->regexec_nl(rmp, line, col, TRUE);
+  }
+  #endif
+  
+*** ../vim-7.4.261/src/regexp_nfa.c	2014-04-06 21:33:39.675363743 +0200
+--- src/regexp_nfa.c	2014-04-23 19:00:44.354837189 +0200
+***************
+*** 311,317 ****
+  static long nfa_regexec_both __ARGS((char_u *line, colnr_T col));
+  static regprog_T *nfa_regcomp __ARGS((char_u *expr, int re_flags));
+  static void nfa_regfree __ARGS((regprog_T *prog));
+! static int nfa_regexec __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
+  static long nfa_regexec_multi __ARGS((regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, proftime_T *tm));
+  static int match_follows __ARGS((nfa_state_T *startstate, int depth));
+  static int failure_chance __ARGS((nfa_state_T *state, int depth));
+--- 311,317 ----
+  static long nfa_regexec_both __ARGS((char_u *line, colnr_T col));
+  static regprog_T *nfa_regcomp __ARGS((char_u *expr, int re_flags));
+  static void nfa_regfree __ARGS((regprog_T *prog));
+! static int  nfa_regexec_nl __ARGS((regmatch_T *rmp, char_u *line, colnr_T col, int line_lbr));
+  static long nfa_regexec_multi __ARGS((regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, proftime_T *tm));
+  static int match_follows __ARGS((nfa_state_T *startstate, int depth));
+  static int failure_chance __ARGS((nfa_state_T *state, int depth));
+***************
+*** 7060,7078 ****
+   * Match a regexp against a string.
+   * "rmp->regprog" is a compiled regexp as returned by nfa_regcomp().
+   * Uses curbuf for line count and 'iskeyword'.
+   *
+   * Return TRUE if there is a match, FALSE if not.
+   */
+      static int
+! nfa_regexec(rmp, line, col)
+      regmatch_T	*rmp;
+      char_u	*line;	/* string to match against */
+      colnr_T	col;	/* column to start looking for match */
+  {
+      reg_match = rmp;
+      reg_mmatch = NULL;
+      reg_maxline = 0;
+!     reg_line_lbr = FALSE;
+      reg_buf = curbuf;
+      reg_win = NULL;
+      ireg_ic = rmp->rm_ic;
+--- 7060,7080 ----
+   * Match a regexp against a string.
+   * "rmp->regprog" is a compiled regexp as returned by nfa_regcomp().
+   * Uses curbuf for line count and 'iskeyword'.
++  * If "line_lbr" is TRUE consider a "\n" in "line" to be a line break.
+   *
+   * Return TRUE if there is a match, FALSE if not.
+   */
+      static int
+! nfa_regexec_nl(rmp, line, col, line_lbr)
+      regmatch_T	*rmp;
+      char_u	*line;	/* string to match against */
+      colnr_T	col;	/* column to start looking for match */
++     int		line_lbr;
+  {
+      reg_match = rmp;
+      reg_mmatch = NULL;
+      reg_maxline = 0;
+!     reg_line_lbr = line_lbr;
+      reg_buf = curbuf;
+      reg_win = NULL;
+      ireg_ic = rmp->rm_ic;
+***************
+*** 7083,7117 ****
+      return (nfa_regexec_both(line, col) != 0);
+  }
+  
+- #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
+- 	|| defined(FIND_REPLACE_DIALOG) || defined(PROTO)
+- 
+- static int  nfa_regexec_nl __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
+- 
+- /*
+-  * Like nfa_regexec(), but consider a "\n" in "line" to be a line break.
+-  */
+-     static int
+- nfa_regexec_nl(rmp, line, col)
+-     regmatch_T	*rmp;
+-     char_u	*line;	/* string to match against */
+-     colnr_T	col;	/* column to start looking for match */
+- {
+-     reg_match = rmp;
+-     reg_mmatch = NULL;
+-     reg_maxline = 0;
+-     reg_line_lbr = TRUE;
+-     reg_buf = curbuf;
+-     reg_win = NULL;
+-     ireg_ic = rmp->rm_ic;
+- #ifdef FEAT_MBYTE
+-     ireg_icombine = FALSE;
+- #endif
+-     ireg_maxcol = 0;
+-     return (nfa_regexec_both(line, col) != 0);
+- }
+- #endif
+- 
+  
+  /*
+   * Match a regexp against multiple lines.
+--- 7085,7090 ----
+*** ../vim-7.4.261/src/regexp.h	2013-06-11 10:53:14.000000000 +0200
+--- src/regexp.h	2014-04-23 18:58:18.614840701 +0200
+***************
+*** 149,159 ****
+  {
+      regprog_T	*(*regcomp)(char_u*, int);
+      void	(*regfree)(regprog_T *);
+!     int		(*regexec)(regmatch_T*, char_u*, colnr_T);
+! #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
+! 	|| defined(FIND_REPLACE_DIALOG) || defined(PROTO)
+!     int		(*regexec_nl)(regmatch_T*, char_u*, colnr_T);
+! #endif
+      long	(*regexec_multi)(regmmatch_T*, win_T*, buf_T*, linenr_T, colnr_T, proftime_T*);
+  #ifdef DEBUG
+      char_u	*expr;
+--- 149,155 ----
+  {
+      regprog_T	*(*regcomp)(char_u*, int);
+      void	(*regfree)(regprog_T *);
+!     int		(*regexec_nl)(regmatch_T*, char_u*, colnr_T, int);
+      long	(*regexec_multi)(regmmatch_T*, win_T*, buf_T*, linenr_T, colnr_T, proftime_T*);
+  #ifdef DEBUG
+      char_u	*expr;
+*** ../vim-7.4.261/src/version.c	2014-04-23 18:48:43.546854558 +0200
+--- src/version.c	2014-04-23 18:52:20.102849340 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     262,
+  /**/
+
+-- 
+From "know your smileys":
+ ~#:-(	I just washed my hair, and I can't do nuthin' with it.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.263 b/SOURCES/7.4.263
new file mode 100644
index 0000000..ee7fd13
--- /dev/null
+++ b/SOURCES/7.4.263
@@ -0,0 +1,44 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.263
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.263
+Problem:    GCC 4.8 compiler warning for hiding a declaration (Francois Gannaz)
+Solution:   Remove the second declaration.
+Files:	    src/eval.c
+
+
+*** ../vim-7.4.262/src/eval.c	2014-04-23 17:43:37.362948683 +0200
+--- src/eval.c	2014-04-23 19:34:46.678787977 +0200
+***************
+*** 18319,18325 ****
+  	char_u		*s = NULL;
+  	char_u		*start;
+  	char_u		*end;
+- 	char_u		*p;
+  	int		i;
+  
+  	res = get_cmd_output(get_tv_string(&argvars[0]), infile,
+--- 18319,18324 ----
+*** ../vim-7.4.262/src/version.c	2014-04-23 19:06:33.702828771 +0200
+--- src/version.c	2014-04-23 19:43:22.366775550 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     263,
+  /**/
+
+-- 
+How many light bulbs does it take to change a person?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.264 b/SOURCES/7.4.264
new file mode 100644
index 0000000..06776b8
--- /dev/null
+++ b/SOURCES/7.4.264
@@ -0,0 +1,176 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.264
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.264 (after 7.4.260)
+Problem:    Can't define a function starting with "g:".  Can't assign a
+	    funcref to a buffer-local variable.
+Solution:   Skip "g:" at the start of a function name.  Don't check for colons
+	    when assigning to a variable.
+Files:	    src/eval.c, src/testdir/test_eval.in, src/testdir/test_eval.ok
+
+
+*** ../vim-7.4.263/src/eval.c	2014-04-23 19:44:26.366774008 +0200
+--- src/eval.c	2014-04-23 20:40:16.738693276 +0200
+***************
+*** 21583,21589 ****
+       * Get the function name.  There are these situations:
+       * func	    normal function name
+       *		    "name" == func, "fudi.fd_dict" == NULL
+-      * s:func	    script-local function name
+       * dict.func    new dictionary entry
+       *		    "name" == NULL, "fudi.fd_dict" set,
+       *		    "fudi.fd_di" == NULL, "fudi.fd_newkey" == func
+--- 21583,21588 ----
+***************
+*** 21593,21598 ****
+--- 21592,21599 ----
+       * dict.func    existing dict entry that's not a Funcref
+       *		    "name" == NULL, "fudi.fd_dict" set,
+       *		    "fudi.fd_di" set, "fudi.fd_newkey" == NULL
++      * s:func	    script-local function name
++      * g:func	    global function name, same as "func"
+       */
+      p = eap->arg;
+      name = trans_function_name(&p, eap->skip, 0, &fudi);
+***************
+*** 22286,22292 ****
+      }
+      else
+      {
+! 	if (lead == 2)	/* skip over "s:" */
+  	    lv.ll_name += 2;
+  	len = (int)(end - lv.ll_name);
+      }
+--- 22287,22294 ----
+      }
+      else
+      {
+! 	/* skip over "s:" and "g:" */
+! 	if (lead == 2 || (lv.ll_name[0] == 'g' && lv.ll_name[1] == ':'))
+  	    lv.ll_name += 2;
+  	len = (int)(end - lv.ll_name);
+      }
+***************
+*** 22317,22333 ****
+      else if (!(flags & TFN_INT) && builtin_function(lv.ll_name, len))
+      {
+  	EMSG2(_("E128: Function name must start with a capital or \"s:\": %s"),
+! 								  lv.ll_name);
+  	goto theend;
+      }
+!     if (!skip)
+      {
+  	char_u *cp = vim_strchr(lv.ll_name, ':');
+  
+  	if (cp != NULL && cp < end)
+  	{
+! 	    EMSG2(_("E884: Function name cannot contain a colon: %s"),
+! 								  lv.ll_name);
+  	    goto theend;
+  	}
+      }
+--- 22319,22334 ----
+      else if (!(flags & TFN_INT) && builtin_function(lv.ll_name, len))
+      {
+  	EMSG2(_("E128: Function name must start with a capital or \"s:\": %s"),
+! 								       start);
+  	goto theend;
+      }
+!     if (!skip && !(flags & TFN_QUIET))
+      {
+  	char_u *cp = vim_strchr(lv.ll_name, ':');
+  
+  	if (cp != NULL && cp < end)
+  	{
+! 	    EMSG2(_("E884: Function name cannot contain a colon: %s"), start);
+  	    goto theend;
+  	}
+      }
+*** ../vim-7.4.263/src/testdir/test_eval.in	2014-04-23 17:43:37.362948683 +0200
+--- src/testdir/test_eval.in	2014-04-23 20:36:50.494698246 +0200
+***************
+*** 144,150 ****
+  :delcommand AR
+  :call garbagecollect(1)
+  :"
+! :" function name includes a colon
+  :try
+  :func! g:test()
+  :echo "test"
+--- 144,150 ----
+  :delcommand AR
+  :call garbagecollect(1)
+  :"
+! :" function name not starting with capital
+  :try
+  :func! g:test()
+  :echo "test"
+***************
+*** 153,158 ****
+--- 153,167 ----
+  :$put =v:exception
+  :endtry
+  :"
++ :" function name includes a colon
++ :try
++ :func! b:test()
++ :echo "test"
++ :endfunc
++ :catch
++ :$put =v:exception
++ :endtry
++ :"
+  :" function name folowed by #
+  :try
+  :func! test2() "#
+***************
+*** 162,167 ****
+--- 171,183 ----
+  :$put =v:exception
+  :endtry
+  :"
++ :" function name starting with/without "g:", buffer-local funcref.
++ :function! g:Foo()
++ :  $put ='called Foo()'
++ :endfunction
++ :let b:my_func = function('Foo')
++ :call b:my_func()
++ :"
+  :/^start:/+1,$wq! test.out
+  :" vim: et ts=4 isk-=\: fmr=???,???
+  :call getchar()
+*** ../vim-7.4.263/src/testdir/test_eval.ok	2014-04-23 17:43:37.362948683 +0200
+--- src/testdir/test_eval.ok	2014-04-23 20:37:45.526696920 +0200
+***************
+*** 336,339 ****
+--- 336,341 ----
+  Executing call setreg(1, ["", "", [], ""])
+  Vim(call):E730: using List as a String
+  Vim(function):E128: Function name must start with a capital or "s:": g:test()
++ Vim(function):E128: Function name must start with a capital or "s:": b:test()
+  Vim(function):E128: Function name must start with a capital or "s:": test2() "#
++ called Foo()
+*** ../vim-7.4.263/src/version.c	2014-04-23 19:44:26.370774008 +0200
+--- src/version.c	2014-04-23 20:27:17.614712050 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     264,
+  /**/
+
+-- 
+In order for something to become clean, something else must become dirty;
+but you can get everything dirty without getting anything clean.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.265 b/SOURCES/7.4.265
new file mode 100644
index 0000000..da88bdb
--- /dev/null
+++ b/SOURCES/7.4.265
@@ -0,0 +1,153 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.265
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.265 (after 7.4.260)
+Problem:    Can't call a global function with "g:" in an expression.
+Solution:   Skip the "g:" when looking up the function.
+Files:	    src/eval.c, src/testdir/test_eval.in, src/testdir/test_eval.ok
+
+
+*** ../vim-7.4.264/src/eval.c	2014-04-23 20:43:07.290689167 +0200
+--- src/eval.c	2014-04-24 17:06:38.884920215 +0200
+***************
+*** 8485,8517 ****
+      /* execute the function if no errors detected and executing */
+      if (evaluate && error == ERROR_NONE)
+      {
+  	rettv->v_type = VAR_NUMBER;	/* default rettv is number zero */
+  	rettv->vval.v_number = 0;
+  	error = ERROR_UNKNOWN;
+  
+! 	if (!builtin_function(fname, -1))
+  	{
+  	    /*
+  	     * User defined function.
+  	     */
+! 	    fp = find_func(fname);
+  
+  #ifdef FEAT_AUTOCMD
+  	    /* Trigger FuncUndefined event, may load the function. */
+  	    if (fp == NULL
+  		    && apply_autocmds(EVENT_FUNCUNDEFINED,
+! 						     fname, fname, TRUE, NULL)
+  		    && !aborting())
+  	    {
+  		/* executed an autocommand, search for the function again */
+! 		fp = find_func(fname);
+  	    }
+  #endif
+  	    /* Try loading a package. */
+! 	    if (fp == NULL && script_autoload(fname, TRUE) && !aborting())
+  	    {
+  		/* loaded a package, search for the function again */
+! 		fp = find_func(fname);
+  	    }
+  
+  	    if (fp != NULL)
+--- 8485,8523 ----
+      /* execute the function if no errors detected and executing */
+      if (evaluate && error == ERROR_NONE)
+      {
++ 	char_u *rfname = fname;
++ 
++ 	/* Ignore "g:" before a function name. */
++ 	if (fname[0] == 'g' && fname[1] == ':')
++ 	    rfname = fname + 2;
++ 
+  	rettv->v_type = VAR_NUMBER;	/* default rettv is number zero */
+  	rettv->vval.v_number = 0;
+  	error = ERROR_UNKNOWN;
+  
+! 	if (!builtin_function(rfname, -1))
+  	{
+  	    /*
+  	     * User defined function.
+  	     */
+! 	    fp = find_func(rfname);
+  
+  #ifdef FEAT_AUTOCMD
+  	    /* Trigger FuncUndefined event, may load the function. */
+  	    if (fp == NULL
+  		    && apply_autocmds(EVENT_FUNCUNDEFINED,
+! 						     rfname, rfname, TRUE, NULL)
+  		    && !aborting())
+  	    {
+  		/* executed an autocommand, search for the function again */
+! 		fp = find_func(rfname);
+  	    }
+  #endif
+  	    /* Try loading a package. */
+! 	    if (fp == NULL && script_autoload(rfname, TRUE) && !aborting())
+  	    {
+  		/* loaded a package, search for the function again */
+! 		fp = find_func(rfname);
+  	    }
+  
+  	    if (fp != NULL)
+*** ../vim-7.4.264/src/testdir/test_eval.in	2014-04-23 20:43:07.290689167 +0200
+--- src/testdir/test_eval.in	2014-04-24 17:07:57.108918330 +0200
+***************
+*** 172,182 ****
+  :endtry
+  :"
+  :" function name starting with/without "g:", buffer-local funcref.
+! :function! g:Foo()
+! :  $put ='called Foo()'
+  :endfunction
+  :let b:my_func = function('Foo')
+! :call b:my_func()
+  :"
+  :/^start:/+1,$wq! test.out
+  :" vim: et ts=4 isk-=\: fmr=???,???
+--- 172,184 ----
+  :endtry
+  :"
+  :" function name starting with/without "g:", buffer-local funcref.
+! :function! g:Foo(n)
+! :  $put ='called Foo(' . a:n . ')'
+  :endfunction
+  :let b:my_func = function('Foo')
+! :call b:my_func(1)
+! :echo g:Foo(2)
+! :echo Foo(3)
+  :"
+  :/^start:/+1,$wq! test.out
+  :" vim: et ts=4 isk-=\: fmr=???,???
+*** ../vim-7.4.264/src/testdir/test_eval.ok	2014-04-23 20:43:07.290689167 +0200
+--- src/testdir/test_eval.ok	2014-04-24 16:54:36.856937613 +0200
+***************
+*** 338,341 ****
+  Vim(function):E128: Function name must start with a capital or "s:": g:test()
+  Vim(function):E128: Function name must start with a capital or "s:": b:test()
+  Vim(function):E128: Function name must start with a capital or "s:": test2() "#
+! called Foo()
+--- 338,343 ----
+  Vim(function):E128: Function name must start with a capital or "s:": g:test()
+  Vim(function):E128: Function name must start with a capital or "s:": b:test()
+  Vim(function):E128: Function name must start with a capital or "s:": test2() "#
+! called Foo(1)
+! called Foo(2)
+! called Foo(3)
+*** ../vim-7.4.264/src/version.c	2014-04-23 20:43:07.290689167 +0200
+--- src/version.c	2014-04-24 16:56:24.520935019 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     265,
+  /**/
+
+-- 
+The sooner you fall behind, the more time you'll have to catch up.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.266 b/SOURCES/7.4.266
new file mode 100644
index 0000000..23d56ac
--- /dev/null
+++ b/SOURCES/7.4.266
@@ -0,0 +1,46 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.266
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.266
+Problem:    Test 62 fails.
+Solution:   Set the language to C. (Christian Brabandt)
+Files:	    src/testdir/test62.in
+
+
+*** ../vim-7.4.265/src/testdir/test62.in	2013-07-14 13:37:12.000000000 +0200
+--- src/testdir/test62.in	2014-04-29 11:50:50.676058452 +0200
+***************
+*** 2,7 ****
+--- 2,8 ----
+  
+  STARTTEST
+  :so small.vim
++ :lang C
+  :" Simple test for opening and closing a tab page
+  :tabnew
+  :let nr = tabpagenr()
+*** ../vim-7.4.265/src/version.c	2014-04-24 17:12:29.584911764 +0200
+--- src/version.c	2014-04-29 11:51:32.356057722 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     266,
+  /**/
+
+-- 
+I AM THANKFUL...
+...for a lawn that needs mowing, windows that need cleaning
+and gutters that need fixing because it means I have a home.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.267 b/SOURCES/7.4.267
new file mode 100644
index 0000000..376e9ee
--- /dev/null
+++ b/SOURCES/7.4.267
@@ -0,0 +1,438 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.2
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.267 (after 7.4.178)
+Problem:    The '[ mark is in the wrong position after "gq". (Ingo Karkat)
+Solution:   Add the setmark argument to do_join(). (Christian Brabandt)
+Files:	    src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
+	    src/testdir/Make_ming.mak, src/testdir/Make_os2.mak,
+	    src/testdir/Make_vms.mms, src/testdir/Makefile,
+	    src/testdir/test_autoformat_join.in,
+	    src/testdir/test_autoformat_join.ok, src/Makefile, src/edit.c,
+	    src/ex_cmds.c, src/ex_docmd.c, src/normal.c, src/ops.c,
+	    src/proto/ops.pro
+
+
+*** ../vim-7.4.266/src/testdir/Make_amiga.mak	2014-04-02 19:54:58.275599459 +0200
+--- src/testdir/Make_amiga.mak	2014-04-29 12:02:34.144046123 +0200
+***************
+*** 36,41 ****
+--- 36,42 ----
+  		test94.out test95.out test96.out test97.out test98.out \
+  		test99.out test100.out test101.out test102.out test103.out \
+  		test104.out test105.out test106.out \
++ 		test_autoformat_join.out \
+  		test_eval.out \
+  		test_options.out
+  
+***************
+*** 160,164 ****
+--- 161,166 ----
+  test104.out: test104.in
+  test105.out: test105.in
+  test106.out: test106.in
++ test_autoformat_join.out: test_autoformat_join.in
+  test_eval.out: test_eval.in
+  test_options.out: test_options.in
+*** ../vim-7.4.266/src/testdir/Make_dos.mak	2014-04-02 19:54:58.275599459 +0200
+--- src/testdir/Make_dos.mak	2014-04-29 12:02:45.128045931 +0200
+***************
+*** 35,40 ****
+--- 35,41 ----
+  		test94.out test95.out test96.out test98.out test99.out \
+  		test100.out test101.out test102.out test103.out test104.out \
+  		test105.out test106.out \
++ 		test_autoformat_join.out \
+  		test_eval.out \
+  		test_options.out
+  
+*** ../vim-7.4.266/src/testdir/Make_ming.mak	2014-04-02 19:54:58.275599459 +0200
+--- src/testdir/Make_ming.mak	2014-04-29 12:02:54.020045775 +0200
+***************
+*** 55,60 ****
+--- 55,61 ----
+  		test94.out test95.out test96.out test98.out test99.out \
+  		test100.out test101.out test102.out test103.out test104.out \
+  		test105.out test106.out \
++ 		test_autoformat_join.out \
+  		test_eval.out \
+  		test_options.out
+  
+*** ../vim-7.4.266/src/testdir/Make_os2.mak	2014-04-02 19:54:58.275599459 +0200
+--- src/testdir/Make_os2.mak	2014-04-29 12:03:03.384045611 +0200
+***************
+*** 37,42 ****
+--- 37,43 ----
+  		test94.out test95.out test96.out test98.out test99.out \
+  		test100.out test101.out test102.out test103.out test104.out \
+  		test105.out test106.out \
++ 		test_autoformat_join.out \
+  		test_eval.out \
+  		test_options.out
+  
+*** ../vim-7.4.266/src/testdir/Make_vms.mms	2014-04-02 19:54:58.275599459 +0200
+--- src/testdir/Make_vms.mms	2014-04-29 12:03:12.200045456 +0200
+***************
+*** 96,101 ****
+--- 96,102 ----
+  	 test95.out test96.out test98.out test99.out \
+  	 test100.out test101.out test103.out test104.out \
+  	 test105.out test106.out \
++ 	 test_autoformat_join.out \
+  	 test_eval.out \
+  	 test_options.out
+  
+*** ../vim-7.4.266/src/testdir/Makefile	2014-04-01 14:08:14.685074130 +0200
+--- src/testdir/Makefile	2014-04-29 12:02:09.152046561 +0200
+***************
+*** 33,38 ****
+--- 33,40 ----
+  		test94.out test95.out test96.out test97.out test98.out \
+  		test99.out test100.out test101.out test102.out test103.out \
+  		test104.out test105.out test106.out \
++ 		test_autoformat_join.out \
++ 		test_eval.out \
+  		test_options.out
+  
+  SCRIPTS_GUI = test16.out
+*** ../vim-7.4.266/src/testdir/test_autoformat_join.in	2014-04-29 12:12:57.324035202 +0200
+--- src/testdir/test_autoformat_join.in	2014-04-29 12:00:35.360048205 +0200
+***************
+*** 0 ****
+--- 1,23 ----
++ Tests for setting the '[,'] marks when joining lines.
++ 
++ STARTTEST
++ :so small.vim
++ :/^\t\t/
++ 0gqj
++ :let a=string(getpos("'[")).'/'.string(getpos("']"))
++ :/^This line/;'}-join
++ :let b=string(getpos("'[")).'/'.string(getpos("']"))
++ :$put ='First test: Start/End '.string(a)
++ :$put ='Second test: Start/End '.string(b)
++ :/^\t\t/,$wq! test.out
++ ENDTEST
++ 
++ 
++ 		O sodales, ludite, vos qui
++ attamen consulite per voster honur. Tua pulchra facies me fay planszer milies
++ 
++ This line.
++ Should be joined with the next line
++ and with this line
++ 
++ Results:
+*** ../vim-7.4.266/src/testdir/test_autoformat_join.ok	2014-04-29 12:12:57.332035201 +0200
+--- src/testdir/test_autoformat_join.ok	2014-04-29 12:00:35.360048205 +0200
+***************
+*** 0 ****
+--- 1,8 ----
++ 		O sodales, ludite, vos qui attamen consulite per voster honur.
++ Tua pulchra facies me fay planszer milies
++ 
++ This line.  Should be joined with the next line and with this line
++ 
++ Results:
++ First test: Start/End '[0, 16, 1, 0]/[0, 17, 1, 0]'
++ Second test: Start/End '[0, 19, 11, 0]/[0, 19, 67, 0]'
+*** ../vim-7.4.266/src/Makefile	2014-04-02 19:54:58.275599459 +0200
+--- src/Makefile	2014-04-29 12:03:48.600044818 +0200
+***************
+*** 1880,1885 ****
+--- 1880,1886 ----
+  
+  # Run individual test, assuming that Vim was already compiled.
+  test1 test2 test3 test4 test5 test6 test7 test8 test9 \
++ 	test_autoformat_join \
+  	test_eval \
+  	test_options \
+  	test10 test11 test12 test13 test14 test15 test16 test17 test18 test19 \
+*** ../vim-7.4.266/src/edit.c	2014-03-23 15:12:29.915264336 +0100
+--- src/edit.c	2014-04-29 12:08:50.608039525 +0200
+***************
+*** 8685,8691 ****
+      {
+  	temp = curwin->w_cursor.col;
+  	if (!can_bs(BS_EOL)		/* only if "eol" included */
+! 		|| do_join(2, FALSE, TRUE, FALSE) == FAIL)
+  	    vim_beep();
+  	else
+  	    curwin->w_cursor.col = temp;
+--- 8685,8691 ----
+      {
+  	temp = curwin->w_cursor.col;
+  	if (!can_bs(BS_EOL)		/* only if "eol" included */
+! 		|| do_join(2, FALSE, TRUE, FALSE, FALSE) == FAIL)
+  	    vim_beep();
+  	else
+  	    curwin->w_cursor.col = temp;
+***************
+*** 8866,8872 ****
+  			ptr[len - 1] = NUL;
+  		}
+  
+! 		(void)do_join(2, FALSE, FALSE, FALSE);
+  		if (temp == NUL && gchar_cursor() != NUL)
+  		    inc_cursor();
+  	    }
+--- 8866,8872 ----
+  			ptr[len - 1] = NUL;
+  		}
+  
+! 		(void)do_join(2, FALSE, FALSE, FALSE, FALSE);
+  		if (temp == NUL && gchar_cursor() != NUL)
+  		    inc_cursor();
+  	    }
+*** ../vim-7.4.266/src/ex_cmds.c	2014-04-06 20:45:40.119357453 +0200
+--- src/ex_cmds.c	2014-04-29 12:08:50.612039525 +0200
+***************
+*** 4444,4450 ****
+  	else if (*cmd == 'p')
+  	    eap->flags = EXFLAG_PRINT;
+  
+! 	(void)do_join(eap->line2 - eap->line1 + 1, FALSE, TRUE, FALSE);
+  	sub_nlines = sub_nsubs = eap->line2 - eap->line1 + 1;
+  	(void)do_sub_msg(FALSE);
+  	ex_may_print(eap);
+--- 4444,4450 ----
+  	else if (*cmd == 'p')
+  	    eap->flags = EXFLAG_PRINT;
+  
+! 	(void)do_join(eap->line2 - eap->line1 + 1, FALSE, TRUE, FALSE, TRUE);
+  	sub_nlines = sub_nsubs = eap->line2 - eap->line1 + 1;
+  	(void)do_sub_msg(FALSE);
+  	ex_may_print(eap);
+*** ../vim-7.4.266/src/ex_docmd.c	2014-04-02 14:22:00.119874274 +0200
+--- src/ex_docmd.c	2014-04-29 12:08:50.616039525 +0200
+***************
+*** 8717,8723 ****
+  	}
+  	++eap->line2;
+      }
+!     (void)do_join(eap->line2 - eap->line1 + 1, !eap->forceit, TRUE, TRUE);
+      beginline(BL_WHITE | BL_FIX);
+      ex_may_print(eap);
+  }
+--- 8717,8723 ----
+  	}
+  	++eap->line2;
+      }
+!     (void)do_join(eap->line2 - eap->line1 + 1, !eap->forceit, TRUE, TRUE, TRUE);
+      beginline(BL_WHITE | BL_FIX);
+      ex_may_print(eap);
+  }
+*** ../vim-7.4.266/src/normal.c	2014-03-23 15:12:29.927264336 +0100
+--- src/normal.c	2014-04-29 12:08:50.616039525 +0200
+***************
+*** 812,818 ****
+  
+      if (text_locked() && (nv_cmds[idx].cmd_flags & NV_NCW))
+      {
+! 	/* This command is not allowed while editing a ccmdline: beep. */
+  	clearopbeep(oap);
+  	text_locked_msg();
+  	goto normal_end;
+--- 812,818 ----
+  
+      if (text_locked() && (nv_cmds[idx].cmd_flags & NV_NCW))
+      {
+! 	/* This command is not allowed while editing a cmdline: beep. */
+  	clearopbeep(oap);
+  	text_locked_msg();
+  	goto normal_end;
+***************
+*** 1905,1911 ****
+  	    else
+  	    {
+  		(void)do_join(oap->line_count, oap->op_type == OP_JOIN,
+! 								  TRUE, TRUE);
+  		auto_format(FALSE, TRUE);
+  	    }
+  	    break;
+--- 1905,1911 ----
+  	    else
+  	    {
+  		(void)do_join(oap->line_count, oap->op_type == OP_JOIN,
+! 							    TRUE, TRUE, TRUE);
+  		auto_format(FALSE, TRUE);
+  	    }
+  	    break;
+***************
+*** 9236,9242 ****
+  	{
+  	    prep_redo(cap->oap->regname, cap->count0,
+  			 NUL, cap->cmdchar, NUL, NUL, cap->nchar);
+! 	    (void)do_join(cap->count0, cap->nchar == NUL, TRUE, TRUE);
+  	}
+      }
+  }
+--- 9236,9242 ----
+  	{
+  	    prep_redo(cap->oap->regname, cap->count0,
+  			 NUL, cap->cmdchar, NUL, NUL, cap->nchar);
+! 	    (void)do_join(cap->count0, cap->nchar == NUL, TRUE, TRUE, TRUE);
+  	}
+      }
+  }
+*** ../vim-7.4.266/src/ops.c	2014-04-12 12:26:25.856424387 +0200
+--- src/ops.c	2014-04-29 12:10:29.428037794 +0200
+***************
+*** 1979,1985 ****
+  		curwin->w_cursor = curpos;	/* restore curwin->w_cursor */
+  	    }
+  	    if (curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
+! 		(void)do_join(2, FALSE, FALSE, FALSE);
+  	}
+      }
+  
+--- 1979,1985 ----
+  		curwin->w_cursor = curpos;	/* restore curwin->w_cursor */
+  	    }
+  	    if (curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
+! 		(void)do_join(2, FALSE, FALSE, FALSE, FALSE);
+  	}
+      }
+  
+***************
+*** 4323,4339 ****
+  /*
+   * Join 'count' lines (minimal 2) at cursor position.
+   * When "save_undo" is TRUE save lines for undo first.
+!  * Set "use_formatoptions" to FALSE when e.g. processing
+!  * backspace and comment leaders should not be removed.
+   *
+   * return FAIL for failure, OK otherwise
+   */
+      int
+! do_join(count, insert_space, save_undo, use_formatoptions)
+      long    count;
+      int	    insert_space;
+      int	    save_undo;
+      int	    use_formatoptions UNUSED;
+  {
+      char_u	*curr = NULL;
+      char_u      *curr_start = NULL;
+--- 4323,4342 ----
+  /*
+   * Join 'count' lines (minimal 2) at cursor position.
+   * When "save_undo" is TRUE save lines for undo first.
+!  * Set "use_formatoptions" to FALSE when e.g. processing backspace and comment
+!  * leaders should not be removed.
+!  * When setmark is TRUE, sets the '[ and '] mark, else, the caller is expected
+!  * to set those marks.
+   *
+   * return FAIL for failure, OK otherwise
+   */
+      int
+! do_join(count, insert_space, save_undo, use_formatoptions, setmark)
+      long    count;
+      int	    insert_space;
+      int	    save_undo;
+      int	    use_formatoptions UNUSED;
++     int	    setmark;
+  {
+      char_u	*curr = NULL;
+      char_u      *curr_start = NULL;
+***************
+*** 4384,4390 ****
+      for (t = 0; t < count; ++t)
+      {
+  	curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t));
+! 	if (t == 0)
+  	{
+  	    /* Set the '[ mark. */
+  	    curwin->w_buffer->b_op_start.lnum = curwin->w_cursor.lnum;
+--- 4387,4393 ----
+      for (t = 0; t < count; ++t)
+      {
+  	curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t));
+! 	if (t == 0 && setmark)
+  	{
+  	    /* Set the '[ mark. */
+  	    curwin->w_buffer->b_op_start.lnum = curwin->w_cursor.lnum;
+***************
+*** 4506,4514 ****
+      }
+      ml_replace(curwin->w_cursor.lnum, newp, FALSE);
+  
+!     /* Set the '] mark. */
+!     curwin->w_buffer->b_op_end.lnum = curwin->w_cursor.lnum;
+!     curwin->w_buffer->b_op_end.col  = (colnr_T)STRLEN(newp);
+  
+      /* Only report the change in the first line here, del_lines() will report
+       * the deleted line. */
+--- 4509,4520 ----
+      }
+      ml_replace(curwin->w_cursor.lnum, newp, FALSE);
+  
+!     if (setmark)
+!     {
+! 	/* Set the '] mark. */
+! 	curwin->w_buffer->b_op_end.lnum = curwin->w_cursor.lnum;
+! 	curwin->w_buffer->b_op_end.col  = (colnr_T)STRLEN(newp);
+!     }
+  
+      /* Only report the change in the first line here, del_lines() will report
+       * the deleted line. */
+***************
+*** 5009,5015 ****
+  		    }
+  		}
+  		curwin->w_cursor.lnum--;
+! 		if (do_join(2, TRUE, FALSE, FALSE) == FAIL)
+  		{
+  		    beep_flush();
+  		    break;
+--- 5015,5021 ----
+  		    }
+  		}
+  		curwin->w_cursor.lnum--;
+! 		if (do_join(2, TRUE, FALSE, FALSE, FALSE) == FAIL)
+  		{
+  		    beep_flush();
+  		    break;
+*** ../vim-7.4.266/src/proto/ops.pro	2014-04-02 22:17:00.003482236 +0200
+--- src/proto/ops.pro	2014-04-29 12:08:50.620039525 +0200
+***************
+*** 37,43 ****
+  int preprocs_left __ARGS((void));
+  int get_register_name __ARGS((int num));
+  void ex_display __ARGS((exarg_T *eap));
+! int do_join __ARGS((long count, int insert_space, int save_undo, int use_formatoptions));
+  void op_format __ARGS((oparg_T *oap, int keep_cursor));
+  void op_formatexpr __ARGS((oparg_T *oap));
+  int fex_format __ARGS((linenr_T lnum, long count, int c));
+--- 37,43 ----
+  int preprocs_left __ARGS((void));
+  int get_register_name __ARGS((int num));
+  void ex_display __ARGS((exarg_T *eap));
+! int do_join __ARGS((long count, int insert_space, int save_undo, int use_formatoptions, int setmark));
+  void op_format __ARGS((oparg_T *oap, int keep_cursor));
+  void op_formatexpr __ARGS((oparg_T *oap));
+  int fex_format __ARGS((linenr_T lnum, long count, int c));
+*** ../vim-7.4.266/src/version.c	2014-04-29 11:55:26.176053624 +0200
+--- src/version.c	2014-04-29 11:59:35.620049252 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     267,
+  /**/
+
+-- 
+I AM THANKFUL...
+...for all the complaining I hear about the government
+because it means we have freedom of speech.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.268 b/SOURCES/7.4.268
new file mode 100644
index 0000000..84ab154
--- /dev/null
+++ b/SOURCES/7.4.268
@@ -0,0 +1,108 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.268
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.268
+Problem:    Using exists() on a funcref for a script-local function does not
+	    work.
+Solution:   Translate <SNR> to the special byte sequence.  Add a test.
+Files:	    src/eval.c, src/testdir/test_eval.in, src/testdir/test_eval.ok,
+	    src/testdir/test_eval_func.vim, Filelist
+
+
+*** ../vim-7.4.267/src/eval.c	2014-04-24 17:12:29.580911764 +0200
+--- src/eval.c	2014-04-29 13:49:26.759933737 +0200
+***************
+*** 22275,22280 ****
+--- 22275,22288 ----
+      {
+  	name = vim_strsave(name);
+  	*pp = end;
++ 	if (STRNCMP(name, "<SNR>", 5) == 0)
++ 	{
++ 	    /* Change "<SNR>" to the byte sequence. */
++ 	    name[0] = K_SPECIAL;
++ 	    name[1] = KS_EXTRA;
++ 	    name[2] = (int)KE_SNR;
++ 	    mch_memmove(name + 3, name + 5, STRLEN(name + 5) + 1);
++ 	}
+  	goto theend;
+      }
+  
+*** ../vim-7.4.267/src/testdir/test_eval.in	2014-04-24 17:12:29.584911764 +0200
+--- src/testdir/test_eval.in	2014-04-29 13:59:09.495923525 +0200
+***************
+*** 180,185 ****
+--- 180,188 ----
+  :echo g:Foo(2)
+  :echo Foo(3)
+  :"
++ :" script-local function used in Funcref must exist.
++ :so test_eval_func.vim
++ :"
+  :/^start:/+1,$wq! test.out
+  :" vim: et ts=4 isk-=\: fmr=???,???
+  :call getchar()
+*** ../vim-7.4.267/src/testdir/test_eval.ok	2014-04-24 17:12:29.584911764 +0200
+--- src/testdir/test_eval.ok	2014-04-29 13:59:39.551922998 +0200
+***************
+*** 341,343 ****
+--- 341,347 ----
+  called Foo(1)
+  called Foo(2)
+  called Foo(3)
++ s:Testje exists: 0
++ func s:Testje exists: 1
++ Bar exists: 1
++ func Bar exists: 1
+*** ../vim-7.4.267/src/testdir/test_eval_func.vim	2014-04-29 14:02:08.415920389 +0200
+--- src/testdir/test_eval_func.vim	2014-04-29 13:57:34.503925189 +0200
+***************
+*** 0 ****
+--- 1,10 ----
++ " Vim script used in test_eval.in.  Needed for script-local function.
++ 
++ func! s:Testje()
++   return "foo"
++ endfunc
++ let Bar = function('s:Testje')
++ $put ='s:Testje exists: ' . exists('s:Testje')
++ $put ='func s:Testje exists: ' . exists('*s:Testje')
++ $put ='Bar exists: ' . exists('Bar')
++ $put ='func Bar exists: ' . exists('*Bar')
+*** ../vim-7.4.267/Filelist	2014-04-05 21:59:35.939178415 +0200
+--- Filelist	2014-04-29 13:58:40.207924038 +0200
+***************
+*** 88,93 ****
+--- 88,94 ----
+  		src/testdir/test60.vim \
+  		src/testdir/test83-tags? \
+  		src/testdir/test77a.com \
++ 		src/testdir/test_*.vim \
+  		src/testdir/python2/*.py \
+  		src/testdir/python3/*.py \
+  		src/testdir/pythonx/*.py \
+*** ../vim-7.4.267/src/version.c	2014-04-29 12:15:22.860032651 +0200
+--- src/version.c	2014-04-29 13:47:32.935935732 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     268,
+  /**/
+
+-- 
+I AM THANKFUL...
+...for the piles of laundry and ironing because it means I
+have plenty of clothes to wear.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.270 b/SOURCES/7.4.270
new file mode 100644
index 0000000..ce9fb70
--- /dev/null
+++ b/SOURCES/7.4.270
@@ -0,0 +1,62 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.270
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.270
+Problem:    Comparing pointers instead of the string they point to.
+Solution:   Use strcmp(). (Ken Takata)
+Files:	    src/gui_gtk_x11.c
+
+
+*** ../vim-7.4.269/src/gui_gtk_x11.c	2014-04-06 21:08:41.311360470 +0200
+--- src/gui_gtk_x11.c	2014-04-29 15:02:35.931856814 +0200
+***************
+*** 3142,3151 ****
+  	gnome_program_init(VIMPACKAGE, VIM_VERSION_SHORT,
+  			   LIBGNOMEUI_MODULE, gui_argc, gui_argv, NULL);
+  # if defined(FEAT_FLOAT) && defined(LC_NUMERIC)
+! 	/* Make sure strtod() uses a decimal point, not a comma. Gnome init
+! 	 * may change it. */
+! 	if (setlocale(LC_NUMERIC, NULL) != (char *) "C")
+! 	   setlocale(LC_NUMERIC, "C");
+  # endif
+      }
+  #endif
+--- 3142,3155 ----
+  	gnome_program_init(VIMPACKAGE, VIM_VERSION_SHORT,
+  			   LIBGNOMEUI_MODULE, gui_argc, gui_argv, NULL);
+  # if defined(FEAT_FLOAT) && defined(LC_NUMERIC)
+! 	{
+! 	    char *p = setlocale(LC_NUMERIC, NULL);
+! 
+! 	    /* Make sure strtod() uses a decimal point, not a comma. Gnome
+! 	     * init may change it. */
+! 	    if (p == NULL || strcmp(p, "C") != 0)
+! 	       setlocale(LC_NUMERIC, "C");
+! 	}
+  # endif
+      }
+  #endif
+*** ../vim-7.4.269/src/version.c	2014-04-29 14:44:31.519875819 +0200
+--- src/version.c	2014-04-29 14:59:21.799860216 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     270,
+  /**/
+
+-- 
+From "know your smileys":
+ :-| :-|   Deja' vu!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.271 b/SOURCES/7.4.271
new file mode 100644
index 0000000..c7f03ee
--- /dev/null
+++ b/SOURCES/7.4.271
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.271
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.271
+Problem:    Compiler warning on 64 bit windows.
+Solution:   Add type cast. (Mike Williams)
+Files:	    src/ops.c
+
+
+*** ../vim-7.4.270/src/ops.c	2014-04-29 12:15:22.860032651 +0200
+--- src/ops.c	2014-04-29 15:54:23.055802359 +0200
+***************
+*** 6559,6565 ****
+      {
+  	for (ss = (char_u **) str; *ss != NULL; ++ss, ++lnum)
+  	{
+! 	    i = STRLEN(*ss);
+  	    pp[lnum] = vim_strnsave(*ss, i);
+  	    if (i > maxlen)
+  		maxlen = i;
+--- 6559,6565 ----
+      {
+  	for (ss = (char_u **) str; *ss != NULL; ++ss, ++lnum)
+  	{
+! 	    i = (long)STRLEN(*ss);
+  	    pp[lnum] = vim_strnsave(*ss, i);
+  	    if (i > maxlen)
+  		maxlen = i;
+*** ../vim-7.4.270/src/version.c	2014-04-29 15:11:39.783847283 +0200
+--- src/version.c	2014-04-29 15:52:54.083803919 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     271,
+  /**/
+
+-- 
+From "know your smileys":
+ :.-(	Crying
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.272 b/SOURCES/7.4.272
new file mode 100644
index 0000000..e893a96
--- /dev/null
+++ b/SOURCES/7.4.272
@@ -0,0 +1,148 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.272
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.272
+Problem:    Using just "$" does not cause an error message.
+Solution:   Check for empty environment variable name. (Christian Brabandt)
+Files:	    src/eval.c, src/testdir/test_eval.in, src/testdir/test_eval.ok
+
+
+*** ../vim-7.4.271/src/eval.c	2014-04-29 14:02:42.543919791 +0200
+--- src/eval.c	2014-04-29 17:33:40.575697949 +0200
+***************
+*** 7798,7804 ****
+   * Get the value of an environment variable.
+   * "arg" is pointing to the '$'.  It is advanced to after the name.
+   * If the environment variable was not set, silently assume it is empty.
+!  * Always return OK.
+   */
+      static int
+  get_env_tv(arg, rettv, evaluate)
+--- 7798,7804 ----
+   * Get the value of an environment variable.
+   * "arg" is pointing to the '$'.  It is advanced to after the name.
+   * If the environment variable was not set, silently assume it is empty.
+!  * Return FAIL if the name is invalid.
+   */
+      static int
+  get_env_tv(arg, rettv, evaluate)
+***************
+*** 7817,7848 ****
+      len = get_env_len(arg);
+      if (evaluate)
+      {
+! 	if (len != 0)
+  	{
+! 	    cc = name[len];
+! 	    name[len] = NUL;
+! 	    /* first try vim_getenv(), fast for normal environment vars */
+! 	    string = vim_getenv(name, &mustfree);
+! 	    if (string != NULL && *string != NUL)
+! 	    {
+! 		if (!mustfree)
+! 		    string = vim_strsave(string);
+! 	    }
+! 	    else
+! 	    {
+! 		if (mustfree)
+! 		    vim_free(string);
+  
+! 		/* next try expanding things like $VIM and ${HOME} */
+! 		string = expand_env_save(name - 1);
+! 		if (string != NULL && *string == '$')
+! 		{
+! 		    vim_free(string);
+! 		    string = NULL;
+! 		}
+  	    }
+- 	    name[len] = cc;
+  	}
+  	rettv->v_type = VAR_STRING;
+  	rettv->vval.v_string = string;
+      }
+--- 7817,7849 ----
+      len = get_env_len(arg);
+      if (evaluate)
+      {
+! 	if (len == 0)
+!            return FAIL; /* can't be an environment variable */
+! 
+! 	cc = name[len];
+! 	name[len] = NUL;
+! 	/* first try vim_getenv(), fast for normal environment vars */
+! 	string = vim_getenv(name, &mustfree);
+! 	if (string != NULL && *string != NUL)
+  	{
+! 	    if (!mustfree)
+! 		string = vim_strsave(string);
+! 	}
+! 	else
+! 	{
+! 	    if (mustfree)
+! 		vim_free(string);
+  
+! 	    /* next try expanding things like $VIM and ${HOME} */
+! 	    string = expand_env_save(name - 1);
+! 	    if (string != NULL && *string == '$')
+! 	    {
+! 		vim_free(string);
+! 		string = NULL;
+  	    }
+  	}
++ 	name[len] = cc;
++ 
+  	rettv->v_type = VAR_STRING;
+  	rettv->vval.v_string = string;
+      }
+*** ../vim-7.4.271/src/testdir/test_eval.in	2014-04-29 14:02:42.543919791 +0200
+--- src/testdir/test_eval.in	2014-04-29 17:35:27.243696080 +0200
+***************
+*** 183,188 ****
+--- 183,195 ----
+  :" script-local function used in Funcref must exist.
+  :so test_eval_func.vim
+  :"
++ :" Using $ instead of '$' must give an error
++ :try
++ : call append($, 'foobar')
++ :catch
++ :$put =v:exception
++ :endtry
++ :"
+  :/^start:/+1,$wq! test.out
+  :" vim: et ts=4 isk-=\: fmr=???,???
+  :call getchar()
+*** ../vim-7.4.271/src/testdir/test_eval.ok	2014-04-29 14:02:42.543919791 +0200
+--- src/testdir/test_eval.ok	2014-04-29 17:36:41.451694779 +0200
+***************
+*** 345,347 ****
+--- 345,348 ----
+  func s:Testje exists: 1
+  Bar exists: 1
+  func Bar exists: 1
++ Vim(call):E116: Invalid arguments for function append
+*** ../vim-7.4.271/src/version.c	2014-04-29 15:55:39.443801021 +0200
+--- src/version.c	2014-04-29 17:31:54.203699814 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     272,
+  /**/
+
+-- 
+From "know your smileys":
+ C=}>;*{)) Drunk, devilish chef with a toupee in an updraft,
+	   a mustache, and a double chin
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.273 b/SOURCES/7.4.273
new file mode 100644
index 0000000..2fe4d17
--- /dev/null
+++ b/SOURCES/7.4.273
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.273
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.273
+Problem:    "make autoconf" and "make reconfig" may first run configure and
+	    then remove the output.
+Solution:   Add these targets to the exceptions. (Ken Takata)
+Files:	    src/Makefile
+
+
+*** ../vim-7.4.272/src/Makefile	2014-04-29 12:15:22.852032651 +0200
+--- src/Makefile	2014-04-29 19:58:23.611545773 +0200
+***************
+*** 1670,1676 ****
+  	    ! grep -x -F 'ac_cv_env_CFLAGS_value=$(CFLAGS)' auto/config.cache > /dev/null; then \
+  		rm auto/config.cache; \
+  	fi
+! 	if test "X$(MAKECMDGOALS)" != "Xclean" -a "X$(MAKECMDGOALS)" != "Xdistclean"; then \
+  	    GUI_INC_LOC="$(GUI_INC_LOC)" GUI_LIB_LOC="$(GUI_LIB_LOC)" \
+  		CC="$(CC)" CPPFLAGS="$(CPPFLAGS)" CFLAGS="$(CFLAGS)" \
+  		LDFLAGS="$(LDFLAGS)" $(CONF_SHELL) srcdir="$(srcdir)" \
+--- 1670,1679 ----
+  	    ! grep -x -F 'ac_cv_env_CFLAGS_value=$(CFLAGS)' auto/config.cache > /dev/null; then \
+  		rm auto/config.cache; \
+  	fi
+! 	if test "X$(MAKECMDGOALS)" != "Xclean" \
+! 		-a "X$(MAKECMDGOALS)" != "Xdistclean" \
+! 		-a "X$(MAKECMDGOALS)" != "Xautoconf" \
+! 		-a "X$(MAKECMDGOALS)" != "Xreconfig"; then \
+  	    GUI_INC_LOC="$(GUI_INC_LOC)" GUI_LIB_LOC="$(GUI_LIB_LOC)" \
+  		CC="$(CC)" CPPFLAGS="$(CPPFLAGS)" CFLAGS="$(CFLAGS)" \
+  		LDFLAGS="$(LDFLAGS)" $(CONF_SHELL) srcdir="$(srcdir)" \
+*** ../vim-7.4.272/src/version.c	2014-04-29 17:41:18.351689927 +0200
+--- src/version.c	2014-04-29 19:59:21.895544751 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     273,
+  /**/
+
+-- 
+From "know your smileys":
+ <|-) Chinese
+ <|-( Chinese and doesn't like these kind of jokes
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.274 b/SOURCES/7.4.274
new file mode 100644
index 0000000..186e09b
--- /dev/null
+++ b/SOURCES/7.4.274
@@ -0,0 +1,46 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.274
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.274
+Problem:    When doing ":update" just before running an external command that
+	    changes the file, the timestamp may be unchanged and the file
+	    is not reloaded.
+Solution:   Also check the file size.
+Files:	    src/fileio.c
+
+
+*** ../vim-7.4.273/src/fileio.c	2014-04-06 20:45:40.123357453 +0200
+--- src/fileio.c	2014-05-02 15:35:19.671279728 +0200
+***************
+*** 6897,6902 ****
+--- 6897,6903 ----
+  	    && buf->b_mtime != 0
+  	    && ((stat_res = mch_stat((char *)buf->b_ffname, &st)) < 0
+  		|| time_differs((long)st.st_mtime, buf->b_mtime)
++ 		|| st.st_size != buf->b_orig_size
+  #ifdef HAVE_ST_MODE
+  		|| (int)st.st_mode != buf->b_orig_mode
+  #else
+*** ../vim-7.4.273/src/version.c	2014-04-29 20:04:05.331539784 +0200
+--- src/version.c	2014-05-02 15:36:22.619278625 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     274,
+  /**/
+
+-- 
+A meeting is an event at which the minutes are kept and the hours are lost.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.275 b/SOURCES/7.4.275
new file mode 100644
index 0000000..443fe18
--- /dev/null
+++ b/SOURCES/7.4.275
@@ -0,0 +1,56 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.275
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.275
+Problem:    When changing the type of a sign that hasn't been placed ther is
+	    no error message.
+Solution:   Add an error message. (Christian Brabandt)
+Files:	    src/ex_cmds.c
+
+
+*** ../vim-7.4.274/src/ex_cmds.c	2014-04-29 12:15:22.856032651 +0200
+--- src/ex_cmds.c	2014-05-07 14:38:31.293091622 +0200
+***************
+*** 7275,7281 ****
+  	    else
+  		/* ":sign place {id} file={fname}": change sign type */
+  		lnum = buf_change_sign_type(buf, id, sp->sn_typenr);
+! 	    update_debug_sign(buf, lnum);
+  	}
+  	else
+  	    EMSG(_(e_invarg));
+--- 7275,7284 ----
+  	    else
+  		/* ":sign place {id} file={fname}": change sign type */
+  		lnum = buf_change_sign_type(buf, id, sp->sn_typenr);
+! 	    if (lnum > 0)
+! 		update_debug_sign(buf, lnum);
+! 	    else
+! 		EMSG2(_("E885: Not possible to change sign %s"), sign_name);
+  	}
+  	else
+  	    EMSG(_(e_invarg));
+*** ../vim-7.4.274/src/version.c	2014-05-02 15:46:10.731268318 +0200
+--- src/version.c	2014-05-07 14:18:32.581081129 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     275,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+117. You are more comfortable typing in html.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.276 b/SOURCES/7.4.276
new file mode 100644
index 0000000..ab4f310
--- /dev/null
+++ b/SOURCES/7.4.276
@@ -0,0 +1,302 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.276
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.276
+Problem:    The fish shell is not supported.
+Solution:   Use begin/end instead of () for fish. (Andy Russell)
+Files:	    src/ex_cmds.c, src/misc1.c, src/option.c, src/proto/misc1.pro
+
+
+*** ../vim-7.4.275/src/ex_cmds.c	2014-05-07 14:38:41.129091709 +0200
+--- src/ex_cmds.c	2014-05-07 15:09:57.797108136 +0200
+***************
+*** 1551,1558 ****
+  {
+      char_u	*buf;
+      long_u	len;
+  
+!     len = (long_u)STRLEN(cmd) + 3;			/* "()" + NUL */
+      if (itmp != NULL)
+  	len += (long_u)STRLEN(itmp) + 9;		/* " { < " + " } " */
+      if (otmp != NULL)
+--- 1551,1566 ----
+  {
+      char_u	*buf;
+      long_u	len;
++     int		is_fish_shell;
+  
+! #if (defined(UNIX) && !defined(ARCHIE)) || defined(OS2)
+!     /* Account for fish's different syntax for subshells */
+!     is_fish_shell = (fnamecmp(get_isolated_shell_name(), "fish") == 0);
+!     if (is_fish_shell)
+! 	len = (long_u)STRLEN(cmd) + 13;		/* "begin; " + "; end" + NUL */
+!     else
+! #endif
+! 	len = (long_u)STRLEN(cmd) + 3;			/* "()" + NUL */
+      if (itmp != NULL)
+  	len += (long_u)STRLEN(itmp) + 9;		/* " { < " + " } " */
+      if (otmp != NULL)
+***************
+*** 1567,1573 ****
+       * redirecting input and/or output.
+       */
+      if (itmp != NULL || otmp != NULL)
+! 	vim_snprintf((char *)buf, len, "(%s)", (char *)cmd);
+      else
+  	STRCPY(buf, cmd);
+      if (itmp != NULL)
+--- 1575,1586 ----
+       * redirecting input and/or output.
+       */
+      if (itmp != NULL || otmp != NULL)
+!     {
+! 	if (is_fish_shell)
+! 	    vim_snprintf((char *)buf, len, "begin; %s; end", (char *)cmd);
+! 	else
+! 	    vim_snprintf((char *)buf, len, "(%s)", (char *)cmd);
+!     }
+      else
+  	STRCPY(buf, cmd);
+      if (itmp != NULL)
+***************
+*** 1577,1583 ****
+      }
+  #else
+      /*
+!      * for shells that don't understand braces around commands, at least allow
+       * the use of commands in a pipe.
+       */
+      STRCPY(buf, cmd);
+--- 1590,1596 ----
+      }
+  #else
+      /*
+!      * For shells that don't understand braces around commands, at least allow
+       * the use of commands in a pipe.
+       */
+      STRCPY(buf, cmd);
+***************
+*** 4315,4321 ****
+      pos_T	old_cursor = curwin->w_cursor;
+      int		start_nsubs;
+  #ifdef FEAT_EVAL
+!     int         save_ma = 0;
+  #endif
+  
+      cmd = eap->arg;
+--- 4328,4334 ----
+      pos_T	old_cursor = curwin->w_cursor;
+      int		start_nsubs;
+  #ifdef FEAT_EVAL
+!     int		save_ma = 0;
+  #endif
+  
+      cmd = eap->arg;
+***************
+*** 5986,5992 ****
+  			       "/\\\\?", "/\\\\z(\\\\)", "\\\\=", ":s\\\\=",
+  			       "\\[count]", "\\[quotex]", "\\[range]",
+  			       "\\[pattern]", "\\\\bar", "/\\\\%\\$",
+!                                "s/\\\\\\~", "s/\\\\U", "s/\\\\L",
+  			       "s/\\\\1", "s/\\\\2", "s/\\\\3", "s/\\\\9"};
+      int flags;
+  
+--- 5999,6005 ----
+  			       "/\\\\?", "/\\\\z(\\\\)", "\\\\=", ":s\\\\=",
+  			       "\\[count]", "\\[quotex]", "\\[range]",
+  			       "\\[pattern]", "\\\\bar", "/\\\\%\\$",
+! 			       "s/\\\\\\~", "s/\\\\U", "s/\\\\L",
+  			       "s/\\\\1", "s/\\\\2", "s/\\\\3", "s/\\\\9"};
+      int flags;
+  
+***************
+*** 6026,6032 ****
+  	  /* Replace:
+  	   * "[:...:]" with "\[:...:]"
+  	   * "[++...]" with "\[++...]"
+! 	   * "\{" with "\\{"               -- matching "} \}"
+  	   */
+  	    if ((arg[0] == '[' && (arg[1] == ':'
+  			 || (arg[1] == '+' && arg[2] == '+')))
+--- 6039,6045 ----
+  	  /* Replace:
+  	   * "[:...:]" with "\[:...:]"
+  	   * "[++...]" with "\[++...]"
+! 	   * "\{" with "\\{"		   -- matching "} \}"
+  	   */
+  	    if ((arg[0] == '[' && (arg[1] == ':'
+  			 || (arg[1] == '+' && arg[2] == '+')))
+*** ../vim-7.4.275/src/misc1.c	2014-04-05 19:44:36.903160723 +0200
+--- src/misc1.c	2014-05-07 15:04:25.921105231 +0200
+***************
+*** 1405,1411 ****
+  #ifdef FEAT_SMARTINDENT
+  	if (did_si)
+  	{
+! 	    int        sw = (int)get_sw_value(curbuf);
+  
+  	    if (p_sr)
+  		newindent -= newindent % sw;
+--- 1405,1411 ----
+  #ifdef FEAT_SMARTINDENT
+  	if (did_si)
+  	{
+! 	    int sw = (int)get_sw_value(curbuf);
+  
+  	    if (p_sr)
+  		newindent -= newindent % sw;
+***************
+*** 10896,10898 ****
+--- 10896,10936 ----
+  {
+      return (p_im && stuff_empty() && typebuf_typed());
+  }
++ 
++ /*
++  * Returns the isolated name of the shell:
++  * - Skip beyond any path.  E.g., "/usr/bin/csh -f" -> "csh -f".
++  * - Remove any argument.  E.g., "csh -f" -> "csh".
++  * But don't allow a space in the path, so that this works:
++  *   "/usr/bin/csh --rcfile ~/.cshrc"
++  * But don't do that for Windows, it's common to have a space in the path.
++  */
++     char_u *
++ get_isolated_shell_name()
++ {
++     char_u *p;
++ 
++ #ifdef WIN3264
++     p = gettail(p_sh);
++     p = vim_strnsave(p, (int)(skiptowhite(p) - p));
++ #else
++     p = skiptowhite(p_sh);
++     if (*p == NUL)
++     {
++ 	/* No white space, use the tail. */
++ 	p = vim_strsave(gettail(p_sh));
++     }
++     else
++     {
++ 	char_u  *p1, *p2;
++ 
++ 	/* Find the last path separator before the space. */
++ 	p1 = p_sh;
++ 	for (p2 = p_sh; p2 < p; mb_ptr_adv(p2))
++ 	    if (vim_ispathsep(*p2))
++ 		p1 = p2 + 1;
++ 	p = vim_strnsave(p1, (int)(p - p1));
++     }
++ #endif
++     return p;
++ }
+*** ../vim-7.4.275/src/option.c	2014-03-23 15:12:29.931264336 +0100
+--- src/option.c	2014-05-07 15:05:14.117105653 +0200
+***************
+*** 3804,3840 ****
+      else
+  	do_sp = !(options[idx_sp].flags & P_WAS_SET);
+  #endif
+! 
+!     /*
+!      * Isolate the name of the shell:
+!      * - Skip beyond any path.  E.g., "/usr/bin/csh -f" -> "csh -f".
+!      * - Remove any argument.  E.g., "csh -f" -> "csh".
+!      * But don't allow a space in the path, so that this works:
+!      *   "/usr/bin/csh --rcfile ~/.cshrc"
+!      * But don't do that for Windows, it's common to have a space in the path.
+!      */
+! #ifdef WIN3264
+!     p = gettail(p_sh);
+!     p = vim_strnsave(p, (int)(skiptowhite(p) - p));
+! #else
+!     p = skiptowhite(p_sh);
+!     if (*p == NUL)
+!     {
+! 	/* No white space, use the tail. */
+! 	p = vim_strsave(gettail(p_sh));
+!     }
+!     else
+!     {
+! 	char_u  *p1, *p2;
+! 
+! 	/* Find the last path separator before the space. */
+! 	p1 = p_sh;
+! 	for (p2 = p_sh; p2 < p; mb_ptr_adv(p2))
+! 	    if (vim_ispathsep(*p2))
+! 		p1 = p2 + 1;
+! 	p = vim_strnsave(p1, (int)(p - p1));
+!     }
+! #endif
+      if (p != NULL)
+      {
+  	/*
+--- 3804,3810 ----
+      else
+  	do_sp = !(options[idx_sp].flags & P_WAS_SET);
+  #endif
+!     p = get_isolated_shell_name();
+      if (p != NULL)
+      {
+  	/*
+***************
+*** 3875,3880 ****
+--- 3845,3851 ----
+  		    || fnamecmp(p, "zsh") == 0
+  		    || fnamecmp(p, "zsh-beta") == 0
+  		    || fnamecmp(p, "bash") == 0
++ 		    || fnamecmp(p, "fish") == 0
+  #  ifdef WIN3264
+  		    || fnamecmp(p, "cmd") == 0
+  		    || fnamecmp(p, "sh.exe") == 0
+***************
+*** 8858,8865 ****
+   * opt_type). Uses
+   *
+   * Returned flags:
+!  *       0 hidden or unknown option, also option that does not have requested 
+!  *         type (see SREQ_* in vim.h)
+   *  see SOPT_* in vim.h for other flags
+   *
+   * Possible opt_type values: see SREQ_* in vim.h
+--- 8829,8836 ----
+   * opt_type). Uses
+   *
+   * Returned flags:
+!  *       0 hidden or unknown option, also option that does not have requested
+!  *	   type (see SREQ_* in vim.h)
+   *  see SOPT_* in vim.h for other flags
+   *
+   * Possible opt_type values: see SREQ_* in vim.h
+*** ../vim-7.4.275/src/proto/misc1.pro	2014-04-05 19:44:36.903160723 +0200
+--- src/proto/misc1.pro	2014-05-07 14:57:04.605101368 +0200
+***************
+*** 103,106 ****
+--- 103,107 ----
+  char_u *get_cmd_output __ARGS((char_u *cmd, char_u *infile, int flags, int *ret_len));
+  void FreeWild __ARGS((int count, char_u **files));
+  int goto_im __ARGS((void));
++ char_u *get_isolated_shell_name __ARGS((void));
+  /* vim: set ft=c : */
+*** ../vim-7.4.275/src/version.c	2014-05-07 14:38:41.129091709 +0200
+--- src/version.c	2014-05-07 14:58:59.769102376 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     276,
+  /**/
+
+-- 
+Support your right to bare arms!  Wear short sleeves!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.277 b/SOURCES/7.4.277
new file mode 100644
index 0000000..1b569cb
--- /dev/null
+++ b/SOURCES/7.4.277
@@ -0,0 +1,80 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.277
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.277
+Problem:    Using ":sign unplace *" may leave the cursor in the wrong position
+	    (Christian Brabandt)
+Solution:   Update the cursor position when removing all signs.
+Files:	    src/buffer.c
+
+
+*** ../vim-7.4.276/src/buffer.c	2014-04-06 20:45:40.115357453 +0200
+--- src/buffer.c	2014-05-07 16:30:13.117150289 +0200
+***************
+*** 5525,5530 ****
+--- 5525,5534 ----
+      return;
+  }
+  
++ /*
++  * For an existing, placed sign "markId" change the type to "typenr".
++  * Returns the line number of the sign, or zero if the sign is not found.
++  */
+      linenr_T
+  buf_change_sign_type(buf, markId, typenr)
+      buf_T	*buf;		/* buffer to store sign in */
+***************
+*** 5693,5698 ****
+--- 5697,5710 ----
+  {
+      signlist_T	*next;
+  
++     /* When deleting the last sign need to redraw the windows to remove the
++      * sign column. */
++     if (buf->b_signlist != NULL)
++     {
++ 	redraw_buf_later(buf, NOT_VALID);
++ 	changed_cline_bef_curs();
++     }
++ 
+      while (buf->b_signlist != NULL)
+      {
+  	next = buf->b_signlist->next;
+***************
+*** 5711,5721 ****
+  
+      for (buf = firstbuf; buf != NULL; buf = buf->b_next)
+  	if (buf->b_signlist != NULL)
+- 	{
+- 	    /* Need to redraw the windows to remove the sign column. */
+- 	    redraw_buf_later(buf, NOT_VALID);
+  	    buf_delete_signs(buf);
+- 	}
+  }
+  
+  /*
+--- 5723,5729 ----
+*** ../vim-7.4.276/src/version.c	2014-05-07 15:10:17.661108310 +0200
+--- src/version.c	2014-05-07 16:32:06.933151285 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     277,
+  /**/
+
+-- 
+An actual excerpt from a classified section of a city newspaper:
+"Illiterate?  Write today for free help!"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.278 b/SOURCES/7.4.278
new file mode 100644
index 0000000..5740fb8
--- /dev/null
+++ b/SOURCES/7.4.278
@@ -0,0 +1,183 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.278
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.278
+Problem:    list_remove() conflicts with function defined in Sun header file.
+Solution:   Rename the function. (Richard Palo)
+Files:	    src/eval.c, src/if_lua.c, src/if_py_both.h, src/proto/eval.pro
+
+
+*** ../vim-7.4.277/src/eval.c	2014-04-29 17:41:18.351689927 +0200
+--- src/eval.c	2014-05-07 17:28:56.037181128 +0200
+***************
+*** 5998,6004 ****
+      list_T  *l;
+      listitem_T *item;
+  {
+!     list_remove(l, item, item);
+      listitem_free(item);
+  }
+  
+--- 5998,6004 ----
+      list_T  *l;
+      listitem_T *item;
+  {
+!     vimlist_remove(l, item, item);
+      listitem_free(item);
+  }
+  
+***************
+*** 6577,6585 ****
+  /*
+   * Remove items "item" to "item2" from list "l".
+   * Does not free the listitem or the value!
+   */
+      void
+! list_remove(l, item, item2)
+      list_T	*l;
+      listitem_T	*item;
+      listitem_T	*item2;
+--- 6577,6587 ----
+  /*
+   * Remove items "item" to "item2" from list "l".
+   * Does not free the listitem or the value!
++  * This used to be called list_remove, but that conflicts with a Sun header
++  * file.
+   */
+      void
+! vimlist_remove(l, item, item2)
+      list_T	*l;
+      listitem_T	*item;
+      listitem_T	*item2;
+***************
+*** 15435,15441 ****
+  	    if (argvars[2].v_type == VAR_UNKNOWN)
+  	    {
+  		/* Remove one item, return its value. */
+! 		list_remove(l, item, item);
+  		*rettv = item->li_tv;
+  		vim_free(item);
+  	    }
+--- 15437,15443 ----
+  	    if (argvars[2].v_type == VAR_UNKNOWN)
+  	    {
+  		/* Remove one item, return its value. */
+! 		vimlist_remove(l, item, item);
+  		*rettv = item->li_tv;
+  		vim_free(item);
+  	    }
+***************
+*** 15461,15467 ****
+  			EMSG(_(e_invrange));
+  		    else
+  		    {
+! 			list_remove(l, item, item2);
+  			if (rettv_list_alloc(rettv) == OK)
+  			{
+  			    l = rettv->vval.v_list;
+--- 15463,15469 ----
+  			EMSG(_(e_invrange));
+  		    else
+  		    {
+! 			vimlist_remove(l, item, item2);
+  			if (rettv_list_alloc(rettv) == OK)
+  			{
+  			    l = rettv->vval.v_list;
+*** ../vim-7.4.277/src/if_lua.c	2013-06-23 12:55:02.000000000 +0200
+--- src/if_lua.c	2014-05-07 17:29:08.913181240 +0200
+***************
+*** 734,740 ****
+      if (li == NULL) return 0;
+      if (lua_isnil(L, 3)) /* remove? */
+      {
+! 	list_remove(l, li, li);
+  	clear_tv(&li->li_tv);
+  	vim_free(li);
+      }
+--- 734,740 ----
+      if (li == NULL) return 0;
+      if (lua_isnil(L, 3)) /* remove? */
+      {
+! 	vimlist_remove(l, li, li);
+  	clear_tv(&li->li_tv);
+  	vim_free(li);
+      }
+*** ../vim-7.4.277/src/if_py_both.h	2014-03-30 16:11:37.176530823 +0200
+--- src/if_py_both.h	2014-05-07 17:29:26.497181394 +0200
+***************
+*** 2494,2500 ****
+  	if (numreplaced < slicelen)
+  	{
+  	    lis[slicelen + numreplaced] = lis[numreplaced]->li_prev;
+! 	    list_remove(l, lis[numreplaced], lis[numreplaced]);
+  	    numreplaced++;
+  	}
+  	else
+--- 2494,2500 ----
+  	if (numreplaced < slicelen)
+  	{
+  	    lis[slicelen + numreplaced] = lis[numreplaced]->li_prev;
+! 	    vimlist_remove(l, lis[numreplaced], lis[numreplaced]);
+  	    numreplaced++;
+  	}
+  	else
+***************
+*** 2570,2576 ****
+      if (obj == NULL)
+      {
+  	li = list_find(l, (long) index);
+! 	list_remove(l, li, li);
+  	clear_tv(&li->li_tv);
+  	vim_free(li);
+  	return 0;
+--- 2570,2576 ----
+      if (obj == NULL)
+      {
+  	li = list_find(l, (long) index);
+! 	vimlist_remove(l, li, li);
+  	clear_tv(&li->li_tv);
+  	vim_free(li);
+  	return 0;
+*** ../vim-7.4.277/src/proto/eval.pro	2014-01-14 16:36:40.000000000 +0100
+--- src/proto/eval.pro	2014-05-07 17:30:02.517181710 +0200
+***************
+*** 59,65 ****
+  int list_append_dict __ARGS((list_T *list, dict_T *dict));
+  int list_append_string __ARGS((list_T *l, char_u *str, int len));
+  int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item));
+! void list_remove __ARGS((list_T *l, listitem_T *item, listitem_T *item2));
+  void list_insert __ARGS((list_T *l, listitem_T *ni, listitem_T *item));
+  int garbage_collect __ARGS((void));
+  void set_ref_in_ht __ARGS((hashtab_T *ht, int copyID));
+--- 59,65 ----
+  int list_append_dict __ARGS((list_T *list, dict_T *dict));
+  int list_append_string __ARGS((list_T *l, char_u *str, int len));
+  int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item));
+! void vimlist_remove __ARGS((list_T *l, listitem_T *item, listitem_T *item2));
+  void list_insert __ARGS((list_T *l, listitem_T *ni, listitem_T *item));
+  int garbage_collect __ARGS((void));
+  void set_ref_in_ht __ARGS((hashtab_T *ht, int copyID));
+*** ../vim-7.4.277/src/version.c	2014-05-07 16:35:05.029152844 +0200
+--- src/version.c	2014-05-07 17:30:43.449182068 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     278,
+  /**/
+
+-- 
+"Computers in the future may weigh no more than 1.5 tons."
+                                   Popular Mechanics, 1949
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.279 b/SOURCES/7.4.279
new file mode 100644
index 0000000..6fb4c1b
--- /dev/null
+++ b/SOURCES/7.4.279
@@ -0,0 +1,616 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.279
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.279
+Problem:    globpath() returns a string, making it difficult to get a list of
+	    matches. (Greg Novack)
+Solution:   Add an optional argument like with glob(). (Adnan Zafar)
+Files:	    runtime/doc/eval.txt, src/eval.c, src/ex_getln.c, src/misc1.c,
+	    src/misc2.c, src/proto/ex_getln.pro, src/proto/misc2.pro,
+	    src/testdir/test97.in, src/testdir/test97.ok
+
+
+*** ../vim-7.4.278/runtime/doc/eval.txt	2014-04-23 17:43:37.350948683 +0200
+--- runtime/doc/eval.txt	2014-05-07 17:38:03.045185916 +0200
+***************
+*** 1832,1838 ****
+  				any	variable {varname} in window {nr}
+  glob( {expr} [, {nosuf} [, {list}]])
+  				any	expand file wildcards in {expr}
+! globpath( {path}, {expr} [, {flag}])
+  				String	do glob({expr}) for all dirs in {path}
+  has( {feature})			Number	TRUE if feature {feature} supported
+  has_key( {dict}, {key})		Number	TRUE if {dict} has entry {key}
+--- 1832,1838 ----
+  				any	variable {varname} in window {nr}
+  glob( {expr} [, {nosuf} [, {list}]])
+  				any	expand file wildcards in {expr}
+! globpath( {path}, {expr} [, {nosuf} [, {list}]])
+  				String	do glob({expr}) for all dirs in {path}
+  has( {feature})			Number	TRUE if feature {feature} supported
+  has_key( {dict}, {key})		Number	TRUE if {dict} has entry {key}
+***************
+*** 3570,3580 ****
+  		See |expand()| for expanding special Vim variables.  See
+  		|system()| for getting the raw output of an external command.
+  
+! globpath({path}, {expr} [, {flag}])			*globpath()*
+  		Perform glob() on all directories in {path} and concatenate
+  		the results.  Example: >
+  			:echo globpath(&rtp, "syntax/c.vim")
+! <		{path} is a comma-separated list of directory names.  Each
+  		directory name is prepended to {expr} and expanded like with
+  		|glob()|.  A path separator is inserted when needed.
+  		To add a comma inside a directory name escape it with a
+--- 3571,3582 ----
+  		See |expand()| for expanding special Vim variables.  See
+  		|system()| for getting the raw output of an external command.
+  
+! globpath({path}, {expr} [, {nosuf} [, {list}]])			*globpath()*
+  		Perform glob() on all directories in {path} and concatenate
+  		the results.  Example: >
+  			:echo globpath(&rtp, "syntax/c.vim")
+! <
+! 		{path} is a comma-separated list of directory names.  Each
+  		directory name is prepended to {expr} and expanded like with
+  		|glob()|.  A path separator is inserted when needed.
+  		To add a comma inside a directory name escape it with a
+***************
+*** 3582,3592 ****
+  		trailing backslash, remove it if you put a comma after it.
+  		If the expansion fails for one of the directories, there is no
+  		error message.
+! 		Unless the optional {flag} argument is given and is non-zero,
+  		the 'suffixes' and 'wildignore' options apply: Names matching
+  		one of the patterns in 'wildignore' will be skipped and
+  		'suffixes' affect the ordering of matches.
+  
+  		The "**" item can be used to search in a directory tree.
+  		For example, to find all "README.txt" files in the directories
+  		in 'runtimepath' and below: >
+--- 3584,3602 ----
+  		trailing backslash, remove it if you put a comma after it.
+  		If the expansion fails for one of the directories, there is no
+  		error message.
+! 
+! 		Unless the optional {nosuf} argument is given and is non-zero,
+  		the 'suffixes' and 'wildignore' options apply: Names matching
+  		one of the patterns in 'wildignore' will be skipped and
+  		'suffixes' affect the ordering of matches.
+  
++ 		When {list} is present and it is non-zero the result is a List
++ 		with all matching files. The advantage of using a List is, you
++ 		also get filenames containing newlines correctly. Otherwise
++ 		the result is a String and when there are several matches,
++ 		they are separated by <NL> characters.  Example: >
++ 			:echo globpath(&rtp, "syntax/c.vim", 0, 1)
++ <
+  		The "**" item can be used to search in a directory tree.
+  		For example, to find all "README.txt" files in the directories
+  		in 'runtimepath' and below: >
+*** ../vim-7.4.278/src/eval.c	2014-05-07 17:31:32.473182497 +0200
+--- src/eval.c	2014-05-07 18:06:29.541200854 +0200
+***************
+*** 7985,7991 ****
+      {"getwinposy",	0, 0, f_getwinposy},
+      {"getwinvar",	2, 3, f_getwinvar},
+      {"glob",		1, 3, f_glob},
+!     {"globpath",	2, 3, f_globpath},
+      {"has",		1, 1, f_has},
+      {"has_key",		2, 2, f_has_key},
+      {"haslocaldir",	0, 0, f_haslocaldir},
+--- 7985,7991 ----
+      {"getwinposy",	0, 0, f_getwinposy},
+      {"getwinvar",	2, 3, f_getwinvar},
+      {"glob",		1, 3, f_glob},
+!     {"globpath",	2, 4, f_globpath},
+      {"has",		1, 1, f_has},
+      {"has_key",		2, 2, f_has_key},
+      {"haslocaldir",	0, 0, f_haslocaldir},
+***************
+*** 12151,12168 ****
+      char_u	buf1[NUMBUFLEN];
+      char_u	*file = get_tv_string_buf_chk(&argvars[1], buf1);
+      int		error = FALSE;
+  
+      /* When the optional second argument is non-zero, don't remove matches
+      * for 'wildignore' and don't put matches for 'suffixes' at the end. */
+-     if (argvars[2].v_type != VAR_UNKNOWN
+- 				&& get_tv_number_chk(&argvars[2], &error))
+- 	flags |= WILD_KEEP_ALL;
+      rettv->v_type = VAR_STRING;
+!     if (file == NULL || error)
+! 	rettv->vval.v_string = NULL;
+      else
+! 	rettv->vval.v_string = globpath(get_tv_string(&argvars[0]), file,
+! 								       flags);
+  }
+  
+  /*
+--- 12151,12187 ----
+      char_u	buf1[NUMBUFLEN];
+      char_u	*file = get_tv_string_buf_chk(&argvars[1], buf1);
+      int		error = FALSE;
++     garray_T	ga;
++     int		i;
+  
+      /* When the optional second argument is non-zero, don't remove matches
+      * for 'wildignore' and don't put matches for 'suffixes' at the end. */
+      rettv->v_type = VAR_STRING;
+!     if (argvars[2].v_type != VAR_UNKNOWN)
+!     {
+! 	if (get_tv_number_chk(&argvars[2], &error))
+! 	    flags |= WILD_KEEP_ALL;
+! 	if (argvars[3].v_type != VAR_UNKNOWN
+! 				    && get_tv_number_chk(&argvars[3], &error))
+! 	{
+! 	    rettv->v_type = VAR_LIST;
+! 	    rettv->vval.v_list = NULL;
+! 	}
+!     }
+!     if (file != NULL && !error)
+!     {
+! 	ga_init2(&ga, (int)sizeof(char_u *), 10);
+! 	globpath(get_tv_string(&argvars[0]), file, &ga, flags);
+! 	if (rettv->v_type == VAR_STRING)
+! 	    rettv->vval.v_string = ga_concat_strings(&ga, "\n");
+! 	else if (rettv_list_alloc(rettv) != FAIL)
+! 	    for (i = 0; i < ga.ga_len; ++i)
+! 		list_append_string(rettv->vval.v_list,
+! 					    ((char_u **)(ga.ga_data))[i], -1);
+! 	ga_clear_strings(&ga);
+!     }
+      else
+! 	rettv->vval.v_string = NULL;
+  }
+  
+  /*
+*** ../vim-7.4.278/src/ex_getln.c	2013-11-12 05:28:08.000000000 +0100
+--- src/ex_getln.c	2014-05-07 18:11:49.281203653 +0200
+***************
+*** 5095,5103 ****
+      char_u	***file;
+      char	*dirnames[];
+  {
+-     char_u	*matches;
+      char_u	*s;
+      char_u	*e;
+      garray_T	ga;
+      int		i;
+      int		pat_len;
+--- 5095,5103 ----
+      char_u	***file;
+      char	*dirnames[];
+  {
+      char_u	*s;
+      char_u	*e;
++     char_u	*match;
+      garray_T	ga;
+      int		i;
+      int		pat_len;
+***************
+*** 5116,5148 ****
+  	    return FAIL;
+  	}
+  	sprintf((char *)s, "%s/%s*.vim", dirnames[i], pat);
+! 	matches = globpath(p_rtp, s, 0);
+  	vim_free(s);
+! 	if (matches == NULL)
+! 	    continue;
+  
+! 	for (s = matches; *s != NUL; s = e)
+  	{
+! 	    e = vim_strchr(s, '\n');
+! 	    if (e == NULL)
+! 		e = s + STRLEN(s);
+! 	    if (ga_grow(&ga, 1) == FAIL)
+! 		break;
+! 	    if (e - 4 > s && STRNICMP(e - 4, ".vim", 4) == 0)
+! 	    {
+! 		for (s = e - 4; s > matches; mb_ptr_back(matches, s))
+! 		    if (*s == '\n' || vim_ispathsep(*s))
+! 			break;
+! 		++s;
+! 		((char_u **)ga.ga_data)[ga.ga_len] =
+! 					    vim_strnsave(s, (int)(e - s - 4));
+! 		++ga.ga_len;
+! 	    }
+! 	    if (*e != NUL)
+! 		++e;
+  	}
+- 	vim_free(matches);
+      }
+      if (ga.ga_len == 0)
+  	return FAIL;
+  
+--- 5116,5142 ----
+  	    return FAIL;
+  	}
+  	sprintf((char *)s, "%s/%s*.vim", dirnames[i], pat);
+! 	globpath(p_rtp, s, &ga, 0);
+  	vim_free(s);
+!     }
+  
+!     for (i = 0; i < ga.ga_len; ++i)
+!     {
+! 	match = ((char_u **)ga.ga_data)[i];
+! 	s = match;
+! 	e = s + STRLEN(s);
+! 	if (e - 4 > s && STRNICMP(e - 4, ".vim", 4) == 0)
+  	{
+! 	    e -= 4;
+! 	    for (s = e; s > match; mb_ptr_back(match, s))
+! 		if (s < match || vim_ispathsep(*s))
+! 		    break;
+! 	    ++s;
+! 	    *e = NUL;
+! 	    mch_memmove(match, s, e - s + 1);
+  	}
+      }
++ 
+      if (ga.ga_len == 0)
+  	return FAIL;
+  
+***************
+*** 5160,5192 ****
+  #if defined(FEAT_CMDL_COMPL) || defined(FEAT_EVAL) || defined(PROTO)
+  /*
+   * Expand "file" for all comma-separated directories in "path".
+!  * Returns an allocated string with all matches concatenated, separated by
+!  * newlines.  Returns NULL for an error or no matches.
+   */
+!     char_u *
+! globpath(path, file, expand_options)
+      char_u	*path;
+      char_u	*file;
+      int		expand_options;
+  {
+      expand_T	xpc;
+      char_u	*buf;
+-     garray_T	ga;
+      int		i;
+-     int		len;
+      int		num_p;
+      char_u	**p;
+-     char_u	*cur = NULL;
+  
+      buf = alloc(MAXPATHL);
+      if (buf == NULL)
+! 	return NULL;
+  
+      ExpandInit(&xpc);
+      xpc.xp_context = EXPAND_FILES;
+  
+-     ga_init2(&ga, 1, 100);
+- 
+      /* Loop over all entries in {path}. */
+      while (*path != NUL)
+      {
+--- 5154,5181 ----
+  #if defined(FEAT_CMDL_COMPL) || defined(FEAT_EVAL) || defined(PROTO)
+  /*
+   * Expand "file" for all comma-separated directories in "path".
+!  * Adds the matches to "ga".  Caller must init "ga".
+   */
+!     void
+! globpath(path, file, ga, expand_options)
+      char_u	*path;
+      char_u	*file;
++     garray_T	*ga;
+      int		expand_options;
+  {
+      expand_T	xpc;
+      char_u	*buf;
+      int		i;
+      int		num_p;
+      char_u	**p;
+  
+      buf = alloc(MAXPATHL);
+      if (buf == NULL)
+! 	return;
+  
+      ExpandInit(&xpc);
+      xpc.xp_context = EXPAND_FILES;
+  
+      /* Loop over all entries in {path}. */
+      while (*path != NUL)
+      {
+***************
+*** 5207,5236 ****
+  			     WILD_SILENT|expand_options) != FAIL && num_p > 0)
+  	    {
+  		ExpandEscape(&xpc, buf, num_p, p, WILD_SILENT|expand_options);
+- 		for (len = 0, i = 0; i < num_p; ++i)
+- 		    len += (int)STRLEN(p[i]) + 1;
+  
+! 		/* Concatenate new results to previous ones. */
+! 		if (ga_grow(&ga, len) == OK)
+  		{
+- 		    cur = (char_u *)ga.ga_data + ga.ga_len;
+  		    for (i = 0; i < num_p; ++i)
+  		    {
+! 			STRCPY(cur, p[i]);
+! 			cur += STRLEN(p[i]);
+! 			*cur++ = '\n';
+  		    }
+- 		    ga.ga_len += len;
+  		}
+  		FreeWild(num_p, p);
+  	    }
+  	}
+      }
+-     if (cur != NULL)
+- 	*--cur = 0; /* Replace trailing newline with NUL */
+  
+      vim_free(buf);
+-     return (char_u *)ga.ga_data;
+  }
+  
+  #endif
+--- 5196,5218 ----
+  			     WILD_SILENT|expand_options) != FAIL && num_p > 0)
+  	    {
+  		ExpandEscape(&xpc, buf, num_p, p, WILD_SILENT|expand_options);
+  
+! 		if (ga_grow(ga, num_p) == OK)
+  		{
+  		    for (i = 0; i < num_p; ++i)
+  		    {
+! 			((char_u **)ga->ga_data)[ga->ga_len] =
+! 					    vim_strnsave(p[i], STRLEN(p[i]));
+! 			++ga->ga_len;
+  		    }
+  		}
++ 
+  		FreeWild(num_p, p);
+  	    }
+  	}
+      }
+  
+      vim_free(buf);
+  }
+  
+  #endif
+*** ../vim-7.4.278/src/misc1.c	2014-05-07 15:10:17.657108310 +0200
+--- src/misc1.c	2014-05-07 17:46:30.269190356 +0200
+***************
+*** 10336,10344 ****
+  {
+      char_u	*curdir;
+      garray_T	path_ga;
+-     char_u	*files = NULL;
+-     char_u	*s;	/* start */
+-     char_u	*e;	/* end */
+      char_u	*paths = NULL;
+  
+      if ((curdir = alloc((unsigned)MAXPATHL)) == NULL)
+--- 10336,10341 ----
+***************
+*** 10351,10387 ****
+      if (path_ga.ga_len == 0)
+  	return 0;
+  
+!     paths = ga_concat_strings(&path_ga);
+      ga_clear_strings(&path_ga);
+      if (paths == NULL)
+  	return 0;
+  
+!     files = globpath(paths, pattern, (flags & EW_ICASE) ? WILD_ICASE : 0);
+      vim_free(paths);
+-     if (files == NULL)
+- 	return 0;
+- 
+-     /* Copy each path in files into gap */
+-     s = e = files;
+-     while (*s != NUL)
+-     {
+- 	while (*e != '\n' && *e != NUL)
+- 	    e++;
+- 	if (*e == NUL)
+- 	{
+- 	    addfile(gap, s, flags);
+- 	    break;
+- 	}
+- 	else
+- 	{
+- 	    /* *e is '\n' */
+- 	    *e = NUL;
+- 	    addfile(gap, s, flags);
+- 	    e++;
+- 	    s = e;
+- 	}
+-     }
+-     vim_free(files);
+  
+      return gap->ga_len;
+  }
+--- 10348,10360 ----
+      if (path_ga.ga_len == 0)
+  	return 0;
+  
+!     paths = ga_concat_strings(&path_ga, ",");
+      ga_clear_strings(&path_ga);
+      if (paths == NULL)
+  	return 0;
+  
+!     globpath(paths, pattern, gap, (flags & EW_ICASE) ? WILD_ICASE : 0);
+      vim_free(paths);
+  
+      return gap->ga_len;
+  }
+*** ../vim-7.4.278/src/misc2.c	2014-03-23 15:12:29.927264336 +0100
+--- src/misc2.c	2014-05-07 18:34:37.689215632 +0200
+***************
+*** 2087,2115 ****
+  
+  /*
+   * For a growing array that contains a list of strings: concatenate all the
+!  * strings with a separating comma.
+   * Returns NULL when out of memory.
+   */
+      char_u *
+! ga_concat_strings(gap)
+      garray_T *gap;
+  {
+      int		i;
+      int		len = 0;
+      char_u	*s;
+  
+      for (i = 0; i < gap->ga_len; ++i)
+! 	len += (int)STRLEN(((char_u **)(gap->ga_data))[i]) + 1;
+  
+      s = alloc(len + 1);
+      if (s != NULL)
+      {
+  	*s = NUL;
+  	for (i = 0; i < gap->ga_len; ++i)
+  	{
+! 	    if (*s != NUL)
+! 		STRCAT(s, ",");
+! 	    STRCAT(s, ((char_u **)(gap->ga_data))[i]);
+  	}
+      }
+      return s;
+--- 2087,2123 ----
+  
+  /*
+   * For a growing array that contains a list of strings: concatenate all the
+!  * strings with a separating "sep".
+   * Returns NULL when out of memory.
+   */
+      char_u *
+! ga_concat_strings(gap, sep)
+      garray_T *gap;
++     char     *sep;
+  {
+      int		i;
+      int		len = 0;
++     int		sep_len = (int)STRLEN(sep);
+      char_u	*s;
++     char_u	*p;
+  
+      for (i = 0; i < gap->ga_len; ++i)
+! 	len += (int)STRLEN(((char_u **)(gap->ga_data))[i]) + sep_len;
+  
+      s = alloc(len + 1);
+      if (s != NULL)
+      {
+  	*s = NUL;
++ 	p = s;
+  	for (i = 0; i < gap->ga_len; ++i)
+  	{
+! 	    if (p != s)
+! 	    {
+! 		STRCPY(p, sep);
+! 		p += sep_len;
+! 	    }
+! 	    STRCPY(p, ((char_u **)(gap->ga_data))[i]);
+! 	    p += STRLEN(p);
+  	}
+      }
+      return s;
+*** ../vim-7.4.278/src/proto/ex_getln.pro	2013-08-10 13:37:11.000000000 +0200
+--- src/proto/ex_getln.pro	2014-05-07 17:52:42.457193614 +0200
+***************
+*** 32,38 ****
+  void set_cmd_context __ARGS((expand_T *xp, char_u *str, int len, int col));
+  int expand_cmdline __ARGS((expand_T *xp, char_u *str, int col, int *matchcount, char_u ***matches));
+  int ExpandGeneric __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file, char_u *((*func)(expand_T *, int)), int escaped));
+! char_u *globpath __ARGS((char_u *path, char_u *file, int expand_options));
+  void init_history __ARGS((void));
+  int get_histtype __ARGS((char_u *name));
+  void add_to_history __ARGS((int histype, char_u *new_entry, int in_map, int sep));
+--- 32,38 ----
+  void set_cmd_context __ARGS((expand_T *xp, char_u *str, int len, int col));
+  int expand_cmdline __ARGS((expand_T *xp, char_u *str, int col, int *matchcount, char_u ***matches));
+  int ExpandGeneric __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file, char_u *((*func)(expand_T *, int)), int escaped));
+! void globpath __ARGS((char_u *path, char_u *file, garray_T *ga, int expand_options));
+  void init_history __ARGS((void));
+  int get_histtype __ARGS((char_u *name));
+  void add_to_history __ARGS((int histype, char_u *new_entry, int in_map, int sep));
+*** ../vim-7.4.278/src/proto/misc2.pro	2014-02-23 23:38:58.828760280 +0100
+--- src/proto/misc2.pro	2014-05-07 17:52:36.189193559 +0200
+***************
+*** 55,61 ****
+  void ga_init __ARGS((garray_T *gap));
+  void ga_init2 __ARGS((garray_T *gap, int itemsize, int growsize));
+  int ga_grow __ARGS((garray_T *gap, int n));
+! char_u *ga_concat_strings __ARGS((garray_T *gap));
+  void ga_concat __ARGS((garray_T *gap, char_u *s));
+  void ga_append __ARGS((garray_T *gap, int c));
+  void append_ga_line __ARGS((garray_T *gap));
+--- 55,61 ----
+  void ga_init __ARGS((garray_T *gap));
+  void ga_init2 __ARGS((garray_T *gap, int itemsize, int growsize));
+  int ga_grow __ARGS((garray_T *gap, int n));
+! char_u *ga_concat_strings __ARGS((garray_T *gap, char *sep));
+  void ga_concat __ARGS((garray_T *gap, char_u *s));
+  void ga_append __ARGS((garray_T *gap, int c));
+  void append_ga_line __ARGS((garray_T *gap));
+*** ../vim-7.4.278/src/testdir/test97.in	2013-08-02 14:55:50.000000000 +0200
+--- src/testdir/test97.in	2014-05-07 18:27:59.213212144 +0200
+***************
+*** 5,16 ****
+  :so small.vim
+  :set shell=doesnotexist
+  :e test.out
+! :put =glob('Xxx\{')
+! :put =glob('Xxx\$')
+  :w! Xxx{
+  :w! Xxx\$
+! :put =glob('Xxx\{')
+! :put =glob('Xxx\$')
+  :w
+  :qa!
+  ENDTEST
+--- 5,19 ----
+  :so small.vim
+  :set shell=doesnotexist
+  :e test.out
+! :$put =glob('Xxx\{')
+! :$put =glob('Xxx\$')
+  :w! Xxx{
+  :w! Xxx\$
+! :$put =glob('Xxx\{')
+! :$put =glob('Xxx\$')
+! :"
+! :$put =string(globpath('sautest/autoload', '*.vim'))
+! :$put =string(globpath('sautest/autoload', '*.vim', 0, 1))
+  :w
+  :qa!
+  ENDTEST
+*** ../vim-7.4.278/src/testdir/test97.ok	2013-07-03 16:14:50.000000000 +0200
+--- src/testdir/test97.ok	2014-05-07 18:28:01.985212168 +0200
+***************
+*** 3,5 ****
+--- 3,8 ----
+  
+  Xxx{
+  Xxx$
++ 'sautest/autoload/Test104.vim
++ sautest/autoload/footest.vim'
++ ['sautest/autoload/Test104.vim', 'sautest/autoload/footest.vim']
+*** ../vim-7.4.278/src/version.c	2014-05-07 17:31:32.473182497 +0200
+--- src/version.c	2014-05-07 17:35:06.253184368 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     279,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+121. You ask for e-mail adresses instead of telephone numbers.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.280 b/SOURCES/7.4.280
new file mode 100644
index 0000000..6b392df
--- /dev/null
+++ b/SOURCES/7.4.280
@@ -0,0 +1,125 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.280
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.280
+Problem:    When using a session file the relative position of the cursor is
+	    not restored if there is another tab. (Nobuhiro Takasaki)
+Solution:   Update w_wrow before calculating the fraction.
+Files:	    src/window.c
+
+
+*** ../vim-7.4.279/src/window.c	2014-03-23 15:12:29.943264337 +0100
+--- src/window.c	2014-05-07 20:18:55.237270409 +0200
+***************
+*** 5623,5629 ****
+      win_T	*wp;
+  {
+      wp->w_fraction = ((long)wp->w_wrow * FRACTION_MULT
+! 				    + FRACTION_MULT / 2) / (long)wp->w_height;
+  }
+  
+  /*
+--- 5623,5629 ----
+      win_T	*wp;
+  {
+      wp->w_fraction = ((long)wp->w_wrow * FRACTION_MULT
+! 				    + wp->w_height / 2) / (long)wp->w_height;
+  }
+  
+  /*
+***************
+*** 5638,5643 ****
+--- 5638,5644 ----
+  {
+      linenr_T	lnum;
+      int		sline, line_size;
++     int		prev_height = wp->w_height;
+  
+      /* Don't want a negative height.  Happens when splitting a tiny window.
+       * Will equalize heights soon to fix it. */
+***************
+*** 5646,5653 ****
+      if (wp->w_height == height)
+  	return;	    /* nothing to do */
+  
+!     if (wp->w_wrow != wp->w_prev_fraction_row && wp->w_height > 0)
+! 	set_fraction(wp);
+  
+      wp->w_height = height;
+      wp->w_skipcol = 0;
+--- 5647,5659 ----
+      if (wp->w_height == height)
+  	return;	    /* nothing to do */
+  
+!     if (wp->w_height > 0)
+!     {
+! 	if (wp == curwin)
+! 	    validate_cursor();		/* w_wrow needs to be valid */
+! 	if (wp->w_wrow != wp->w_prev_fraction_row)
+! 	    set_fraction(wp);
+!     }
+  
+      wp->w_height = height;
+      wp->w_skipcol = 0;
+***************
+*** 5667,5673 ****
+  	lnum = wp->w_cursor.lnum;
+  	if (lnum < 1)		/* can happen when starting up */
+  	    lnum = 1;
+! 	wp->w_wrow = ((long)wp->w_fraction * (long)height - 1L) / FRACTION_MULT;
+  	line_size = plines_win_col(wp, lnum, (long)(wp->w_cursor.col)) - 1;
+  	sline = wp->w_wrow - line_size;
+  
+--- 5673,5680 ----
+  	lnum = wp->w_cursor.lnum;
+  	if (lnum < 1)		/* can happen when starting up */
+  	    lnum = 1;
+! 	wp->w_wrow = ((long)wp->w_fraction * (long)height - 1L
+! 					 + FRACTION_MULT / 2) / FRACTION_MULT;
+  	line_size = plines_win_col(wp, lnum, (long)(wp->w_cursor.col)) - 1;
+  	sline = wp->w_wrow - line_size;
+  
+***************
+*** 5757,5763 ****
+  	    update_topline();
+  	curs_columns(FALSE);	/* validate w_wrow */
+      }
+!     wp->w_prev_fraction_row = wp->w_wrow;
+  
+      win_comp_scroll(wp);
+      redraw_win_later(wp, SOME_VALID);
+--- 5764,5771 ----
+  	    update_topline();
+  	curs_columns(FALSE);	/* validate w_wrow */
+      }
+!     if (prev_height > 0)
+! 	wp->w_prev_fraction_row = wp->w_wrow;
+  
+      win_comp_scroll(wp);
+      redraw_win_later(wp, SOME_VALID);
+*** ../vim-7.4.279/src/version.c	2014-05-07 18:35:25.669216052 +0200
+--- src/version.c	2014-05-07 20:24:14.313273202 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     280,
+  /**/
+
+-- 
+~
+~
+~
+".signature" 4 lines, 50 characters written
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.281 b/SOURCES/7.4.281
new file mode 100644
index 0000000..6c6765a
--- /dev/null
+++ b/SOURCES/7.4.281
@@ -0,0 +1,80 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.281
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.281
+Problem:    When a session file has more than one tabpage and 'showtabline' is
+	    one the positions may be slightly off.
+Solution:   Set 'showtabline' to two while positioning windows.
+Files:	    src/ex_docmd.c
+
+
+*** ../vim-7.4.280/src/ex_docmd.c	2014-04-29 12:15:22.856032651 +0200
+--- src/ex_docmd.c	2014-05-07 21:07:56.249296154 +0200
+***************
+*** 10290,10295 ****
+--- 10290,10296 ----
+      char_u	*sname;
+      win_T	*edited_win = NULL;
+      int		tabnr;
++     int		restore_stal = FALSE;
+      win_T	*tab_firstwin;
+      frame_T	*tab_topframe;
+      int		cur_arg_idx = 0;
+***************
+*** 10399,10404 ****
+--- 10400,10418 ----
+  #endif
+  
+      /*
++      * When there are two or more tabpages and 'showtabline' is 1 the tabline
++      * will be displayed when creating the next tab.  That resizes the windows
++      * in the first tab, which may cause problems.  Set 'showtabline' to 2
++      * temporarily to avoid that.
++      */
++     if (p_stal == 1 && first_tabpage->tp_next != NULL)
++     {
++ 	if (put_line(fd, "set stal=2") == FAIL)
++ 	    return FAIL;
++ 	restore_stal = TRUE;
++     }
++ 
++     /*
+       * May repeat putting Windows for each tab, when "tabpages" is in
+       * 'sessionoptions'.
+       * Don't use goto_tabpage(), it may change directory and trigger
+***************
+*** 10548,10553 ****
+--- 10562,10569 ----
+  		|| put_eol(fd) == FAIL)
+  	    return FAIL;
+      }
++     if (restore_stal && put_line(fd, "set stal=1") == FAIL)
++ 	return FAIL;
+  
+      /*
+       * Wipe out an empty unnamed buffer we started in.
+*** ../vim-7.4.280/src/version.c	2014-05-07 20:25:30.845273872 +0200
+--- src/version.c	2014-05-07 21:11:24.925297981 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     281,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+122. You ask if the Netaholics Anonymous t-shirt you ordered can be
+     sent to you via e-mail.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.282 b/SOURCES/7.4.282
new file mode 100644
index 0000000..5ee4e8d
--- /dev/null
+++ b/SOURCES/7.4.282
@@ -0,0 +1,48 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.282
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.282 (after 7.4.279)
+Problem:    Test 97 fails on Mac.
+Solution:   Do not ignore case in file names. (Jun Takimoto)
+Files:	    src/testdir/test97.in
+
+
+*** ../vim-7.4.281/src/testdir/test97.in	2014-05-07 18:35:25.669216052 +0200
+--- src/testdir/test97.in	2014-05-08 11:42:37.701755565 +0200
+***************
+*** 3,9 ****
+--- 3,12 ----
+  
+  STARTTEST
+  :so small.vim
++ :" make sure glob() doesn't use the shell
+  :set shell=doesnotexist
++ :" consistent sorting of file names
++ :set nofileignorecase
+  :e test.out
+  :$put =glob('Xxx\{')
+  :$put =glob('Xxx\$')
+*** ../vim-7.4.281/src/version.c	2014-05-07 21:14:42.913299714 +0200
+--- src/version.c	2014-05-08 11:46:04.825757378 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     282,
+  /**/
+
+-- 
+Would you care for a drink?   I mean, if it were, like,
+disabled and you had to look after it?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.283 b/SOURCES/7.4.283
new file mode 100644
index 0000000..2138470
--- /dev/null
+++ b/SOURCES/7.4.283
@@ -0,0 +1,56 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.283
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.283 (after 7.4.276)
+Problem:    Compiler warning about unused variable. (Charles Cooper)
+Solution:   Move the variable inside the #if block.
+Files:	    src/ex_cmds.c
+
+
+*** ../vim-7.4.282/src/ex_cmds.c	2014-05-07 15:10:17.657108310 +0200
+--- src/ex_cmds.c	2014-05-09 20:31:16.414789550 +0200
+***************
+*** 1551,1559 ****
+  {
+      char_u	*buf;
+      long_u	len;
+-     int		is_fish_shell;
+  
+  #if (defined(UNIX) && !defined(ARCHIE)) || defined(OS2)
+      /* Account for fish's different syntax for subshells */
+      is_fish_shell = (fnamecmp(get_isolated_shell_name(), "fish") == 0);
+      if (is_fish_shell)
+--- 1551,1560 ----
+  {
+      char_u	*buf;
+      long_u	len;
+  
+  #if (defined(UNIX) && !defined(ARCHIE)) || defined(OS2)
++     int		is_fish_shell;
++ 
+      /* Account for fish's different syntax for subshells */
+      is_fish_shell = (fnamecmp(get_isolated_shell_name(), "fish") == 0);
+      if (is_fish_shell)
+*** ../vim-7.4.282/src/version.c	2014-05-08 11:46:23.621757543 +0200
+--- src/version.c	2014-05-09 20:32:06.538789989 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     283,
+  /**/
+
+-- 
+Don't drink and drive.  You might hit a bump and spill your beer.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.284 b/SOURCES/7.4.284
new file mode 100644
index 0000000..0c9781e
--- /dev/null
+++ b/SOURCES/7.4.284
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.284
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.284
+Problem:    Setting 'langmap' in the modeline can cause trouble.  E.g. mapping
+	    ":" breaks many commands. (Jens-Wolfhard Schicke-Uffmann)
+Solution:   Disallow setting 'langmap' from the modeline.
+Files:	    src/option.c
+
+
+*** ../vim-7.4.283/src/option.c	2014-05-07 15:10:17.661108310 +0200
+--- src/option.c	2014-05-13 12:11:39.677552445 +0200
+***************
+*** 1652,1658 ****
+  #endif
+  #endif
+  				(char_u *)0L} SCRIPTID_INIT},
+!     {"langmap",     "lmap", P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
+  #ifdef FEAT_LANGMAP
+  			    (char_u *)&p_langmap, PV_NONE,
+  			    {(char_u *)"",	/* unmatched } */
+--- 1652,1658 ----
+  #endif
+  #endif
+  				(char_u *)0L} SCRIPTID_INIT},
+!     {"langmap",     "lmap", P_STRING|P_VI_DEF|P_COMMA|P_NODUP|P_SECURE,
+  #ifdef FEAT_LANGMAP
+  			    (char_u *)&p_langmap, PV_NONE,
+  			    {(char_u *)"",	/* unmatched } */
+*** ../vim-7.4.283/src/version.c	2014-05-09 20:33:01.102790466 +0200
+--- src/version.c	2014-05-13 12:12:21.273552809 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     284,
+  /**/
+
+-- 
+We are the Borg of GNU GPL.  We will assimilate your source code.
+Resistance is futile.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.285 b/SOURCES/7.4.285
new file mode 100644
index 0000000..2d3862d
--- /dev/null
+++ b/SOURCES/7.4.285
@@ -0,0 +1,49 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.285
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.285
+Problem:    When 'relativenumber' is set and deleting lines or undoing that,
+	    line numbers are not always updated. (Robert Arkwright)
+Solution:   (Christian Brabandt)
+Files:	    src/misc1.c
+
+
+*** ../vim-7.4.284/src/misc1.c	2014-05-07 18:35:25.669216052 +0200
+--- src/misc1.c	2014-05-13 12:41:56.357568348 +0200
+***************
+*** 3125,3130 ****
+--- 3125,3133 ----
+  	    if (hasAnyFolding(wp))
+  		set_topline(wp, wp->w_topline);
+  #endif
++ 	    /* relative numbering may require updating more */
++ 	    if (wp->w_p_rnu)
++ 		redraw_win_later(wp, SOME_VALID);
+  	}
+      }
+  
+*** ../vim-7.4.284/src/version.c	2014-05-13 12:16:44.037555110 +0200
+--- src/version.c	2014-05-13 12:33:21.553563842 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     285,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+148. You find it easier to dial-up the National Weather Service
+     Weather/your_town/now.html than to simply look out the window.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.286 b/SOURCES/7.4.286
new file mode 100644
index 0000000..9c60ec0
--- /dev/null
+++ b/SOURCES/7.4.286
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.286
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.286
+Problem:    Error messages are inconsistant. (ZyX)
+Solution:   Change "Lists" to "list".
+Files:	    src/eval.c
+
+
+*** ../vim-7.4.285/src/eval.c	2014-05-07 18:35:25.665216052 +0200
+--- src/eval.c	2014-05-13 13:37:47.349597682 +0200
+***************
+*** 4431,4437 ****
+  		    if (rettv->v_type != var2.v_type)
+  			EMSG(_("E691: Can only compare List with List"));
+  		    else
+! 			EMSG(_("E692: Invalid operation for Lists"));
+  		    clear_tv(rettv);
+  		    clear_tv(&var2);
+  		    return FAIL;
+--- 4431,4437 ----
+  		    if (rettv->v_type != var2.v_type)
+  			EMSG(_("E691: Can only compare List with List"));
+  		    else
+! 			EMSG(_("E692: Invalid operation for List"));
+  		    clear_tv(rettv);
+  		    clear_tv(&var2);
+  		    return FAIL;
+*** ../vim-7.4.285/src/version.c	2014-05-13 12:44:19.897569605 +0200
+--- src/version.c	2014-05-13 13:31:23.393594321 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     286,
+  /**/
+
+-- 
+You are not really successful until someone claims he sat
+beside you in school.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.287 b/SOURCES/7.4.287
new file mode 100644
index 0000000..1288981
--- /dev/null
+++ b/SOURCES/7.4.287
@@ -0,0 +1,47 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.287
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.287
+Problem:    Patches for .hgignore don't work, since the file is not in the
+	    distribution.
+Solution:   Add .hgignore to the distribution.  Will be effective with the
+	    next version.
+Files:	    Filelist
+
+
+*** ../vim-7.4.286/Filelist	2014-04-29 14:02:42.547919791 +0200
+--- Filelist	2014-05-13 13:50:01.669604110 +0200
+***************
+*** 3,8 ****
+--- 3,9 ----
+  
+  # source files for all source archives
+  SRC_ALL =	\
++ 		.hgignore \
+  		src/README.txt \
+  		src/arabic.c \
+  		src/arabic.h \
+*** ../vim-7.4.286/src/version.c	2014-05-13 13:46:30.597602262 +0200
+--- src/version.c	2014-05-13 13:51:38.101604954 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     287,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+150. You find yourself counting emoticons to get to sleep.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.288 b/SOURCES/7.4.288
new file mode 100644
index 0000000..a1fd182
--- /dev/null
+++ b/SOURCES/7.4.288
@@ -0,0 +1,46 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.288
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.288
+Problem:    When 'spellfile' is set the screen is not redrawn.
+Solution:   Redraw when updating the spelling info. (Christian Brabandt)
+Files:	    src/spell.c
+
+
+*** ../vim-7.4.287/src/spell.c	2014-03-23 15:12:29.939264336 +0100
+--- src/spell.c	2014-05-13 14:01:59.165610391 +0200
+***************
+*** 4508,4513 ****
+--- 4508,4514 ----
+  theend:
+      vim_free(spl_copy);
+      recursive = FALSE;
++     redraw_win_later(wp, NOT_VALID);
+      return ret_msg;
+  }
+  
+*** ../vim-7.4.287/src/version.c	2014-05-13 13:52:34.821605451 +0200
+--- src/version.c	2014-05-13 13:55:26.865606957 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     288,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+151. You find yourself engaged to someone you've never actually met,
+     except through e-mail.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.289 b/SOURCES/7.4.289
new file mode 100644
index 0000000..e62ce14
--- /dev/null
+++ b/SOURCES/7.4.289
@@ -0,0 +1,122 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.289
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.289
+Problem:    Pattern with repeated backreference does not match with new regexp
+	    engine. (Urtica Dioica)
+Solution:   Also check the end of a submatch when deciding to put a state in
+	    the state list.
+Files:	    src/testdir/test64.in, src/testdir/test64.ok, src/regexp_nfa.c
+
+
+*** ../vim-7.4.288/src/testdir/test64.in	2013-11-21 17:12:55.000000000 +0100
+--- src/testdir/test64.in	2014-05-13 15:35:02.477659266 +0200
+***************
+*** 407,412 ****
+--- 407,413 ----
+  :call add(tl, [2, '^.*\.\(.*\)/.\+\(\1\)\@<=$', 'foo.bat/foo.bat', 'foo.bat/foo.bat', 'bat', 'bat'])
+  :call add(tl, [2, '\\\@<!\${\(\d\+\%(:.\{-}\)\?\\\@<!\)}', '2013-06-27${0}', '${0}', '0'])
+  :call add(tl, [2, '^\(a*\)\1$', 'aaaaaaaa', 'aaaaaaaa', 'aaaa'])
++ :call add(tl, [2, '^\(a\{-2,}\)\1\+$', 'aaaaaaaaa', 'aaaaaaaaa', 'aaa'])
+  :"
+  :"""" Look-behind with limit
+  :call add(tl, [2, '<\@<=span.', 'xxspanxx<spanyyy', 'spany'])
+*** ../vim-7.4.288/src/testdir/test64.ok	2013-11-21 17:12:55.000000000 +0100
+--- src/testdir/test64.ok	2014-05-13 15:49:21.381666784 +0200
+***************
+*** 947,952 ****
+--- 947,955 ----
+  OK 0 - ^\(a*\)\1$
+  OK 1 - ^\(a*\)\1$
+  OK 2 - ^\(a*\)\1$
++ OK 0 - ^\(a\{-2,}\)\1\+$
++ OK 1 - ^\(a\{-2,}\)\1\+$
++ OK 2 - ^\(a\{-2,}\)\1\+$
+  OK 0 - <\@<=span.
+  OK 1 - <\@<=span.
+  OK 2 - <\@<=span.
+*** ../vim-7.4.288/src/regexp_nfa.c	2014-04-23 19:06:33.702828771 +0200
+--- src/regexp_nfa.c	2014-05-13 15:49:15.065666729 +0200
+***************
+*** 3945,3950 ****
+--- 3945,3951 ----
+  
+  /*
+   * Return TRUE if "sub1" and "sub2" have the same start positions.
++  * When using back-references also check the end position.
+   */
+      static int
+  sub_equal(sub1, sub2)
+***************
+*** 3976,3981 ****
+--- 3977,3999 ----
+  	    if (s1 != -1 && sub1->list.multi[i].start.col
+  					     != sub2->list.multi[i].start.col)
+  		return FALSE;
++ 
++ 	    if (nfa_has_backref)
++ 	    {
++ 		if (i < sub1->in_use)
++ 		    s1 = sub1->list.multi[i].end.lnum;
++ 		else
++ 		    s1 = -1;
++ 		if (i < sub2->in_use)
++ 		    s2 = sub2->list.multi[i].end.lnum;
++ 		else
++ 		    s2 = -1;
++ 		if (s1 != s2)
++ 		    return FALSE;
++ 		if (s1 != -1 && sub1->list.multi[i].end.col
++ 					       != sub2->list.multi[i].end.col)
++ 		return FALSE;
++ 	    }
+  	}
+      }
+      else
+***************
+*** 3992,3997 ****
+--- 4010,4028 ----
+  		sp2 = NULL;
+  	    if (sp1 != sp2)
+  		return FALSE;
++ 	    if (nfa_has_backref)
++ 	    {
++ 		if (i < sub1->in_use)
++ 		    sp1 = sub1->list.line[i].end;
++ 		else
++ 		    sp1 = NULL;
++ 		if (i < sub2->in_use)
++ 		    sp2 = sub2->list.line[i].end;
++ 		else
++ 		    sp2 = NULL;
++ 		if (sp1 != sp2)
++ 		    return FALSE;
++ 	    }
+  	}
+      }
+  
+*** ../vim-7.4.288/src/version.c	2014-05-13 14:03:36.425611242 +0200
+--- src/version.c	2014-05-13 15:51:52.009668103 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     289,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+152. You find yourself falling for someone you've never seen or hardly
+     know, but, boy can he/she TYPE!!!!!!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.290 b/SOURCES/7.4.290
new file mode 100644
index 0000000..e2e1e62
--- /dev/null
+++ b/SOURCES/7.4.290
@@ -0,0 +1,156 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.290
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.290
+Problem:    A non-greedy match followed by a branch is too greedy. (Ingo
+	    Karkat)
+Solution:   Add NFA_MATCH when it is already in the state list if the position
+	    differs.
+Files:	    src/testdir/test64.in, src/testdir/test64.ok, src/regexp_nfa.c
+
+
+*** ../vim-7.4.289/src/testdir/test64.in	2014-05-13 15:56:45.017670668 +0200
+--- src/testdir/test64.in	2014-05-13 16:15:57.213680754 +0200
+***************
+*** 238,244 ****
+  :call add(tl, [2, '\vx(.{-,8})yz(.*)','xayxayzxayzxayz','xayxayzxayzxayz','ayxa','xayzxayz'])
+  :call add(tl, [2, '\vx(.*)yz(.*)','xayxayzxayzxayz','xayxayzxayzxayz', 'ayxayzxayzxa',''])
+  :call add(tl, [2, '\v(a{1,2}){-2,3}','aaaaaaa','aaaa','aa'])
+! :call add(tl, [2, '\v(a{-1,3})+','aa','aa','a'])
+  :"
+  :" Test Character classes
+  :call add(tl, [2, '\d\+e\d\d','test 10e23 fd','10e23'])
+--- 238,248 ----
+  :call add(tl, [2, '\vx(.{-,8})yz(.*)','xayxayzxayzxayz','xayxayzxayzxayz','ayxa','xayzxayz'])
+  :call add(tl, [2, '\vx(.*)yz(.*)','xayxayzxayzxayz','xayxayzxayzxayz', 'ayxayzxayzxa',''])
+  :call add(tl, [2, '\v(a{1,2}){-2,3}','aaaaaaa','aaaa','aa'])
+! :call add(tl, [2, '\v(a{-1,3})+', 'aa', 'aa', 'a'])
+! :call add(tl, [2, '^\s\{-}\zs\( x\|x$\)', ' x', ' x', ' x'])
+! :call add(tl, [2, '^\s\{-}\zs\(x\| x$\)', ' x', ' x', ' x'])
+! :call add(tl, [2, '^\s\{-}\ze\(x\| x$\)', ' x', '', ' x'])
+! :call add(tl, [2, '^\(\s\{-}\)\(x\| x$\)', ' x', ' x', '', ' x'])
+  :"
+  :" Test Character classes
+  :call add(tl, [2, '\d\+e\d\d','test 10e23 fd','10e23'])
+***************
+*** 462,476 ****
+  :    try
+  :      let l = matchlist(text, pat)
+  :    catch
+! :      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", caused an exception: \"' . v:exception . '\"'
+  :    endtry
+  :" check the match itself
+  :    if len(l) == 0 && len(t) > matchidx
+! :      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", did not match, expected: \"' . t[matchidx] . '\"'
+  :    elseif len(l) > 0 && len(t) == matchidx
+! :      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", match: \"' . l[0] . '\", expected no match'
+  :    elseif len(t) > matchidx && l[0] != t[matchidx]
+! :      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", match: \"' . l[0] . '\", expected: \"' . t[matchidx] . '\"'
+  :    else
+  :      $put ='OK ' . engine . ' - ' . pat
+  :    endif
+--- 466,480 ----
+  :    try
+  :      let l = matchlist(text, pat)
+  :    catch
+! :      $put ='ERROR ' . engine . ': pat: \"' . pat . '\", text: \"' . text . '\", caused an exception: \"' . v:exception . '\"'
+  :    endtry
+  :" check the match itself
+  :    if len(l) == 0 && len(t) > matchidx
+! :      $put ='ERROR ' . engine . ': pat: \"' . pat . '\", text: \"' . text . '\", did not match, expected: \"' . t[matchidx] . '\"'
+  :    elseif len(l) > 0 && len(t) == matchidx
+! :      $put ='ERROR ' . engine . ': pat: \"' . pat . '\", text: \"' . text . '\", match: \"' . l[0] . '\", expected no match'
+  :    elseif len(t) > matchidx && l[0] != t[matchidx]
+! :      $put ='ERROR ' . engine . ': pat: \"' . pat . '\", text: \"' . text . '\", match: \"' . l[0] . '\", expected: \"' . t[matchidx] . '\"'
+  :    else
+  :      $put ='OK ' . engine . ' - ' . pat
+  :    endif
+***************
+*** 483,489 ****
+  :          let e = t[matchidx + i]
+  :        endif
+  :        if l[i] != e
+! :          $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", submatch ' . i . ': \"' . l[i] . '\", expected: \"' . e . '\"'
+  :        endif
+  :      endfor
+  :      unlet i
+--- 487,493 ----
+  :          let e = t[matchidx + i]
+  :        endif
+  :        if l[i] != e
+! :          $put ='ERROR ' . engine . ': pat: \"' . pat . '\", text: \"' . text . '\", submatch ' . i . ': \"' . l[i] . '\", expected: \"' . e . '\"'
+  :        endif
+  :      endfor
+  :      unlet i
+*** ../vim-7.4.289/src/testdir/test64.ok	2014-05-13 15:56:45.017670668 +0200
+--- src/testdir/test64.ok	2014-05-13 16:39:35.077693166 +0200
+***************
+*** 533,538 ****
+--- 533,550 ----
+  OK 0 - \v(a{-1,3})+
+  OK 1 - \v(a{-1,3})+
+  OK 2 - \v(a{-1,3})+
++ OK 0 - ^\s\{-}\zs\( x\|x$\)
++ OK 1 - ^\s\{-}\zs\( x\|x$\)
++ OK 2 - ^\s\{-}\zs\( x\|x$\)
++ OK 0 - ^\s\{-}\zs\(x\| x$\)
++ OK 1 - ^\s\{-}\zs\(x\| x$\)
++ OK 2 - ^\s\{-}\zs\(x\| x$\)
++ OK 0 - ^\s\{-}\ze\(x\| x$\)
++ OK 1 - ^\s\{-}\ze\(x\| x$\)
++ OK 2 - ^\s\{-}\ze\(x\| x$\)
++ OK 0 - ^\(\s\{-}\)\(x\| x$\)
++ OK 1 - ^\(\s\{-}\)\(x\| x$\)
++ OK 2 - ^\(\s\{-}\)\(x\| x$\)
+  OK 0 - \d\+e\d\d
+  OK 1 - \d\+e\d\d
+  OK 2 - \d\+e\d\d
+*** ../vim-7.4.289/src/regexp_nfa.c	2014-05-13 15:56:45.021670668 +0200
+--- src/regexp_nfa.c	2014-05-13 16:37:58.481692320 +0200
+***************
+*** 4324,4331 ****
+  	    {
+  		/* This state is already in the list, don't add it again,
+  		 * unless it is an MOPEN that is used for a backreference or
+! 		 * when there is a PIM. */
+! 		if (!nfa_has_backref && pim == NULL && !l->has_pim)
+  		{
+  skip_add:
+  #ifdef ENABLE_LOG
+--- 4324,4333 ----
+  	    {
+  		/* This state is already in the list, don't add it again,
+  		 * unless it is an MOPEN that is used for a backreference or
+! 		 * when there is a PIM. For NFA_MATCH check the position,
+! 		 * lower position is preferred. */
+! 		if (!nfa_has_backref && pim == NULL && !l->has_pim
+! 						     && state->c != NFA_MATCH)
+  		{
+  skip_add:
+  #ifdef ENABLE_LOG
+*** ../vim-7.4.289/src/version.c	2014-05-13 15:56:45.025670668 +0200
+--- src/version.c	2014-05-13 16:13:33.953679500 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     290,
+  /**/
+
+-- 
+Although the scythe isn't pre-eminent among the weapons of war, anyone who
+has been on the wrong end of, say, a peasants' revolt will know that in
+skilled hands it is fearsome.
+					-- (Terry Pratchett, Mort)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.291 b/SOURCES/7.4.291
new file mode 100644
index 0000000..c9da781
--- /dev/null
+++ b/SOURCES/7.4.291
@@ -0,0 +1,56 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.291
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.291
+Problem:    Compiler warning for int to pointer of different size when DEBUG
+	    is defined.
+Solution:   use smsg() instead of EMSG3().
+Files:	    src/regexp.c
+
+
+*** ../vim-7.4.290/src/regexp.c	2014-04-23 19:06:33.702828771 +0200
+--- src/regexp.c	2014-05-13 16:39:28.833693111 +0200
+***************
+*** 8022,8029 ****
+  	    regexp_engine = expr[4] - '0';
+  	    expr += 5;
+  #ifdef DEBUG
+! 	    EMSG3("New regexp mode selected (%d): %s", regexp_engine,
+! 						    regname[newengine]);
+  #endif
+  	}
+  	else
+--- 8022,8029 ----
+  	    regexp_engine = expr[4] - '0';
+  	    expr += 5;
+  #ifdef DEBUG
+! 	    smsg((char_u *)"New regexp mode selected (%d): %s",
+! 					   regexp_engine, regname[newengine]);
+  #endif
+  	}
+  	else
+*** ../vim-7.4.290/src/version.c	2014-05-13 16:44:25.637695709 +0200
+--- src/version.c	2014-05-13 16:45:34.901696316 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     291,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+153. You find yourself staring at your "inbox" waiting for new e-mail
+     to arrive.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.292 b/SOURCES/7.4.292
new file mode 100644
index 0000000..c35c616
--- /dev/null
+++ b/SOURCES/7.4.292
@@ -0,0 +1,139 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.292
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.292
+Problem:    Searching for "a" does not match accented "a" with new regexp
+	    engine, does match with old engine. (David Bürgin)
+	    "ca" does not match "ca" with accented "a" with either engine.
+Solution:   Change the old engine, check for following composing character
+	    also for single-byte patterns.
+Files:	    src/regexp.c, src/testdir/test95.in, src/testdir/test95.ok
+
+
+*** ../vim-7.4.291/src/regexp.c	2014-05-13 16:46:25.693696760 +0200
+--- src/regexp.c	2014-05-13 17:45:50.977727970 +0200
+***************
+*** 4692,4722 ****
+  		    /* match empty string always works; happens when "~" is
+  		     * empty. */
+  		}
+! 		else if (opnd[1] == NUL
+  #ifdef FEAT_MBYTE
+  			    && !(enc_utf8 && ireg_ic)
+  #endif
+  			)
+! 		    ++reginput;		/* matched a single char */
+! 		else
+! 		{
+! 		    len = (int)STRLEN(opnd);
+! 		    /* Need to match first byte again for multi-byte. */
+! 		    if (cstrncmp(opnd, reginput, &len) != 0)
+! 			status = RA_NOMATCH;
+  #ifdef FEAT_MBYTE
+  		    /* Check for following composing character. */
+! 		    else if (enc_utf8
+! 			       && UTF_COMPOSINGLIKE(reginput, reginput + len))
+  		    {
+  			/* raaron: This code makes a composing character get
+  			 * ignored, which is the correct behavior (sometimes)
+  			 * for voweled Hebrew texts. */
+! 			if (!ireg_icombine)
+! 			    status = RA_NOMATCH;
+  		    }
+  #endif
+! 		    else
+  			reginput += len;
+  		}
+  	    }
+--- 4692,4728 ----
+  		    /* match empty string always works; happens when "~" is
+  		     * empty. */
+  		}
+! 		else
+! 		{
+! 		    if (opnd[1] == NUL
+  #ifdef FEAT_MBYTE
+  			    && !(enc_utf8 && ireg_ic)
+  #endif
+  			)
+! 		    {
+! 			len = 1;	/* matched a single byte above */
+! 		    }
+! 		    else
+! 		    {
+! 			/* Need to match first byte again for multi-byte. */
+! 			len = (int)STRLEN(opnd);
+! 			if (cstrncmp(opnd, reginput, &len) != 0)
+! 			    status = RA_NOMATCH;
+! 		    }
+  #ifdef FEAT_MBYTE
+  		    /* Check for following composing character. */
+! 		    if (status != RA_NOMATCH
+! 			    && enc_utf8
+! 			    && UTF_COMPOSINGLIKE(reginput, reginput + len)
+! 			    && !ireg_icombine)
+  		    {
+  			/* raaron: This code makes a composing character get
+  			 * ignored, which is the correct behavior (sometimes)
+  			 * for voweled Hebrew texts. */
+! 			status = RA_NOMATCH;
+  		    }
+  #endif
+! 		    if (status != RA_NOMATCH)
+  			reginput += len;
+  		}
+  	    }
+*** ../vim-7.4.291/src/testdir/test95.in	2013-07-21 16:53:52.000000000 +0200
+--- src/testdir/test95.in	2014-05-13 17:49:00.201729626 +0200
+***************
+*** 50,55 ****
+--- 50,57 ----
+  :call add(tl, [2, ".\u05b9", " y\u05bb\u05b9 x\u05b9 ", "y\u05bb\u05b9"])
+  :call add(tl, [1, "\u05b9\u05bb", " y\u05b9 x\u05b9\u05bb ", "x\u05b9\u05bb"])
+  :call add(tl, [2, ".\u05b9\u05bb", " y\u05bb x\u05b9\u05bb ", "x\u05b9\u05bb"])
++ :call add(tl, [2, "a", "ca\u0300t"])
++ :call add(tl, [2, "a\u0300", "ca\u0300t", "a\u0300"])
+  
+  
+  :"""" Test \Z
+*** ../vim-7.4.291/src/testdir/test95.ok	2013-07-21 17:01:22.000000000 +0200
+--- src/testdir/test95.ok	2014-05-13 17:49:46.709730033 +0200
+***************
+*** 67,72 ****
+--- 67,78 ----
+  OK 0 - .ֹֻ
+  OK 1 - .ֹֻ
+  OK 2 - .ֹֻ
++ OK 0 - a
++ OK 1 - a
++ OK 2 - a
++ OK 0 - à
++ OK 1 - à
++ OK 2 - à
+  OK 0 - ú\Z
+  OK 1 - ú\Z
+  OK 2 - ú\Z
+*** ../vim-7.4.291/src/version.c	2014-05-13 16:46:25.693696760 +0200
+--- src/version.c	2014-05-13 18:00:22.149735596 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     292,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+154. You fondle your mouse.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.293 b/SOURCES/7.4.293
new file mode 100644
index 0000000..5cc60a1
--- /dev/null
+++ b/SOURCES/7.4.293
@@ -0,0 +1,301 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.293
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.293
+Problem:    It is not possible to ignore composing characters at a specific
+	    point in a pattern.
+Solution:   Add the %C item.
+Files:	    src/regexp.c, src/regexp_nfa.c, src/testdir/test95.in,
+	    src/testdir/test95.ok, runtime/doc/pattern.txt
+
+
+*** ../vim-7.4.292/src/regexp.c	2014-05-13 18:03:55.729737466 +0200
+--- src/regexp.c	2014-05-13 18:27:08.725749659 +0200
+***************
+*** 244,249 ****
+--- 244,250 ----
+  
+  #define RE_MARK		207	/* mark cmp  Match mark position */
+  #define RE_VISUAL	208	/*	Match Visual area */
++ #define RE_COMPOSING	209	/* any composing characters */
+  
+  /*
+   * Magic characters have a special meaning, they don't match literally.
+***************
+*** 2208,2213 ****
+--- 2209,2218 ----
+  		    ret = regnode(RE_VISUAL);
+  		    break;
+  
++ 		case 'C':
++ 		    ret = regnode(RE_COMPOSING);
++ 		    break;
++ 
+  		/* \%[abc]: Emit as a list of branches, all ending at the last
+  		 * branch which matches nothing. */
+  		case '[':
+***************
+*** 4710,4720 ****
+  			    status = RA_NOMATCH;
+  		    }
+  #ifdef FEAT_MBYTE
+! 		    /* Check for following composing character. */
+  		    if (status != RA_NOMATCH
+  			    && enc_utf8
+  			    && UTF_COMPOSINGLIKE(reginput, reginput + len)
+! 			    && !ireg_icombine)
+  		    {
+  			/* raaron: This code makes a composing character get
+  			 * ignored, which is the correct behavior (sometimes)
+--- 4715,4727 ----
+  			    status = RA_NOMATCH;
+  		    }
+  #ifdef FEAT_MBYTE
+! 		    /* Check for following composing character, unless %C
+! 		     * follows (skips over all composing chars). */
+  		    if (status != RA_NOMATCH
+  			    && enc_utf8
+  			    && UTF_COMPOSINGLIKE(reginput, reginput + len)
+! 			    && !ireg_icombine
+! 			    && OP(next) != RE_COMPOSING)
+  		    {
+  			/* raaron: This code makes a composing character get
+  			 * ignored, which is the correct behavior (sometimes)
+***************
+*** 4791,4796 ****
+--- 4798,4813 ----
+  		status = RA_NOMATCH;
+  	    break;
+  #endif
++ 	  case RE_COMPOSING:
++ #ifdef FEAT_MBYTE
++ 	    if (enc_utf8)
++ 	    {
++ 		/* Skip composing characters. */
++ 		while (utf_iscomposing(utf_ptr2char(reginput)))
++ 		    mb_cptr_adv(reginput);
++ 	    }
++ #endif
++ 	    break;
+  
+  	  case NOTHING:
+  	    break;
+*** ../vim-7.4.292/src/regexp_nfa.c	2014-05-13 16:44:25.633695709 +0200
+--- src/regexp_nfa.c	2014-05-13 19:25:58.285780556 +0200
+***************
+*** 81,86 ****
+--- 81,87 ----
+      NFA_COMPOSING,		    /* Next nodes in NFA are part of the
+  				       composing multibyte char */
+      NFA_END_COMPOSING,		    /* End of a composing char in the NFA */
++     NFA_ANY_COMPOSING,		    /* \%C: Any composing characters. */
+      NFA_OPT_CHARS,		    /* \%[abc] */
+  
+      /* The following are used only in the postfix form, not in the NFA */
+***************
+*** 1418,1423 ****
+--- 1419,1428 ----
+  		    EMIT(NFA_VISUAL);
+  		    break;
+  
++ 		case 'C':
++ 		    EMIT(NFA_ANY_COMPOSING);
++ 		    break;
++ 
+  		case '[':
+  		    {
+  			int	    n;
+***************
+*** 2429,2434 ****
+--- 2434,2440 ----
+  	case NFA_MARK_LT:	STRCPY(code, "NFA_MARK_LT "); break;
+  	case NFA_CURSOR:	STRCPY(code, "NFA_CURSOR "); break;
+  	case NFA_VISUAL:	STRCPY(code, "NFA_VISUAL "); break;
++ 	case NFA_ANY_COMPOSING:	STRCPY(code, "NFA_ANY_COMPOSING "); break;
+  
+  	case NFA_STAR:		STRCPY(code, "NFA_STAR "); break;
+  	case NFA_STAR_NONGREEDY: STRCPY(code, "NFA_STAR_NONGREEDY "); break;
+***************
+*** 2967,2972 ****
+--- 2973,2979 ----
+  	    case NFA_NLOWER_IC:
+  	    case NFA_UPPER_IC:
+  	    case NFA_NUPPER_IC:
++ 	    case NFA_ANY_COMPOSING:
+  		/* possibly non-ascii */
+  #ifdef FEAT_MBYTE
+  		if (has_mbyte)
+***************
+*** 4152,4157 ****
+--- 4159,4165 ----
+  		continue;
+  
+  	    case NFA_ANY:
++ 	    case NFA_ANY_COMPOSING:
+  	    case NFA_IDENT:
+  	    case NFA_SIDENT:
+  	    case NFA_KWORD:
+***************
+*** 4395,4401 ****
+      switch (state->c)
+      {
+  	case NFA_MATCH:
+! 	    nfa_match = TRUE;
+  	    break;
+  
+  	case NFA_SPLIT:
+--- 4403,4409 ----
+      switch (state->c)
+      {
+  	case NFA_MATCH:
+! //	    nfa_match = TRUE;
+  	    break;
+  
+  	case NFA_SPLIT:
+***************
+*** 5151,5156 ****
+--- 5159,5165 ----
+  
+  	case NFA_MATCH:
+  	case NFA_MCLOSE:
++ 	case NFA_ANY_COMPOSING:
+  	    /* empty match works always */
+  	    return 0;
+  
+***************
+*** 5573,5578 ****
+--- 5582,5593 ----
+  	    {
+  	    case NFA_MATCH:
+  	      {
++ #ifdef FEAT_MBYTE
++ 		/* If the match ends before a composing characters and
++ 		 * ireg_icombine is not set, that is not really a match. */
++ 		if (enc_utf8 && !ireg_icombine && utf_iscomposing(curc))
++ 		    break;
++ #endif
+  		nfa_match = TRUE;
+  		copy_sub(&submatch->norm, &t->subs.norm);
+  #ifdef FEAT_SYN_HL
+***************
+*** 6120,6125 ****
+--- 6135,6157 ----
+  		}
+  		break;
+  
++ 	    case NFA_ANY_COMPOSING:
++ 		/* On a composing character skip over it.  Otherwise do
++ 		 * nothing.  Always matches. */
++ #ifdef FEAT_MBYTE
++ 		if (enc_utf8 && utf_iscomposing(curc))
++ 		{
++ 		    add_off = clen;
++ 		}
++ 		else
++ #endif
++ 		{
++ 		    add_here = TRUE;
++ 		    add_off = 0;
++ 		}
++ 		add_state = t->state->out;
++ 		break;
++ 
+  	    /*
+  	     * Character classes like \a for alpha, \d for digit etc.
+  	     */
+***************
+*** 6484,6495 ****
+  		if (!result && ireg_ic)
+  		    result = MB_TOLOWER(c) == MB_TOLOWER(curc);
+  #ifdef FEAT_MBYTE
+! 		/* If there is a composing character which is not being
+! 		 * ignored there can be no match. Match with composing
+! 		 * character uses NFA_COMPOSING above. */
+! 		if (result && enc_utf8 && !ireg_icombine
+! 						&& clen != utf_char2len(curc))
+! 		    result = FALSE;
+  #endif
+  		ADD_STATE_IF_MATCH(t->state);
+  		break;
+--- 6516,6525 ----
+  		if (!result && ireg_ic)
+  		    result = MB_TOLOWER(c) == MB_TOLOWER(curc);
+  #ifdef FEAT_MBYTE
+! 		/* If ireg_icombine is not set only skip over the character
+! 		 * itself.  When it is set skip over composing characters. */
+! 		if (result && enc_utf8 && !ireg_icombine)
+! 		    clen = utf_char2len(curc);
+  #endif
+  		ADD_STATE_IF_MATCH(t->state);
+  		break;
+diff: ../vim-7.4.292/src/testdir/test95.insrc/testdir/test95.ok,: No such file or directory
+diff: src/testdir/test95.insrc/testdir/test95.ok,: No such file or directory
+*** ../vim-7.4.292/runtime/doc/pattern.txt	2013-08-10 13:24:59.000000000 +0200
+--- runtime/doc/pattern.txt	2014-05-13 18:59:57.621766895 +0200
+***************
+*** 545,550 ****
+--- 545,551 ----
+  |/\%u|	\%u	\%u	match specified multibyte character (eg \%u20ac)
+  |/\%U|	\%U	\%U	match specified large multibyte character (eg
+  			\%U12345678)
++ |/\%C|	\%C	\%C	match any composing characters
+  
+  Example			matches ~
+  \<\I\i*		or
+***************
+*** 1207,1218 ****
+  8. Composing characters					*patterns-composing*
+  
+  							*/\Z*
+! When "\Z" appears anywhere in the pattern, composing characters are ignored.
+! Thus only the base characters need to match, the composing characters may be
+! different and the number of composing characters may differ.  Only relevant
+! when 'encoding' is "utf-8".
+  Exception: If the pattern starts with one or more composing characters, these
+  must match.
+  
+  When a composing character appears at the start of the pattern of after an
+  item that doesn't include the composing character, a match is found at any
+--- 1208,1225 ----
+  8. Composing characters					*patterns-composing*
+  
+  							*/\Z*
+! When "\Z" appears anywhere in the pattern, all composing characters are
+! ignored.  Thus only the base characters need to match, the composing
+! characters may be different and the number of composing characters may differ.
+! Only relevant when 'encoding' is "utf-8".
+  Exception: If the pattern starts with one or more composing characters, these
+  must match.
++ 							*/\%C*
++ Use "\%C" to skip any composing characters.  For example, the pattern "a" does
++ not match in "càt" (where the a has the composing character 0x0300), but
++ "a\%C" does.  Note that this does not match "cát" (where the á is character
++ 0xe1, it does not have a compositing character).  It does match "cat" (where
++ the a is just an a).
+  
+  When a composing character appears at the start of the pattern of after an
+  item that doesn't include the composing character, a match is found at any
+*** ../vim-7.4.292/src/version.c	2014-05-13 18:03:55.729737466 +0200
+--- src/version.c	2014-05-13 18:28:45.885750510 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     293,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+155. You forget to eat because you're too busy surfing the net.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.294 b/SOURCES/7.4.294
new file mode 100644
index 0000000..aa0201c
--- /dev/null
+++ b/SOURCES/7.4.294
@@ -0,0 +1,125 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.294
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.294 (after 7.4.293)
+Problem:    Test files missing from patch.
+Solution:   Patch the test files.
+Files:	    src/testdir/test95.in, src/testdir/test95.ok
+
+
+*** ../vim-7.4.293/src/testdir/test95.in	2014-05-13 18:03:55.729737466 +0200
+--- src/testdir/test95.in	2014-05-13 19:16:24.433775533 +0200
+***************
+*** 51,57 ****
+--- 51,61 ----
+  :call add(tl, [1, "\u05b9\u05bb", " y\u05b9 x\u05b9\u05bb ", "x\u05b9\u05bb"])
+  :call add(tl, [2, ".\u05b9\u05bb", " y\u05bb x\u05b9\u05bb ", "x\u05b9\u05bb"])
+  :call add(tl, [2, "a", "ca\u0300t"])
++ :call add(tl, [2, "ca", "ca\u0300t"])
+  :call add(tl, [2, "a\u0300", "ca\u0300t", "a\u0300"])
++ :call add(tl, [2, 'a\%C', "ca\u0300t", "a\u0300"])
++ :call add(tl, [2, 'ca\%C', "ca\u0300t", "ca\u0300"])
++ :call add(tl, [2, 'ca\%Ct', "ca\u0300t", "ca\u0300t"])
+  
+  
+  :"""" Test \Z
+***************
+*** 91,105 ****
+  :    try
+  :      let l = matchlist(text, pat)
+  :    catch
+! :      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", caused an exception: \"' . v:exception . '\"'
+  :    endtry
+  :" check the match itself
+  :    if len(l) == 0 && len(t) > matchidx
+! :      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", did not match, expected: \"' . t[matchidx] . '\"'
+  :    elseif len(l) > 0 && len(t) == matchidx
+! :      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", match: \"' . l[0] . '\", expected no match'
+  :    elseif len(t) > matchidx && l[0] != t[matchidx]
+! :      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", match: \"' . l[0] . '\", expected: \"' . t[matchidx] . '\"'
+  :    else
+  :      $put ='OK ' . engine . ' - ' . pat
+  :    endif
+--- 95,109 ----
+  :    try
+  :      let l = matchlist(text, pat)
+  :    catch
+! :      $put ='ERROR ' . engine . ': pat: \"' . pat . '\", text: \"' . text . '\", caused an exception: \"' . v:exception . '\"'
+  :    endtry
+  :" check the match itself
+  :    if len(l) == 0 && len(t) > matchidx
+! :      $put ='ERROR ' . engine . ': pat: \"' . pat . '\", text: \"' . text . '\", did not match, expected: \"' . t[matchidx] . '\"'
+  :    elseif len(l) > 0 && len(t) == matchidx
+! :      $put ='ERROR ' . engine . ': pat: \"' . pat . '\", text: \"' . text . '\", match: \"' . l[0] . '\", expected no match'
+  :    elseif len(t) > matchidx && l[0] != t[matchidx]
+! :      $put ='ERROR ' . engine . ': pat: \"' . pat . '\", text: \"' . text . '\", match: \"' . l[0] . '\", expected: \"' . t[matchidx] . '\"'
+  :    else
+  :      $put ='OK ' . engine . ' - ' . pat
+  :    endif
+***************
+*** 112,118 ****
+  :          let e = t[matchidx + i]
+  :        endif
+  :        if l[i] != e
+! :          $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", submatch ' . i . ': \"' . l[i] . '\", expected: \"' . e . '\"'
+  :        endif
+  :      endfor
+  :      unlet i
+--- 116,122 ----
+  :          let e = t[matchidx + i]
+  :        endif
+  :        if l[i] != e
+! :          $put ='ERROR ' . engine . ': pat: \"' . pat . '\", text: \"' . text . '\", submatch ' . i . ': \"' . l[i] . '\", expected: \"' . e . '\"'
+  :        endif
+  :      endfor
+  :      unlet i
+*** ../vim-7.4.293/src/testdir/test95.ok	2014-05-13 18:03:55.729737466 +0200
+--- src/testdir/test95.ok	2014-05-13 19:01:54.693767920 +0200
+***************
+*** 70,78 ****
+--- 70,90 ----
+  OK 0 - a
+  OK 1 - a
+  OK 2 - a
++ OK 0 - ca
++ OK 1 - ca
++ OK 2 - ca
+  OK 0 - à
+  OK 1 - à
+  OK 2 - à
++ OK 0 - a\%C
++ OK 1 - a\%C
++ OK 2 - a\%C
++ OK 0 - ca\%C
++ OK 1 - ca\%C
++ OK 2 - ca\%C
++ OK 0 - ca\%Ct
++ OK 1 - ca\%Ct
++ OK 2 - ca\%Ct
+  OK 0 - ú\Z
+  OK 1 - ú\Z
+  OK 2 - ú\Z
+*** ../vim-7.4.293/src/version.c	2014-05-13 19:37:19.489786520 +0200
+--- src/version.c	2014-05-13 20:09:45.133803551 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     294,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+156. You forget your friend's name but not her e-mail address.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.295 b/SOURCES/7.4.295
new file mode 100644
index 0000000..bb01d0a
--- /dev/null
+++ b/SOURCES/7.4.295
@@ -0,0 +1,144 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.295
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.295
+Problem:    Various typos, bad white space and unclear comments.
+Solution:   Fix typos.  Improve white space. Update comments.
+Files:	    src/testdir/test49.in, src/macros.h, src/screen.c, src/structs.h,
+	    src/gui_gtk_x11.c, src/os_unix.c
+
+
+*** ../vim-7.4.294/src/testdir/test49.in	2012-11-15 22:29:55.000000000 +0100
+--- src/testdir/test49.in	2013-11-08 01:06:23.000000000 +0100
+***************
+*** 1,7 ****
+  This is a test of the script language.
+  
+  If after adding a new test, the test output doesn't appear properly in
+! test49.failed, try to add one ore more "G"s at the line ending in "test.out"
+  
+  STARTTEST
+  :so small.vim
+--- 1,7 ----
+  This is a test of the script language.
+  
+  If after adding a new test, the test output doesn't appear properly in
+! test49.failed, try to add one or more "G"s at the line ending in "test.out"
+  
+  STARTTEST
+  :so small.vim
+*** ../vim-7.4.294/src/macros.h	2013-06-12 17:07:32.000000000 +0200
+--- src/macros.h	2013-11-08 04:12:45.000000000 +0100
+***************
+*** 264,270 ****
+  # define mb_ptr_adv(p)	    p += has_mbyte ? (*mb_ptr2len)(p) : 1
+  /* Advance multi-byte pointer, do not skip over composing chars. */
+  # define mb_cptr_adv(p)	    p += enc_utf8 ? utf_ptr2len(p) : has_mbyte ? (*mb_ptr2len)(p) : 1
+! /* Backup multi-byte pointer. */
+  # define mb_ptr_back(s, p)  p -= has_mbyte ? ((*mb_head_off)(s, p - 1) + 1) : 1
+  /* get length of multi-byte char, not including composing chars */
+  # define mb_cptr2len(p)	    (enc_utf8 ? utf_ptr2len(p) : (*mb_ptr2len)(p))
+--- 264,270 ----
+  # define mb_ptr_adv(p)	    p += has_mbyte ? (*mb_ptr2len)(p) : 1
+  /* Advance multi-byte pointer, do not skip over composing chars. */
+  # define mb_cptr_adv(p)	    p += enc_utf8 ? utf_ptr2len(p) : has_mbyte ? (*mb_ptr2len)(p) : 1
+! /* Backup multi-byte pointer. Only use with "p" > "s" ! */
+  # define mb_ptr_back(s, p)  p -= has_mbyte ? ((*mb_head_off)(s, p - 1) + 1) : 1
+  /* get length of multi-byte char, not including composing chars */
+  # define mb_cptr2len(p)	    (enc_utf8 ? utf_ptr2len(p) : (*mb_ptr2len)(p))
+*** ../vim-7.4.294/src/screen.c	2014-03-23 15:12:29.935264336 +0100
+--- src/screen.c	2014-03-27 11:34:36.128359605 +0100
+***************
+*** 2456,2463 ****
+  	if (len > 0)
+  	{
+  	    int	    w = number_width(wp);
+! 	    long num;
+! 	    char *fmt = "%*ld ";
+  
+  	    if (len > w + 1)
+  		len = w + 1;
+--- 2456,2463 ----
+  	if (len > 0)
+  	{
+  	    int	    w = number_width(wp);
+! 	    long    num;
+! 	    char    *fmt = "%*ld ";
+  
+  	    if (len > w + 1)
+  		len = w + 1;
+*** ../vim-7.4.294/src/structs.h	2014-03-23 16:03:56.171311627 +0100
+--- src/structs.h	2014-04-24 15:00:59.053101897 +0200
+***************
+*** 572,578 ****
+      unsigned	mf_page_size;		/* number of bytes in a page */
+      int		mf_dirty;		/* TRUE if there are dirty blocks */
+  #ifdef FEAT_CRYPT
+!     buf_T	*mf_buffer;		/* bufer this memfile is for */
+      char_u	mf_seed[MF_SEED_LEN];	/* seed for encryption */
+  
+      /* Values for key, method and seed used for reading data blocks when
+--- 572,578 ----
+      unsigned	mf_page_size;		/* number of bytes in a page */
+      int		mf_dirty;		/* TRUE if there are dirty blocks */
+  #ifdef FEAT_CRYPT
+!     buf_T	*mf_buffer;		/* buffer this memfile is for */
+      char_u	mf_seed[MF_SEED_LEN];	/* seed for encryption */
+  
+      /* Values for key, method and seed used for reading data blocks when
+*** ../vim-7.4.294/src/gui_gtk_x11.c	2014-04-29 15:11:39.783847283 +0200
+--- src/gui_gtk_x11.c	2014-05-07 20:27:54.545275130 +0200
+***************
+*** 2054,2059 ****
+--- 2054,2060 ----
+  
+      ssop_flags = save_ssop_flags;
+      g_free(mksession_cmdline);
++ 
+      /*
+       * Reopen the file and append a command to restore v:this_session,
+       * as if this save never happened.	This is to avoid conflicts with
+*** ../vim-7.4.294/src/os_unix.c	2014-04-23 12:52:36.499369426 +0200
+--- src/os_unix.c	2014-05-13 13:02:56.329579378 +0200
+***************
+*** 3783,3789 ****
+  	del_mouse_termcode(KS_URXVT_MOUSE);
+  # endif
+  # ifdef FEAT_MOUSE_SGR
+!     /* same as the dec mouse */
+      if (use_xterm_mouse() == 4
+  #  ifdef FEAT_GUI
+  	    && !gui.in_use
+--- 3783,3789 ----
+  	del_mouse_termcode(KS_URXVT_MOUSE);
+  # endif
+  # ifdef FEAT_MOUSE_SGR
+!     /* There is no conflict with xterm mouse */
+      if (use_xterm_mouse() == 4
+  #  ifdef FEAT_GUI
+  	    && !gui.in_use
+*** ../vim-7.4.294/src/version.c	2014-05-13 20:15:20.461806487 +0200
+--- src/version.c	2014-05-13 20:17:27.693807600 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     295,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+157. You fum through a magazine, you first check to see if it has a web
+     address.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.296 b/SOURCES/7.4.296
new file mode 100644
index 0000000..2004516
--- /dev/null
+++ b/SOURCES/7.4.296
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.296
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.296
+Problem:    Can't run tests on Solaris.
+Solution:   Change the way VIMRUNTIME is set. (Laurent Blume)
+Files:	    src/testdir/Makefile
+
+
+*** ../vim-7.4.295/src/testdir/Makefile	2014-04-29 12:15:22.852032651 +0200
+--- src/testdir/Makefile	2014-05-22 13:07:17.458599247 +0200
+***************
+*** 57,63 ****
+  
+  RM_ON_RUN = test.out X* viminfo
+  RM_ON_START = tiny.vim small.vim mbyte.vim mzscheme.vim lua.vim test.ok
+! RUN_VIM = export VIMRUNTIME=$(SCRIPTSOURCE); $(VALGRIND) $(VIMPROG) -u unix.vim -U NONE --noplugin -s dotest.in
+  
+  clean:
+  	-rm -rf *.out *.failed *.rej *.orig test.log $(RM_ON_RUN) $(RM_ON_START) valgrind.*
+--- 57,63 ----
+  
+  RM_ON_RUN = test.out X* viminfo
+  RM_ON_START = tiny.vim small.vim mbyte.vim mzscheme.vim lua.vim test.ok
+! RUN_VIM = VIMRUNTIME=$(SCRIPTSOURCE); export VIMRUNTIME; $(VALGRIND) $(VIMPROG) -u unix.vim -U NONE --noplugin -s dotest.in
+  
+  clean:
+  	-rm -rf *.out *.failed *.rej *.orig test.log $(RM_ON_RUN) $(RM_ON_START) valgrind.*
+*** ../vim-7.4.295/src/version.c	2014-05-13 20:19:53.577808878 +0200
+--- src/version.c	2014-05-22 13:10:36.114595209 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     296,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+187. You promise yourself that you'll only stay online for another
+     15 minutes...at least once every hour.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.297 b/SOURCES/7.4.297
new file mode 100644
index 0000000..ccfa6d6
--- /dev/null
+++ b/SOURCES/7.4.297
@@ -0,0 +1,76 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.297
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.297
+Problem:    Memory leak from result of get_isolated_shell_name().
+Solution:   Free the memory. (Dominique Pelle)
+Files:	    src/ex_cmds.c, src/misc1.c
+
+
+*** ../vim-7.4.296/src/ex_cmds.c	2014-05-09 20:33:01.098790466 +0200
+--- src/ex_cmds.c	2014-05-22 13:59:20.962535763 +0200
+***************
+*** 1554,1562 ****
+  
+  #if (defined(UNIX) && !defined(ARCHIE)) || defined(OS2)
+      int		is_fish_shell;
+  
+      /* Account for fish's different syntax for subshells */
+!     is_fish_shell = (fnamecmp(get_isolated_shell_name(), "fish") == 0);
+      if (is_fish_shell)
+  	len = (long_u)STRLEN(cmd) + 13;		/* "begin; " + "; end" + NUL */
+      else
+--- 1554,1564 ----
+  
+  #if (defined(UNIX) && !defined(ARCHIE)) || defined(OS2)
+      int		is_fish_shell;
++     char_u	*shell_name = get_isolated_shell_name();
+  
+      /* Account for fish's different syntax for subshells */
+!     is_fish_shell = (fnamecmp(shell_name, "fish") == 0);
+!     vim_free(shell_name);
+      if (is_fish_shell)
+  	len = (long_u)STRLEN(cmd) + 13;		/* "begin; " + "; end" + NUL */
+      else
+*** ../vim-7.4.296/src/misc1.c	2014-05-13 12:44:19.897569605 +0200
+--- src/misc1.c	2014-05-22 13:58:52.254536347 +0200
+***************
+*** 10874,10880 ****
+  }
+  
+  /*
+!  * Returns the isolated name of the shell:
+   * - Skip beyond any path.  E.g., "/usr/bin/csh -f" -> "csh -f".
+   * - Remove any argument.  E.g., "csh -f" -> "csh".
+   * But don't allow a space in the path, so that this works:
+--- 10874,10880 ----
+  }
+  
+  /*
+!  * Returns the isolated name of the shell in allocated memory:
+   * - Skip beyond any path.  E.g., "/usr/bin/csh -f" -> "csh -f".
+   * - Remove any argument.  E.g., "csh -f" -> "csh".
+   * But don't allow a space in the path, so that this works:
+*** ../vim-7.4.296/src/version.c	2014-05-22 13:12:25.650592983 +0200
+--- src/version.c	2014-05-22 13:57:37.346537869 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     297,
+  /**/
+
+-- 
+A computer program does what you tell it to do, not what you want it to do.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.298 b/SOURCES/7.4.298
new file mode 100644
index 0000000..5910902
--- /dev/null
+++ b/SOURCES/7.4.298
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.298
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.298
+Problem:    Can't have a funcref start with "t:".
+Solution:   Add "t" to the list of accepted names. (Yukihiro Nakadaira)
+Files:	    src/eval.c
+
+
+*** ../vim-7.4.297/src/eval.c	2014-05-13 13:46:30.593602262 +0200
+--- src/eval.c	2014-05-22 14:09:46.902523041 +0200
+***************
+*** 21064,21070 ****
+      char_u *name;    /* points to start of variable name */
+      int    new_var;  /* TRUE when creating the variable */
+  {
+!     if (!(vim_strchr((char_u *)"wbs", name[0]) != NULL && name[1] == ':')
+  	    && !ASCII_ISUPPER((name[0] != NUL && name[1] == ':')
+  						     ? name[2] : name[0]))
+      {
+--- 21064,21071 ----
+      char_u *name;    /* points to start of variable name */
+      int    new_var;  /* TRUE when creating the variable */
+  {
+!     /* Allow for w: b: s: and t:. */
+!     if (!(vim_strchr((char_u *)"wbst", name[0]) != NULL && name[1] == ':')
+  	    && !ASCII_ISUPPER((name[0] != NUL && name[1] == ':')
+  						     ? name[2] : name[0]))
+      {
+*** ../vim-7.4.297/src/version.c	2014-05-22 14:00:12.698534712 +0200
+--- src/version.c	2014-05-22 14:08:43.874524322 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     298,
+  /**/
+
+-- 
+I'm in shape.  Round IS a shape.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.299 b/SOURCES/7.4.299
new file mode 100644
index 0000000..087cca6
--- /dev/null
+++ b/SOURCES/7.4.299
@@ -0,0 +1,458 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.299
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.299
+Problem:    When running configure twice DYNAMIC_PYTHON_DLL may become empty.
+Solution:   Use AC_CACHE_VAL. (Ken Takata)
+Files:	    src/configure.in, src/auto/configure
+
+
+*** ../vim-7.4.298/src/configure.in	2014-04-12 13:11:58.260430356 +0200
+--- src/configure.in	2014-05-22 14:39:39.326486611 +0200
+***************
+*** 1132,1141 ****
+  	      vi_cv_path_python_plibs=`echo $vi_cv_path_python_plibs | sed s/-ltermcap//`
+  	    fi
+  	])
+  
+- 	if test "X$python_DLLLIBRARY" != "X"; then
+- 	  python_INSTSONAME="$python_DLLLIBRARY"
+- 	fi
+  	PYTHON_LIBS="${vi_cv_path_python_plibs}"
+  	if test "${vi_cv_path_python_pfx}" = "${vi_cv_path_python_epfx}"; then
+  	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME='\"${vi_cv_path_python_pfx}\"'"
+--- 1132,1146 ----
+  	      vi_cv_path_python_plibs=`echo $vi_cv_path_python_plibs | sed s/-ltermcap//`
+  	    fi
+  	])
++ 	AC_CACHE_VAL(vi_cv_dll_name_python,
++ 	[
++ 	  if test "X$python_DLLLIBRARY" != "X"; then
++ 	    vi_cv_dll_name_python="$python_DLLLIBRARY"
++ 	  else
++ 	    vi_cv_dll_name_python="$python_INSTSONAME"
++ 	  fi
++ 	])
+  
+  	PYTHON_LIBS="${vi_cv_path_python_plibs}"
+  	if test "${vi_cv_path_python_pfx}" = "${vi_cv_path_python_epfx}"; then
+  	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME='\"${vi_cv_path_python_pfx}\"'"
+***************
+*** 1323,1341 ****
+  	@echo "python3_DLLLIBRARY='$(DLLLIBRARY)'"
+  	@echo "python3_INSTSONAME='$(INSTSONAME)'"
+  eof
+!             dnl -- delete the lines from make about Entering/Leaving directory
+!             eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+!             rm -f -- "${tmp_mkf}"
+  	    vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
+!             vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
+!             dnl remove -ltermcap, it can conflict with an earlier -lncurses
+!             vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
+!             vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
+!         ])
+!   
+!         if test "X$python3_DLLLIBRARY" != "X"; then
+! 	  python3_INSTSONAME="$python3_DLLLIBRARY"
+!         fi
+          PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
+          if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
+            PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME='L\"${vi_cv_path_python3_pfx}\"'"
+--- 1328,1351 ----
+  	@echo "python3_DLLLIBRARY='$(DLLLIBRARY)'"
+  	@echo "python3_INSTSONAME='$(INSTSONAME)'"
+  eof
+! 	    dnl -- delete the lines from make about Entering/Leaving directory
+! 	    eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+! 	    rm -f -- "${tmp_mkf}"
+  	    vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
+! 	    vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
+! 	    dnl remove -ltermcap, it can conflict with an earlier -lncurses
+! 	    vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
+! 	    vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
+! 	])
+! 	AC_CACHE_VAL(vi_cv_dll_name_python3,
+! 	[
+! 	  if test "X$python3_DLLLIBRARY" != "X"; then
+! 	    vi_cv_dll_name_python3="$python3_DLLLIBRARY"
+! 	  else
+! 	    vi_cv_dll_name_python3="$python3_INSTSONAME"
+! 	  fi
+! 	])
+! 
+          PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
+          if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
+            PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME='L\"${vi_cv_path_python3_pfx}\"'"
+***************
+*** 1458,1464 ****
+      int main(int argc, char** argv)
+      {
+        int not_needed = 0;
+!       if (no_rtl_global_needed_for("${python_INSTSONAME}", "${vi_cv_path_python_pfx}"))
+              not_needed = 1;
+        return !not_needed;
+      }])],
+--- 1468,1474 ----
+      int main(int argc, char** argv)
+      {
+        int not_needed = 0;
+!       if (no_rtl_global_needed_for("${vi_cv_dll_name_python}", "${vi_cv_path_python_pfx}"))
+              not_needed = 1;
+        return !not_needed;
+      }])],
+***************
+*** 1504,1510 ****
+      int main(int argc, char** argv)
+      {
+        int not_needed = 0;
+!       if (no_rtl_global_needed_for("${python3_INSTSONAME}", L"${vi_cv_path_python3_pfx}"))
+              not_needed = 1;
+        return !not_needed;
+      }])],
+--- 1514,1520 ----
+      int main(int argc, char** argv)
+      {
+        int not_needed = 0;
+!       if (no_rtl_global_needed_for("${vi_cv_dll_name_python3}", L"${vi_cv_path_python3_pfx}"))
+              not_needed = 1;
+        return !not_needed;
+      }])],
+***************
+*** 1515,1531 ****
+  
+    PYTHON_SRC="if_python.c"
+    PYTHON_OBJ="objects/if_python.o"
+!   PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${python_INSTSONAME}\\\""
+    PYTHON_LIBS=
+    PYTHON3_SRC="if_python3.c"
+    PYTHON3_OBJ="objects/if_python3.o"
+!   PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${python3_INSTSONAME}\\\""
+    PYTHON3_LIBS=
+  elif test "$python_ok" = yes && test "$enable_pythoninterp" = "dynamic"; then
+    AC_DEFINE(DYNAMIC_PYTHON)
+    PYTHON_SRC="if_python.c"
+    PYTHON_OBJ="objects/if_python.o"
+!   PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${python_INSTSONAME}\\\""
+    PYTHON_LIBS=
+  elif test "$python_ok" = yes; then
+    dnl Check that adding -fPIE works.  It may be needed when using a static
+--- 1525,1541 ----
+  
+    PYTHON_SRC="if_python.c"
+    PYTHON_OBJ="objects/if_python.o"
+!   PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
+    PYTHON_LIBS=
+    PYTHON3_SRC="if_python3.c"
+    PYTHON3_OBJ="objects/if_python3.o"
+!   PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
+    PYTHON3_LIBS=
+  elif test "$python_ok" = yes && test "$enable_pythoninterp" = "dynamic"; then
+    AC_DEFINE(DYNAMIC_PYTHON)
+    PYTHON_SRC="if_python.c"
+    PYTHON_OBJ="objects/if_python.o"
+!   PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
+    PYTHON_LIBS=
+  elif test "$python_ok" = yes; then
+    dnl Check that adding -fPIE works.  It may be needed when using a static
+***************
+*** 1547,1553 ****
+    AC_DEFINE(DYNAMIC_PYTHON3)
+    PYTHON3_SRC="if_python3.c"
+    PYTHON3_OBJ="objects/if_python3.o"
+!   PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${python3_INSTSONAME}\\\""
+    PYTHON3_LIBS=
+  elif test "$python3_ok" = yes; then
+    dnl Check that adding -fPIE works.  It may be needed when using a static
+--- 1557,1563 ----
+    AC_DEFINE(DYNAMIC_PYTHON3)
+    PYTHON3_SRC="if_python3.c"
+    PYTHON3_OBJ="objects/if_python3.o"
+!   PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
+    PYTHON3_LIBS=
+  elif test "$python3_ok" = yes; then
+    dnl Check that adding -fPIE works.  It may be needed when using a static
+*** ../vim-7.4.298/src/auto/configure	2014-04-12 13:11:58.268430356 +0200
+--- src/auto/configure	2014-05-22 14:40:05.146486086 +0200
+***************
+*** 5893,5902 ****
+  
+  fi
+  
+  
+- 	if test "X$python_DLLLIBRARY" != "X"; then
+- 	  python_INSTSONAME="$python_DLLLIBRARY"
+- 	fi
+  	PYTHON_LIBS="${vi_cv_path_python_plibs}"
+  	if test "${vi_cv_path_python_pfx}" = "${vi_cv_path_python_epfx}"; then
+  	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME='\"${vi_cv_path_python_pfx}\"'"
+--- 5893,5911 ----
+  
+  fi
+  
++ 	if ${vi_cv_dll_name_python+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++ 
++ 	  if test "X$python_DLLLIBRARY" != "X"; then
++ 	    vi_cv_dll_name_python="$python_DLLLIBRARY"
++ 	  else
++ 	    vi_cv_dll_name_python="$python_INSTSONAME"
++ 	  fi
++ 
++ fi
++ 
+  
+  	PYTHON_LIBS="${vi_cv_path_python_plibs}"
+  	if test "${vi_cv_path_python_pfx}" = "${vi_cv_path_python_epfx}"; then
+  	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME='\"${vi_cv_path_python_pfx}\"'"
+***************
+*** 6200,6218 ****
+  	@echo "python3_DLLLIBRARY='$(DLLLIBRARY)'"
+  	@echo "python3_INSTSONAME='$(INSTSONAME)'"
+  eof
+!                         eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+!             rm -f -- "${tmp_mkf}"
+  	    vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
+!             vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
+!                         vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
+!             vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
+  
+  fi
+  
+  
+-         if test "X$python3_DLLLIBRARY" != "X"; then
+- 	  python3_INSTSONAME="$python3_DLLLIBRARY"
+-         fi
+          PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
+          if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
+            PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME='L\"${vi_cv_path_python3_pfx}\"'"
+--- 6209,6236 ----
+  	@echo "python3_DLLLIBRARY='$(DLLLIBRARY)'"
+  	@echo "python3_INSTSONAME='$(INSTSONAME)'"
+  eof
+! 	    	    eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+! 	    rm -f -- "${tmp_mkf}"
+  	    vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
+! 	    vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
+! 	    	    vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
+! 	    vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
+! 
+! fi
+! 
+! 	if ${vi_cv_dll_name_python3+:} false; then :
+!   $as_echo_n "(cached) " >&6
+! else
+! 
+! 	  if test "X$python3_DLLLIBRARY" != "X"; then
+! 	    vi_cv_dll_name_python3="$python3_DLLLIBRARY"
+! 	  else
+! 	    vi_cv_dll_name_python3="$python3_INSTSONAME"
+! 	  fi
+  
+  fi
+  
+  
+          PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
+          if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
+            PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME='L\"${vi_cv_path_python3_pfx}\"'"
+***************
+*** 6372,6378 ****
+      int main(int argc, char** argv)
+      {
+        int not_needed = 0;
+!       if (no_rtl_global_needed_for("${python_INSTSONAME}", "${vi_cv_path_python_pfx}"))
+              not_needed = 1;
+        return !not_needed;
+      }
+--- 6390,6396 ----
+      int main(int argc, char** argv)
+      {
+        int not_needed = 0;
+!       if (no_rtl_global_needed_for("${vi_cv_dll_name_python}", "${vi_cv_path_python_pfx}"))
+              not_needed = 1;
+        return !not_needed;
+      }
+***************
+*** 6438,6444 ****
+      int main(int argc, char** argv)
+      {
+        int not_needed = 0;
+!       if (no_rtl_global_needed_for("${python3_INSTSONAME}", L"${vi_cv_path_python3_pfx}"))
+              not_needed = 1;
+        return !not_needed;
+      }
+--- 6456,6462 ----
+      int main(int argc, char** argv)
+      {
+        int not_needed = 0;
+!       if (no_rtl_global_needed_for("${vi_cv_dll_name_python3}", L"${vi_cv_path_python3_pfx}"))
+              not_needed = 1;
+        return !not_needed;
+      }
+***************
+*** 6461,6478 ****
+  
+    PYTHON_SRC="if_python.c"
+    PYTHON_OBJ="objects/if_python.o"
+!   PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${python_INSTSONAME}\\\""
+    PYTHON_LIBS=
+    PYTHON3_SRC="if_python3.c"
+    PYTHON3_OBJ="objects/if_python3.o"
+!   PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${python3_INSTSONAME}\\\""
+    PYTHON3_LIBS=
+  elif test "$python_ok" = yes && test "$enable_pythoninterp" = "dynamic"; then
+    $as_echo "#define DYNAMIC_PYTHON 1" >>confdefs.h
+  
+    PYTHON_SRC="if_python.c"
+    PYTHON_OBJ="objects/if_python.o"
+!   PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${python_INSTSONAME}\\\""
+    PYTHON_LIBS=
+  elif test "$python_ok" = yes; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -fPIE can be added for Python" >&5
+--- 6479,6496 ----
+  
+    PYTHON_SRC="if_python.c"
+    PYTHON_OBJ="objects/if_python.o"
+!   PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
+    PYTHON_LIBS=
+    PYTHON3_SRC="if_python3.c"
+    PYTHON3_OBJ="objects/if_python3.o"
+!   PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
+    PYTHON3_LIBS=
+  elif test "$python_ok" = yes && test "$enable_pythoninterp" = "dynamic"; then
+    $as_echo "#define DYNAMIC_PYTHON 1" >>confdefs.h
+  
+    PYTHON_SRC="if_python.c"
+    PYTHON_OBJ="objects/if_python.o"
+!   PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${vi_cv_dll_name_python}\\\""
+    PYTHON_LIBS=
+  elif test "$python_ok" = yes; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -fPIE can be added for Python" >&5
+***************
+*** 6511,6517 ****
+  
+    PYTHON3_SRC="if_python3.c"
+    PYTHON3_OBJ="objects/if_python3.o"
+!   PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${python3_INSTSONAME}\\\""
+    PYTHON3_LIBS=
+  elif test "$python3_ok" = yes; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -fPIE can be added for Python3" >&5
+--- 6529,6535 ----
+  
+    PYTHON3_SRC="if_python3.c"
+    PYTHON3_OBJ="objects/if_python3.o"
+!   PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${vi_cv_dll_name_python3}\\\""
+    PYTHON3_LIBS=
+  elif test "$python3_ok" = yes; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -fPIE can be added for Python3" >&5
+***************
+*** 11420,11426 ****
+      We can't simply define LARGE_OFF_T to be 9223372036854775807,
+      since some C++ compilers masquerading as C compilers
+      incorrectly reject 9223372036854775807.  */
+! #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+    int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+  		       && LARGE_OFF_T % 2147483647 == 1)
+  		      ? 1 : -1];
+--- 11438,11444 ----
+      We can't simply define LARGE_OFF_T to be 9223372036854775807,
+      since some C++ compilers masquerading as C compilers
+      incorrectly reject 9223372036854775807.  */
+! #define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+    int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+  		       && LARGE_OFF_T % 2147483647 == 1)
+  		      ? 1 : -1];
+***************
+*** 11466,11472 ****
+      We can't simply define LARGE_OFF_T to be 9223372036854775807,
+      since some C++ compilers masquerading as C compilers
+      incorrectly reject 9223372036854775807.  */
+! #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+    int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+  		       && LARGE_OFF_T % 2147483647 == 1)
+  		      ? 1 : -1];
+--- 11484,11490 ----
+      We can't simply define LARGE_OFF_T to be 9223372036854775807,
+      since some C++ compilers masquerading as C compilers
+      incorrectly reject 9223372036854775807.  */
+! #define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+    int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+  		       && LARGE_OFF_T % 2147483647 == 1)
+  		      ? 1 : -1];
+***************
+*** 11490,11496 ****
+      We can't simply define LARGE_OFF_T to be 9223372036854775807,
+      since some C++ compilers masquerading as C compilers
+      incorrectly reject 9223372036854775807.  */
+! #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+    int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+  		       && LARGE_OFF_T % 2147483647 == 1)
+  		      ? 1 : -1];
+--- 11508,11514 ----
+      We can't simply define LARGE_OFF_T to be 9223372036854775807,
+      since some C++ compilers masquerading as C compilers
+      incorrectly reject 9223372036854775807.  */
+! #define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+    int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+  		       && LARGE_OFF_T % 2147483647 == 1)
+  		      ? 1 : -1];
+***************
+*** 11535,11541 ****
+      We can't simply define LARGE_OFF_T to be 9223372036854775807,
+      since some C++ compilers masquerading as C compilers
+      incorrectly reject 9223372036854775807.  */
+! #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+    int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+  		       && LARGE_OFF_T % 2147483647 == 1)
+  		      ? 1 : -1];
+--- 11553,11559 ----
+      We can't simply define LARGE_OFF_T to be 9223372036854775807,
+      since some C++ compilers masquerading as C compilers
+      incorrectly reject 9223372036854775807.  */
+! #define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+    int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+  		       && LARGE_OFF_T % 2147483647 == 1)
+  		      ? 1 : -1];
+***************
+*** 11559,11565 ****
+      We can't simply define LARGE_OFF_T to be 9223372036854775807,
+      since some C++ compilers masquerading as C compilers
+      incorrectly reject 9223372036854775807.  */
+! #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+    int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+  		       && LARGE_OFF_T % 2147483647 == 1)
+  		      ? 1 : -1];
+--- 11577,11583 ----
+      We can't simply define LARGE_OFF_T to be 9223372036854775807,
+      since some C++ compilers masquerading as C compilers
+      incorrectly reject 9223372036854775807.  */
+! #define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+    int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+  		       && LARGE_OFF_T % 2147483647 == 1)
+  		      ? 1 : -1];
+*** ../vim-7.4.298/src/version.c	2014-05-22 14:19:51.674510749 +0200
+--- src/version.c	2014-05-22 14:36:44.634490162 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     299,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+190. You quickly hand over your wallet, leather jacket, and car keys
+     during a mugging, then proceed to beat the crap out of your
+     assailant when he asks for your laptop.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.300 b/SOURCES/7.4.300
new file mode 100644
index 0000000..308fd93
--- /dev/null
+++ b/SOURCES/7.4.300
@@ -0,0 +1,62 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.300
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.300
+Problem:    The way config.cache is removed doesn't always work.
+Solution:   Always remove config.cache. (Ken Takata)
+Files:	    src/Makefile
+
+
+*** ../vim-7.4.299/src/Makefile	2014-04-29 20:04:05.331539784 +0200
+--- src/Makefile	2014-05-22 14:48:23.034475967 +0200
+***************
+*** 1664,1675 ****
+  # auto/config.h isn't updated.  The dependency on auto/config.mk should make
+  # sure configure is run when it's needed.
+  #
+  config auto/config.mk: auto/configure config.mk.in config.h.in
+! 	if test -f auto/config.cache && \
+! 	    grep '^ac_cv_env_CFLAGS_value=' auto/config.cache > /dev/null && \
+! 	    ! grep -x -F 'ac_cv_env_CFLAGS_value=$(CFLAGS)' auto/config.cache > /dev/null; then \
+! 		rm auto/config.cache; \
+! 	fi
+  	if test "X$(MAKECMDGOALS)" != "Xclean" \
+  		-a "X$(MAKECMDGOALS)" != "Xdistclean" \
+  		-a "X$(MAKECMDGOALS)" != "Xautoconf" \
+--- 1664,1674 ----
+  # auto/config.h isn't updated.  The dependency on auto/config.mk should make
+  # sure configure is run when it's needed.
+  #
++ # Remove the config.cache every time, once in a while it causes problems that
++ # are very hard to figure out.
++ #
+  config auto/config.mk: auto/configure config.mk.in config.h.in
+! 	-rm -f auto/config.cache
+  	if test "X$(MAKECMDGOALS)" != "Xclean" \
+  		-a "X$(MAKECMDGOALS)" != "Xdistclean" \
+  		-a "X$(MAKECMDGOALS)" != "Xautoconf" \
+*** ../vim-7.4.299/src/version.c	2014-05-22 14:44:08.098481148 +0200
+--- src/version.c	2014-05-22 14:51:36.022472045 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     300,
+  /**/
+
+
+-- 
+What is the difference between a professional and an amateur?
+The ark was built by an amateur; professionals gave us the Titanic.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.301 b/SOURCES/7.4.301
new file mode 100644
index 0000000..5870932
--- /dev/null
+++ b/SOURCES/7.4.301
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.301
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.301 (after 7.4.280)
+Problem:    Still a scrolling problem when loading a session file.
+Solution:   Fix off-by-one mistake. (Nobuhiro Takasaki)
+Files:	    src/window.c
+
+
+*** ../vim-7.4.300/src/window.c	2014-05-07 20:25:30.845273872 +0200
+--- src/window.c	2014-05-22 15:11:58.786447193 +0200
+***************
+*** 5748,5754 ****
+  		lnum++;
+  		wp->w_wrow -= line_size + sline;
+  	    }
+! 	    else if (sline > 0)
+  	    {
+  		/* First line of file reached, use that as topline. */
+  		lnum = 1;
+--- 5748,5754 ----
+  		lnum++;
+  		wp->w_wrow -= line_size + sline;
+  	    }
+! 	    else if (sline >= 0)
+  	    {
+  		/* First line of file reached, use that as topline. */
+  		lnum = 1;
+*** ../vim-7.4.300/src/version.c	2014-05-22 14:54:22.854468654 +0200
+--- src/version.c	2014-05-22 15:12:33.770446481 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     301,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+191. You rate eating establishments not by the quality of the food,
+     but by the availability of electrical outlets for your PowerBook.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.302 b/SOURCES/7.4.302
new file mode 100644
index 0000000..3411f4d
--- /dev/null
+++ b/SOURCES/7.4.302
@@ -0,0 +1,78 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.302
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.302
+Problem:    Signs placed with 'foldcolumn' set don't show up after filler
+	    lines.
+Solution:   Take filler lines into account. (Olaf Dabrunz)
+Files:	    src/screen.c
+
+
+*** ../vim-7.4.301/src/screen.c	2014-05-13 20:19:53.573808877 +0200
+--- src/screen.c	2014-05-22 15:27:11.966428633 +0200
+***************
+*** 3553,3563 ****
+  		draw_state = WL_SIGN;
+  		/* Show the sign column when there are any signs in this
+  		 * buffer or when using Netbeans. */
+! 		if (draw_signcolumn(wp)
+! # ifdef FEAT_DIFF
+! 			&& filler_todo <= 0
+! # endif
+! 		   )
+  		{
+  		    int	text_sign;
+  # ifdef FEAT_SIGN_ICONS
+--- 3553,3559 ----
+  		draw_state = WL_SIGN;
+  		/* Show the sign column when there are any signs in this
+  		 * buffer or when using Netbeans. */
+! 		if (draw_signcolumn(wp))
+  		{
+  		    int	text_sign;
+  # ifdef FEAT_SIGN_ICONS
+***************
+*** 3569,3575 ****
+  		    char_attr = hl_attr(HLF_SC);
+  		    n_extra = 2;
+  
+! 		    if (row == startrow)
+  		    {
+  			text_sign = buf_getsigntype(wp->w_buffer, lnum,
+  								   SIGN_TEXT);
+--- 3565,3575 ----
+  		    char_attr = hl_attr(HLF_SC);
+  		    n_extra = 2;
+  
+! 		    if (row == startrow
+! #ifdef FEAT_DIFF
+! 			    + filler_lines && filler_todo <= 0
+! #endif
+! 			    )
+  		    {
+  			text_sign = buf_getsigntype(wp->w_buffer, lnum,
+  								   SIGN_TEXT);
+*** ../vim-7.4.301/src/version.c	2014-05-22 15:17:24.706440568 +0200
+--- src/version.c	2014-05-22 15:46:00.058405705 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     302,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+192. Your boss asks you to "go fer" coffee and you come up with 235 FTP sites.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.303 b/SOURCES/7.4.303
new file mode 100644
index 0000000..8e49c69
--- /dev/null
+++ b/SOURCES/7.4.303
@@ -0,0 +1,85 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.303
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.303
+Problem:    When using double-width characters the text displayed on the
+	    command line is sometimes truncated.
+Solution:   Reset the string lenght. (Nobuhiro Takasaki)
+Files:	    src/screen.c
+
+
+*** ../vim-7.4.302/src/screen.c	2014-05-22 15:51:00.734399594 +0200
+--- src/screen.c	2014-05-22 16:02:24.294385701 +0200
+***************
+*** 6916,6930 ****
+   * a NUL.
+   */
+      void
+! screen_puts_len(text, len, row, col, attr)
+      char_u	*text;
+!     int		len;
+      int		row;
+      int		col;
+      int		attr;
+  {
+      unsigned	off;
+      char_u	*ptr = text;
+      int		c;
+  #ifdef FEAT_MBYTE
+      unsigned	max_off;
+--- 6916,6931 ----
+   * a NUL.
+   */
+      void
+! screen_puts_len(text, textlen, row, col, attr)
+      char_u	*text;
+!     int		textlen;
+      int		row;
+      int		col;
+      int		attr;
+  {
+      unsigned	off;
+      char_u	*ptr = text;
++     int		len = textlen;
+      int		c;
+  #ifdef FEAT_MBYTE
+      unsigned	max_off;
+***************
+*** 7169,7175 ****
+--- 7170,7180 ----
+  	    col += mbyte_cells;
+  	    ptr += mbyte_blen;
+  	    if (clear_next_cell)
++ 	    {
++ 		/* This only happens at the end, display one space next. */
+  		ptr = (char_u *)" ";
++ 		len = -1;
++ 	    }
+  	}
+  	else
+  #endif
+*** ../vim-7.4.302/src/version.c	2014-05-22 15:51:00.738399594 +0200
+--- src/version.c	2014-05-22 15:58:15.050390766 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     303,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+193. You ask your girlfriend to drive home so you can sit back with
+     your PDA and download the information to your laptop
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.304 b/SOURCES/7.4.304
new file mode 100644
index 0000000..874d108
--- /dev/null
+++ b/SOURCES/7.4.304
@@ -0,0 +1,45 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.304
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.304
+Problem:    Cannot always use Python with Vim.
+Solution:   Add the manifest to the executable. (Jacques Germishuys)
+Files:	    src/Make_mvc.mak
+
+
+*** ../vim-7.4.303/src/Make_mvc.mak	2014-02-15 19:47:46.685882910 +0100
+--- src/Make_mvc.mak	2014-05-22 16:25:40.978357314 +0200
+***************
+*** 973,978 ****
+--- 973,979 ----
+  		$(LUA_OBJ) $(MZSCHEME_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) \
+  		$(TCL_OBJ) $(SNIFF_OBJ) $(CSCOPE_OBJ) $(NETBEANS_OBJ) \
+  		$(XPM_OBJ) $(OUTDIR)\version.obj $(LINKARGS2)
++ 	if exist $(VIM).exe.manifest mt.exe -nologo -manifest $(VIM).exe.manifest -updateresource:$(VIM).exe;1
+  
+  $(VIM): $(VIM).exe
+  
+*** ../vim-7.4.303/src/version.c	2014-05-22 16:05:16.342382204 +0200
+--- src/version.c	2014-05-22 16:20:07.534364091 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     304,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+194. Your business cards contain your e-mail and home page address.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.305 b/SOURCES/7.4.305
new file mode 100644
index 0000000..7abb227
--- /dev/null
+++ b/SOURCES/7.4.305
@@ -0,0 +1,276 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.305
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.305
+Problem:    Making 'ttymouse' empty after the xterm version was requested
+	    causes problems. (Elijah Griffin)
+Solution:   Do not check for DEC mouse sequences when the xterm version was
+	    requested.  Also don't request the xterm version when DEC mouse
+	    was enabled.
+Files:	    src/term.c, src/os_unix.c, src/proto/term.pro, src/globals.h
+
+
+*** ../vim-7.4.304/src/term.c	2014-03-25 13:46:22.841832960 +0100
+--- src/term.c	2014-05-22 17:12:59.198299628 +0200
+***************
+*** 153,158 ****
+--- 153,163 ----
+  static char_u *vim_tgetstr __ARGS((char *s, char_u **pp));
+  #endif /* HAVE_TGETENT */
+  
++ #if defined(FEAT_TERMRESPONSE)
++ static int xt_index_in = 0;
++ static int xt_index_out = 0;
++ #endif
++ 
+  static int  detected_8bit = FALSE;	/* detected 8-bit terminal */
+  
+  static struct builtin_term builtin_termcaps[] =
+***************
+*** 3259,3265 ****
+  	    may_req_termresponse();
+  	    /* Immediately check for a response.  If t_Co changes, we don't
+  	     * want to redraw with wrong colors first. */
+! 	    if (crv_status != CRV_GET)
+  		check_for_codes_from_term();
+  	}
+  #endif
+--- 3264,3270 ----
+  	    may_req_termresponse();
+  	    /* Immediately check for a response.  If t_Co changes, we don't
+  	     * want to redraw with wrong colors first. */
+! 	    if (crv_status == CRV_SENT)
+  		check_for_codes_from_term();
+  	}
+  #endif
+***************
+*** 3306,3311 ****
+--- 3311,3340 ----
+      }
+  }
+  
++ #if defined(UNIX) || defined(PROTO)
++ /*
++  * Return TRUE when the xterm version was requested or anything else that
++  * would send an ESC sequence back to Vim.
++  * If not sent yet, prevent it from being sent soon.
++  * Used to check whether it is OK to enable checking for DEC mouse codes,
++  * which conflict with may xterm ESC sequences.
++  */
++     int
++ did_request_esc_sequence()
++ {
++     if (crv_status == CRV_GET)
++ 	crv_status = 0;
++     if (u7_status == U7_GET)
++ 	u7_status = 0;
++     return crv_status == CRV_SENT || u7_status == U7_SENT
++ # if defined(FEAT_TERMRESPONSE)
++ 	|| xt_index_out > xt_index_in
++ # endif
++ 	;
++ }
++ #endif
++ 
++ 
+  #if defined(FEAT_TERMRESPONSE) || defined(PROTO)
+  /*
+   * Request version string (for xterm) when needed.
+***************
+*** 3319,3324 ****
+--- 3348,3355 ----
+   * Insert mode.
+   * On Unix only do it when both output and input are a tty (avoid writing
+   * request to terminal while reading from a file).
++  * Do not do this when a mouse is being detected that starts with the same ESC
++  * sequence as the termresponse.
+   * The result is caught in check_termcode().
+   */
+      void
+***************
+*** 3332,3337 ****
+--- 3363,3369 ----
+  # ifdef UNIX
+  	    && isatty(1)
+  	    && isatty(read_cmd_fd)
++ 	    && !xterm_conflict_mouse
+  # endif
+  	    && *T_CRV != NUL)
+      {
+***************
+*** 5714,5722 ****
+   * termcap codes from the terminal itself.
+   * We get them one by one to avoid a very long response string.
+   */
+- static int xt_index_in = 0;
+- static int xt_index_out = 0;
+- 
+      static void
+  req_codes_from_term()
+  {
+--- 5746,5751 ----
+*** ../vim-7.4.304/src/os_unix.c	2014-05-13 20:19:53.573808877 +0200
+--- src/os_unix.c	2014-05-22 17:11:10.274301842 +0200
+***************
+*** 3667,3672 ****
+--- 3667,3674 ----
+      void
+  check_mouse_termcode()
+  {
++     xterm_conflict_mouse = FALSE;
++ 
+  # ifdef FEAT_MOUSE_XTERM
+      if (use_xterm_mouse()
+  # ifdef FEAT_MOUSE_URXVT
+***************
+*** 3711,3717 ****
+  # endif
+  
+  # ifdef FEAT_MOUSE_JSB
+!     /* conflicts with xterm mouse: "\033[" and "\033[M" ??? */
+      if (!use_xterm_mouse()
+  #  ifdef FEAT_GUI
+  	    && !gui.in_use
+--- 3713,3719 ----
+  # endif
+  
+  # ifdef FEAT_MOUSE_JSB
+!     /* There is no conflict, but it was disabled for xterm before. */
+      if (!use_xterm_mouse()
+  #  ifdef FEAT_GUI
+  	    && !gui.in_use
+***************
+*** 3738,3769 ****
+  # endif
+  
+  # ifdef FEAT_MOUSE_DEC
+!     /* conflicts with xterm mouse: "\033[" and "\033[M" */
+!     if (!use_xterm_mouse()
+  #  ifdef FEAT_GUI
+  	    && !gui.in_use
+  #  endif
+  	    )
+  	set_mouse_termcode(KS_DEC_MOUSE, (char_u *)(term_is_8bit(T_NAME)
+  		     ? IF_EB("\233", CSI_STR) : IF_EB("\033[", ESC_STR "[")));
+      else
+  	del_mouse_termcode(KS_DEC_MOUSE);
+  # endif
+  # ifdef FEAT_MOUSE_PTERM
+      /* same as the dec mouse */
+!     if (!use_xterm_mouse()
+  #  ifdef FEAT_GUI
+  	    && !gui.in_use
+  #  endif
+  	    )
+  	set_mouse_termcode(KS_PTERM_MOUSE,
+  				      (char_u *) IF_EB("\033[", ESC_STR "["));
+      else
+  	del_mouse_termcode(KS_PTERM_MOUSE);
+  # endif
+  # ifdef FEAT_MOUSE_URXVT
+      /* same as the dec mouse */
+!     if (use_xterm_mouse() == 3
+  #  ifdef FEAT_GUI
+  	    && !gui.in_use
+  #  endif
+--- 3740,3779 ----
+  # endif
+  
+  # ifdef FEAT_MOUSE_DEC
+!     /* Conflicts with xterm mouse: "\033[" and "\033[M".
+!      * Also conflicts with the xterm termresponse, skip this if it was
+!      * requested already. */
+!     if (!use_xterm_mouse() && !did_request_esc_sequence()
+  #  ifdef FEAT_GUI
+  	    && !gui.in_use
+  #  endif
+  	    )
++     {
+  	set_mouse_termcode(KS_DEC_MOUSE, (char_u *)(term_is_8bit(T_NAME)
+  		     ? IF_EB("\233", CSI_STR) : IF_EB("\033[", ESC_STR "[")));
++ 	xterm_conflict_mouse = TRUE;
++     }
+      else
+  	del_mouse_termcode(KS_DEC_MOUSE);
+  # endif
+  # ifdef FEAT_MOUSE_PTERM
+      /* same as the dec mouse */
+!     if (!use_xterm_mouse() && !did_request_esc_sequence()
+  #  ifdef FEAT_GUI
+  	    && !gui.in_use
+  #  endif
+  	    )
++     {
+  	set_mouse_termcode(KS_PTERM_MOUSE,
+  				      (char_u *) IF_EB("\033[", ESC_STR "["));
++ 	xterm_conflict_mouse = TRUE;
++     }
+      else
+  	del_mouse_termcode(KS_PTERM_MOUSE);
+  # endif
+  # ifdef FEAT_MOUSE_URXVT
+      /* same as the dec mouse */
+!     if (use_xterm_mouse() == 3 && !did_request_esc_sequence()
+  #  ifdef FEAT_GUI
+  	    && !gui.in_use
+  #  endif
+***************
+*** 3778,3783 ****
+--- 3788,3794 ----
+  	    mch_setmouse(FALSE);
+  	    setmouse();
+  	}
++ 	xterm_conflict_mouse = TRUE;
+      }
+      else
+  	del_mouse_termcode(KS_URXVT_MOUSE);
+*** ../vim-7.4.304/src/proto/term.pro	2013-09-29 16:27:42.000000000 +0200
+--- src/proto/term.pro	2014-05-22 16:58:25.806317380 +0200
+***************
+*** 34,39 ****
+--- 34,40 ----
+  void settmode __ARGS((int tmode));
+  void starttermcap __ARGS((void));
+  void stoptermcap __ARGS((void));
++ int did_request_esc_sequence __ARGS((void));
+  void may_req_termresponse __ARGS((void));
+  void may_req_ambiguous_char_width __ARGS((void));
+  int swapping_screen __ARGS((void));
+*** ../vim-7.4.304/src/globals.h	2014-04-06 20:45:40.123357453 +0200
+--- src/globals.h	2014-05-22 17:07:39.130306133 +0200
+***************
+*** 1333,1338 ****
+--- 1333,1341 ----
+  #if defined(UNIX) || defined(VMS)
+  EXTERN int	term_is_xterm INIT(= FALSE);	/* xterm-like 'term' */
+  #endif
++ #if defined(UNIX)
++ EXTERN int	xterm_conflict_mouse INIT(= FALSE);
++ #endif
+  
+  #ifdef BACKSLASH_IN_FILENAME
+  EXTERN char	psepc INIT(= '\\');	/* normal path separator character */
+*** ../vim-7.4.304/src/version.c	2014-05-22 16:29:03.378353200 +0200
+--- src/version.c	2014-05-22 16:58:16.150317576 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     305,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+195. Your cat has its own home page.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.306 b/SOURCES/7.4.306
new file mode 100644
index 0000000..756eb18
--- /dev/null
+++ b/SOURCES/7.4.306
@@ -0,0 +1,84 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.306
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.306
+Problem:    getchar(0) does not return Esc.
+Solution:   Do not wait for an Esc sequence to be complete.  (Yasuhiro
+	    Matsumoto)
+Files:	    src/eval.c, src/getchar.c
+
+
+*** ../vim-7.4.305/src/eval.c	2014-05-22 14:19:51.674510749 +0200
+--- src/eval.c	2014-05-22 18:59:34.038169656 +0200
+***************
+*** 11313,11325 ****
+  	    n = safe_vgetc();
+  	else if (get_tv_number_chk(&argvars[0], &error) == 1)
+  	    /* getchar(1): only check if char avail */
+! 	    n = vpeekc();
+! 	else if (error || vpeekc() == NUL)
+  	    /* illegal argument or getchar(0) and no char avail: return zero */
+  	    n = 0;
+  	else
+  	    /* getchar(0) and char avail: return char */
+  	    n = safe_vgetc();
+  	if (n == K_IGNORE)
+  	    continue;
+  	break;
+--- 11313,11326 ----
+  	    n = safe_vgetc();
+  	else if (get_tv_number_chk(&argvars[0], &error) == 1)
+  	    /* getchar(1): only check if char avail */
+! 	    n = vpeekc_any();
+! 	else if (error || vpeekc_any() == NUL)
+  	    /* illegal argument or getchar(0) and no char avail: return zero */
+  	    n = 0;
+  	else
+  	    /* getchar(0) and char avail: return char */
+  	    n = safe_vgetc();
++ 
+  	if (n == K_IGNORE)
+  	    continue;
+  	break;
+*** ../vim-7.4.305/src/getchar.c	2014-03-23 15:12:29.919264336 +0100
+--- src/getchar.c	2014-05-22 18:34:13.450200562 +0200
+***************
+*** 1883,1889 ****
+  }
+  #endif
+  
+! #if defined(FEAT_INS_EXPAND) || defined(PROTO)
+  /*
+   * Check if any character is available, also half an escape sequence.
+   * Trick: when no typeahead found, but there is something in the typeahead
+--- 1883,1889 ----
+  }
+  #endif
+  
+! #if defined(FEAT_INS_EXPAND) || defined(FEAT_EVAL) || defined(PROTO)
+  /*
+   * Check if any character is available, also half an escape sequence.
+   * Trick: when no typeahead found, but there is something in the typeahead
+*** ../vim-7.4.305/src/version.c	2014-05-22 18:14:27.570224664 +0200
+--- src/version.c	2014-05-22 18:37:10.734196958 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     306,
+  /**/
+
+-- 
+Press any key to continue, press any other key to quit.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.307 b/SOURCES/7.4.307
new file mode 100644
index 0000000..8b07881
--- /dev/null
+++ b/SOURCES/7.4.307
@@ -0,0 +1,147 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.307
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.307 (after 7.4.305)
+Problem:    Can't build without the +termresponse feature.
+Solution:   Add proper #ifdefs.
+Files:	    src/os_unix.c, src/term.c
+
+
+*** ../vim-7.4.306/src/os_unix.c	2014-05-22 18:14:27.570224664 +0200
+--- src/os_unix.c	2014-05-22 20:29:36.930059845 +0200
+***************
+*** 3743,3749 ****
+      /* Conflicts with xterm mouse: "\033[" and "\033[M".
+       * Also conflicts with the xterm termresponse, skip this if it was
+       * requested already. */
+!     if (!use_xterm_mouse() && !did_request_esc_sequence()
+  #  ifdef FEAT_GUI
+  	    && !gui.in_use
+  #  endif
+--- 3743,3752 ----
+      /* Conflicts with xterm mouse: "\033[" and "\033[M".
+       * Also conflicts with the xterm termresponse, skip this if it was
+       * requested already. */
+!     if (!use_xterm_mouse()
+! #  ifdef FEAT_TERMRESPONSE
+! 	    && !did_request_esc_sequence()
+! #  endif
+  #  ifdef FEAT_GUI
+  	    && !gui.in_use
+  #  endif
+***************
+*** 3758,3764 ****
+  # endif
+  # ifdef FEAT_MOUSE_PTERM
+      /* same as the dec mouse */
+!     if (!use_xterm_mouse() && !did_request_esc_sequence()
+  #  ifdef FEAT_GUI
+  	    && !gui.in_use
+  #  endif
+--- 3761,3770 ----
+  # endif
+  # ifdef FEAT_MOUSE_PTERM
+      /* same as the dec mouse */
+!     if (!use_xterm_mouse()
+! #  ifdef FEAT_TERMRESPONSE
+! 	    && !did_request_esc_sequence()
+! #  endif
+  #  ifdef FEAT_GUI
+  	    && !gui.in_use
+  #  endif
+***************
+*** 3773,3779 ****
+  # endif
+  # ifdef FEAT_MOUSE_URXVT
+      /* same as the dec mouse */
+!     if (use_xterm_mouse() == 3 && !did_request_esc_sequence()
+  #  ifdef FEAT_GUI
+  	    && !gui.in_use
+  #  endif
+--- 3779,3788 ----
+  # endif
+  # ifdef FEAT_MOUSE_URXVT
+      /* same as the dec mouse */
+!     if (use_xterm_mouse() == 3
+! #  ifdef FEAT_TERMRESPONSE
+! 	    && !did_request_esc_sequence()
+! #  endif
+  #  ifdef FEAT_GUI
+  	    && !gui.in_use
+  #  endif
+*** ../vim-7.4.306/src/term.c	2014-05-22 18:14:27.570224664 +0200
+--- src/term.c	2014-05-22 20:28:34.922061106 +0200
+***************
+*** 3311,3317 ****
+      }
+  }
+  
+! #if defined(UNIX) || defined(PROTO)
+  /*
+   * Return TRUE when the xterm version was requested or anything else that
+   * would send an ESC sequence back to Vim.
+--- 3311,3318 ----
+      }
+  }
+  
+! #if defined(FEAT_TERMRESPONSE) || defined(PROTO)
+! # if defined(UNIX) || defined(PROTO)
+  /*
+   * Return TRUE when the xterm version was requested or anything else that
+   * would send an ESC sequence back to Vim.
+***************
+*** 3327,3341 ****
+      if (u7_status == U7_GET)
+  	u7_status = 0;
+      return crv_status == CRV_SENT || u7_status == U7_SENT
+! # if defined(FEAT_TERMRESPONSE)
+! 	|| xt_index_out > xt_index_in
+! # endif
+! 	;
+  }
+! #endif
+  
+  
+- #if defined(FEAT_TERMRESPONSE) || defined(PROTO)
+  /*
+   * Request version string (for xterm) when needed.
+   * Only do this after switching to raw mode, otherwise the result will be
+--- 3328,3338 ----
+      if (u7_status == U7_GET)
+  	u7_status = 0;
+      return crv_status == CRV_SENT || u7_status == U7_SENT
+! 						|| xt_index_out > xt_index_in;
+  }
+! # endif
+  
+  
+  /*
+   * Request version string (for xterm) when needed.
+   * Only do this after switching to raw mode, otherwise the result will be
+*** ../vim-7.4.306/src/version.c	2014-05-22 18:59:54.510169240 +0200
+--- src/version.c	2014-05-22 21:20:36.665997658 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     307,
+  /**/
+
+-- 
+Some of the well known MS-Windows errors:
+	ESLEEP		Operator fell asleep
+	ENOERR		No error yet
+	EDOLLAR		OS too expensive
+	EWINDOWS	MS-Windows loaded, system in danger
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.308 b/SOURCES/7.4.308
new file mode 100644
index 0000000..f3d6a3c
--- /dev/null
+++ b/SOURCES/7.4.308
@@ -0,0 +1,47 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.308
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.308
+Problem:    When using ":diffsplit" on an empty file the cursor is displayed
+	    on the command line.
+Solution:   Limit the value of w_topfill.
+Files:	    src/diff.c
+
+
+*** ../vim-7.4.307/src/diff.c	2013-09-20 20:13:48.000000000 +0200
+--- src/diff.c	2014-05-28 11:30:11.724008432 +0200
+***************
+*** 622,627 ****
+--- 622,628 ----
+  		    wp->w_topfill = (n < 0 ? 0 : n);
+  		else if (n > 0 && n > wp->w_topfill)
+  		    wp->w_topfill = n;
++ 		check_topfill(wp, FALSE);
+  	    }
+  	}
+  }
+*** ../vim-7.4.307/src/version.c	2014-05-22 21:22:15.361995652 +0200
+--- src/version.c	2014-05-28 11:34:01.064010440 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     308,
+  /**/
+
+-- 
+msdn.microsoft.com:
+ERROR_SUCCESS 0 (0x0) The operation completed successfully.
+I have always suspected that for Microsoft success is an error.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.309 b/SOURCES/7.4.309
new file mode 100644
index 0000000..82c9e0b
--- /dev/null
+++ b/SOURCES/7.4.309
@@ -0,0 +1,88 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.309
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.309
+Problem:    When increasing the size of the lower window, the upper window
+	    jumps back to the top. (Ron Aaron)
+Solution:   Change setting the topline. (Nobuhiro Takasaki)
+Files:	    src/window.c
+
+
+*** ../vim-7.4.308/src/window.c	2014-05-22 15:17:24.706440568 +0200
+--- src/window.c	2014-05-28 13:24:40.308068558 +0200
+***************
+*** 5710,5717 ****
+  		    --wp->w_wrow;
+  		}
+  	    }
+  	}
+! 	else
+  	{
+  	    while (sline > 0 && lnum > 1)
+  	    {
+--- 5710,5718 ----
+  		    --wp->w_wrow;
+  		}
+  	    }
++             set_topline(wp, lnum);
+  	}
+! 	else if (sline > 0)
+  	{
+  	    while (sline > 0 && lnum > 1)
+  	    {
+***************
+*** 5748,5761 ****
+  		lnum++;
+  		wp->w_wrow -= line_size + sline;
+  	    }
+! 	    else if (sline >= 0)
+  	    {
+  		/* First line of file reached, use that as topline. */
+  		lnum = 1;
+  		wp->w_wrow -= sline;
+  	    }
+  	}
+- 	set_topline(wp, lnum);
+      }
+  
+      if (wp == curwin)
+--- 5749,5763 ----
+  		lnum++;
+  		wp->w_wrow -= line_size + sline;
+  	    }
+! 	    else if (sline > 0)
+  	    {
+  		/* First line of file reached, use that as topline. */
+  		lnum = 1;
+  		wp->w_wrow -= sline;
+  	    }
++ 
++             set_topline(wp, lnum);
+  	}
+      }
+  
+      if (wp == curwin)
+*** ../vim-7.4.308/src/version.c	2014-05-28 11:35:33.428011248 +0200
+--- src/version.c	2014-05-28 13:33:54.244073407 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     309,
+  /**/
+
+-- 
+Don't be humble ... you're not that great.
+                      -- Golda Meir
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.310 b/SOURCES/7.4.310
new file mode 100644
index 0000000..2d25f0f
--- /dev/null
+++ b/SOURCES/7.4.310
@@ -0,0 +1,373 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.310
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.310
+Problem:    getpos()/setpos() don't include curswant.
+Solution:   Add a fifth number when getting/setting the cursor.
+Files:	    src/eval.c, src/testdir/test_eval.in, src/testdir/test_eval.ok,
+	    runtime/doc/eval.txt
+
+
+*** ../vim-7.4.309/src/eval.c	2014-05-22 18:59:54.506169240 +0200
+--- src/eval.c	2014-05-28 14:23:37.608099523 +0200
+***************
+*** 764,770 ****
+  static void f_writefile __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_xor __ARGS((typval_T *argvars, typval_T *rettv));
+  
+! static int list2fpos __ARGS((typval_T *arg, pos_T *posp, int *fnump));
+  static pos_T *var2fpos __ARGS((typval_T *varp, int dollar_lnum, int *fnum));
+  static int get_env_len __ARGS((char_u **arg));
+  static int get_id_len __ARGS((char_u **arg));
+--- 764,770 ----
+  static void f_writefile __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_xor __ARGS((typval_T *argvars, typval_T *rettv));
+  
+! static int list2fpos __ARGS((typval_T *arg, pos_T *posp, int *fnump, colnr_T *curswantp));
+  static pos_T *var2fpos __ARGS((typval_T *varp, int dollar_lnum, int *fnum));
+  static int get_env_len __ARGS((char_u **arg));
+  static int get_id_len __ARGS((char_u **arg));
+***************
+*** 9799,9812 ****
+      if (argvars[1].v_type == VAR_UNKNOWN)
+      {
+  	pos_T	    pos;
+  
+! 	if (list2fpos(argvars, &pos, NULL) == FAIL)
+  	    return;
+  	line = pos.lnum;
+  	col = pos.col;
+  #ifdef FEAT_VIRTUALEDIT
+  	coladd = pos.coladd;
+  #endif
+      }
+      else
+      {
+--- 9799,9815 ----
+      if (argvars[1].v_type == VAR_UNKNOWN)
+      {
+  	pos_T	    pos;
++ 	colnr_T	    curswant = -1;
+  
+! 	if (list2fpos(argvars, &pos, NULL, &curswant) == FAIL)
+  	    return;
+  	line = pos.lnum;
+  	col = pos.col;
+  #ifdef FEAT_VIRTUALEDIT
+  	coladd = pos.coladd;
+  #endif
++ 	if (curswant >= 0)
++ 	    curwin->w_curswant = curswant - 1;
+      }
+      else
+      {
+***************
+*** 11770,11775 ****
+--- 11773,11780 ----
+  				(fp != NULL) ? (varnumber_T)fp->coladd :
+  #endif
+  							      (varnumber_T)0);
++ 	if (fp == &curwin->w_cursor)
++ 	    list_append_number(l, (varnumber_T)curwin->w_curswant + 1);
+      }
+      else
+  	rettv->vval.v_number = FALSE;
+***************
+*** 16751,16762 ****
+      pos_T	pos;
+      int		fnum;
+      char_u	*name;
+  
+      rettv->vval.v_number = -1;
+      name = get_tv_string_chk(argvars);
+      if (name != NULL)
+      {
+! 	if (list2fpos(&argvars[1], &pos, &fnum) == OK)
+  	{
+  	    if (--pos.col < 0)
+  		pos.col = 0;
+--- 16756,16768 ----
+      pos_T	pos;
+      int		fnum;
+      char_u	*name;
++     colnr_T	curswant = -1;
+  
+      rettv->vval.v_number = -1;
+      name = get_tv_string_chk(argvars);
+      if (name != NULL)
+      {
+! 	if (list2fpos(&argvars[1], &pos, &fnum, &curswant) == OK)
+  	{
+  	    if (--pos.col < 0)
+  		pos.col = 0;
+***************
+*** 16766,16771 ****
+--- 16772,16779 ----
+  		if (fnum == curbuf->b_fnum)
+  		{
+  		    curwin->w_cursor = pos;
++ 		    if (curswant >= 0)
++ 			curwin->w_curswant = curswant - 1;
+  		    check_cursor();
+  		    rettv->vval.v_number = 0;
+  		}
+***************
+*** 19532,19552 ****
+   * validity.
+   */
+      static int
+! list2fpos(arg, posp, fnump)
+      typval_T	*arg;
+      pos_T	*posp;
+      int		*fnump;
+  {
+      list_T	*l = arg->vval.v_list;
+      long	i = 0;
+      long	n;
+  
+!     /* List must be: [fnum, lnum, col, coladd], where "fnum" is only there
+!      * when "fnump" isn't NULL and "coladd" is optional. */
+      if (arg->v_type != VAR_LIST
+  	    || l == NULL
+  	    || l->lv_len < (fnump == NULL ? 2 : 3)
+! 	    || l->lv_len > (fnump == NULL ? 3 : 4))
+  	return FAIL;
+  
+      if (fnump != NULL)
+--- 19540,19561 ----
+   * validity.
+   */
+      static int
+! list2fpos(arg, posp, fnump, curswantp)
+      typval_T	*arg;
+      pos_T	*posp;
+      int		*fnump;
++     colnr_T	*curswantp;
+  {
+      list_T	*l = arg->vval.v_list;
+      long	i = 0;
+      long	n;
+  
+!     /* List must be: [fnum, lnum, col, coladd, curswant], where "fnum" is only
+!      * there when "fnump" isn't NULL; "coladd" and "curswant" are optional. */
+      if (arg->v_type != VAR_LIST
+  	    || l == NULL
+  	    || l->lv_len < (fnump == NULL ? 2 : 3)
+! 	    || l->lv_len > (fnump == NULL ? 4 : 5))
+  	return FAIL;
+  
+      if (fnump != NULL)
+***************
+*** 19570,19582 ****
+      posp->col = n;
+  
+  #ifdef FEAT_VIRTUALEDIT
+!     n = list_find_nr(l, i, NULL);
+      if (n < 0)
+  	posp->coladd = 0;
+      else
+  	posp->coladd = n;
+  #endif
+  
+      return OK;
+  }
+  
+--- 19579,19594 ----
+      posp->col = n;
+  
+  #ifdef FEAT_VIRTUALEDIT
+!     n = list_find_nr(l, i, NULL);	/* off */
+      if (n < 0)
+  	posp->coladd = 0;
+      else
+  	posp->coladd = n;
+  #endif
+  
++     if (curswantp != NULL)
++ 	*curswantp = list_find_nr(l, i + 1, NULL);  /* curswant */
++ 
+      return OK;
+  }
+  
+*** ../vim-7.4.309/src/testdir/test_eval.in	2014-04-29 17:41:18.351689927 +0200
+--- src/testdir/test_eval.in	2014-05-28 14:22:31.780098947 +0200
+***************
+*** 190,198 ****
+--- 190,207 ----
+  :$put =v:exception
+  :endtry
+  :"
++ :$put ='{{{1 setpos/getpos'
++ /^012345678
++ 6l:let sp = getpos('.')
++ 0:call setpos('.', sp)
++ jyl:$put
++ :"
+  :/^start:/+1,$wq! test.out
+  :" vim: et ts=4 isk-=\: fmr=???,???
+  :call getchar()
+  ENDTEST
+  
++ 012345678
++ 012345678
++ 
+  start:
+*** ../vim-7.4.309/src/testdir/test_eval.ok	2014-04-29 17:41:18.351689927 +0200
+--- src/testdir/test_eval.ok	2014-05-28 14:19:31.836097372 +0200
+***************
+*** 346,348 ****
+--- 346,350 ----
+  Bar exists: 1
+  func Bar exists: 1
+  Vim(call):E116: Invalid arguments for function append
++ {{{1 setpos/getpos
++ 6
+*** ../vim-7.4.309/runtime/doc/eval.txt	2014-05-07 18:35:25.661216052 +0200
+--- runtime/doc/eval.txt	2014-05-28 14:04:40.928089573 +0200
+***************
+*** 2587,2595 ****
+  cursor({list})
+  		Positions the cursor at the column (byte count) {col} in the
+  		line {lnum}.  The first column is one.
+  		When there is one argument {list} this is used as a |List|
+! 		with two or three items {lnum}, {col} and {off}.  This is like
+! 		the return value of |getpos()|, but without the first item.
+  		Does not change the jumplist.
+  		If {lnum} is greater than the number of lines in the buffer,
+  		the cursor will be positioned at the last line in the buffer.
+--- 2587,2600 ----
+  cursor({list})
+  		Positions the cursor at the column (byte count) {col} in the
+  		line {lnum}.  The first column is one.
++ 
+  		When there is one argument {list} this is used as a |List|
+! 		with two, three or four item:
+! 			[{lnum}, {col}, {off}]
+! 			[{lnum}, {col}, {off}, {curswant}]
+! 		This is like the return value of |getpos()|, but without the
+! 		first item.
+! 
+  		Does not change the jumplist.
+  		If {lnum} is greater than the number of lines in the buffer,
+  		the cursor will be positioned at the last line in the buffer.
+***************
+*** 4475,4482 ****
+  							*getpos()*
+  getpos({expr})	Get the position for {expr}.  For possible values of {expr}
+  		see |line()|.
+! 		The result is a |List| with four numbers:
+  		    [bufnum, lnum, col, off]
+  		"bufnum" is zero, unless a mark like '0 or 'A is used, then it
+  		is the buffer number of the mark.
+  		"lnum" and "col" are the position in the buffer.  The first
+--- 4490,4498 ----
+  							*getpos()*
+  getpos({expr})	Get the position for {expr}.  For possible values of {expr}
+  		see |line()|.
+! 		The result is a |List| with four or five numbers:
+  		    [bufnum, lnum, col, off]
++ 		    [bufnum, lnum, col, off, curswant]
+  		"bufnum" is zero, unless a mark like '0 or 'A is used, then it
+  		is the buffer number of the mark.
+  		"lnum" and "col" are the position in the buffer.  The first
+***************
+*** 4485,4490 ****
+--- 4501,4511 ----
+  		it is the offset in screen columns from the start of the
+  		character.  E.g., a position within a <Tab> or after the last
+  		character.
++ 		The "curswant" number is only added for getpos('.'), it is the
++ 		preferred column when moving the cursor vertically.
++ 		Note that for '< and '> Visual mode matters: when it is "V"
++ 		(visual line mode) the column of '< is zero and the column of
++ 		'> is a large number.
+  		This can be used to save and restore the cursor position: >
+  			let save_cursor = getpos(".")
+  			MoveTheCursorAround
+***************
+*** 5289,5296 ****
+  			.	the cursor
+  			'x	mark x
+  
+! 		{list} must be a |List| with four numbers:
+  		    [bufnum, lnum, col, off]
+  
+  		"bufnum" is the buffer number.	Zero can be used for the
+  		current buffer.  Setting the cursor is only possible for
+--- 5310,5318 ----
+  			.	the cursor
+  			'x	mark x
+  
+! 		{list} must be a |List| with four or five numbers:
+  		    [bufnum, lnum, col, off]
++ 		    [bufnum, lnum, col, off, curswant]
+  
+  		"bufnum" is the buffer number.	Zero can be used for the
+  		current buffer.  Setting the cursor is only possible for
+***************
+*** 5308,5320 ****
+  		character.  E.g., a position within a <Tab> or after the last
+  		character.
+  
+  		Returns 0 when the position could be set, -1 otherwise.
+  		An error message is given if {expr} is invalid.
+  
+  		Also see |getpos()|
+  
+  		This does not restore the preferred column for moving
+! 		vertically.  See |winrestview()| for that.
+  
+  
+  setqflist({list} [, {action}])				*setqflist()*
+--- 5330,5355 ----
+  		character.  E.g., a position within a <Tab> or after the last
+  		character.
+  
++ 		The "curswant" number is only used when setting the cursor
++ 		position.  It sets the preferred column for when moving the
++ 		cursor vertically.  When the "curswant" number is missing the
++ 		preferred column is not set.  When it is present and setting a
++ 		mark position it is not used.
++ 
++ 		Note that for '< and '> changing the line number may result in
++ 		the marks to be effectively be swapped, so that '< is always
++ 		before '>.
++ 
+  		Returns 0 when the position could be set, -1 otherwise.
+  		An error message is given if {expr} is invalid.
+  
+  		Also see |getpos()|
+  
+  		This does not restore the preferred column for moving
+! 		vertically; if you set the cursor position with this, |j| and
+! 		|k| motions will jump to previous columns!  Use |cursor()| to
+! 		also set the preferred column.  Also see the "curswant" key in
+! 		|winrestview()|.
+  
+  
+  setqflist({list} [, {action}])				*setqflist()*
+*** ../vim-7.4.309/src/version.c	2014-05-28 13:42:59.884078184 +0200
+--- src/version.c	2014-05-28 14:27:20.132101471 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     310,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+218. Your spouse hands you a gift wrapped magnet with your PC's name
+     on it and you accuse him or her of genocide.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.311 b/SOURCES/7.4.311
new file mode 100644
index 0000000..0009788
--- /dev/null
+++ b/SOURCES/7.4.311
@@ -0,0 +1,127 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.311
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.311
+Problem:    Can't use winrestview to only restore part of the view.
+Solution:   Handle missing items in the dict. (Christian Brabandt)
+Files:	    src/eval.c, runtime/doc/eval.txt
+
+
+*** ../vim-7.4.310/src/eval.c	2014-05-28 14:32:47.156104334 +0200
+--- src/eval.c	2014-05-28 16:42:25.196172421 +0200
+***************
+*** 19231,19250 ****
+  	EMSG(_(e_invarg));
+      else
+      {
+! 	curwin->w_cursor.lnum = get_dict_number(dict, (char_u *)"lnum");
+! 	curwin->w_cursor.col = get_dict_number(dict, (char_u *)"col");
+  #ifdef FEAT_VIRTUALEDIT
+! 	curwin->w_cursor.coladd = get_dict_number(dict, (char_u *)"coladd");
+  #endif
+! 	curwin->w_curswant = get_dict_number(dict, (char_u *)"curswant");
+! 	curwin->w_set_curswant = FALSE;
+  
+! 	set_topline(curwin, get_dict_number(dict, (char_u *)"topline"));
+  #ifdef FEAT_DIFF
+! 	curwin->w_topfill = get_dict_number(dict, (char_u *)"topfill");
+  #endif
+! 	curwin->w_leftcol = get_dict_number(dict, (char_u *)"leftcol");
+! 	curwin->w_skipcol = get_dict_number(dict, (char_u *)"skipcol");
+  
+  	check_cursor();
+  	win_new_height(curwin, curwin->w_height);
+--- 19231,19260 ----
+  	EMSG(_(e_invarg));
+      else
+      {
+! 	if (dict_find(dict, (char_u *)"lnum", -1) != NULL)
+! 	    curwin->w_cursor.lnum = get_dict_number(dict, (char_u *)"lnum");
+! 	if (dict_find(dict, (char_u *)"col", -1) != NULL)
+! 	    curwin->w_cursor.col = get_dict_number(dict, (char_u *)"col");
+  #ifdef FEAT_VIRTUALEDIT
+! 	if (dict_find(dict, (char_u *)"coladd", -1) != NULL)
+! 	    curwin->w_cursor.coladd = get_dict_number(dict, (char_u *)"coladd");
+  #endif
+! 	if (dict_find(dict, (char_u *)"curswant", -1) != NULL)
+! 	{
+! 	    curwin->w_curswant = get_dict_number(dict, (char_u *)"curswant");
+! 	    curwin->w_set_curswant = FALSE;
+! 	}
+  
+! 	if (dict_find(dict, (char_u *)"topline", -1) != NULL)
+! 	    set_topline(curwin, get_dict_number(dict, (char_u *)"topline"));
+  #ifdef FEAT_DIFF
+! 	if (dict_find(dict, (char_u *)"topfill", -1) != NULL)
+! 	    curwin->w_topfill = get_dict_number(dict, (char_u *)"topfill");
+  #endif
+! 	if (dict_find(dict, (char_u *)"leftcol", -1) != NULL)
+! 	    curwin->w_leftcol = get_dict_number(dict, (char_u *)"leftcol");
+! 	if (dict_find(dict, (char_u *)"skipcol", -1) != NULL)
+! 	    curwin->w_skipcol = get_dict_number(dict, (char_u *)"skipcol");
+  
+  	check_cursor();
+  	win_new_height(curwin, curwin->w_height);
+*** ../vim-7.4.310/runtime/doc/eval.txt	2014-05-28 14:32:47.164104334 +0200
+--- runtime/doc/eval.txt	2014-05-28 16:42:25.192172421 +0200
+***************
+*** 6404,6409 ****
+--- 6414,6429 ----
+  winrestview({dict})
+  		Uses the |Dictionary| returned by |winsaveview()| to restore
+  		the view of the current window.
++ 		Note: The {dict} does not have to contain all values, that are
++ 		returned by |winsaveview()|. If values are missing, those
++ 		settings won't be restored. So you can use: >
++ 		    :call winrestview({'curswant': 4})
++ <
++ 		This will only set the curswant value (the column the cursor
++ 		wants to move on vertical movements) of the cursor to column 5
++ 		(yes, that is 5), while all other settings will remain the
++ 		same. This is useful, if you set the cursor position manually.
++ 
+  		If you have changed the values the result is unpredictable.
+  		If the window size changed the result won't be the same.
+  
+***************
+*** 6418,6424 ****
+  		not opened when moving around.
+  		The return value includes:
+  			lnum		cursor line number
+! 			col		cursor column
+  			coladd		cursor column offset for 'virtualedit'
+  			curswant	column for vertical movement
+  			topline		first line in the window
+--- 6438,6446 ----
+  		not opened when moving around.
+  		The return value includes:
+  			lnum		cursor line number
+! 			col		cursor column (Note: the first column
+! 					zero, as opposed to what getpos()
+! 					returns)
+  			coladd		cursor column offset for 'virtualedit'
+  			curswant	column for vertical movement
+  			topline		first line in the window
+*** ../vim-7.4.310/src/version.c	2014-05-28 14:32:47.164104334 +0200
+--- src/version.c	2014-05-28 16:45:19.200173944 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     311,
+  /**/
+
+-- 
+Your fault: core dumped
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.312 b/SOURCES/7.4.312
new file mode 100644
index 0000000..14bc1c1
--- /dev/null
+++ b/SOURCES/7.4.312
@@ -0,0 +1,194 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.312
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.312
+Problem:    Cannot figure out what argument list is being used for a window.
+Solution:   Add the arglistid() function. (Marcin Szamotulski)
+Files:	    runtime/doc/eval.txt, runtime/doc/usr_41.txt, src/eval.c,
+	    src/ex_docmd.c, src/globals.h, src/structs.h, src/main.c
+
+
+*** ../vim-7.4.311/runtime/doc/eval.txt	2014-05-28 16:47:11.396174926 +0200
+--- runtime/doc/eval.txt	2014-05-28 18:00:06.248213223 +0200
+***************
+*** 1716,1721 ****
+--- 1716,1723 ----
+  append( {lnum}, {list})		Number	append lines {list} below line {lnum}
+  argc()				Number	number of files in the argument list
+  argidx()			Number	current index in the argument list
++ arglistid( [{winnr}, [ {tabnr}]])
++ 				Number	argument list id
+  argv( {nr})			String	{nr} entry of the argument list
+  argv( )				List	the argument list
+  asin( {expr})			Float	arc sine of {expr}
+***************
+*** 2103,2108 ****
+--- 2105,2122 ----
+  argidx()	The result is the current index in the argument list.  0 is
+  		the first file.  argc() - 1 is the last one.  See |arglist|.
+  
++ 							*arglistid()*
++ arglistid([{winnr}, [ {tabnr} ]])
++ 		Return the argument list ID.  This is a number which
++ 		identifies the argument list being used.  Zero is used for the
++ 		global argument list.
++ 		Return zero if the arguments are invalid.
++ 
++ 		Without arguments use the current window.
++ 		With {winnr} only use this window in the current tab page.
++ 		With {winnr} and {tabnr} use the window in the specified tab
++ 		page.
++ 
+  							*argv()*
+  argv([{nr}])	The result is the {nr}th file in the argument list of the
+  		current window.  See |arglist|.  "argv(0)" is the first one.
+*** ../vim-7.4.311/runtime/doc/usr_41.txt	2014-03-25 18:23:27.054087691 +0100
+--- runtime/doc/usr_41.txt	2014-05-28 18:07:43.096217222 +0200
+***************
+*** 770,775 ****
+--- 772,778 ----
+  Buffers, windows and the argument list:
+  	argc()			number of entries in the argument list
+  	argidx()		current position in the argument list
++ 	arglistid()		get id of the argument list
+  	argv()			get one entry from the argument list
+  	bufexists()		check if a buffer exists
+  	buflisted()		check if a buffer exists and is listed
+*** ../vim-7.4.311/src/eval.c	2014-05-28 16:47:11.392174926 +0200
+--- src/eval.c	2014-05-28 18:11:10.264219035 +0200
+***************
+*** 463,468 ****
+--- 463,469 ----
+  static void f_append __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_argc __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_argidx __ARGS((typval_T *argvars, typval_T *rettv));
++ static void f_arglistid __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_argv __ARGS((typval_T *argvars, typval_T *rettv));
+  #ifdef FEAT_FLOAT
+  static void f_asin __ARGS((typval_T *argvars, typval_T *rettv));
+***************
+*** 7875,7880 ****
+--- 7876,7882 ----
+      {"append",		2, 2, f_append},
+      {"argc",		0, 0, f_argc},
+      {"argidx",		0, 0, f_argidx},
++     {"arglistid",	0, 2, f_arglistid},
+      {"argv",		0, 1, f_argv},
+  #ifdef FEAT_FLOAT
+      {"asin",		1, 1, f_asin},	/* WJMc */
+***************
+*** 8859,8864 ****
+--- 8861,8901 ----
+  }
+  
+  /*
++  * "arglistid()" function
++  */
++     static void
++ f_arglistid(argvars, rettv)
++     typval_T	*argvars UNUSED;
++     typval_T	*rettv;
++ {
++     win_T	*wp;
++     tabpage_T	*tp = NULL;
++     long	n;
++ 
++     rettv->vval.v_number = -1;
++     if (argvars[0].v_type != VAR_UNKNOWN)
++     {
++ 	if (argvars[1].v_type != VAR_UNKNOWN)
++ 	{
++ 	    n = get_tv_number(&argvars[1]);
++ 	    if (n >= 0)
++ 		tp = find_tabpage(n);
++ 	}
++ 	else
++ 	    tp = curtab;
++ 
++ 	if (tp != NULL)
++ 	{
++ 	    wp = find_win_by_nr(&argvars[0], tp);
++ 	    if (wp != NULL)
++ 		rettv->vval.v_number = wp->w_alist->id;
++ 	}
++     }
++     else
++ 	rettv->vval.v_number = curwin->w_alist->id;
++ }
++ 
++ /*
+   * "argv(nr)" function
+   */
+      static void
+*** ../vim-7.4.311/src/ex_docmd.c	2014-05-07 21:14:42.913299714 +0200
+--- src/ex_docmd.c	2014-05-28 18:10:01.696218435 +0200
+***************
+*** 7211,7216 ****
+--- 7211,7217 ----
+      else
+      {
+  	curwin->w_alist->al_refcount = 1;
++ 	curwin->w_alist->id = ++max_alist_id;
+  	alist_init(curwin->w_alist);
+      }
+  }
+*** ../vim-7.4.311/src/globals.h	2014-05-22 18:14:27.570224664 +0200
+--- src/globals.h	2014-05-28 17:56:53.392211534 +0200
+***************
+*** 601,606 ****
+--- 601,607 ----
+   * to this when the window is using the global argument list.
+   */
+  EXTERN alist_T	global_alist;	/* global argument list */
++ EXTERN int	max_alist_id INIT(= 0);	    /* the previous argument list id */
+  EXTERN int	arg_had_last INIT(= FALSE); /* accessed last file in
+  					       global_alist */
+  
+*** ../vim-7.4.311/src/structs.h	2014-05-13 20:19:53.573808877 +0200
+--- src/structs.h	2014-05-28 17:54:18.312210177 +0200
+***************
+*** 675,680 ****
+--- 675,681 ----
+  {
+      garray_T	al_ga;		/* growarray with the array of file names */
+      int		al_refcount;	/* number of windows using this arglist */
++     int		id;		/* id of this arglist */
+  } alist_T;
+  
+  /*
+*** ../vim-7.4.311/src/main.c	2014-04-01 19:55:46.252787300 +0200
+--- src/main.c	2014-05-28 18:09:32.040218175 +0200
+***************
+*** 322,327 ****
+--- 322,328 ----
+      init_yank();		/* init yank buffers */
+  
+      alist_init(&global_alist);	/* Init the argument list to empty. */
++     global_alist.id = 0;
+  
+      /*
+       * Set the default values for the options.
+*** ../vim-7.4.311/src/version.c	2014-05-28 16:47:11.396174926 +0200
+--- src/version.c	2014-05-28 17:25:32.644195071 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     312,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+222. You send more than 20 personal e-mails a day.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.313 b/SOURCES/7.4.313
new file mode 100644
index 0000000..39468e0
--- /dev/null
+++ b/SOURCES/7.4.313
@@ -0,0 +1,320 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.313
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.313 (after 7.4.310)
+Problem:    Changing the return value of getpos() causes an error. (Jie Zhu)
+Solution:   Revert getpos() and add getcurpos().
+Files:	    src/eval.c, src/testdir/test_eval.in, src/testdir/test_eval.ok,
+	    runtime/doc/eval.txt
+
+
+*** ../vim-7.4.312/src/eval.c	2014-05-28 18:22:37.876225054 +0200
+--- src/eval.c	2014-05-28 20:11:55.364282457 +0200
+***************
+*** 560,565 ****
+--- 560,566 ----
+  static void f_getline __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_getmatches __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_getpid __ARGS((typval_T *argvars, typval_T *rettv));
++ static void f_getcurpos __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_getpos __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_getqflist __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_getreg __ARGS((typval_T *argvars, typval_T *rettv));
+***************
+*** 7967,7972 ****
+--- 7968,7974 ----
+      {"getcmdline",	0, 0, f_getcmdline},
+      {"getcmdpos",	0, 0, f_getcmdpos},
+      {"getcmdtype",	0, 0, f_getcmdtype},
++     {"getcurpos",	0, 0, f_getcurpos},
+      {"getcwd",		0, 0, f_getcwd},
+      {"getfontname",	0, 1, f_getfontname},
+      {"getfperm",	1, 1, f_getfperm},
+***************
+*** 11780,11785 ****
+--- 11782,11800 ----
+      rettv->vval.v_number = mch_get_pid();
+  }
+  
++ static void getpos_both __ARGS((typval_T *argvars, typval_T *rettv, int getcurpos));
++ 
++ /*
++  * "getcurpos()" function
++  */
++     static void
++ f_getcurpos(argvars, rettv)
++     typval_T	*argvars;
++     typval_T	*rettv;
++ {
++     getpos_both(argvars, rettv, TRUE);
++ }
++ 
+  /*
+   * "getpos(string)" function
+   */
+***************
+*** 11788,11793 ****
+--- 11803,11817 ----
+      typval_T	*argvars;
+      typval_T	*rettv;
+  {
++     getpos_both(argvars, rettv, FALSE);
++ }
++ 
++     static void
++ getpos_both(argvars, rettv, getcurpos)
++     typval_T	*argvars;
++     typval_T	*rettv;
++     int		getcurpos;
++ {
+      pos_T	*fp;
+      list_T	*l;
+      int		fnum = -1;
+***************
+*** 11795,11801 ****
+      if (rettv_list_alloc(rettv) == OK)
+      {
+  	l = rettv->vval.v_list;
+! 	fp = var2fpos(&argvars[0], TRUE, &fnum);
+  	if (fnum != -1)
+  	    list_append_number(l, (varnumber_T)fnum);
+  	else
+--- 11819,11828 ----
+      if (rettv_list_alloc(rettv) == OK)
+      {
+  	l = rettv->vval.v_list;
+! 	if (getcurpos)
+! 	    fp = &curwin->w_cursor;
+! 	else
+! 	    fp = var2fpos(&argvars[0], TRUE, &fnum);
+  	if (fnum != -1)
+  	    list_append_number(l, (varnumber_T)fnum);
+  	else
+***************
+*** 11810,11816 ****
+  				(fp != NULL) ? (varnumber_T)fp->coladd :
+  #endif
+  							      (varnumber_T)0);
+! 	if (fp == &curwin->w_cursor)
+  	    list_append_number(l, (varnumber_T)curwin->w_curswant + 1);
+      }
+      else
+--- 11837,11843 ----
+  				(fp != NULL) ? (varnumber_T)fp->coladd :
+  #endif
+  							      (varnumber_T)0);
+! 	if (getcurpos)
+  	    list_append_number(l, (varnumber_T)curwin->w_curswant + 1);
+      }
+      else
+*** ../vim-7.4.312/src/testdir/test_eval.in	2014-05-28 14:32:47.160104334 +0200
+--- src/testdir/test_eval.in	2014-05-28 20:14:27.048283785 +0200
+***************
+*** 190,198 ****
+  :$put =v:exception
+  :endtry
+  :"
+! :$put ='{{{1 setpos/getpos'
+  /^012345678
+! 6l:let sp = getpos('.')
+  0:call setpos('.', sp)
+  jyl:$put
+  :"
+--- 190,198 ----
+  :$put =v:exception
+  :endtry
+  :"
+! :$put ='{{{1 getcurpos/setpos'
+  /^012345678
+! 6l:let sp = getcurpos()
+  0:call setpos('.', sp)
+  jyl:$put
+  :"
+*** ../vim-7.4.312/src/testdir/test_eval.ok	2014-05-28 14:32:47.160104334 +0200
+--- src/testdir/test_eval.ok	2014-05-28 20:14:43.316283927 +0200
+***************
+*** 346,350 ****
+  Bar exists: 1
+  func Bar exists: 1
+  Vim(call):E116: Invalid arguments for function append
+! {{{1 setpos/getpos
+  6
+--- 346,350 ----
+  Bar exists: 1
+  func Bar exists: 1
+  Vim(call):E116: Invalid arguments for function append
+! {{{1 getcurpos/setpos
+  6
+*** ../vim-7.4.312/runtime/doc/eval.txt	2014-05-28 18:22:37.872225054 +0200
+--- runtime/doc/eval.txt	2014-05-28 20:27:57.092290876 +0200
+***************
+*** 1808,1817 ****
+  getcmdline()			String	return the current command-line
+  getcmdpos()			Number	return cursor position in command-line
+  getcmdtype()			String	return the current command-line type
+  getcwd()			String	the current working directory
+  getfperm( {fname})		String	file permissions of file {fname}
+  getfsize( {fname})		Number	size in bytes of file {fname}
+- getfontname( [{name}])		String	name of font being used
+  getftime( {fname})		Number	last modification time of file
+  getftype( {fname})		String	description of type of file {fname}
+  getline( {lnum})		String	line {lnum} of current buffer
+--- 1808,1818 ----
+  getcmdline()			String	return the current command-line
+  getcmdpos()			Number	return cursor position in command-line
+  getcmdtype()			String	return the current command-line type
++ getcurpos()			List	position of the cursor
+  getcwd()			String	the current working directory
++ getfontname( [{name}])		String	name of font being used
+  getfperm( {fname})		String	file permissions of file {fname}
+  getfsize( {fname})		Number	size in bytes of file {fname}
+  getftime( {fname})		Number	last modification time of file
+  getftype( {fname})		String	description of type of file {fname}
+  getline( {lnum})		String	line {lnum} of current buffer
+***************
+*** 2606,2613 ****
+  		with two, three or four item:
+  			[{lnum}, {col}, {off}]
+  			[{lnum}, {col}, {off}, {curswant}]
+! 		This is like the return value of |getpos()|, but without the
+! 		first item.
+  
+  		Does not change the jumplist.
+  		If {lnum} is greater than the number of lines in the buffer,
+--- 2607,2614 ----
+  		with two, three or four item:
+  			[{lnum}, {col}, {off}]
+  			[{lnum}, {col}, {off}, {curswant}]
+! 		This is like the return value of |getpos()| or |getcurpos|,
+! 		but without the first item.
+  
+  		Does not change the jumplist.
+  		If {lnum} is greater than the number of lines in the buffer,
+***************
+*** 2617,2622 ****
+--- 2618,2625 ----
+  		the cursor will be positioned at the last character in the
+  		line.
+  		If {col} is zero, the cursor will stay in the current column.
++ 		If {curswant} is given it is used to set the preferred column
++ 		for vertical movment.  Otherwise {col} is used.
+  		When 'virtualedit' is used {off} specifies the offset in
+  		screen columns from the start of the character.  E.g., a
+  		position within a <Tab> or after the last character.
+***************
+*** 3339,3344 ****
+--- 3347,3363 ----
+  		Returns an empty string otherwise.
+  		Also see |getcmdpos()|, |setcmdpos()| and |getcmdline()|.
+  
++ 							*getcurpos()*
++ getcurpos()	Get the position of the cursor.  This is like getpos('.'), but
++ 		includes an extra item in the list:
++ 		    [bufnum, lnum, col, off, curswant]
++ 		The "curswant" number is the preferred column when moving the
++ 		cursor vertically.
++ 		This can be used to save and restore the cursor position: >
++ 			let save_cursor = getcurpos()
++ 			MoveTheCursorAround
++ 			call setpos('.', save_cursor)
++ 
+  							*getcwd()*
+  getcwd()	The result is a String, which is the name of the current
+  		working directory.
+***************
+*** 4493,4502 ****
+  
+  							*getpos()*
+  getpos({expr})	Get the position for {expr}.  For possible values of {expr}
+! 		see |line()|.
+! 		The result is a |List| with four or five numbers:
+  		    [bufnum, lnum, col, off]
+- 		    [bufnum, lnum, col, off, curswant]
+  		"bufnum" is zero, unless a mark like '0 or 'A is used, then it
+  		is the buffer number of the mark.
+  		"lnum" and "col" are the position in the buffer.  The first
+--- 4517,4526 ----
+  
+  							*getpos()*
+  getpos({expr})	Get the position for {expr}.  For possible values of {expr}
+! 		see |line()|.  For getting the cursor position see
+! 		|getcurpos()|.
+! 		The result is a |List| with four numbers:
+  		    [bufnum, lnum, col, off]
+  		"bufnum" is zero, unless a mark like '0 or 'A is used, then it
+  		is the buffer number of the mark.
+  		"lnum" and "col" are the position in the buffer.  The first
+***************
+*** 4505,4520 ****
+  		it is the offset in screen columns from the start of the
+  		character.  E.g., a position within a <Tab> or after the last
+  		character.
+- 		The "curswant" number is only added for getpos('.'), it is the
+- 		preferred column when moving the cursor vertically.
+  		Note that for '< and '> Visual mode matters: when it is "V"
+  		(visual line mode) the column of '< is zero and the column of
+  		'> is a large number.
+! 		This can be used to save and restore the cursor position: >
+! 			let save_cursor = getpos(".")
+! 			MoveTheCursorAround
+! 			call setpos('.', save_cursor)
+! <		Also see |setpos()|.
+  
+  or({expr}, {expr})					*or()*
+  		Bitwise OR on the two arguments.  The arguments are converted
+--- 4529,4542 ----
+  		it is the offset in screen columns from the start of the
+  		character.  E.g., a position within a <Tab> or after the last
+  		character.
+  		Note that for '< and '> Visual mode matters: when it is "V"
+  		(visual line mode) the column of '< is zero and the column of
+  		'> is a large number.
+! 		This can be used to save and restore the position of a mark: >
+! 			let save_a_mark = getpos("'a")
+! 			...
+! 			call setpos(''a', save_a_mark
+! <		Also see |getcurpos()| and |setpos()|.
+  
+  or({expr}, {expr})					*or()*
+  		Bitwise OR on the two arguments.  The arguments are converted
+***************
+*** 5347,5353 ****
+  		Returns 0 when the position could be set, -1 otherwise.
+  		An error message is given if {expr} is invalid.
+  
+! 		Also see |getpos()|
+  
+  		This does not restore the preferred column for moving
+  		vertically; if you set the cursor position with this, |j| and
+--- 5369,5375 ----
+  		Returns 0 when the position could be set, -1 otherwise.
+  		An error message is given if {expr} is invalid.
+  
+! 		Also see |getpos()| and |getcurpos()|.
+  
+  		This does not restore the preferred column for moving
+  		vertically; if you set the cursor position with this, |j| and
+*** ../vim-7.4.312/src/version.c	2014-05-28 18:22:37.880225054 +0200
+--- src/version.c	2014-05-28 20:15:52.164284530 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     313,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+225. You sign up for free subscriptions for all the computer magazines
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.314 b/SOURCES/7.4.314
new file mode 100644
index 0000000..9308e38
--- /dev/null
+++ b/SOURCES/7.4.314
@@ -0,0 +1,178 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.314
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.314
+Problem:    Completion messages can get in the way of a plugin.
+Solution:   Add 'c' flag to 'shortmess' option. (Shougo Matsu)
+Files:	    runtime/doc/options.txt, src/edit.c, src/option.h, src/screen.c
+
+
+*** ../vim-7.4.313/runtime/doc/options.txt	2014-03-12 18:55:52.096906804 +0100
+--- runtime/doc/options.txt	2014-05-28 20:55:14.640305211 +0200
+***************
+*** 6252,6257 ****
+--- 6254,6262 ----
+  	  A	don't give the "ATTENTION" message when an existing swap file
+  		is found.
+  	  I	don't give the intro message when starting Vim |:intro|.
++ 	  c	don't give |ins-completion-menu| messages.  For example,
++ 		"-- XXX completion (YYY)", "match 1 of 2", "The only match",
++ 		"Pattern not found", "Back at original", etc.
+  
+  	This gives you the opportunity to avoid that a change between buffers
+  	requires you to hit <Enter>, but still gives as useful a message as
+*** ../vim-7.4.313/src/edit.c	2014-04-29 14:44:31.515875819 +0200
+--- src/edit.c	2014-05-28 21:33:57.588325545 +0200
+***************
+*** 3854,3860 ****
+  	    ins_compl_free();
+  	    compl_started = FALSE;
+  	    compl_matches = 0;
+! 	    msg_clr_cmdline();		/* necessary for "noshowmode" */
+  	    ctrl_x_mode = 0;
+  	    compl_enter_selects = FALSE;
+  	    if (edit_submode != NULL)
+--- 3854,3861 ----
+  	    ins_compl_free();
+  	    compl_started = FALSE;
+  	    compl_matches = 0;
+! 	    if (!shortmess(SHM_COMPLETIONMENU))
+! 		msg_clr_cmdline();	/* necessary for "noshowmode" */
+  	    ctrl_x_mode = 0;
+  	    compl_enter_selects = FALSE;
+  	    if (edit_submode != NULL)
+***************
+*** 5285,5291 ****
+  	    {
+  		ctrl_x_mode = 0;
+  		edit_submode = NULL;
+! 		msg_clr_cmdline();
+  		return FAIL;
+  	    }
+  
+--- 5286,5293 ----
+  	    {
+  		ctrl_x_mode = 0;
+  		edit_submode = NULL;
+! 		if (!shortmess(SHM_COMPLETIONMENU))
+! 		    msg_clr_cmdline();
+  		return FAIL;
+  	    }
+  
+***************
+*** 5544,5558 ****
+  
+      /* Show a message about what (completion) mode we're in. */
+      showmode();
+!     if (edit_submode_extra != NULL)
+      {
+! 	if (!p_smd)
+! 	    msg_attr(edit_submode_extra,
+! 		    edit_submode_highl < HLF_COUNT
+! 		    ? hl_attr(edit_submode_highl) : 0);
+      }
+-     else
+- 	msg_clr_cmdline();	/* necessary for "noshowmode" */
+  
+      /* Show the popup menu, unless we got interrupted. */
+      if (!compl_interrupted)
+--- 5546,5563 ----
+  
+      /* Show a message about what (completion) mode we're in. */
+      showmode();
+!     if (!shortmess(SHM_COMPLETIONMENU))
+      {
+! 	if (edit_submode_extra != NULL)
+! 	{
+! 	    if (!p_smd)
+! 		msg_attr(edit_submode_extra,
+! 			edit_submode_highl < HLF_COUNT
+! 			? hl_attr(edit_submode_highl) : 0);
+! 	}
+! 	else
+! 	    msg_clr_cmdline();	/* necessary for "noshowmode" */
+      }
+  
+      /* Show the popup menu, unless we got interrupted. */
+      if (!compl_interrupted)
+*** ../vim-7.4.313/src/option.h	2014-03-23 15:12:29.943264337 +0100
+--- src/option.h	2014-05-28 21:34:25.244325787 +0200
+***************
+*** 212,218 ****
+  #define SHM_SEARCH	's'		/* no search hit bottom messages */
+  #define SHM_ATTENTION	'A'		/* no ATTENTION messages */
+  #define SHM_INTRO	'I'		/* intro messages */
+! #define SHM_ALL		"rmfixlnwaWtToOsAI" /* all possible flags for 'shm' */
+  
+  /* characters for p_go: */
+  #define GO_ASEL		'a'		/* autoselect */
+--- 212,219 ----
+  #define SHM_SEARCH	's'		/* no search hit bottom messages */
+  #define SHM_ATTENTION	'A'		/* no ATTENTION messages */
+  #define SHM_INTRO	'I'		/* intro messages */
+! #define SHM_COMPLETIONMENU  'c'		/* completion menu messages */
+! #define SHM_ALL		"rmfixlnwaWtToOsAIc" /* all possible flags for 'shm' */
+  
+  /* characters for p_go: */
+  #define GO_ASEL		'a'		/* autoselect */
+*** ../vim-7.4.313/src/screen.c	2014-05-22 16:05:16.338382204 +0200
+--- src/screen.c	2014-05-28 20:53:20.488304211 +0200
+***************
+*** 42,48 ****
+   *
+   * The part of the buffer that is displayed in a window is set with:
+   * - w_topline (first buffer line in window)
+!  * - w_topfill (filler line above the first line)
+   * - w_leftcol (leftmost window cell in window),
+   * - w_skipcol (skipped window cells of first line)
+   *
+--- 42,48 ----
+   *
+   * The part of the buffer that is displayed in a window is set with:
+   * - w_topline (first buffer line in window)
+!  * - w_topfill (filler lines above the first line)
+   * - w_leftcol (leftmost window cell in window),
+   * - w_skipcol (skipped window cells of first line)
+   *
+***************
+*** 9683,9689 ****
+  	    }
+  #endif
+  #ifdef FEAT_INS_EXPAND
+! 	    if (edit_submode != NULL)		/* CTRL-X in Insert mode */
+  	    {
+  		/* These messages can get long, avoid a wrap in a narrow
+  		 * window.  Prefer showing edit_submode_extra. */
+--- 9683,9690 ----
+  	    }
+  #endif
+  #ifdef FEAT_INS_EXPAND
+! 	    /* CTRL-X in Insert mode */
+! 	    if (edit_submode != NULL && !shortmess(SHM_COMPLETIONMENU))
+  	    {
+  		/* These messages can get long, avoid a wrap in a narrow
+  		 * window.  Prefer showing edit_submode_extra. */
+*** ../vim-7.4.313/src/version.c	2014-05-28 20:31:37.504292805 +0200
+--- src/version.c	2014-05-28 20:54:27.664304800 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     314,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+227. You sleep next to your monitor.  Or on top of it.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.315 b/SOURCES/7.4.315
new file mode 100644
index 0000000..ab52ec5
--- /dev/null
+++ b/SOURCES/7.4.315
@@ -0,0 +1,229 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.315
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.315 (after 7.4.309)
+Problem:    Fixes for computation of topline not tested.
+Solution:   Add test. (Hirohito Higashi)
+Files:	    src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
+	    src/testdir/Make_ming.mak, src/testdir/Make_os2.mak,
+	    src/testdir/Make_vms.mms, src/testdir/Makefile,
+	    src/testdir/test107.in, src/testdir/test107.ok
+
+
+*** ../vim-7.4.314/src/testdir/Make_amiga.mak	2014-04-29 12:15:22.852032651 +0200
+--- src/testdir/Make_amiga.mak	2014-05-28 13:13:32.108062709 +0200
+***************
+*** 35,41 ****
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test97.out test98.out \
+  		test99.out test100.out test101.out test102.out test103.out \
+! 		test104.out test105.out test106.out \
+  		test_autoformat_join.out \
+  		test_eval.out \
+  		test_options.out
+--- 35,41 ----
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test97.out test98.out \
+  		test99.out test100.out test101.out test102.out test103.out \
+! 		test104.out test105.out test106.out test107.out \
+  		test_autoformat_join.out \
+  		test_eval.out \
+  		test_options.out
+***************
+*** 161,166 ****
+--- 161,167 ----
+  test104.out: test104.in
+  test105.out: test105.in
+  test106.out: test106.in
++ test107.out: test107.in
+  test_autoformat_join.out: test_autoformat_join.in
+  test_eval.out: test_eval.in
+  test_options.out: test_options.in
+*** ../vim-7.4.314/src/testdir/Make_dos.mak	2014-04-29 12:15:22.852032651 +0200
+--- src/testdir/Make_dos.mak	2014-05-28 13:13:44.344062816 +0200
+***************
+*** 34,40 ****
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test98.out test99.out \
+  		test100.out test101.out test102.out test103.out test104.out \
+! 		test105.out test106.out \
+  		test_autoformat_join.out \
+  		test_eval.out \
+  		test_options.out
+--- 34,40 ----
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test98.out test99.out \
+  		test100.out test101.out test102.out test103.out test104.out \
+! 		test105.out test106.out  test107.out\
+  		test_autoformat_join.out \
+  		test_eval.out \
+  		test_options.out
+*** ../vim-7.4.314/src/testdir/Make_ming.mak	2014-04-29 12:15:22.852032651 +0200
+--- src/testdir/Make_ming.mak	2014-05-28 13:13:52.656062889 +0200
+***************
+*** 54,60 ****
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test98.out test99.out \
+  		test100.out test101.out test102.out test103.out test104.out \
+! 		test105.out test106.out \
+  		test_autoformat_join.out \
+  		test_eval.out \
+  		test_options.out
+--- 54,60 ----
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test98.out test99.out \
+  		test100.out test101.out test102.out test103.out test104.out \
+! 		test105.out test106.out test107.out \
+  		test_autoformat_join.out \
+  		test_eval.out \
+  		test_options.out
+*** ../vim-7.4.314/src/testdir/Make_os2.mak	2014-04-29 12:15:22.852032651 +0200
+--- src/testdir/Make_os2.mak	2014-05-28 13:14:03.616062985 +0200
+***************
+*** 36,42 ****
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test98.out test99.out \
+  		test100.out test101.out test102.out test103.out test104.out \
+! 		test105.out test106.out \
+  		test_autoformat_join.out \
+  		test_eval.out \
+  		test_options.out
+--- 36,42 ----
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test98.out test99.out \
+  		test100.out test101.out test102.out test103.out test104.out \
+! 		test105.out test106.out test107.out \
+  		test_autoformat_join.out \
+  		test_eval.out \
+  		test_options.out
+*** ../vim-7.4.314/src/testdir/Make_vms.mms	2014-04-29 12:15:22.852032651 +0200
+--- src/testdir/Make_vms.mms	2014-05-28 13:14:09.724063038 +0200
+***************
+*** 4,10 ****
+  # Authors:	Zoltan Arpadffy, <arpadffy@polarhome.com>
+  #		Sandor Kopanyi,  <sandor.kopanyi@mailbox.hu>
+  #
+! # Last change:  2014 Mar 12
+  #
+  # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+  # Edit the lines in the Configuration section below to select.
+--- 4,10 ----
+  # Authors:	Zoltan Arpadffy, <arpadffy@polarhome.com>
+  #		Sandor Kopanyi,  <sandor.kopanyi@mailbox.hu>
+  #
+! # Last change:  2014 May 28
+  #
+  # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+  # Edit the lines in the Configuration section below to select.
+***************
+*** 95,101 ****
+  	 test90.out test91.out test92.out test93.out test94.out \
+  	 test95.out test96.out test98.out test99.out \
+  	 test100.out test101.out test103.out test104.out \
+! 	 test105.out test106.out \
+  	 test_autoformat_join.out \
+  	 test_eval.out \
+  	 test_options.out
+--- 95,101 ----
+  	 test90.out test91.out test92.out test93.out test94.out \
+  	 test95.out test96.out test98.out test99.out \
+  	 test100.out test101.out test103.out test104.out \
+! 	 test105.out test106.out test107.out \
+  	 test_autoformat_join.out \
+  	 test_eval.out \
+  	 test_options.out
+*** ../vim-7.4.314/src/testdir/Makefile	2014-05-22 13:12:25.650592983 +0200
+--- src/testdir/Makefile	2014-05-28 13:14:28.688063204 +0200
+***************
+*** 32,38 ****
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test97.out test98.out \
+  		test99.out test100.out test101.out test102.out test103.out \
+! 		test104.out test105.out test106.out \
+  		test_autoformat_join.out \
+  		test_eval.out \
+  		test_options.out
+--- 32,38 ----
+  		test89.out test90.out test91.out test92.out test93.out \
+  		test94.out test95.out test96.out test97.out test98.out \
+  		test99.out test100.out test101.out test102.out test103.out \
+! 		test104.out test105.out test106.out test107.out \
+  		test_autoformat_join.out \
+  		test_eval.out \
+  		test_options.out
+*** ../vim-7.4.314/src/testdir/test107.in	2014-05-29 11:46:48.728773486 +0200
+--- src/testdir/test107.in	2014-05-29 11:40:20.096770084 +0200
+***************
+*** 0 ****
+--- 1,38 ----
++ Tests for adjusting window and contents     vim: set ft=vim :
++ 
++ STARTTEST
++ :so small.vim
++ :new
++ :call setline(1, range(1,256))
++ :let r=[]
++ :func! GetScreenStr(row)
++ :   let str = ""
++ :   for c in range(1,3)
++ :       let str .= nr2char(screenchar(a:row, c))
++ :   endfor
++ :   return str
++ :endfunc
++ :
++ :exe ":norm! \<C-W>t\<C-W>=1Gzt\<C-W>w\<C-W>+"
++ :let s3=GetScreenStr(1)
++ :wincmd p
++ :call add(r, [line("w0"), s3])
++ :
++ :exe ":norm! \<C-W>t\<C-W>=50Gzt\<C-W>w\<C-W>+"
++ :let s3=GetScreenStr(1)
++ :wincmd p
++ :call add(r, [line("w0"), s3])
++ :
++ :exe ":norm! \<C-W>t\<C-W>=59Gzt\<C-W>w\<C-W>+"
++ :let s3=GetScreenStr(1)
++ ::wincmd p
++ :call add(r, [line("w0"), s3])
++ :
++ :bwipeout!
++ :$put=r
++ :call garbagecollect(1)
++ :"
++ :/^start:/,$wq! test.out
++ ENDTEST
++ 
++ start:
+*** ../vim-7.4.314/src/testdir/test107.ok	2014-05-29 11:46:48.736773486 +0200
+--- src/testdir/test107.ok	2014-05-29 11:40:20.096770084 +0200
+***************
+*** 0 ****
+--- 1,4 ----
++ start:
++ [1, '1  ']
++ [50, '50 ']
++ [59, '59 ']
+*** ../vim-7.4.314/src/version.c	2014-05-28 21:40:47.092329130 +0200
+--- src/version.c	2014-05-29 11:41:47.640770850 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     315,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+229. You spend so much time thinking what to add on this list.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.316 b/SOURCES/7.4.316
new file mode 100644
index 0000000..89b3b50
--- /dev/null
+++ b/SOURCES/7.4.316
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.316
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.316
+Problem:    Warning from 64-bit compiler.
+Solution:   Add type cast. (Mike Williams)
+Files:	    src/ex_getln.c
+
+
+*** ../vim-7.4.315/src/ex_getln.c	2014-05-07 18:35:25.665216052 +0200
+--- src/ex_getln.c	2014-05-29 14:32:53.584860716 +0200
+***************
+*** 5202,5208 ****
+  		    for (i = 0; i < num_p; ++i)
+  		    {
+  			((char_u **)ga->ga_data)[ga->ga_len] =
+! 					    vim_strnsave(p[i], STRLEN(p[i]));
+  			++ga->ga_len;
+  		    }
+  		}
+--- 5202,5208 ----
+  		    for (i = 0; i < num_p; ++i)
+  		    {
+  			((char_u **)ga->ga_data)[ga->ga_len] =
+! 					vim_strnsave(p[i], (int)STRLEN(p[i]));
+  			++ga->ga_len;
+  		    }
+  		}
+*** ../vim-7.4.315/src/version.c	2014-05-29 11:47:19.808773758 +0200
+--- src/version.c	2014-05-29 14:33:29.476861030 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     316,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+232. You start conversations with, "Have you gotten an ISDN line?"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.317 b/SOURCES/7.4.317
new file mode 100644
index 0000000..34ea336
--- /dev/null
+++ b/SOURCES/7.4.317
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.317
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.317
+Problem:    Crash when starting gvim.  Issue 230.
+Solution:   Check for a pointer to be NULL. (Christian Brabandt)
+Files:	    src/window.c
+
+
+*** ../vim-7.4.316/src/window.c	2014-05-28 13:42:59.884078184 +0200
+--- src/window.c	2014-06-12 11:36:53.619441640 +0200
+***************
+*** 4721,4728 ****
+  win_free_lsize(wp)
+      win_T	*wp;
+  {
+!     vim_free(wp->w_lines);
+!     wp->w_lines = NULL;
+  }
+  
+  /*
+--- 4721,4732 ----
+  win_free_lsize(wp)
+      win_T	*wp;
+  {
+!     /* TODO: why would wp be NULL here? */
+!     if (wp != NULL)
+!     {
+! 	vim_free(wp->w_lines);
+! 	wp->w_lines = NULL;
+!     }
+  }
+  
+  /*
+*** ../vim-7.4.316/src/version.c	2014-05-29 14:36:26.156862577 +0200
+--- src/version.c	2014-06-12 11:37:37.907443315 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     317,
+  /**/
+
+-- 
+press CTRL-ALT-DEL for more information
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.318 b/SOURCES/7.4.318
new file mode 100644
index 0000000..3f82c53
--- /dev/null
+++ b/SOURCES/7.4.318
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.318
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.318
+Problem:    Check for whether a highlight group has settings ignores fg and bg
+	    color settings.
+Solution:   Also check cterm and GUI color settings. (Christian Brabandt)
+Files:	    src/syntax.c
+
+
+*** ../vim-7.4.317/src/syntax.c	2014-03-23 15:12:29.939264336 +0100
+--- src/syntax.c	2014-06-12 12:16:13.851530931 +0200
+***************
+*** 8043,8050 ****
+--- 8043,8056 ----
+  {
+      return (   HL_TABLE()[idx].sg_term_attr != 0
+  	    || HL_TABLE()[idx].sg_cterm_attr != 0
++ 	    || HL_TABLE()[idx].sg_cterm_fg != 0
++ 	    || HL_TABLE()[idx].sg_cterm_bg != 0
+  #ifdef FEAT_GUI
+  	    || HL_TABLE()[idx].sg_gui_attr != 0
++ 	    || HL_TABLE()[idx].sg_gui_fg_name != NULL
++ 	    || HL_TABLE()[idx].sg_gui_bg_name != NULL
++ 	    || HL_TABLE()[idx].sg_gui_sp_name != NULL
++ 	    || HL_TABLE()[idx].sg_font_name != NUL
+  #endif
+  	    || (check_link && (HL_TABLE()[idx].sg_set & SG_LINK)));
+  }
+*** ../vim-7.4.317/src/version.c	2014-06-12 11:49:42.219470717 +0200
+--- src/version.c	2014-06-12 12:17:25.607533645 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     318,
+  /**/
+
+-- 
+The software said it requires Windows 95 or better, so I installed Linux.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.319 b/SOURCES/7.4.319
new file mode 100644
index 0000000..9b7cfaa
--- /dev/null
+++ b/SOURCES/7.4.319
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.319
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.319
+Problem:    Crash when putting zero bytes on the clipboard.
+Solution:   Do not support the utf8_atom target when not using an Unicode
+	    encoding. (Naofumi Honda)
+Files:	    src/ui.c
+
+
+*** ../vim-7.4.318/src/ui.c	2014-03-23 15:12:29.943264337 +0100
+--- src/ui.c	2014-06-12 13:25:21.791687853 +0200
+***************
+*** 2324,2330 ****
+      if (       *target != XA_STRING
+  #ifdef FEAT_MBYTE
+  	    && *target != vimenc_atom
+! 	    && *target != utf8_atom
+  #endif
+  	    && *target != vim_atom
+  	    && *target != text_atom
+--- 2324,2330 ----
+      if (       *target != XA_STRING
+  #ifdef FEAT_MBYTE
+  	    && *target != vimenc_atom
+! 	    && (*target != utf8_atom || !enc_utf8)
+  #endif
+  	    && *target != vim_atom
+  	    && *target != text_atom
+*** ../vim-7.4.318/src/version.c	2014-06-12 12:20:50.195541385 +0200
+--- src/version.c	2014-06-12 13:26:09.147689645 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     319,
+  /**/
+
+-- 
+FIRST HEAD:  Oh! quick! get the sword out I want to cut his head off.
+THIRD HEAD:  Oh, cut your own head off.
+SECOND HEAD: Yes - do us all a favour.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.320 b/SOURCES/7.4.320
new file mode 100644
index 0000000..92830aa
--- /dev/null
+++ b/SOURCES/7.4.320
@@ -0,0 +1,143 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.320
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.320
+Problem:    Possible crash when an BufLeave autocommand deletes the buffer.
+Solution:   Check for the window pointer being valid.  Postpone freeing the
+	    window until autocommands are done. (Yasuhiro Matsumoto)
+Files:	    src/buffer.c, src/fileio.c, src/globals.h, src/window.c
+
+
+*** ../vim-7.4.319/src/buffer.c	2014-05-07 16:35:05.029152844 +0200
+--- src/buffer.c	2014-06-12 13:47:17.799737639 +0200
+***************
+*** 371,377 ****
+  	unload_buf = TRUE;
+  #endif
+  
+!     if (win != NULL)
+      {
+  	/* Set b_last_cursor when closing the last window for the buffer.
+  	 * Remember the last cursor position and window options of the buffer.
+--- 371,381 ----
+  	unload_buf = TRUE;
+  #endif
+  
+!     if (win != NULL
+! #ifdef FEAT_WINDOWS
+! 	&& win_valid(win)	/* in case autocommands closed the window */
+! #endif
+! 	    )
+      {
+  	/* Set b_last_cursor when closing the last window for the buffer.
+  	 * Remember the last cursor position and window options of the buffer.
+*** ../vim-7.4.319/src/fileio.c	2014-05-02 15:46:10.731268318 +0200
+--- src/fileio.c	2014-06-12 13:53:33.207751842 +0200
+***************
+*** 9549,9555 ****
+  
+      /*
+       * When stopping to execute autocommands, restore the search patterns and
+!      * the redo buffer.  Free buffers in the au_pending_free_buf list.
+       */
+      if (!autocmd_busy)
+      {
+--- 9549,9556 ----
+  
+      /*
+       * When stopping to execute autocommands, restore the search patterns and
+!      * the redo buffer.  Free any buffers in the au_pending_free_buf list and
+!      * free any windows in the au_pending_free_win list.
+       */
+      if (!autocmd_busy)
+      {
+***************
+*** 9562,9567 ****
+--- 9563,9574 ----
+  	    vim_free(au_pending_free_buf);
+  	    au_pending_free_buf = b;
+  	}
++ 	while (au_pending_free_win != NULL)
++ 	{
++ 	    win_T *w = au_pending_free_win->w_next;
++ 	    vim_free(au_pending_free_win);
++ 	    au_pending_free_win = w;
++ 	}
+      }
+  
+      /*
+*** ../vim-7.4.319/src/globals.h	2014-05-28 18:22:37.876225054 +0200
+--- src/globals.h	2014-06-12 13:54:29.163753959 +0200
+***************
+*** 387,396 ****
+   * which one is preferred, au_new_curbuf is set to it */
+  EXTERN buf_T	*au_new_curbuf INIT(= NULL);
+  
+! /* When deleting the buffer and autocmd_busy is TRUE, do not free the buffer
+!  * but link it in the list starting with au_pending_free_buf, using b_next.
+!  * Free the buffer when autocmd_busy is set to FALSE. */
+  EXTERN buf_T	*au_pending_free_buf INIT(= NULL);
+  #endif
+  
+  #ifdef FEAT_MOUSE
+--- 387,398 ----
+   * which one is preferred, au_new_curbuf is set to it */
+  EXTERN buf_T	*au_new_curbuf INIT(= NULL);
+  
+! /* When deleting a buffer/window and autocmd_busy is TRUE, do not free the
+!  * buffer/window. but link it in the list starting with
+!  * au_pending_free_buf/ap_pending_free_win, using b_next/w_next.
+!  * Free the buffer/window when autocmd_busy is being set to FALSE. */
+  EXTERN buf_T	*au_pending_free_buf INIT(= NULL);
++ EXTERN win_T	*au_pending_free_win INIT(= NULL);
+  #endif
+  
+  #ifdef FEAT_MOUSE
+*** ../vim-7.4.319/src/window.c	2014-06-12 11:49:42.219470717 +0200
+--- src/window.c	2014-06-12 13:51:54.939748124 +0200
+***************
+*** 4597,4603 ****
+      if (wp != aucmd_win)
+  #endif
+  	win_remove(wp, tp);
+!     vim_free(wp);
+  
+  #ifdef FEAT_AUTOCMD
+      unblock_autocmds();
+--- 4597,4609 ----
+      if (wp != aucmd_win)
+  #endif
+  	win_remove(wp, tp);
+!     if (autocmd_busy)
+!     {
+! 	wp->w_next = au_pending_free_win;
+! 	au_pending_free_win = wp;
+!     }
+!     else
+! 	vim_free(wp);
+  
+  #ifdef FEAT_AUTOCMD
+      unblock_autocmds();
+*** ../vim-7.4.319/src/version.c	2014-06-12 13:28:26.771694851 +0200
+--- src/version.c	2014-06-12 13:40:23.507721966 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     320,
+  /**/
+
+-- 
+Life would be so much easier if we could just look at the source code.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.321 b/SOURCES/7.4.321
new file mode 100644
index 0000000..eaac413
--- /dev/null
+++ b/SOURCES/7.4.321
@@ -0,0 +1,71 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.321
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.321
+Problem:    Can't build with strawberry perl 5.20 + mingw-w64-4.9.0.
+Solution:   Define save_strlen. (Ken Takata)
+Files:	    src/if_perl.xs
+
+
+*** ../vim-7.4.320/src/if_perl.xs	2014-03-12 17:08:01.508807656 +0100
+--- src/if_perl.xs	2014-06-12 16:02:25.584044368 +0200
+***************
+*** 191,196 ****
+--- 191,199 ----
+  # define Perl_pop_scope dll_Perl_pop_scope
+  # define Perl_push_scope dll_Perl_push_scope
+  # define Perl_save_int dll_Perl_save_int
++ # if (PERL_REVISION == 5) && (PERL_VERSION >= 20)
++ #  define Perl_save_strlen dll_Perl_save_strlen
++ # endif
+  # define Perl_stack_grow dll_Perl_stack_grow
+  # define Perl_set_context dll_Perl_set_context
+  # if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
+***************
+*** 311,316 ****
+--- 314,322 ----
+  static void (*Perl_pop_scope)(pTHX);
+  static void (*Perl_push_scope)(pTHX);
+  static void (*Perl_save_int)(pTHX_ int*);
++ #if (PERL_REVISION == 5) && (PERL_VERSION >= 20)
++ static void (*Perl_save_strlen)(pTHX_ STRLEN* ptr);
++ #endif
+  static SV** (*Perl_stack_grow)(pTHX_ SV**, SV**p, int);
+  static SV** (*Perl_set_context)(void*);
+  #if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
+***************
+*** 440,445 ****
+--- 446,454 ----
+      {"Perl_pop_scope", (PERL_PROC*)&Perl_pop_scope},
+      {"Perl_push_scope", (PERL_PROC*)&Perl_push_scope},
+      {"Perl_save_int", (PERL_PROC*)&Perl_save_int},
++ #if (PERL_REVISION == 5) && (PERL_VERSION >= 20)
++     {"Perl_save_strlen", (PERL_PROC*)&Perl_save_strlen},
++ #endif
+      {"Perl_stack_grow", (PERL_PROC*)&Perl_stack_grow},
+      {"Perl_set_context", (PERL_PROC*)&Perl_set_context},
+  #if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
+*** ../vim-7.4.320/src/version.c	2014-06-12 14:01:27.583769788 +0200
+--- src/version.c	2014-06-12 16:02:37.156044806 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     321,
+  /**/
+
+-- 
+Microsoft's definition of a boolean: TRUE, FALSE, MAYBE
+"Embrace and extend"...?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.322 b/SOURCES/7.4.322
new file mode 100644
index 0000000..6c12b61
--- /dev/null
+++ b/SOURCES/7.4.322
@@ -0,0 +1,92 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.322
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.322
+Problem:    Using "msgfmt" is hard coded, cannot use "gmsgfmt".
+Solution:   Use the msgfmt command found by configure. (Danek Duvall)
+Files:	    src/config.mk.in, src/po/Makefile
+
+
+*** ../vim-7.4.321/src/config.mk.in	2010-11-03 22:26:24.000000000 +0100
+--- src/config.mk.in	2014-06-12 17:41:12.892268607 +0200
+***************
+*** 164,169 ****
+--- 164,171 ----
+  ### If the *.po files are to be translated to *.mo files.
+  MAKEMO		= @MAKEMO@
+  
++ MSGFMT		= @MSGFMT@
++ 
+  # Make sure that "make first" will run "make all" once configure has done its
+  # work.  This is needed when using the Makefile in the top directory.
+  first: all
+*** ../vim-7.4.321/src/po/Makefile	2013-06-23 13:26:12.000000000 +0200
+--- src/po/Makefile	2014-06-12 17:45:19.116277922 +0200
+***************
+*** 1,5 ****
+--- 1,8 ----
+  # Makefile for the Vim message translations.
+  
++ # Include stuff found by configure.
++ include ../auto/config.mk
++ 
+  # TODO make this configurable
+  # Note: ja.sjis, *.cp1250 and zh_CN.cp936 are only for MS-Windows, they are
+  # not installed on Unix
+***************
+*** 133,139 ****
+  # tools 0.10.37, which use a slightly different .po file format that is not
+  # compatible with Solaris (and old gettext implementations) unless these are
+  # set.  gettext 0.10.36 will not work!
+! MSGFMT = OLD_PO_FILE_INPUT=yes msgfmt -v
+  XGETTEXT = OLD_PO_FILE_INPUT=yes OLD_PO_FILE_OUTPUT=yes xgettext
+  MSGMERGE = OLD_PO_FILE_INPUT=yes OLD_PO_FILE_OUTPUT=yes msgmerge
+  
+--- 136,142 ----
+  # tools 0.10.37, which use a slightly different .po file format that is not
+  # compatible with Solaris (and old gettext implementations) unless these are
+  # set.  gettext 0.10.36 will not work!
+! MSGFMTCMD = OLD_PO_FILE_INPUT=yes $(MSGFMT) -v
+  XGETTEXT = OLD_PO_FILE_INPUT=yes OLD_PO_FILE_OUTPUT=yes xgettext
+  MSGMERGE = OLD_PO_FILE_INPUT=yes OLD_PO_FILE_OUTPUT=yes msgmerge
+  
+***************
+*** 142,148 ****
+  .PHONY: all install uninstall prefixcheck converted check clean checkclean distclean update-po $(LANGUAGES) $(CONVERTED)
+  
+  .po.mo:
+! 	$(MSGFMT) -o $@ $<
+  
+  .po.ck:
+  	$(VIM) -u NONE -e -X -S check.vim -c "if error == 0 | q | endif" -c cq $<
+--- 145,151 ----
+  .PHONY: all install uninstall prefixcheck converted check clean checkclean distclean update-po $(LANGUAGES) $(CONVERTED)
+  
+  .po.mo:
+! 	$(MSGFMTCMD) -o $@ $<
+  
+  .po.ck:
+  	$(VIM) -u NONE -e -X -S check.vim -c "if error == 0 | q | endif" -c cq $<
+*** ../vim-7.4.321/src/version.c	2014-06-12 16:03:24.268046589 +0200
+--- src/version.c	2014-06-12 17:42:27.584271433 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     322,
+  /**/
+
+-- 
+If I tell you "you have a beautiful body", would you hold it against me?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.323 b/SOURCES/7.4.323
new file mode 100644
index 0000000..3faac9c
--- /dev/null
+++ b/SOURCES/7.4.323
@@ -0,0 +1,96 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.323
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.323
+Problem:    Substitute() with zero width pattern breaks multi-byte character.
+Solution:   Take multi-byte character size into account. (Yukihiro Nakadaira)
+Files:	    src/eval.c src/testdir/test69.in, src/testdir/test69.ok
+
+
+*** ../vim-7.4.322/src/eval.c	2014-05-28 20:31:37.496292805 +0200
+--- src/eval.c	2014-06-12 18:34:22.928389291 +0200
+***************
+*** 24848,24855 ****
+  		if (zero_width == regmatch.startp[0])
+  		{
+  		    /* avoid getting stuck on a match with an empty string */
+! 		    *((char_u *)ga.ga_data + ga.ga_len) = *tail++;
+! 		    ++ga.ga_len;
+  		    continue;
+  		}
+  		zero_width = regmatch.startp[0];
+--- 24848,24858 ----
+  		if (zero_width == regmatch.startp[0])
+  		{
+  		    /* avoid getting stuck on a match with an empty string */
+! 		    i = MB_PTR2LEN(tail);
+! 		    mch_memmove((char_u *)ga.ga_data + ga.ga_len, tail,
+! 								   (size_t)i);
+! 		    ga.ga_len += i;
+! 		    tail += i;
+  		    continue;
+  		}
+  		zero_width = regmatch.startp[0];
+*** ../vim-7.4.322/src/testdir/test69.in	2014-02-22 23:49:30.268896843 +0100
+--- src/testdir/test69.in	2014-06-12 18:32:43.108385514 +0200
+***************
+*** 180,185 ****
+--- 180,192 ----
+  byteidxcomp
+  
+  STARTTEST
++ /^substitute
++ :let y = substitute('123', '\zs', 'a', 'g')    | put =y
++ ENDTEST
++ 
++ substitute
++ 
++ STARTTEST
+  :g/^STARTTEST/.,/^ENDTEST/d
+  :1;/^Results/,$wq! test.out
+  ENDTEST
+*** ../vim-7.4.322/src/testdir/test69.ok	2014-02-22 23:49:30.268896843 +0100
+--- src/testdir/test69.ok	2014-06-12 18:32:43.108385514 +0200
+***************
+*** 160,162 ****
+--- 160,166 ----
+  [0, 1, 3, 4, -1]
+  [0, 1, 2, 4, 5, -1]
+  
++ 
++ substitute
++ a1a2a3a
++ 
+*** ../vim-7.4.322/src/version.c	2014-06-12 18:03:24.940319000 +0200
+--- src/version.c	2014-06-12 18:32:08.356384200 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     323,
+  /**/
+
+-- 
+       When danger reared its ugly head,
+       He bravely turned his tail and fled
+       Yes, Brave Sir Robin turned about
+       And gallantly he chickened out
+       Bravely taking to his feet
+       He beat a very brave retreat
+       Bravest of the brave Sir Robin
+       Petrified of being dead
+       Soiled his pants then brave Sir Robin
+       Turned away and fled.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.324 b/SOURCES/7.4.324
new file mode 100644
index 0000000..7418d06
--- /dev/null
+++ b/SOURCES/7.4.324
@@ -0,0 +1,190 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.324
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.324
+Problem:    In Ex mode, cyrillic characters are not handled. (Stas Malavin)
+Solution:   Support multi-byte characters in Ex mode. (Yukihiro Nakadaira)
+Files:	    src/ex_getln.c
+
+
+*** ../vim-7.4.323/src/ex_getln.c	2014-05-29 14:36:26.156862577 +0200
+--- src/ex_getln.c	2014-06-12 19:33:10.440522741 +0200
+***************
+*** 2188,2193 ****
+--- 2188,2194 ----
+      int		vcol = 0;
+      char_u	*p;
+      int		prev_char;
++     int		len;
+  
+      /* Switch cursor on now.  This avoids that it happens after the "\n", which
+       * confuses the system function that computes tabstops. */
+***************
+*** 2264,2270 ****
+  	    {
+  		if (line_ga.ga_len > 0)
+  		{
+! 		    --line_ga.ga_len;
+  		    goto redraw;
+  		}
+  		continue;
+--- 2265,2281 ----
+  	    {
+  		if (line_ga.ga_len > 0)
+  		{
+! #ifdef FEAT_MBYTE
+! 		    if (has_mbyte)
+! 		    {
+! 			p = (char_u *)line_ga.ga_data;
+! 			p[line_ga.ga_len] = NUL;
+! 			len = (*mb_head_off)(p, p + line_ga.ga_len - 1) + 1;
+! 			line_ga.ga_len -= len;
+! 		    }
+! 		    else
+! #endif
+! 			--line_ga.ga_len;
+  		    goto redraw;
+  		}
+  		continue;
+***************
+*** 2280,2286 ****
+  
+  	    if (c1 == Ctrl_T)
+  	    {
+! 		long        sw = get_sw_value(curbuf);
+  
+  		p = (char_u *)line_ga.ga_data;
+  		p[line_ga.ga_len] = NUL;
+--- 2291,2297 ----
+  
+  	    if (c1 == Ctrl_T)
+  	    {
+! 		long	    sw = get_sw_value(curbuf);
+  
+  		p = (char_u *)line_ga.ga_data;
+  		p[line_ga.ga_len] = NUL;
+***************
+*** 2300,2307 ****
+  		/* redraw the line */
+  		msg_col = startcol;
+  		vcol = 0;
+! 		for (p = (char_u *)line_ga.ga_data;
+! 			  p < (char_u *)line_ga.ga_data + line_ga.ga_len; ++p)
+  		{
+  		    if (*p == TAB)
+  		    {
+--- 2311,2319 ----
+  		/* redraw the line */
+  		msg_col = startcol;
+  		vcol = 0;
+! 		p = (char_u *)line_ga.ga_data;
+! 		p[line_ga.ga_len] = NUL;
+! 		while (p < (char_u *)line_ga.ga_data + line_ga.ga_len)
+  		{
+  		    if (*p == TAB)
+  		    {
+***************
+*** 2309,2319 ****
+  			{
+  			    msg_putchar(' ');
+  			} while (++vcol % 8);
+  		    }
+  		    else
+  		    {
+! 			msg_outtrans_len(p, 1);
+! 			vcol += char2cells(*p);
+  		    }
+  		}
+  		msg_clr_eos();
+--- 2321,2334 ----
+  			{
+  			    msg_putchar(' ');
+  			} while (++vcol % 8);
++ 			++p;
+  		    }
+  		    else
+  		    {
+! 			len = MB_PTR2LEN(p);
+! 			msg_outtrans_len(p, len);
+! 			vcol += ptr2cells(p);
+! 			p += len;
+  		    }
+  		}
+  		msg_clr_eos();
+***************
+*** 2362,2368 ****
+  
+  	if (IS_SPECIAL(c1))
+  	    c1 = '?';
+! 	((char_u *)line_ga.ga_data)[line_ga.ga_len] = c1;
+  	if (c1 == '\n')
+  	    msg_putchar('\n');
+  	else if (c1 == TAB)
+--- 2377,2392 ----
+  
+  	if (IS_SPECIAL(c1))
+  	    c1 = '?';
+! #ifdef FEAT_MBYTE
+! 	if (has_mbyte)
+! 	    len = (*mb_char2bytes)(c1,
+! 				  (char_u *)line_ga.ga_data + line_ga.ga_len);
+! 	else
+! #endif
+! 	{
+! 	    len = 1;
+! 	    ((char_u *)line_ga.ga_data)[line_ga.ga_len] = c1;
+! 	}
+  	if (c1 == '\n')
+  	    msg_putchar('\n');
+  	else if (c1 == TAB)
+***************
+*** 2376,2385 ****
+  	else
+  	{
+  	    msg_outtrans_len(
+! 		     ((char_u *)line_ga.ga_data) + line_ga.ga_len, 1);
+  	    vcol += char2cells(c1);
+  	}
+! 	++line_ga.ga_len;
+  	escaped = FALSE;
+  
+  	windgoto(msg_row, msg_col);
+--- 2400,2409 ----
+  	else
+  	{
+  	    msg_outtrans_len(
+! 		     ((char_u *)line_ga.ga_data) + line_ga.ga_len, len);
+  	    vcol += char2cells(c1);
+  	}
+! 	line_ga.ga_len += len;
+  	escaped = FALSE;
+  
+  	windgoto(msg_row, msg_col);
+*** ../vim-7.4.323/src/version.c	2014-06-12 18:39:16.828400409 +0200
+--- src/version.c	2014-06-12 19:37:40.296532950 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     324,
+  /**/
+
+-- 
+ZOOT:  I'm afraid our life must seem very dull and quiet compared to yours.
+       We are but eightscore young blondes, all between sixteen and
+       nineteen-and-a-half, cut off in this castle, with no one to protect us.
+       Oooh.  It is a lonely life ... bathing ...  dressing ... undressing ...
+       making exciting underwear....
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.325 b/SOURCES/7.4.325
new file mode 100644
index 0000000..5482a1d
--- /dev/null
+++ b/SOURCES/7.4.325
@@ -0,0 +1,62 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.325
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.325
+Problem:    When starting the gui and changing the window size the status line
+	    may not be drawn correctly.
+Solution:   Catch new_win_height() being called recursively. (Christian
+	    Brabandt)
+Files:	    src/window.c
+
+
+*** ../vim-7.4.324/src/window.c	2014-06-12 14:01:27.579769788 +0200
+--- src/window.c	2014-06-13 20:04:59.051863582 +0200
+***************
+*** 5660,5666 ****
+      if (wp->w_height > 0)
+      {
+  	if (wp == curwin)
+! 	    validate_cursor();		/* w_wrow needs to be valid */
+  	if (wp->w_wrow != wp->w_prev_fraction_row)
+  	    set_fraction(wp);
+      }
+--- 5660,5671 ----
+      if (wp->w_height > 0)
+      {
+  	if (wp == curwin)
+! 	    /* w_wrow needs to be valid. When setting 'laststatus' this may
+! 	     * call win_new_height() recursively. */
+! 	    validate_cursor();
+! 	if (wp->w_height != prev_height)
+! 	    return;  /* Recursive call already changed the size, bail out here
+! 			to avoid the following to mess things up. */
+  	if (wp->w_wrow != wp->w_prev_fraction_row)
+  	    set_fraction(wp);
+      }
+*** ../vim-7.4.324/src/version.c	2014-06-12 19:44:45.324549030 +0200
+--- src/version.c	2014-06-13 20:06:12.947866378 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     325,
+  /**/
+
+-- 
+DINGO:   And after the spanking ... the oral sex.
+GALAHAD: Oh, dear! Well, I...
+GIRLS:   The oral sex ...  The oral sex.
+GALAHAD: Well, I suppose I could stay a BIT longer.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.326 b/SOURCES/7.4.326
new file mode 100644
index 0000000..da62b68
--- /dev/null
+++ b/SOURCES/7.4.326
@@ -0,0 +1,51 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.326
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.326
+Problem:    Can't build Tiny version. (Elimar Riesebieter)
+Solution:   Add #ifdef.
+Files:	    src/window.c
+
+
+*** ../vim-7.4.325/src/window.c	2014-06-13 20:08:41.295871990 +0200
+--- src/window.c	2014-06-14 12:51:00.010147123 +0200
+***************
+*** 4597,4608 ****
+--- 4597,4610 ----
+      if (wp != aucmd_win)
+  #endif
+  	win_remove(wp, tp);
++ #ifdef FEAT_AUTOCMD
+      if (autocmd_busy)
+      {
+  	wp->w_next = au_pending_free_win;
+  	au_pending_free_win = wp;
+      }
+      else
++ #endif
+  	vim_free(wp);
+  
+  #ifdef FEAT_AUTOCMD
+*** ../vim-7.4.325/src/version.c	2014-06-13 20:08:41.295871990 +0200
+--- src/version.c	2014-06-14 12:53:05.134151857 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     326,
+  /**/
+
+-- 
+You cannot propel yourself forward by patting yourself on the back.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.327 b/SOURCES/7.4.327
new file mode 100644
index 0000000..a797dd7
--- /dev/null
+++ b/SOURCES/7.4.327
@@ -0,0 +1,163 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.327
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.327
+Problem:    When 'verbose' is set to display the return value of a function,
+	    may get E724 repeatedly.
+Solution:   Do not give an error for verbose messages. Abort conversion to
+	    string after an error.
+Files:	    src/eval.c
+
+
+*** ../vim-7.4.326/src/eval.c	2014-06-12 18:39:16.828400409 +0200
+--- src/eval.c	2014-06-17 12:48:12.083946675 +0200
+***************
+*** 134,139 ****
+--- 134,142 ----
+  #define COPYID_INC 2
+  #define COPYID_MASK (~0x1)
+  
++ /* Abort conversion to string after a recursion error. */
++ static int  did_echo_string_emsg = FALSE;
++ 
+  /*
+   * Array to hold the hashtab with variables local to each sourced script.
+   * Each item holds a variable (nameless) that points to the dict_T.
+***************
+*** 6686,6691 ****
+--- 6689,6696 ----
+  	}
+  
+  	line_breakcheck();
++ 	if (did_echo_string_emsg)  /* recursion error, bail out */
++ 	    break;
+      }
+  
+      /* Allocate result buffer with its total size, avoid re-allocation and
+***************
+*** 7460,7467 ****
+  	    if (s != NULL)
+  		ga_concat(&ga, s);
+  	    vim_free(tofree);
+! 	    if (s == NULL)
+  		break;
+  	}
+      }
+      if (todo > 0)
+--- 7465,7474 ----
+  	    if (s != NULL)
+  		ga_concat(&ga, s);
+  	    vim_free(tofree);
+! 	    if (s == NULL || did_echo_string_emsg)
+  		break;
++ 	    line_breakcheck();
++ 
+  	}
+      }
+      if (todo > 0)
+***************
+*** 7619,7627 ****
+  
+      if (recurse >= DICT_MAXNEST)
+      {
+! 	EMSG(_("E724: variable nested too deep for displaying"));
+  	*tofree = NULL;
+! 	return NULL;
+      }
+      ++recurse;
+  
+--- 7626,7641 ----
+  
+      if (recurse >= DICT_MAXNEST)
+      {
+! 	if (!did_echo_string_emsg)
+! 	{
+! 	    /* Only give this message once for a recursive call to avoid
+! 	     * flooding the user with errors.  And stop iterating over lists
+! 	     * and dicts. */
+! 	    did_echo_string_emsg = TRUE;
+! 	    EMSG(_("E724: variable nested too deep for displaying"));
+! 	}
+  	*tofree = NULL;
+! 	return (char_u *)"{E724}";
+      }
+      ++recurse;
+  
+***************
+*** 7689,7695 ****
+  	    *tofree = NULL;
+      }
+  
+!     --recurse;
+      return r;
+  }
+  
+--- 7703,7710 ----
+  	    *tofree = NULL;
+      }
+  
+!     if (--recurse == 0)
+! 	did_echo_string_emsg = FALSE;
+      return r;
+  }
+  
+***************
+*** 23303,23309 ****
+--- 23318,23327 ----
+  			msg_outnum((long)argvars[i].vval.v_number);
+  		    else
+  		    {
++ 			/* Do not want errors such as E724 here. */
++ 			++emsg_off;
+  			s = tv2string(&argvars[i], &tofree, numbuf2, 0);
++ 			--emsg_off;
+  			if (s != NULL)
+  			{
+  			    if (vim_strsize(s) > MSG_BUF_CLEN)
+***************
+*** 23395,23402 ****
+  
+  	    /* The value may be very long.  Skip the middle part, so that we
+  	     * have some idea how it starts and ends. smsg() would always
+! 	     * truncate it at the end. */
+  	    s = tv2string(fc->rettv, &tofree, numbuf2, 0);
+  	    if (s != NULL)
+  	    {
+  		if (vim_strsize(s) > MSG_BUF_CLEN)
+--- 23413,23422 ----
+  
+  	    /* The value may be very long.  Skip the middle part, so that we
+  	     * have some idea how it starts and ends. smsg() would always
+! 	     * truncate it at the end. Don't want errors such as E724 here. */
+! 	    ++emsg_off;
+  	    s = tv2string(fc->rettv, &tofree, numbuf2, 0);
++ 	    --emsg_off;
+  	    if (s != NULL)
+  	    {
+  		if (vim_strsize(s) > MSG_BUF_CLEN)
+*** ../vim-7.4.326/src/version.c	2014-06-14 12:53:27.394152699 +0200
+--- src/version.c	2014-06-17 12:41:45.019932032 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     327,
+  /**/
+
+-- 
+TALL KNIGHT: We shall say Ni! again to you if you do not appease us.
+ARTHUR:      All right!  What do you want?
+TALL KNIGHT: We want ... a shrubbery!
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.328 b/SOURCES/7.4.328
new file mode 100644
index 0000000..d1f8c49
--- /dev/null
+++ b/SOURCES/7.4.328
@@ -0,0 +1,82 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.328
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.328
+Problem:    Selection of inner block is inconsistent.
+Solution:   Skip indent not only for '}' but all parens. (Tom McDonald)
+Files:	    src/search.c
+
+
+*** ../vim-7.4.327/src/search.c	2014-03-23 15:12:29.935264336 +0100
+--- src/search.c	2014-06-17 12:37:49.075923106 +0200
+***************
+*** 3608,3628 ****
+  
+      /*
+       * Try to exclude the '(', '{', ')', '}', etc. when "include" is FALSE.
+!      * If the ending '}' is only preceded by indent, skip that indent.
+!      * But only if the resulting area is not smaller than what we started with.
+       */
+      while (!include)
+      {
+  	incl(&start_pos);
+  	sol = (curwin->w_cursor.col == 0);
+  	decl(&curwin->w_cursor);
+! 	if (what == '{')
+! 	    while (inindent(1))
+! 	    {
+! 		sol = TRUE;
+! 		if (decl(&curwin->w_cursor) != 0)
+! 		    break;
+! 	    }
+  	/*
+  	 * In Visual mode, when the resulting area is not bigger than what we
+  	 * started with, extend it to the next block, and then exclude again.
+--- 3608,3629 ----
+  
+      /*
+       * Try to exclude the '(', '{', ')', '}', etc. when "include" is FALSE.
+!      * If the ending '}', ')' or ']' is only preceded by indent, skip that
+!      * indent.  But only if the resulting area is not smaller than what we
+!      * started with.
+       */
+      while (!include)
+      {
+  	incl(&start_pos);
+  	sol = (curwin->w_cursor.col == 0);
+  	decl(&curwin->w_cursor);
+! 	while (inindent(1))
+! 	{
+! 	    sol = TRUE;
+! 	    if (decl(&curwin->w_cursor) != 0)
+! 		break;
+! 	}
+! 
+  	/*
+  	 * In Visual mode, when the resulting area is not bigger than what we
+  	 * started with, extend it to the next block, and then exclude again.
+*** ../vim-7.4.327/src/version.c	2014-06-17 12:51:13.207953527 +0200
+--- src/version.c	2014-06-17 12:52:35.279956632 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     328,
+  /**/
+
+-- 
+FATHER: One day, lad, all this will be yours ...
+PRINCE: What - the curtains?
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.329 b/SOURCES/7.4.329
new file mode 100644
index 0000000..0fd9bad
--- /dev/null
+++ b/SOURCES/7.4.329
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.329
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.329
+Problem:    When moving the cursor and then switching to another window the
+	    previous window isn't scrolled. (Yukihiro Nakadaira)
+Solution:   Call update_topline() before leaving the window. (Christian
+	    Brabandt)
+Files:	    src/window.c
+
+
+*** ../vim-7.4.328/src/window.c	2014-06-14 12:53:27.394152699 +0200
+--- src/window.c	2014-06-17 13:44:48.812075178 +0200
+***************
+*** 4250,4255 ****
+--- 4250,4260 ----
+      /* sync undo before leaving the current buffer */
+      if (undo_sync && curbuf != wp->w_buffer)
+  	u_sync(FALSE);
++ 
++     /* Might need to scroll the old window before switching, e.g., when the
++      * cursor was moved. */
++     update_topline();
++ 
+      /* may have to copy the buffer options when 'cpo' contains 'S' */
+      if (wp->w_buffer != curbuf)
+  	buf_copy_options(wp->w_buffer, BCO_ENTER | BCO_NOHELP);
+*** ../vim-7.4.328/src/version.c	2014-06-17 13:50:06.148087184 +0200
+--- src/version.c	2014-06-17 13:51:09.960089598 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     329,
+  /**/
+
+-- 
+FATHER:       Make sure the Prince doesn't leave this room until I come and
+              get him.
+FIRST GUARD:  Not ... to leave the room ... even if you come and get him.
+FATHER:       No.  Until I come and get him.
+SECOND GUARD: Hic.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.330 b/SOURCES/7.4.330
new file mode 100644
index 0000000..360d20c
--- /dev/null
+++ b/SOURCES/7.4.330
@@ -0,0 +1,1131 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.330
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.330
+Problem:    Using a regexp pattern to highlight a specific position can be
+	    slow.
+Solution:   Add matchaddpos() to highlight specific positions efficiently.
+	    (Alexey Radkov)
+Files:	    runtime/doc/eval.txt, runtime/doc/usr_41.txt,
+	    runtime/plugin/matchparen.vim, src/eval.c, src/ex_docmd.c,
+	    src/proto/window.pro, src/screen.c, src/structs.h,
+	    src/testdir/test63.in, src/testdir/test63.ok, src/window.c
+
+
+*** ../vim-7.4.329/runtime/doc/eval.txt	2014-05-28 20:31:37.500292805 +0200
+--- runtime/doc/eval.txt	2014-06-17 16:31:35.572453748 +0200
+***************
+*** 1887,1892 ****
+--- 1887,1894 ----
+  				Number	position where {pat} matches in {expr}
+  matchadd( {group}, {pattern}[, {priority}[, {id}]])
+  				Number	highlight {pattern} with {group}
++ matchaddpos( {group}, {list}[, {priority}[, {id}]])
++ 				Number	highlight positions with {group}
+  matcharg( {nr})			List	arguments of |:match|
+  matchdelete( {id})		Number	delete match identified by {id}
+  matchend( {expr}, {pat}[, {start}[, {count}]])
+***************
+*** 4342,4347 ****
+--- 4382,4422 ----
+  		available from |getmatches()|.	All matches can be deleted in
+  		one operation by |clearmatches()|.
+  
++ matchaddpos({group}, {pos}[, {priority}[, {id}]])		*matchaddpos()*
++ 		Same as |matchadd()|, but requires a list of positions {pos}
++ 		instead of a pattern. This command is faster than |matchadd()|
++ 		because it does not require to handle regular expressions and
++ 		sets buffer line boundaries to redraw screen. It is supposed
++ 		to be used when fast match additions and deletions are
++ 		required, for example to highlight matching parentheses.
++ 
++ 		The list {pos} can contain one of these items:
++ 		- A number.  This while line will be highlighted.  The first
++ 		  line has number 1.
++ 		- A list with one number, e.g., [23]. The whole line with this
++ 		  number will be highlighted.
++ 		- A list with two numbers, e.g., [23, 11]. The first number is
++ 		  the line number, the second one the column number (first
++ 		  column is 1).  The character at this position will be
++ 		  highlighted.
++ 		- A list with three numbers, e.g., [23, 11, 3]. As above, but
++ 		  the third number gives the length of the highlight in screen
++ 		  cells.
++ 		
++ 		The maximum number of positions is 8.
++ 
++ 		Example: >
++ 			:highlight MyGroup ctermbg=green guibg=green
++ 			:let m = matchaddpos("MyGroup", [[23, 24], 34])
++ <		Deletion of the pattern: >
++ 			:call matchdelete(m)
++ 
++ <		Matches added by |matchaddpos()| are returned by
++ 		|getmatches()| with an entry "pos1", "pos2", etc., with the
++ 		value a list like the {pos} item.
++ 		These matches cannot be set via |setmatches()|, however they
++ 		can still be deleted by |clearmatches()|.
++ 
+  matcharg({nr})							*matcharg()*
+  		Selects the {nr} match item, as set with a |:match|,
+  		|:2match| or |:3match| command.
+*** ../vim-7.4.329/runtime/doc/usr_41.txt	2014-05-28 18:22:37.872225054 +0200
+--- runtime/doc/usr_41.txt	2014-06-17 14:06:44.836124965 +0200
+***************
+*** 824,829 ****
+--- 827,833 ----
+  	synconcealed()		get info about concealing
+  	diff_hlID()		get highlight ID for diff mode at a position
+  	matchadd()		define a pattern to highlight (a "match")
++ 	matchaddpos()		define a list of positions to highlight
+  	matcharg()		get info about |:match| arguments
+  	matchdelete()		delete a match defined by |matchadd()| or a
+  				|:match| command
+*** ../vim-7.4.329/runtime/plugin/matchparen.vim	2013-05-08 05:15:53.000000000 +0200
+--- runtime/plugin/matchparen.vim	2014-06-17 14:14:45.712143158 +0200
+***************
+*** 1,6 ****
+  " Vim plugin for showing matching parens
+  " Maintainer:  Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2013 May 08
+  
+  " Exit quickly when:
+  " - this plugin was already loaded (or disabled)
+--- 1,6 ----
+  " Vim plugin for showing matching parens
+  " Maintainer:  Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2014 Jun 17
+  
+  " Exit quickly when:
+  " - this plugin was already loaded (or disabled)
+***************
+*** 39,45 ****
+  function! s:Highlight_Matching_Pair()
+    " Remove any previous match.
+    if exists('w:paren_hl_on') && w:paren_hl_on
+!     3match none
+      let w:paren_hl_on = 0
+    endif
+  
+--- 39,45 ----
+  function! s:Highlight_Matching_Pair()
+    " Remove any previous match.
+    if exists('w:paren_hl_on') && w:paren_hl_on
+!     silent! call matchdelete(3)
+      let w:paren_hl_on = 0
+    endif
+  
+***************
+*** 152,165 ****
+  
+    " If a match is found setup match highlighting.
+    if m_lnum > 0 && m_lnum >= stoplinetop && m_lnum <= stoplinebottom 
+!     exe '3match MatchParen /\(\%' . c_lnum . 'l\%' . (c_col - before) .
+! 	  \ 'c\)\|\(\%' . m_lnum . 'l\%' . m_col . 'c\)/'
+      let w:paren_hl_on = 1
+    endif
+  endfunction
+  
+  " Define commands that will disable and enable the plugin.
+! command! NoMatchParen windo 3match none | unlet! g:loaded_matchparen |
+  	  \ au! matchparen
+  command! DoMatchParen runtime plugin/matchparen.vim | windo doau CursorMoved
+  
+--- 152,169 ----
+  
+    " If a match is found setup match highlighting.
+    if m_lnum > 0 && m_lnum >= stoplinetop && m_lnum <= stoplinebottom 
+!     if exists('*matchaddpos')
+!       call matchaddpos('MatchParen', [[c_lnum, c_col - before], [m_lnum, m_col]], 10, 3)
+!     else
+!       exe '3match MatchParen /\(\%' . c_lnum . 'l\%' . (c_col - before) .
+! 	    \ 'c\)\|\(\%' . m_lnum . 'l\%' . m_col . 'c\)/'
+!     endif
+      let w:paren_hl_on = 1
+    endif
+  endfunction
+  
+  " Define commands that will disable and enable the plugin.
+! command! NoMatchParen windo silent! call matchdelete(3) | unlet! g:loaded_matchparen |
+  	  \ au! matchparen
+  command! DoMatchParen runtime plugin/matchparen.vim | windo doau CursorMoved
+  
+*** ../vim-7.4.329/src/eval.c	2014-06-17 12:51:13.207953527 +0200
+--- src/eval.c	2014-06-17 17:02:25.388523729 +0200
+***************
+*** 622,627 ****
+--- 622,628 ----
+  static void f_mapcheck __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_match __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_matchadd __ARGS((typval_T *argvars, typval_T *rettv));
++ static void f_matchaddpos __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_matcharg __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_matchdelete __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_matchend __ARGS((typval_T *argvars, typval_T *rettv));
+***************
+*** 8054,8059 ****
+--- 8055,8061 ----
+      {"mapcheck",	1, 3, f_mapcheck},
+      {"match",		2, 4, f_match},
+      {"matchadd",	2, 4, f_matchadd},
++     {"matchaddpos",	2, 4, f_matchaddpos},
+      {"matcharg",	1, 1, f_matcharg},
+      {"matchdelete",	1, 1, f_matchdelete},
+      {"matchend",	2, 4, f_matchend},
+***************
+*** 11767,11772 ****
+--- 11769,11775 ----
+  #ifdef FEAT_SEARCH_EXTRA
+      dict_T	*dict;
+      matchitem_T	*cur = curwin->w_match_head;
++     int		i;
+  
+      if (rettv_list_alloc(rettv) == OK)
+      {
+***************
+*** 11775,11782 ****
+  	    dict = dict_alloc();
+  	    if (dict == NULL)
+  		return;
+  	    dict_add_nr_str(dict, "group", 0L, syn_id2name(cur->hlg_id));
+- 	    dict_add_nr_str(dict, "pattern", 0L, cur->pattern);
+  	    dict_add_nr_str(dict, "priority", (long)cur->priority, NULL);
+  	    dict_add_nr_str(dict, "id", (long)cur->id, NULL);
+  	    list_append_dict(rettv->vval.v_list, dict);
+--- 11778,11813 ----
+  	    dict = dict_alloc();
+  	    if (dict == NULL)
+  		return;
++ 	    if (cur->match.regprog == NULL)
++ 	    {
++ 		/* match added with matchaddpos() */
++ 		for (i = 0; i < MAXPOSMATCH; ++i)
++ 		{
++ 		    llpos_T	*llpos;
++ 		    char	buf[6];
++ 		    list_T	*l;
++ 
++ 		    llpos = &cur->pos.pos[i];
++ 		    if (llpos->lnum == 0)
++ 			break;
++ 		    l = list_alloc();
++ 		    if (l == NULL)
++ 			break;
++ 		    list_append_number(l, (varnumber_T)llpos->lnum);
++ 		    if (llpos->col > 0)
++ 		    {
++ 			list_append_number(l, (varnumber_T)llpos->col);
++ 			list_append_number(l, (varnumber_T)llpos->len);
++ 		    }
++ 		    sprintf(buf, "pos%d", i + 1);
++ 		    dict_add_list(dict, buf, l);
++ 		}
++ 	    }
++ 	    else
++ 	    {
++ 		dict_add_nr_str(dict, "pattern", 0L, cur->pattern);
++ 	    }
+  	    dict_add_nr_str(dict, "group", 0L, syn_id2name(cur->hlg_id));
+  	    dict_add_nr_str(dict, "priority", (long)cur->priority, NULL);
+  	    dict_add_nr_str(dict, "id", (long)cur->id, NULL);
+  	    list_append_dict(rettv->vval.v_list, dict);
+***************
+*** 14313,14319 ****
+  	return;
+      }
+  
+!     rettv->vval.v_number = match_add(curwin, grp, pat, prio, id);
+  #endif
+  }
+  
+--- 14344,14401 ----
+  	return;
+      }
+  
+!     rettv->vval.v_number = match_add(curwin, grp, pat, prio, id, NULL);
+! #endif
+! }
+! 
+! /*
+!  * "matchaddpos()" function
+!  */
+!     static void
+! f_matchaddpos(argvars, rettv)
+!     typval_T	*argvars UNUSED;
+!     typval_T	*rettv UNUSED;
+! {
+! #ifdef FEAT_SEARCH_EXTRA
+!     char_u	buf[NUMBUFLEN];
+!     char_u	*group;
+!     int		prio = 10;
+!     int		id = -1;
+!     int		error = FALSE;
+!     list_T	*l;
+! 
+!     rettv->vval.v_number = -1;
+! 
+!     group = get_tv_string_buf_chk(&argvars[0], buf);
+!     if (group == NULL)
+! 	return;
+! 
+!     if (argvars[1].v_type != VAR_LIST)
+!     {
+! 	EMSG2(_(e_listarg), "matchaddpos()");
+! 	return;
+!     }
+!     l = argvars[1].vval.v_list;
+!     if (l == NULL)
+! 	return;
+! 
+!     if (argvars[2].v_type != VAR_UNKNOWN)
+!     {
+! 	prio = get_tv_number_chk(&argvars[2], &error);
+! 	if (argvars[3].v_type != VAR_UNKNOWN)
+! 	    id = get_tv_number_chk(&argvars[3], &error);
+!     }
+!     if (error == TRUE)
+! 	return;
+! 
+!     /* id == 3 is ok because matchaddpos() is supposed to substitute :3match */
+!     if (id == 1 || id == 2)
+!     {
+! 	EMSGN("E798: ID is reserved for \":match\": %ld", id);
+! 	return;
+!     }
+! 
+!     rettv->vval.v_number = match_add(curwin, group, NULL, prio, id, l);
+  #endif
+  }
+  
+***************
+*** 16816,16822 ****
+  	    match_add(curwin, get_dict_string(d, (char_u *)"group", FALSE),
+  		    get_dict_string(d, (char_u *)"pattern", FALSE),
+  		    (int)get_dict_number(d, (char_u *)"priority"),
+! 		    (int)get_dict_number(d, (char_u *)"id"));
+  	    li = li->li_next;
+  	}
+  	rettv->vval.v_number = 0;
+--- 16898,16904 ----
+  	    match_add(curwin, get_dict_string(d, (char_u *)"group", FALSE),
+  		    get_dict_string(d, (char_u *)"pattern", FALSE),
+  		    (int)get_dict_number(d, (char_u *)"priority"),
+! 		    (int)get_dict_number(d, (char_u *)"id"), NULL);
+  	    li = li->li_next;
+  	}
+  	rettv->vval.v_number = 0;
+*** ../vim-7.4.329/src/ex_docmd.c	2014-05-28 18:22:37.876225054 +0200
+--- src/ex_docmd.c	2014-06-17 14:06:44.844124966 +0200
+***************
+*** 11489,11495 ****
+  
+  	    c = *end;
+  	    *end = NUL;
+! 	    match_add(curwin, g, p + 1, 10, id);
+  	    vim_free(g);
+  	    *end = c;
+  	}
+--- 11489,11495 ----
+  
+  	    c = *end;
+  	    *end = NUL;
+! 	    match_add(curwin, g, p + 1, 10, id, NULL);
+  	    vim_free(g);
+  	    *end = c;
+  	}
+*** ../vim-7.4.329/src/proto/window.pro	2013-08-14 17:11:14.000000000 +0200
+--- src/proto/window.pro	2014-06-17 14:06:44.844124966 +0200
+***************
+*** 75,81 ****
+  void switch_buffer __ARGS((buf_T **save_curbuf, buf_T *buf));
+  void restore_buffer __ARGS((buf_T *save_curbuf));
+  int win_hasvertsplit __ARGS((void));
+! int match_add __ARGS((win_T *wp, char_u *grp, char_u *pat, int prio, int id));
+  int match_delete __ARGS((win_T *wp, int id, int perr));
+  void clear_matches __ARGS((win_T *wp));
+  matchitem_T *get_match __ARGS((win_T *wp, int id));
+--- 75,81 ----
+  void switch_buffer __ARGS((buf_T **save_curbuf, buf_T *buf));
+  void restore_buffer __ARGS((buf_T *save_curbuf));
+  int win_hasvertsplit __ARGS((void));
+! int match_add __ARGS((win_T *wp, char_u *grp, char_u *pat, int prio, int id, list_T *pos));
+  int match_delete __ARGS((win_T *wp, int id, int perr));
+  void clear_matches __ARGS((win_T *wp));
+  matchitem_T *get_match __ARGS((win_T *wp, int id));
+*** ../vim-7.4.329/src/screen.c	2014-05-28 21:40:47.092329130 +0200
+--- src/screen.c	2014-06-17 17:04:08.064527614 +0200
+***************
+*** 144,150 ****
+  static void end_search_hl __ARGS((void));
+  static void init_search_hl __ARGS((win_T *wp));
+  static void prepare_search_hl __ARGS((win_T *wp, linenr_T lnum));
+! static void next_search_hl __ARGS((win_T *win, match_T *shl, linenr_T lnum, colnr_T mincol));
+  #endif
+  static void screen_start_highlight __ARGS((int attr));
+  static void screen_char __ARGS((unsigned off, int row, int col));
+--- 144,151 ----
+  static void end_search_hl __ARGS((void));
+  static void init_search_hl __ARGS((win_T *wp));
+  static void prepare_search_hl __ARGS((win_T *wp, linenr_T lnum));
+! static void next_search_hl __ARGS((win_T *win, match_T *shl, linenr_T lnum, colnr_T mincol, matchitem_T *cur));
+! static int next_search_hl_pos __ARGS((match_T *shl, linenr_T lnum, posmatch_T *pos, colnr_T mincol));
+  #endif
+  static void screen_start_highlight __ARGS((int attr));
+  static void screen_char __ARGS((unsigned off, int row, int col));
+***************
+*** 2929,2934 ****
+--- 2930,2937 ----
+      match_T	*shl;			/* points to search_hl or a match */
+      int		shl_flag;		/* flag to indicate whether search_hl
+  					   has been processed or not */
++     int		pos_inprogress;		/* marks that position match search is
++ 					   in progress */
+      int		prevcol_hl_flag;	/* flag to indicate whether prevcol
+  					   equals startcol of search_hl or one
+  					   of the matches */
+***************
+*** 3439,3482 ****
+  	shl->startcol = MAXCOL;
+  	shl->endcol = MAXCOL;
+  	shl->attr_cur = 0;
+! 	if (shl->rm.regprog != NULL)
+! 	{
+! 	    v = (long)(ptr - line);
+! 	    next_search_hl(wp, shl, lnum, (colnr_T)v);
+! 
+! 	    /* Need to get the line again, a multi-line regexp may have made it
+! 	     * invalid. */
+! 	    line = ml_get_buf(wp->w_buffer, lnum, FALSE);
+! 	    ptr = line + v;
+  
+! 	    if (shl->lnum != 0 && shl->lnum <= lnum)
+  	    {
+- 		if (shl->lnum == lnum)
+- 		    shl->startcol = shl->rm.startpos[0].col;
+- 		else
+- 		    shl->startcol = 0;
+- 		if (lnum == shl->lnum + shl->rm.endpos[0].lnum
+- 						  - shl->rm.startpos[0].lnum)
+- 		    shl->endcol = shl->rm.endpos[0].col;
+- 		else
+- 		    shl->endcol = MAXCOL;
+- 		/* Highlight one character for an empty match. */
+- 		if (shl->startcol == shl->endcol)
+- 		{
+  #ifdef FEAT_MBYTE
+! 		    if (has_mbyte && line[shl->endcol] != NUL)
+! 			shl->endcol += (*mb_ptr2len)(line + shl->endcol);
+! 		    else
+  #endif
+! 			++shl->endcol;
+! 		}
+! 		if ((long)shl->startcol < v)  /* match at leftcol */
+! 		{
+! 		    shl->attr_cur = shl->attr;
+! 		    search_attr = shl->attr;
+! 		}
+! 		area_highlighting = TRUE;
+  	    }
+  	}
+  	if (shl != &search_hl && cur != NULL)
+  	    cur = cur->next;
+--- 3442,3484 ----
+  	shl->startcol = MAXCOL;
+  	shl->endcol = MAXCOL;
+  	shl->attr_cur = 0;
+! 	v = (long)(ptr - line);
+! 	if (cur != NULL)
+! 	    cur->pos.cur = 0;
+! 	next_search_hl(wp, shl, lnum, (colnr_T)v, cur);
+! 
+! 	/* Need to get the line again, a multi-line regexp may have made it
+! 	 * invalid. */
+! 	line = ml_get_buf(wp->w_buffer, lnum, FALSE);
+! 	ptr = line + v;
+  
+! 	if (shl->lnum != 0 && shl->lnum <= lnum)
+! 	{
+! 	    if (shl->lnum == lnum)
+! 		shl->startcol = shl->rm.startpos[0].col;
+! 	    else
+! 		shl->startcol = 0;
+! 	    if (lnum == shl->lnum + shl->rm.endpos[0].lnum
+! 						- shl->rm.startpos[0].lnum)
+! 		shl->endcol = shl->rm.endpos[0].col;
+! 	    else
+! 		shl->endcol = MAXCOL;
+! 	    /* Highlight one character for an empty match. */
+! 	    if (shl->startcol == shl->endcol)
+  	    {
+  #ifdef FEAT_MBYTE
+! 		if (has_mbyte && line[shl->endcol] != NUL)
+! 		    shl->endcol += (*mb_ptr2len)(line + shl->endcol);
+! 		else
+  #endif
+! 		    ++shl->endcol;
+  	    }
++ 	    if ((long)shl->startcol < v)  /* match at leftcol */
++ 	    {
++ 		shl->attr_cur = shl->attr;
++ 		search_attr = shl->attr;
++ 	    }
++ 	    area_highlighting = TRUE;
+  	}
+  	if (shl != &search_hl && cur != NULL)
+  	    cur = cur->next;
+***************
+*** 3488,3494 ****
+       * when Visual mode is active, because it's not clear what is selected
+       * then. */
+      if (wp->w_p_cul && lnum == wp->w_cursor.lnum
+! 					 && !(wp == curwin  && VIsual_active))
+      {
+  	line_attr = hl_attr(HLF_CUL);
+  	area_highlighting = TRUE;
+--- 3490,3496 ----
+       * when Visual mode is active, because it's not clear what is selected
+       * then. */
+      if (wp->w_p_cul && lnum == wp->w_cursor.lnum
+! 					 && !(wp == curwin && VIsual_active))
+      {
+  	line_attr = hl_attr(HLF_CUL);
+  	area_highlighting = TRUE;
+***************
+*** 3792,3798 ****
+  		    }
+  		    else
+  			shl = &cur->hl;
+! 		    while (shl->rm.regprog != NULL)
+  		    {
+  			if (shl->startcol != MAXCOL
+  				&& v >= (long)shl->startcol
+--- 3794,3804 ----
+  		    }
+  		    else
+  			shl = &cur->hl;
+! 		    if (cur != NULL)
+! 			cur->pos.cur = 0;
+! 		    pos_inprogress = TRUE;
+! 		    while (shl->rm.regprog != NULL
+! 					   || (cur != NULL && pos_inprogress))
+  		    {
+  			if (shl->startcol != MAXCOL
+  				&& v >= (long)shl->startcol
+***************
+*** 3803,3810 ****
+  			else if (v == (long)shl->endcol)
+  			{
+  			    shl->attr_cur = 0;
+! 
+! 			    next_search_hl(wp, shl, lnum, (colnr_T)v);
+  
+  			    /* Need to get the line again, a multi-line regexp
+  			     * may have made it invalid. */
+--- 3809,3817 ----
+  			else if (v == (long)shl->endcol)
+  			{
+  			    shl->attr_cur = 0;
+! 			    next_search_hl(wp, shl, lnum, (colnr_T)v, cur);
+! 			    pos_inprogress = cur == NULL || cur->pos.cur == 0
+! 							      ? FALSE : TRUE;
+  
+  			    /* Need to get the line again, a multi-line regexp
+  			     * may have made it invalid. */
+***************
+*** 7277,7282 ****
+--- 7284,7291 ----
+      match_T	*shl;		/* points to search_hl or a match */
+      int		shl_flag;	/* flag to indicate whether search_hl
+  				   has been processed or not */
++     int		pos_inprogress;	/* marks that position match search is
++ 				   in progress */
+      int		n;
+  
+      /*
+***************
+*** 7311,7320 ****
+  		shl->first_lnum = wp->w_topline;
+  # endif
+  	    }
+  	    n = 0;
+! 	    while (shl->first_lnum < lnum && shl->rm.regprog != NULL)
+  	    {
+! 		next_search_hl(wp, shl, shl->first_lnum, (colnr_T)n);
+  		if (shl->lnum != 0)
+  		{
+  		    shl->first_lnum = shl->lnum
+--- 7320,7335 ----
+  		shl->first_lnum = wp->w_topline;
+  # endif
+  	    }
++ 	    if (cur != NULL)
++ 		cur->pos.cur = 0;
++ 	    pos_inprogress = TRUE;
+  	    n = 0;
+! 	    while (shl->first_lnum < lnum && (shl->rm.regprog != NULL
+! 					  || (cur != NULL && pos_inprogress)))
+  	    {
+! 		next_search_hl(wp, shl, shl->first_lnum, (colnr_T)n, cur);
+! 		pos_inprogress = cur == NULL || cur->pos.cur == 0
+! 							      ? FALSE : TRUE;
+  		if (shl->lnum != 0)
+  		{
+  		    shl->first_lnum = shl->lnum
+***************
+*** 7343,7353 ****
+   * Careful: Any pointers for buffer lines will become invalid.
+   */
+      static void
+! next_search_hl(win, shl, lnum, mincol)
+!     win_T	*win;
+!     match_T	*shl;		/* points to search_hl or a match */
+!     linenr_T	lnum;
+!     colnr_T	mincol;		/* minimal column for a match */
+  {
+      linenr_T	l;
+      colnr_T	matchcol;
+--- 7358,7369 ----
+   * Careful: Any pointers for buffer lines will become invalid.
+   */
+      static void
+! next_search_hl(win, shl, lnum, mincol, cur)
+!     win_T	    *win;
+!     match_T	    *shl;	/* points to search_hl or a match */
+!     linenr_T	    lnum;
+!     colnr_T	    mincol;	/* minimal column for a match */
+!     matchitem_T	    *cur;	/* to retrieve match postions if any */
+  {
+      linenr_T	l;
+      colnr_T	matchcol;
+***************
+*** 7415,7440 ****
+  	    matchcol = shl->rm.endpos[0].col;
+  
+  	shl->lnum = lnum;
+! 	nmatched = vim_regexec_multi(&shl->rm, win, shl->buf, lnum, matchcol,
+  #ifdef FEAT_RELTIME
+! 		&(shl->tm)
+  #else
+! 		NULL
+  #endif
+! 		);
+! 	if (called_emsg || got_int)
+! 	{
+! 	    /* Error while handling regexp: stop using this regexp. */
+! 	    if (shl == &search_hl)
+  	    {
+! 		/* don't free regprog in the match list, it's a copy */
+! 		vim_regfree(shl->rm.regprog);
+! 		SET_NO_HLSEARCH(TRUE);
+  	    }
+! 	    shl->rm.regprog = NULL;
+! 	    shl->lnum = 0;
+! 	    got_int = FALSE;  /* avoid the "Type :quit to exit Vim" message */
+! 	    break;
+  	}
+  	if (nmatched == 0)
+  	{
+--- 7431,7465 ----
+  	    matchcol = shl->rm.endpos[0].col;
+  
+  	shl->lnum = lnum;
+! 	if (shl->rm.regprog != NULL)
+! 	{
+! 	    nmatched = vim_regexec_multi(&shl->rm, win, shl->buf, lnum,
+! 		    matchcol,
+  #ifdef FEAT_RELTIME
+! 		    &(shl->tm)
+  #else
+! 		    NULL
+  #endif
+! 		    );
+! 	    if (called_emsg || got_int)
+  	    {
+! 		/* Error while handling regexp: stop using this regexp. */
+! 		if (shl == &search_hl)
+! 		{
+! 		    /* don't free regprog in the match list, it's a copy */
+! 		    vim_regfree(shl->rm.regprog);
+! 		    SET_NO_HLSEARCH(TRUE);
+! 		}
+! 		shl->rm.regprog = NULL;
+! 		shl->lnum = 0;
+! 		got_int = FALSE;  /* avoid the "Type :quit to exit Vim"
+! 				     message */
+! 		break;
+  	    }
+! 	}
+! 	else if (cur != NULL)
+! 	{
+! 	    nmatched = next_search_hl_pos(shl, lnum, &(cur->pos), matchcol);
+  	}
+  	if (nmatched == 0)
+  	{
+***************
+*** 7453,7458 ****
+--- 7478,7539 ----
+  }
+  #endif
+  
++     static int
++ next_search_hl_pos(shl, lnum, posmatch, mincol)
++     match_T	    *shl;	/* points to a match */
++     linenr_T	    lnum;
++     posmatch_T	    *posmatch;	/* match positions */
++     colnr_T	    mincol;	/* minimal column for a match */
++ {
++     int	    i;
++     int     bot = -1;
++ 
++     shl->lnum = 0;
++     for (i = posmatch->cur; i < MAXPOSMATCH; i++)
++     {
++ 	if (posmatch->pos[i].lnum == 0)
++ 	    break;
++ 	if (posmatch->pos[i].col < mincol)
++ 	    continue;
++ 	if (posmatch->pos[i].lnum == lnum)
++ 	{
++ 	    if (shl->lnum == lnum)
++ 	    {
++ 		/* partially sort positions by column numbers
++ 		 * on the same line */
++ 		if (posmatch->pos[i].col < posmatch->pos[bot].col)
++ 		{
++ 		    llpos_T	tmp = posmatch->pos[i];
++ 
++ 		    posmatch->pos[i] = posmatch->pos[bot];
++ 		    posmatch->pos[bot] = tmp;
++ 		}
++ 	    }
++ 	    else
++ 	    {
++ 		bot = i;
++ 		shl->lnum = lnum;
++ 	    }
++ 	}
++     }
++     posmatch->cur = 0;
++     if (shl->lnum == lnum)
++     {
++ 	colnr_T	start = posmatch->pos[bot].col == 0
++ 					     ? 0 : posmatch->pos[bot].col - 1;
++ 	colnr_T	end = posmatch->pos[bot].col == 0
++ 				    ? MAXCOL : start + posmatch->pos[bot].len;
++ 
++ 	shl->rm.startpos[0].lnum = 0;
++ 	shl->rm.startpos[0].col = start;
++ 	shl->rm.endpos[0].lnum = 0;
++ 	shl->rm.endpos[0].col = end;
++ 	posmatch->cur = bot + 1;
++ 	return TRUE;
++     }
++     return FALSE;
++ }
++ 
+        static void
+  screen_start_highlight(attr)
+        int	attr;
+*** ../vim-7.4.329/src/structs.h	2014-05-28 18:22:37.876225054 +0200
+--- src/structs.h	2014-06-17 17:00:55.524520330 +0200
+***************
+*** 1927,1932 ****
+--- 1927,1958 ----
+  #endif
+  } match_T;
+  
++ /* number of positions supported by matchaddpos() */
++ #define MAXPOSMATCH 8
++ 
++ /*
++  * Same as lpos_T, but with additional field len.
++  */
++ typedef struct
++ {
++     linenr_T	lnum;	/* line number */
++     colnr_T	col;	/* column number */
++     int		len;	/* length: 0 - to the end of line */
++ } llpos_T;
++ 
++ /*
++  * posmatch_T provides an array for storing match items for matchaddpos()
++  * function.
++  */
++ typedef struct posmatch posmatch_T;
++ struct posmatch
++ {
++     llpos_T	pos[MAXPOSMATCH];	/* array of positions */
++     int		cur;			/* internal position counter */
++     linenr_T	toplnum;		/* top buffer line */
++     linenr_T	botlnum;		/* bottom buffer line */
++ };
++ 
+  /*
+   * matchitem_T provides a linked list for storing match items for ":match" and
+   * the match functions.
+***************
+*** 1940,1945 ****
+--- 1966,1972 ----
+      char_u	*pattern;   /* pattern to highlight */
+      int		hlg_id;	    /* highlight group ID */
+      regmmatch_T	match;	    /* regexp program for pattern */
++     posmatch_T	pos;	    /* position matches */
+      match_T	hl;	    /* struct for doing the actual highlighting */
+  };
+  
+*** ../vim-7.4.329/src/testdir/test63.in	2010-05-15 13:04:10.000000000 +0200
+--- src/testdir/test63.in	2014-06-17 16:29:36.056449227 +0200
+***************
+*** 1,5 ****
+  Test for ":match", ":2match", ":3match", "clearmatches()", "getmatches()",
+! "matchadd()", "matcharg()", "matchdelete()", and "setmatches()".
+  
+  STARTTEST
+  :so small.vim
+--- 1,5 ----
+  Test for ":match", ":2match", ":3match", "clearmatches()", "getmatches()",
+! "matchadd()", "matchaddpos", "matcharg()", "matchdelete()", and "setmatches()".
+  
+  STARTTEST
+  :so small.vim
+***************
+*** 147,155 ****
+  :unlet rf1
+  :unlet rf2
+  :unlet rf3
+! :highlight clear MyGroup1
+! :highlight clear MyGroup2
+! :highlight clear MyGroup3
+  G"rp
+  :/^Results/,$wq! test.out
+  ENDTEST
+--- 147,172 ----
+  :unlet rf1
+  :unlet rf2
+  :unlet rf3
+! :" --- Check that "matchaddpos()" positions matches correctly
+! :let @r .= "*** Test 11:\n"
+! :set nolazyredraw
+! :call setline(1, 'abcdefghijklmnopq')
+! :call matchaddpos("MyGroup1", [[1, 5], [1, 8, 3]], 10, 3)
+! :1
+! :redraw!
+! :let v1 = screenattr(1, 1)
+! :let v5 = screenattr(1, 5)
+! :let v6 = screenattr(1, 6)
+! :let v8 = screenattr(1, 8)
+! :let v10 = screenattr(1, 10)
+! :let v11 = screenattr(1, 11)
+! :let @r .= string(getmatches())."\n"
+! :if v1 != v5 && v6 == v1 && v8 == v5 && v10 == v5 && v11 == v1
+! :  let @r .= "OK\n"
+! :else
+! :  let @r .= "FAILED\n"
+! :endif
+! :call clearmatches()
+  G"rp
+  :/^Results/,$wq! test.out
+  ENDTEST
+*** ../vim-7.4.329/src/testdir/test63.ok	2010-05-15 13:04:10.000000000 +0200
+--- src/testdir/test63.ok	2014-06-17 17:32:57.036593023 +0200
+***************
+*** 9,11 ****
+--- 9,14 ----
+  *** Test 8: OK
+  *** Test 9: OK
+  *** Test 10: OK
++ *** Test 11:
++ [{'group': 'MyGroup1', 'id': 3, 'priority': 10, 'pos1': [1, 5, 1], 'pos2': [1, 8, 3]}]
++ OK
+*** ../vim-7.4.329/src/window.c	2014-06-17 13:52:35.868092848 +0200
+--- src/window.c	2014-06-17 17:04:51.060529240 +0200
+***************
+*** 6751,6770 ****
+   * Return ID of added match, -1 on failure.
+   */
+      int
+! match_add(wp, grp, pat, prio, id)
+      win_T	*wp;
+      char_u	*grp;
+      char_u	*pat;
+      int		prio;
+      int		id;
+  {
+!     matchitem_T *cur;
+!     matchitem_T *prev;
+!     matchitem_T *m;
+      int		hlg_id;
+!     regprog_T	*regprog;
+  
+!     if (*grp == NUL || *pat == NUL)
+  	return -1;
+      if (id < -1 || id == 0)
+      {
+--- 6751,6772 ----
+   * Return ID of added match, -1 on failure.
+   */
+      int
+! match_add(wp, grp, pat, prio, id, pos_list)
+      win_T	*wp;
+      char_u	*grp;
+      char_u	*pat;
+      int		prio;
+      int		id;
++     list_T	*pos_list;
+  {
+!     matchitem_T	*cur;
+!     matchitem_T	*prev;
+!     matchitem_T	*m;
+      int		hlg_id;
+!     regprog_T	*regprog = NULL;
+!     int		rtype = SOME_VALID;
+  
+!     if (*grp == NUL || (pat != NULL && *pat == NUL))
+  	return -1;
+      if (id < -1 || id == 0)
+      {
+***************
+*** 6789,6795 ****
+  	EMSG2(_(e_nogroup), grp);
+  	return -1;
+      }
+!     if ((regprog = vim_regcomp(pat, RE_MAGIC)) == NULL)
+      {
+  	EMSG2(_(e_invarg2), pat);
+  	return -1;
+--- 6791,6797 ----
+  	EMSG2(_(e_nogroup), grp);
+  	return -1;
+      }
+!     if (pat != NULL && (regprog = vim_regcomp(pat, RE_MAGIC)) == NULL)
+      {
+  	EMSG2(_(e_invarg2), pat);
+  	return -1;
+***************
+*** 6810,6821 ****
+      m = (matchitem_T *)alloc(sizeof(matchitem_T));
+      m->id = id;
+      m->priority = prio;
+!     m->pattern = vim_strsave(pat);
+      m->hlg_id = hlg_id;
+      m->match.regprog = regprog;
+      m->match.rmm_ic = FALSE;
+      m->match.rmm_maxcol = 0;
+  
+      /* Insert new match.  The match list is in ascending order with regard to
+       * the match priorities. */
+      cur = wp->w_match_head;
+--- 6812,6922 ----
+      m = (matchitem_T *)alloc(sizeof(matchitem_T));
+      m->id = id;
+      m->priority = prio;
+!     m->pattern = pat == NULL ? NULL : vim_strsave(pat);
+!     m->pos.cur = 0;
+      m->hlg_id = hlg_id;
+      m->match.regprog = regprog;
+      m->match.rmm_ic = FALSE;
+      m->match.rmm_maxcol = 0;
+  
++     /* Set up position matches */
++     if (pos_list != NULL)
++     {
++ 	linenr_T	toplnum = 0;
++ 	linenr_T	botlnum = 0;
++ 	listitem_T	*li;
++ 	int		i;
++ 
++ 	for (i = 0, li = pos_list->lv_first; i < MAXPOSMATCH;
++ 							i++, li = li->li_next)
++ 	{
++ 	    linenr_T	lnum = 0;
++ 	    colnr_T	col = 0;
++ 	    int		len = 1;
++ 	    list_T	*subl;
++ 	    listitem_T	*subli;
++ 	    int		error;
++ 
++ 	    if (li == NULL)
++ 	    {
++ 		m->pos.pos[i].lnum = 0;
++ 		break;
++ 	    }
++ 	    if (li->li_tv.v_type == VAR_LIST)
++ 	    {
++ 		subl = li->li_tv.vval.v_list;
++ 		if (subl == NULL)
++ 		    goto fail;
++ 		subli = subl->lv_first;
++ 		if (subli == NULL)
++ 		    goto fail;
++ 		lnum = get_tv_number_chk(&subli->li_tv, &error);
++ 		if (error == TRUE)
++ 		    goto fail;
++ 		m->pos.pos[i].lnum = lnum;
++ 		if (lnum == 0)
++ 		{
++ 		    --i;
++ 		    continue;
++ 		}
++ 		subli = subli->li_next;
++ 		if (subli != NULL)
++ 		{
++ 		    col = get_tv_number_chk(&subli->li_tv, &error);
++ 		    if (error == TRUE)
++ 			goto fail;
++ 		    subli = subli->li_next;
++ 		    if (subli != NULL)
++ 		    {
++ 			len = get_tv_number_chk(&subli->li_tv, &error);
++ 			if (error == TRUE)
++ 			    goto fail;
++ 		    }
++ 		}
++ 		m->pos.pos[i].col = col;
++ 		m->pos.pos[i].len = len;
++ 	    }
++ 	    else if (li->li_tv.v_type == VAR_NUMBER)
++ 	    {
++ 		if (li->li_tv.vval.v_number == 0)
++ 		    continue;
++ 		m->pos.pos[i].lnum = li->li_tv.vval.v_number;
++ 		m->pos.pos[i].col = 0;
++ 		m->pos.pos[i].len = 0;
++ 	    }
++ 	    else
++ 	    {
++ 		EMSG(_("List or number required"));
++ 		goto fail;
++ 	    }
++ 	    if (toplnum == 0 || lnum < toplnum)
++ 		toplnum = lnum;
++ 	    if (botlnum == 0 || lnum > botlnum)
++ 		botlnum = lnum;
++ 	}
++ 
++ 	/* Calculate top and bottom lines for redrawing area */
++ 	if (toplnum != 0)
++ 	{
++ 	    if (wp->w_buffer->b_mod_set)
++ 	    {
++ 		if (wp->w_buffer->b_mod_top > toplnum)
++ 		    wp->w_buffer->b_mod_top = toplnum;
++ 		if (wp->w_buffer->b_mod_bot < botlnum)
++ 		    wp->w_buffer->b_mod_bot = botlnum;
++ 	    }
++ 	    else
++ 	    {
++ 		wp->w_buffer->b_mod_top = toplnum;
++ 		wp->w_buffer->b_mod_bot = botlnum;
++ 	    }
++ 	    m->pos.toplnum = toplnum;
++ 	    m->pos.botlnum = botlnum;
++ 	    wp->w_buffer->b_mod_set = TRUE;
++ 	    rtype = VALID;
++ 	}
++     }
++ 
+      /* Insert new match.  The match list is in ascending order with regard to
+       * the match priorities. */
+      cur = wp->w_match_head;
+***************
+*** 6831,6838 ****
+  	prev->next = m;
+      m->next = cur;
+  
+!     redraw_later(SOME_VALID);
+      return id;
+  }
+  
+  /*
+--- 6932,6943 ----
+  	prev->next = m;
+      m->next = cur;
+  
+!     redraw_later(rtype);
+      return id;
++ 
++ fail:
++     vim_free(m);
++     return -1;
+  }
+  
+  /*
+***************
+*** 6845,6852 ****
+      int		id;
+      int		perr;
+  {
+!     matchitem_T *cur = wp->w_match_head;
+!     matchitem_T *prev = cur;
+  
+      if (id < 1)
+      {
+--- 6950,6958 ----
+      int		id;
+      int		perr;
+  {
+!     matchitem_T	*cur = wp->w_match_head;
+!     matchitem_T	*prev = cur;
+!     int		rtype = SOME_VALID;
+  
+      if (id < 1)
+      {
+***************
+*** 6872,6879 ****
+  	prev->next = cur->next;
+      vim_regfree(cur->match.regprog);
+      vim_free(cur->pattern);
+      vim_free(cur);
+!     redraw_later(SOME_VALID);
+      return 0;
+  }
+  
+--- 6978,7002 ----
+  	prev->next = cur->next;
+      vim_regfree(cur->match.regprog);
+      vim_free(cur->pattern);
++     if (cur->pos.toplnum != 0)
++     {
++ 	if (wp->w_buffer->b_mod_set)
++ 	{
++ 	    if (wp->w_buffer->b_mod_top > cur->pos.toplnum)
++ 		wp->w_buffer->b_mod_top = cur->pos.toplnum;
++ 	    if (wp->w_buffer->b_mod_bot < cur->pos.botlnum)
++ 		wp->w_buffer->b_mod_bot = cur->pos.botlnum;
++ 	}
++ 	else
++ 	{
++ 	    wp->w_buffer->b_mod_top = cur->pos.toplnum;
++ 	    wp->w_buffer->b_mod_bot = cur->pos.botlnum;
++ 	}
++ 	wp->w_buffer->b_mod_set = TRUE;
++ 	rtype = VALID;
++     }
+      vim_free(cur);
+!     redraw_later(rtype);
+      return 0;
+  }
+  
+*** ../vim-7.4.329/src/version.c	2014-06-17 13:52:35.868092848 +0200
+--- src/version.c	2014-06-17 14:11:53.764136653 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     330,
+  /**/
+
+-- 
+I'd like to meet the man who invented sex and see what he's working on now.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.331 b/SOURCES/7.4.331
new file mode 100644
index 0000000..d8d526d
--- /dev/null
+++ b/SOURCES/7.4.331
@@ -0,0 +1,47 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.331
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.331
+Problem:    Relative numbering not updated after a linewise yank.  Issue 235.
+Solution:   Redraw after the yank. (Christian Brabandt)
+Files:	    src/ops.c
+
+
+*** ../vim-7.4.330/src/ops.c	2014-04-29 15:55:39.443801021 +0200
+--- src/ops.c	2014-06-17 18:14:36.584687585 +0200
+***************
+*** 3150,3155 ****
+--- 3150,3157 ----
+  	vim_free(y_current->y_array);
+  	y_current = curr;
+      }
++     if (curwin->w_p_rnu)
++ 	redraw_later(SOME_VALID);	/* cursor moved to start */
+      if (mess)			/* Display message about yank? */
+      {
+  	if (yanktype == MCHAR
+*** ../vim-7.4.330/src/version.c	2014-06-17 17:48:21.784628008 +0200
+--- src/version.c	2014-06-17 18:13:35.824685286 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     331,
+  /**/
+
+-- 
+CONCORDE: Message for you, sir.
+   He falls forward revealing the arrow with the note.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.332 b/SOURCES/7.4.332
new file mode 100644
index 0000000..94e04d2
--- /dev/null
+++ b/SOURCES/7.4.332
@@ -0,0 +1,118 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.332
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.332
+Problem:    GTK: When a sign icon doesn't fit exactly there can be ugly gaps.
+Solution:   Scale the sign to fit when the aspect ratio is not too far off.
+	    (Christian Brabandt)
+Files:	    src/gui_gtk_x11.c
+
+
+*** ../vim-7.4.331/src/gui_gtk_x11.c	2014-05-13 20:19:53.573808877 +0200
+--- src/gui_gtk_x11.c	2014-06-17 18:44:39.900755807 +0200
+***************
+*** 5965,5991 ****
+  	 * Decide whether we need to scale.  Allow one pixel of border
+  	 * width to be cut off, in order to avoid excessive scaling for
+  	 * tiny differences in font size.
+  	 */
+  	need_scale = (width > SIGN_WIDTH + 2
+! 		      || height > SIGN_HEIGHT + 2
+  		      || (width < 3 * SIGN_WIDTH / 4
+  			  && height < 3 * SIGN_HEIGHT / 4));
+  	if (need_scale)
+  	{
+! 	    double aspect;
+  
+  	    /* Keep the original aspect ratio */
+  	    aspect = (double)height / (double)width;
+  	    width  = (double)SIGN_WIDTH * SIGN_ASPECT / aspect;
+  	    width  = MIN(width, SIGN_WIDTH);
+! 	    height = (double)width * aspect;
+  
+! 	    /* This doesn't seem to be worth caching, and doing so
+! 	     * would complicate the code quite a bit. */
+! 	    sign = gdk_pixbuf_scale_simple(sign, width, height,
+! 					   GDK_INTERP_BILINEAR);
+! 	    if (sign == NULL)
+! 		return; /* out of memory */
+  	}
+  
+  	/* The origin is the upper-left corner of the pixmap.  Therefore
+--- 5965,6012 ----
+  	 * Decide whether we need to scale.  Allow one pixel of border
+  	 * width to be cut off, in order to avoid excessive scaling for
+  	 * tiny differences in font size.
++ 	 * Do scale to fit the height to avoid gaps because of linespacing.
+  	 */
+  	need_scale = (width > SIGN_WIDTH + 2
+! 		      || height != SIGN_HEIGHT
+  		      || (width < 3 * SIGN_WIDTH / 4
+  			  && height < 3 * SIGN_HEIGHT / 4));
+  	if (need_scale)
+  	{
+! 	    double  aspect;
+! 	    int	    w = width;
+! 	    int	    h = height;
+  
+  	    /* Keep the original aspect ratio */
+  	    aspect = (double)height / (double)width;
+  	    width  = (double)SIGN_WIDTH * SIGN_ASPECT / aspect;
+  	    width  = MIN(width, SIGN_WIDTH);
+! 	    if (((double)(MAX(height, SIGN_HEIGHT)) /
+! 		 (double)(MIN(height, SIGN_HEIGHT))) < 1.15)
+! 	    {
+! 		/* Change the aspect ratio by at most 15% to fill the
+! 		 * available space completly. */
+! 		height = (double)SIGN_HEIGHT * SIGN_ASPECT / aspect;
+! 		height = MIN(height, SIGN_HEIGHT);
+! 	    }
+! 	    else
+! 		height = (double)width * aspect;
+  
+! 	    if (w == width && h == height)
+! 	    {
+! 		/* no change in dimensions; don't decrease reference counter
+! 		 * (below) */
+! 		need_scale = FALSE;
+! 	    }
+! 	    else
+! 	    {
+! 		/* This doesn't seem to be worth caching, and doing so would
+! 		 * complicate the code quite a bit. */
+! 		sign = gdk_pixbuf_scale_simple(sign, width, height,
+! 							 GDK_INTERP_BILINEAR);
+! 		if (sign == NULL)
+! 		    return; /* out of memory */
+! 	    }
+  	}
+  
+  	/* The origin is the upper-left corner of the pixmap.  Therefore
+*** ../vim-7.4.331/src/version.c	2014-06-17 18:16:08.420691059 +0200
+--- src/version.c	2014-06-17 18:46:49.784760721 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     332,
+  /**/
+
+-- 
+       "To whoever finds this note -
+       I have been imprisoned by my father who wishes me to marry
+       against my will.  Please please please please come and rescue me.
+       I am in the tall tower of Swamp Castle."
+   SIR LAUNCELOT's eyes light up with holy inspiration.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.333 b/SOURCES/7.4.333
new file mode 100644
index 0000000..d0b6171
--- /dev/null
+++ b/SOURCES/7.4.333
@@ -0,0 +1,72 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.333
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.333
+Problem:    Compiler warning for unused function.
+Solution:   Put the function inside the #ifdef.
+Files:	    src/screen.c
+
+
+*** ../vim-7.4.332/src/screen.c	2014-06-17 17:48:21.784628008 +0200
+--- src/screen.c	2014-06-17 23:16:24.121372619 +0200
+***************
+*** 139,145 ****
+  static void redraw_custom_statusline __ARGS((win_T *wp));
+  #endif
+  #ifdef FEAT_SEARCH_EXTRA
+! #define SEARCH_HL_PRIORITY 0
+  static void start_search_hl __ARGS((void));
+  static void end_search_hl __ARGS((void));
+  static void init_search_hl __ARGS((win_T *wp));
+--- 139,145 ----
+  static void redraw_custom_statusline __ARGS((win_T *wp));
+  #endif
+  #ifdef FEAT_SEARCH_EXTRA
+! # define SEARCH_HL_PRIORITY 0
+  static void start_search_hl __ARGS((void));
+  static void end_search_hl __ARGS((void));
+  static void init_search_hl __ARGS((win_T *wp));
+***************
+*** 7476,7482 ****
+  	}
+      }
+  }
+- #endif
+  
+      static int
+  next_search_hl_pos(shl, lnum, posmatch, mincol)
+--- 7476,7481 ----
+***************
+*** 7533,7538 ****
+--- 7532,7538 ----
+      }
+      return FALSE;
+  }
++ #endif
+  
+        static void
+  screen_start_highlight(attr)
+*** ../vim-7.4.332/src/version.c	2014-06-17 18:46:57.880761027 +0200
+--- src/version.c	2014-06-17 23:17:14.949374542 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     333,
+  /**/
+
+-- 
+You had connectors?  Eeee, when I were a lad we 'ad to carry the
+bits between the computer and the terminal with a spoon...
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.334 b/SOURCES/7.4.334
new file mode 100644
index 0000000..4f72bb2
--- /dev/null
+++ b/SOURCES/7.4.334
@@ -0,0 +1,112 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.334
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.334 (after 7.4.330)
+Problem:    Unitialized variables, causing some problems.
+Solution:   Initialize the variables. (Dominique Pelle)
+Files:	    src/screen.c, src/window.c
+
+
+*** ../vim-7.4.333/src/screen.c	2014-06-17 23:17:56.489376113 +0200
+--- src/screen.c	2014-06-18 21:16:23.560368846 +0200
+***************
+*** 7363,7369 ****
+      match_T	    *shl;	/* points to search_hl or a match */
+      linenr_T	    lnum;
+      colnr_T	    mincol;	/* minimal column for a match */
+!     matchitem_T	    *cur;	/* to retrieve match postions if any */
+  {
+      linenr_T	l;
+      colnr_T	matchcol;
+--- 7363,7369 ----
+      match_T	    *shl;	/* points to search_hl or a match */
+      linenr_T	    lnum;
+      colnr_T	    mincol;	/* minimal column for a match */
+!     matchitem_T	    *cur;	/* to retrieve match positions if any */
+  {
+      linenr_T	l;
+      colnr_T	matchcol;
+***************
+*** 7458,7466 ****
+  	    }
+  	}
+  	else if (cur != NULL)
+- 	{
+  	    nmatched = next_search_hl_pos(shl, lnum, &(cur->pos), matchcol);
+! 	}
+  	if (nmatched == 0)
+  	{
+  	    shl->lnum = 0;		/* no match found */
+--- 7458,7466 ----
+  	    }
+  	}
+  	else if (cur != NULL)
+  	    nmatched = next_search_hl_pos(shl, lnum, &(cur->pos), matchcol);
+! 	else
+! 	    nmatched = 0;
+  	if (nmatched == 0)
+  	{
+  	    shl->lnum = 0;		/* no match found */
+*** ../vim-7.4.333/src/window.c	2014-06-17 17:48:21.784628008 +0200
+--- src/window.c	2014-06-18 21:12:15.232359452 +0200
+***************
+*** 6809,6815 ****
+      }
+  
+      /* Build new match. */
+!     m = (matchitem_T *)alloc(sizeof(matchitem_T));
+      m->id = id;
+      m->priority = prio;
+      m->pattern = pat == NULL ? NULL : vim_strsave(pat);
+--- 6809,6815 ----
+      }
+  
+      /* Build new match. */
+!     m = (matchitem_T *)alloc_clear(sizeof(matchitem_T));
+      m->id = id;
+      m->priority = prio;
+      m->pattern = pat == NULL ? NULL : vim_strsave(pat);
+***************
+*** 6835,6841 ****
+  	    int		len = 1;
+  	    list_T	*subl;
+  	    listitem_T	*subli;
+! 	    int		error;
+  
+  	    if (li == NULL)
+  	    {
+--- 6835,6841 ----
+  	    int		len = 1;
+  	    list_T	*subl;
+  	    listitem_T	*subli;
+! 	    int		error = FALSE;
+  
+  	    if (li == NULL)
+  	    {
+*** ../vim-7.4.333/src/version.c	2014-06-17 23:17:56.493376113 +0200
+--- src/version.c	2014-06-18 21:14:16.516364040 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     334,
+  /**/
+
+-- 
+You were lucky. We lived for three months in a brown paper bag in a 
+septic tank. We used to have to get up at six o'clock in the morning, 
+clean the bag, eat a crust of stale bread, go to work down mill for 
+fourteen hours a day week in-week out. When we got home, our Dad
+would thrash us to sleep with his belt!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.335 b/SOURCES/7.4.335
new file mode 100644
index 0000000..ef41bc8
--- /dev/null
+++ b/SOURCES/7.4.335
@@ -0,0 +1,108 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.335
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.335
+Problem:    No digraph for the new rouble sign.
+Solution:   Add the digraphs =R and =P.
+Files:	    src/digraph.c, runtime/doc/digraph.txt
+
+
+*** ../vim-7.4.334/src/digraph.c	2012-01-10 21:57:16.000000000 +0100
+--- src/digraph.c	2014-06-18 21:36:46.148415099 +0200
+***************
+*** 1425,1430 ****
+--- 1425,1432 ----
+  	{'W', '=', 0x20a9},
+  	{'=', 'e', 0x20ac}, /* euro */
+  	{'E', 'u', 0x20ac}, /* euro */
++ 	{'=', 'R', 0x20bd}, /* rouble */
++ 	{'=', 'P', 0x20bd}, /* rouble */
+  	{'o', 'C', 0x2103},
+  	{'c', 'o', 0x2105},
+  	{'o', 'F', 0x2109},
+*** ../vim-7.4.334/runtime/doc/digraph.txt	2013-08-10 13:24:52.000000000 +0200
+--- runtime/doc/digraph.txt	2014-06-18 21:35:21.684411903 +0200
+***************
+*** 147,153 ****
+  	Two			2	Hook
+  	Nine			9	Horn
+  
+! 	Equals			=	Cyrillic
+  	Asterisk		*	Greek
+  	Percent sign		%	Greek/Cyrillic special
+  	Plus			+	smalls: Arabic, capitals: Hebrew
+--- 147,153 ----
+  	Two			2	Hook
+  	Nine			9	Horn
+  
+! 	Equals			=	Cyrillic (= used as second char) 
+  	Asterisk		*	Greek
+  	Percent sign		%	Greek/Cyrillic special
+  	Plus			+	smalls: Arabic, capitals: Hebrew
+***************
+*** 170,175 ****
+--- 170,180 ----
+  used for the euro sign, while both of them are the character 164, 0xa4.  For
+  compatibility with zsh Eu can also be used for the euro sign.
+  
++ ROUBLE
++ 
++ The rouble sign was added in 2014 as 0x20bd.  Vim supports the digraphs =R and
++ =P for this.  Note that R= and P= are other characters.
++ 
+  							*digraph-table*
+  char  digraph	hex	dec	official name ~
+  ^@	NU	0x00	  0	NULL (NUL)
+***************
+*** 966,971 ****
+--- 971,978 ----
+  ₧	Pt	20A7	8359	PESETA SIGN
+  ₩	W=	20A9	8361	WON SIGN
+  €	Eu	20AC	8364	EURO SIGN
++ ₽	=R	20AC	8381	ROUBLE SIGN
++ ₽	=P	20AC	8381	ROUBLE SIGN
+  ℃	oC	2103	8451	DEGREE CELSIUS
+  ℅	co	2105	8453	CARE OF
+  ℉	oF	2109	8457	DEGREE FAHRENHEIT
+***************
+*** 1077,1083 ****
+  ⊥	-T	22A5	8869	UP TACK
+  ⋅	.P	22C5	8901	DOT OPERATOR
+  ⋮	:3	22EE	8942	VERTICAL ELLIPSIS
+! ⋯       .3      22EF    8943    MIDLINE HORIZONTAL ELLIPSIS
+  ⌂	Eh	2302	8962	HOUSE
+  ⌈	<7	2308	8968	LEFT CEILING
+  ⌉	>7	2309	8969	RIGHT CEILING
+--- 1084,1090 ----
+  ⊥	-T	22A5	8869	UP TACK
+  ⋅	.P	22C5	8901	DOT OPERATOR
+  ⋮	:3	22EE	8942	VERTICAL ELLIPSIS
+! ⋯	.3	22EF	8943	MIDLINE HORIZONTAL ELLIPSIS
+  ⌂	Eh	2302	8962	HOUSE
+  ⌈	<7	2308	8968	LEFT CEILING
+  ⌉	>7	2309	8969	RIGHT CEILING
+*** ../vim-7.4.334/src/version.c	2014-06-18 21:20:07.240377308 +0200
+--- src/version.c	2014-06-18 21:36:14.632413906 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     335,
+  /**/
+
+-- 
+You got to work at a mill?  Lucky!  I got sent back to work in the
+acid-mines for my daily crust of stale bread... which not even the
+birds would eat.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.336 b/SOURCES/7.4.336
new file mode 100644
index 0000000..6e5fe3f
--- /dev/null
+++ b/SOURCES/7.4.336
@@ -0,0 +1,100 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.336
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.336
+Problem:    Setting 'history' to a big value causes out-of-memory errors.
+Solution:   Limit the value to 10000. (Hirohito Higashi)
+Files:	    runtime/doc/options.txt, src/option.c
+
+
+*** ../vim-7.4.335/runtime/doc/options.txt	2014-05-28 21:40:47.088329130 +0200
+--- runtime/doc/options.txt	2014-06-25 11:44:16.985950668 +0200
+***************
+*** 3920,3931 ****
+  	NOTE: This option is reset when 'compatible' is set.
+  
+  						*'history'* *'hi'*
+! 'history' 'hi'		number	(Vim default: 20, Vi default: 0)
+  			global
+  			{not in Vi}
+  	A history of ":" commands, and a history of previous search patterns
+! 	are remembered.  This option decides how many entries may be stored in
+  	each of these histories (see |cmdline-editing|).
+  	NOTE: This option is set to the Vi default value when 'compatible' is
+  	set and to the Vim default value when 'compatible' is reset.
+  
+--- 3920,3932 ----
+  	NOTE: This option is reset when 'compatible' is set.
+  
+  						*'history'* *'hi'*
+! 'history' 'hi'		number	(Vim default: 50, Vi default: 0)
+  			global
+  			{not in Vi}
+  	A history of ":" commands, and a history of previous search patterns
+! 	is remembered.  This option decides how many entries may be stored in
+  	each of these histories (see |cmdline-editing|).
++ 	The maximum value is 10000.
+  	NOTE: This option is set to the Vi default value when 'compatible' is
+  	set and to the Vim default value when 'compatible' is reset.
+  
+*** ../vim-7.4.335/src/option.c	2014-05-13 12:16:44.037555110 +0200
+--- src/option.c	2014-06-25 11:44:48.349951855 +0200
+***************
+*** 1392,1398 ****
+  			    SCRIPTID_INIT},
+      {"history",	    "hi",   P_NUM|P_VIM,
+  			    (char_u *)&p_hi, PV_NONE,
+! 			    {(char_u *)0L, (char_u *)20L} SCRIPTID_INIT},
+      {"hkmap",	    "hk",   P_BOOL|P_VI_DEF|P_VIM,
+  #ifdef FEAT_RIGHTLEFT
+  			    (char_u *)&p_hkmap, PV_NONE,
+--- 1392,1398 ----
+  			    SCRIPTID_INIT},
+      {"history",	    "hi",   P_NUM|P_VIM,
+  			    (char_u *)&p_hi, PV_NONE,
+! 			    {(char_u *)0L, (char_u *)50L} SCRIPTID_INIT},
+      {"hkmap",	    "hk",   P_BOOL|P_VI_DEF|P_VIM,
+  #ifdef FEAT_RIGHTLEFT
+  			    (char_u *)&p_hkmap, PV_NONE,
+***************
+*** 8595,8600 ****
+--- 8595,8605 ----
+  	errmsg = e_positive;
+  	p_hi = 0;
+      }
++     else if (p_hi > 10000)
++     {
++ 	errmsg = e_invarg;
++ 	p_hi = 10000;
++     }
+      if (p_re < 0 || p_re > 2)
+      {
+  	errmsg = e_invarg;
+*** ../vim-7.4.335/src/version.c	2014-06-18 21:38:12.216418355 +0200
+--- src/version.c	2014-06-25 11:45:08.141952604 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     336,
+  /**/
+
+-- 
+ARTHUR:    Well, it doesn't matter.  Will you go and tell your master that
+           Arthur from the Court of Camelot is here.
+GUARD #1:  Listen, in order to maintain air-speed velocity, a swallow
+           needs to beat its wings 43 times every second, right?
+ARTHUR:    Please!
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.337 b/SOURCES/7.4.337
new file mode 100644
index 0000000..80b8349
--- /dev/null
+++ b/SOURCES/7.4.337
@@ -0,0 +1,51 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.337
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.337
+Problem:    When there is an error preparing to edit the command line, the
+	    command won't be executed. (Hirohito Higashi)
+Solution:   Reset did_emsg before editing.
+Files:	    src/ex_getln.c
+
+
+*** ../vim-7.4.336/src/ex_getln.c	2014-06-12 19:44:45.324549030 +0200
+--- src/ex_getln.c	2014-06-25 12:06:38.018001402 +0200
+***************
+*** 342,347 ****
+--- 342,354 ----
+      do_digraph(-1);		/* init digraph typeahead */
+  #endif
+  
++     /* If something above caused an error, reset the flags, we do want to type
++      * and execute commands. Display may be messed up a bit. */
++     if (did_emsg)
++ 	redrawcmd();
++     did_emsg = FALSE;
++     got_int = FALSE;
++ 
+      /*
+       * Collect the command string, handling editing keys.
+       */
+*** ../vim-7.4.336/src/version.c	2014-06-25 11:48:40.733960646 +0200
+--- src/version.c	2014-06-25 12:24:39.442042313 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     337,
+  /**/
+
+-- 
+Computers are not intelligent.  They only think they are.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.338 b/SOURCES/7.4.338
new file mode 100644
index 0000000..f533693
--- /dev/null
+++ b/SOURCES/7.4.338
@@ -0,0 +1,1830 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.338
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.338
+Problem:    Cannot wrap lines taking indent into account.
+Solution:   Add the 'breakindent' option. (many authors, final improvements by
+	    Christian Brabandt)
+Files:	    runtime/doc/eval.txt, runtime/doc/options.txt, runtime/optwin.vim,
+	    src/buffer.c, src/charset.c, src/edit.c, src/ex_getln.c,
+	    src/getchar.c, src/misc1.c, src/misc2.c, src/ops.c, src/option.c,
+	    src/option.h, src/proto/charset.pro, src/proto/misc1.pro,
+	    src/proto/option.pro, src/screen.c, src/structs.h,
+	    src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
+	    src/testdir/Make_ming.mak, src/testdir/Make_os2.mak,
+	    src/testdir/Make_vms.mms, src/testdir/Makefile,
+	    src/testdir/test_breakindent.in, src/testdir/test_breakindent.ok,
+	    src/ui.c
+
+
+*** ../vim-7.4.337/runtime/doc/eval.txt	2014-06-17 17:48:21.768628007 +0200
+--- runtime/doc/eval.txt	2014-06-25 12:57:00.986115765 +0200
+***************
+*** 6639,6646 ****
+  keymap			Compiled with 'keymap' support.
+  langmap			Compiled with 'langmap' support.
+  libcall			Compiled with |libcall()| support.
+! linebreak		Compiled with 'linebreak', 'breakat' and 'showbreak'
+! 			support.
+  lispindent		Compiled with support for lisp indenting.
+  listcmds		Compiled with commands for the buffer list |:files|
+  			and the argument list |arglist|.
+--- 6651,6658 ----
+  keymap			Compiled with 'keymap' support.
+  langmap			Compiled with 'langmap' support.
+  libcall			Compiled with |libcall()| support.
+! linebreak		Compiled with 'linebreak', 'breakat', 'showbreak' and
+! 			'breakindent' support.
+  lispindent		Compiled with support for lisp indenting.
+  listcmds		Compiled with commands for the buffer list |:files|
+  			and the argument list |arglist|.
+*** ../vim-7.4.337/runtime/doc/options.txt	2014-06-17 17:48:21.768628007 +0200
+--- runtime/doc/options.txt	2014-06-25 12:57:00.986115765 +0200
+***************
+*** 1200,1205 ****
+--- 1200,1237 ----
+  	break if 'linebreak' is on.  Only works for ASCII and also for 8-bit
+  	characters when 'encoding' is an 8-bit encoding.
+  
++ 						*'breakindent'* *'bri'*
++ 'breakindent' 'bri'	boolean (default off)
++ 			local to window
++ 			{not in Vi}
++ 			{not available when compiled without the |+linebreak|
++ 			feature}
++ 	Every wrapped line will continue visually indented (same amount of
++ 	space as the beginning of that line), thus preserving horizontal blocks
++ 	of text.
++ 
++ 						*'breakindentopt'* *'briopt'*
++ 'breakindentopt' 'briopt' string (default empty)
++ 			local to window
++ 			{not in Vi}
++ 			{not available when compiled without the |+linebreak|
++ 			feature}
++ 	Settings for 'breakindent'. It can consist of the following optional
++ 	items and must be seperated by a comma:
++ 		min:{n}	    Minimum text width that will be kept after
++ 			    applying 'breakindent', even if the resulting
++ 			    text should normally be narrower. This prevents
++ 			    text indented almost to the right window border
++ 			    occupying lot of vertical space when broken.
++ 		shift:{n}   After applying 'breakindent', wrapped line
++ 			    beginning will be shift by given number of
++ 			    characters. It permits dynamic French paragraph
++ 			    indentation (negative) or emphasizing the line
++ 			    continuation (positive).
++ 		sbr	    Display the 'showbreak' value before applying the 
++ 			    additional indent.
++ 	The default value for min is 20 and shift is 0.
++ 
+  						*'browsedir'* *'bsdir'*
+  'browsedir' 'bsdir'	string	(default: "last")
+  			global
+*** ../vim-7.4.337/runtime/optwin.vim	2014-04-01 12:26:40.241157964 +0200
+--- runtime/optwin.vim	2014-06-25 12:57:00.990115765 +0200
+***************
+*** 324,329 ****
+--- 324,335 ----
+  call append("$", "linebreak\twrap long lines at a character in 'breakat'")
+  call append("$", "\t(local to window)")
+  call <SID>BinOptionL("lbr")
++ call append("$", "breakindent\tpreserve indentation in wrapped text")
++ call append("$", "\t(local to window)")
++ call <SID>BinOptionL("bri")
++ call append("$", "breakindentopt\tadjust breakindent behaviour")
++ call append("$", "\t(local to window)")
++ call <SID>OptionL("briopt")
+  call append("$", "breakat\twhich characters might cause a line break")
+  call <SID>OptionG("brk", &brk)
+  call append("$", "showbreak\tstring to put before wrapped screen lines")
+*** ../vim-7.4.337/src/charset.c	2014-03-23 15:12:29.911264336 +0100
+--- src/charset.c	2014-06-25 13:23:05.842174966 +0200
+***************
+*** 867,875 ****
+      char_u	*s;
+  {
+      colnr_T	col = startcol;
+  
+      while (*s != NUL)
+! 	col += lbr_chartabsize_adv(&s, col);
+      return (int)col;
+  }
+  
+--- 867,876 ----
+      char_u	*s;
+  {
+      colnr_T	col = startcol;
++     char_u	*line = s; /* pointer to start of line, for breakindent */
+  
+      while (*s != NUL)
+! 	col += lbr_chartabsize_adv(line, &s, col);
+      return (int)col;
+  }
+  
+***************
+*** 877,892 ****
+   * Like linetabsize(), but for a given window instead of the current one.
+   */
+      int
+! win_linetabsize(wp, p, len)
+      win_T	*wp;
+!     char_u	*p;
+      colnr_T	len;
+  {
+      colnr_T	col = 0;
+      char_u	*s;
+  
+!     for (s = p; *s != NUL && (len == MAXCOL || s < p + len); mb_ptr_adv(s))
+! 	col += win_lbr_chartabsize(wp, s, col, NULL);
+      return (int)col;
+  }
+  
+--- 878,894 ----
+   * Like linetabsize(), but for a given window instead of the current one.
+   */
+      int
+! win_linetabsize(wp, line, len)
+      win_T	*wp;
+!     char_u	*line;
+      colnr_T	len;
+  {
+      colnr_T	col = 0;
+      char_u	*s;
+  
+!     for (s = line; *s != NUL && (len == MAXCOL || s < line + len);
+! 								mb_ptr_adv(s))
+! 	col += win_lbr_chartabsize(wp, line, s, col, NULL);
+      return (int)col;
+  }
+  
+***************
+*** 1021,1032 ****
+   * like chartabsize(), but also check for line breaks on the screen
+   */
+      int
+! lbr_chartabsize(s, col)
+      unsigned char	*s;
+      colnr_T		col;
+  {
+  #ifdef FEAT_LINEBREAK
+!     if (!curwin->w_p_lbr && *p_sbr == NUL)
+      {
+  #endif
+  #ifdef FEAT_MBYTE
+--- 1023,1035 ----
+   * like chartabsize(), but also check for line breaks on the screen
+   */
+      int
+! lbr_chartabsize(line, s, col)
+!     char_u		*line; /* start of the line */
+      unsigned char	*s;
+      colnr_T		col;
+  {
+  #ifdef FEAT_LINEBREAK
+!     if (!curwin->w_p_lbr && *p_sbr == NUL && !curwin->w_p_bri)
+      {
+  #endif
+  #ifdef FEAT_MBYTE
+***************
+*** 1036,1042 ****
+  	RET_WIN_BUF_CHARTABSIZE(curwin, curbuf, s, col)
+  #ifdef FEAT_LINEBREAK
+      }
+!     return win_lbr_chartabsize(curwin, s, col, NULL);
+  #endif
+  }
+  
+--- 1039,1045 ----
+  	RET_WIN_BUF_CHARTABSIZE(curwin, curbuf, s, col)
+  #ifdef FEAT_LINEBREAK
+      }
+!     return win_lbr_chartabsize(curwin, line == NULL ? s : line, s, col, NULL);
+  #endif
+  }
+  
+***************
+*** 1044,1056 ****
+   * Call lbr_chartabsize() and advance the pointer.
+   */
+      int
+! lbr_chartabsize_adv(s, col)
+      char_u	**s;
+      colnr_T	col;
+  {
+      int		retval;
+  
+!     retval = lbr_chartabsize(*s, col);
+      mb_ptr_adv(*s);
+      return retval;
+  }
+--- 1047,1060 ----
+   * Call lbr_chartabsize() and advance the pointer.
+   */
+      int
+! lbr_chartabsize_adv(line, s, col)
+!     char_u	*line; /* start of the line */
+      char_u	**s;
+      colnr_T	col;
+  {
+      int		retval;
+  
+!     retval = lbr_chartabsize(line, *s, col);
+      mb_ptr_adv(*s);
+      return retval;
+  }
+***************
+*** 1063,1070 ****
+   * value, init to 0 before calling.
+   */
+      int
+! win_lbr_chartabsize(wp, s, col, headp)
+      win_T	*wp;
+      char_u	*s;
+      colnr_T	col;
+      int		*headp UNUSED;
+--- 1067,1075 ----
+   * value, init to 0 before calling.
+   */
+      int
+! win_lbr_chartabsize(wp, line, s, col, headp)
+      win_T	*wp;
++     char_u	*line; /* start of the line */
+      char_u	*s;
+      colnr_T	col;
+      int		*headp UNUSED;
+***************
+*** 1086,1094 ****
+      int		n;
+  
+      /*
+!      * No 'linebreak' and 'showbreak': return quickly.
+       */
+!     if (!wp->w_p_lbr && *p_sbr == NUL)
+  #endif
+      {
+  #ifdef FEAT_MBYTE
+--- 1091,1099 ----
+      int		n;
+  
+      /*
+!      * No 'linebreak', 'showbreak' and 'breakindent': return quickly.
+       */
+!     if (!wp->w_p_lbr && !wp->w_p_bri && *p_sbr == NUL)
+  #endif
+      {
+  #ifdef FEAT_MBYTE
+***************
+*** 1163,1173 ****
+  # endif
+  
+      /*
+!      * May have to add something for 'showbreak' string at start of line
+       * Set *headp to the size of what we add.
+       */
+      added = 0;
+!     if (*p_sbr != NUL && wp->w_p_wrap && col != 0)
+      {
+  	numberextra = win_col_off(wp);
+  	col += numberextra + mb_added;
+--- 1168,1179 ----
+  # endif
+  
+      /*
+!      * May have to add something for 'breakindent' and/or 'showbreak'
+!      * string at start of line.
+       * Set *headp to the size of what we add.
+       */
+      added = 0;
+!     if ((*p_sbr != NUL || wp->w_p_bri) && wp->w_p_wrap && col != 0)
+      {
+  	numberextra = win_col_off(wp);
+  	col += numberextra + mb_added;
+***************
+*** 1180,1186 ****
+  	}
+  	if (col == 0 || col + size > (colnr_T)W_WIDTH(wp))
+  	{
+! 	    added = vim_strsize(p_sbr);
+  	    if (tab_corr)
+  		size += (added / wp->w_buffer->b_p_ts) * wp->w_buffer->b_p_ts;
+  	    else
+--- 1186,1197 ----
+  	}
+  	if (col == 0 || col + size > (colnr_T)W_WIDTH(wp))
+  	{
+! 	    added = 0;
+! 	    if (*p_sbr != NUL)
+! 		added += vim_strsize(p_sbr);
+! 	    if (wp->w_p_bri)
+! 		added += get_breakindent_win(wp, line);
+! 
+  	    if (tab_corr)
+  		size += (added / wp->w_buffer->b_p_ts) * wp->w_buffer->b_p_ts;
+  	    else
+***************
+*** 1274,1286 ****
+      colnr_T	vcol;
+      char_u	*ptr;		/* points to current char */
+      char_u	*posptr;	/* points to char at pos->col */
+      int		incr;
+      int		head;
+      int		ts = wp->w_buffer->b_p_ts;
+      int		c;
+  
+      vcol = 0;
+!     ptr = ml_get_buf(wp->w_buffer, pos->lnum, FALSE);
+      if (pos->col == MAXCOL)
+  	posptr = NULL;  /* continue until the NUL */
+      else
+--- 1285,1298 ----
+      colnr_T	vcol;
+      char_u	*ptr;		/* points to current char */
+      char_u	*posptr;	/* points to char at pos->col */
++     char_u	*line;		/* start of the line */
+      int		incr;
+      int		head;
+      int		ts = wp->w_buffer->b_p_ts;
+      int		c;
+  
+      vcol = 0;
+!     line = ptr = ml_get_buf(wp->w_buffer, pos->lnum, FALSE);
+      if (pos->col == MAXCOL)
+  	posptr = NULL;  /* continue until the NUL */
+      else
+***************
+*** 1288,1299 ****
+  
+      /*
+       * This function is used very often, do some speed optimizations.
+!      * When 'list', 'linebreak' and 'showbreak' are not set use a simple loop.
+       * Also use this when 'list' is set but tabs take their normal size.
+       */
+      if ((!wp->w_p_list || lcs_tab1 != NUL)
+  #ifdef FEAT_LINEBREAK
+! 	    && !wp->w_p_lbr && *p_sbr == NUL
+  #endif
+         )
+      {
+--- 1300,1312 ----
+  
+      /*
+       * This function is used very often, do some speed optimizations.
+!      * When 'list', 'linebreak', 'showbreak' and 'breakindent' are not set
+!      * use a simple loop.
+       * Also use this when 'list' is set but tabs take their normal size.
+       */
+      if ((!wp->w_p_list || lcs_tab1 != NUL)
+  #ifdef FEAT_LINEBREAK
+! 	    && !wp->w_p_lbr && *p_sbr == NUL && !wp->w_p_bri
+  #endif
+         )
+      {
+***************
+*** 1355,1361 ****
+  	{
+  	    /* A tab gets expanded, depending on the current column */
+  	    head = 0;
+! 	    incr = win_lbr_chartabsize(wp, ptr, vcol, &head);
+  	    /* make sure we don't go past the end of the line */
+  	    if (*ptr == NUL)
+  	    {
+--- 1368,1374 ----
+  	{
+  	    /* A tab gets expanded, depending on the current column */
+  	    head = 0;
+! 	    incr = win_lbr_chartabsize(wp, line, ptr, vcol, &head);
+  	    /* make sure we don't go past the end of the line */
+  	    if (*ptr == NUL)
+  	    {
+*** ../vim-7.4.337/src/edit.c	2014-05-28 21:40:47.092329130 +0200
+--- src/edit.c	2014-06-25 13:16:43.278160493 +0200
+***************
+*** 1956,1962 ****
+  	    else
+  #endif
+  		++new_cursor_col;
+! 	    vcol += lbr_chartabsize(ptr + new_cursor_col, (colnr_T)vcol);
+  	}
+  	vcol = last_vcol;
+  
+--- 1956,1962 ----
+  	    else
+  #endif
+  		++new_cursor_col;
+! 	    vcol += lbr_chartabsize(ptr, ptr + new_cursor_col, (colnr_T)vcol);
+  	}
+  	vcol = last_vcol;
+  
+***************
+*** 7126,7134 ****
+  	for (;;)
+  	{
+  	    coladvance(v - width);
+! 	    /* getviscol() is slow, skip it when 'showbreak' is empty and
+! 	     * there are no multi-byte characters */
+! 	    if ((*p_sbr == NUL
+  #  ifdef FEAT_MBYTE
+  			&& !has_mbyte
+  #  endif
+--- 7126,7135 ----
+  	for (;;)
+  	{
+  	    coladvance(v - width);
+! 	    /* getviscol() is slow, skip it when 'showbreak' is empty,
+! 	     * 'breakindent' is not set and there are no multi-byte
+! 	     * characters */
+! 	    if ((*p_sbr == NUL && !curwin->w_p_bri
+  #  ifdef FEAT_MBYTE
+  			&& !has_mbyte
+  #  endif
+***************
+*** 9758,9768 ****
+  	getvcol(curwin, &fpos, &vcol, NULL, NULL);
+  	getvcol(curwin, cursor, &want_vcol, NULL, NULL);
+  
+! 	/* Use as many TABs as possible.  Beware of 'showbreak' and
+! 	 * 'linebreak' adding extra virtual columns. */
+  	while (vim_iswhite(*ptr))
+  	{
+! 	    i = lbr_chartabsize((char_u *)"\t", vcol);
+  	    if (vcol + i > want_vcol)
+  		break;
+  	    if (*ptr != TAB)
+--- 9759,9769 ----
+  	getvcol(curwin, &fpos, &vcol, NULL, NULL);
+  	getvcol(curwin, cursor, &want_vcol, NULL, NULL);
+  
+! 	/* Use as many TABs as possible.  Beware of 'breakindent', 'showbreak'
+! 	 * and 'linebreak' adding extra virtual columns. */
+  	while (vim_iswhite(*ptr))
+  	{
+! 	    i = lbr_chartabsize(NULL, (char_u *)"\t", vcol);
+  	    if (vcol + i > want_vcol)
+  		break;
+  	    if (*ptr != TAB)
+***************
+*** 9784,9794 ****
+  	if (change_col >= 0)
+  	{
+  	    int repl_off = 0;
+  
+  	    /* Skip over the spaces we need. */
+  	    while (vcol < want_vcol && *ptr == ' ')
+  	    {
+! 		vcol += lbr_chartabsize(ptr, vcol);
+  		++ptr;
+  		++repl_off;
+  	    }
+--- 9785,9796 ----
+  	if (change_col >= 0)
+  	{
+  	    int repl_off = 0;
++ 	    char_u *line = ptr;
+  
+  	    /* Skip over the spaces we need. */
+  	    while (vcol < want_vcol && *ptr == ' ')
+  	    {
+! 		vcol += lbr_chartabsize(line, ptr, vcol);
+  		++ptr;
+  		++repl_off;
+  	    }
+***************
+*** 10029,10034 ****
+--- 10031,10037 ----
+      int	    c;
+      int	    temp;
+      char_u  *ptr, *prev_ptr;
++     char_u  *line;
+  
+      if (lnum < 1 || lnum > curbuf->b_ml.ml_line_count)
+      {
+***************
+*** 10038,10050 ****
+  
+      /* try to advance to the cursor column */
+      temp = 0;
+!     ptr = ml_get(lnum);
+      prev_ptr = ptr;
+      validate_virtcol();
+      while ((colnr_T)temp < curwin->w_virtcol && *ptr != NUL)
+      {
+  	prev_ptr = ptr;
+! 	temp += lbr_chartabsize_adv(&ptr, (colnr_T)temp);
+      }
+      if ((colnr_T)temp > curwin->w_virtcol)
+  	ptr = prev_ptr;
+--- 10041,10053 ----
+  
+      /* try to advance to the cursor column */
+      temp = 0;
+!     line = ptr = ml_get(lnum);
+      prev_ptr = ptr;
+      validate_virtcol();
+      while ((colnr_T)temp < curwin->w_virtcol && *ptr != NUL)
+      {
+  	prev_ptr = ptr;
+! 	temp += lbr_chartabsize_adv(line, &ptr, (colnr_T)temp);
+      }
+      if ((colnr_T)temp > curwin->w_virtcol)
+  	ptr = prev_ptr;
+*** ../vim-7.4.337/src/ex_getln.c	2014-06-25 12:26:42.230046959 +0200
+--- src/ex_getln.c	2014-06-25 12:57:00.998115765 +0200
+***************
+*** 2302,2311 ****
+  
+  		p = (char_u *)line_ga.ga_data;
+  		p[line_ga.ga_len] = NUL;
+! 		indent = get_indent_str(p, 8);
+  		indent += sw - indent % sw;
+  add_indent:
+! 		while (get_indent_str(p, 8) < indent)
+  		{
+  		    char_u *s = skipwhite(p);
+  
+--- 2302,2311 ----
+  
+  		p = (char_u *)line_ga.ga_data;
+  		p[line_ga.ga_len] = NUL;
+! 		indent = get_indent_str(p, 8, FALSE);
+  		indent += sw - indent % sw;
+  add_indent:
+! 		while (get_indent_str(p, 8, FALSE) < indent)
+  		{
+  		    char_u *s = skipwhite(p);
+  
+***************
+*** 2357,2367 ****
+  		else
+  		{
+  		    p[line_ga.ga_len] = NUL;
+! 		    indent = get_indent_str(p, 8);
+  		    --indent;
+  		    indent -= indent % get_sw_value(curbuf);
+  		}
+! 		while (get_indent_str(p, 8) > indent)
+  		{
+  		    char_u *s = skipwhite(p);
+  
+--- 2357,2367 ----
+  		else
+  		{
+  		    p[line_ga.ga_len] = NUL;
+! 		    indent = get_indent_str(p, 8, FALSE);
+  		    --indent;
+  		    indent -= indent % get_sw_value(curbuf);
+  		}
+! 		while (get_indent_str(p, 8, FALSE) > indent)
+  		{
+  		    char_u *s = skipwhite(p);
+  
+*** ../vim-7.4.337/src/getchar.c	2014-05-22 18:59:54.510169240 +0200
+--- src/getchar.c	2014-06-25 13:16:53.946160896 +0200
+***************
+*** 2675,2681 ****
+  				{
+  				    if (!vim_iswhite(ptr[col]))
+  					curwin->w_wcol = vcol;
+! 				    vcol += lbr_chartabsize(ptr + col,
+  							       (colnr_T)vcol);
+  #ifdef FEAT_MBYTE
+  				    if (has_mbyte)
+--- 2675,2681 ----
+  				{
+  				    if (!vim_iswhite(ptr[col]))
+  					curwin->w_wcol = vcol;
+! 				    vcol += lbr_chartabsize(ptr, ptr + col,
+  							       (colnr_T)vcol);
+  #ifdef FEAT_MBYTE
+  				    if (has_mbyte)
+*** ../vim-7.4.337/src/misc1.c	2014-05-22 14:00:12.698534712 +0200
+--- src/misc1.c	2014-06-25 13:39:43.598212712 +0200
+***************
+*** 32,38 ****
+      int
+  get_indent()
+  {
+!     return get_indent_str(ml_get_curline(), (int)curbuf->b_p_ts);
+  }
+  
+  /*
+--- 32,38 ----
+      int
+  get_indent()
+  {
+!     return get_indent_str(ml_get_curline(), (int)curbuf->b_p_ts, FALSE);
+  }
+  
+  /*
+***************
+*** 42,48 ****
+  get_indent_lnum(lnum)
+      linenr_T	lnum;
+  {
+!     return get_indent_str(ml_get(lnum), (int)curbuf->b_p_ts);
+  }
+  
+  #if defined(FEAT_FOLDING) || defined(PROTO)
+--- 42,48 ----
+  get_indent_lnum(lnum)
+      linenr_T	lnum;
+  {
+!     return get_indent_str(ml_get(lnum), (int)curbuf->b_p_ts, FALSE);
+  }
+  
+  #if defined(FEAT_FOLDING) || defined(PROTO)
+***************
+*** 55,61 ****
+      buf_T	*buf;
+      linenr_T	lnum;
+  {
+!     return get_indent_str(ml_get_buf(buf, lnum, FALSE), (int)buf->b_p_ts);
+  }
+  #endif
+  
+--- 55,61 ----
+      buf_T	*buf;
+      linenr_T	lnum;
+  {
+!     return get_indent_str(ml_get_buf(buf, lnum, FALSE), (int)buf->b_p_ts, FALSE);
+  }
+  #endif
+  
+***************
+*** 64,79 ****
+   * 'tabstop' at "ts"
+   */
+      int
+! get_indent_str(ptr, ts)
+      char_u	*ptr;
+      int		ts;
+  {
+      int		count = 0;
+  
+      for ( ; *ptr; ++ptr)
+      {
+! 	if (*ptr == TAB)    /* count a tab for what it is worth */
+! 	    count += ts - (count % ts);
+  	else if (*ptr == ' ')
+  	    ++count;		/* count a space for one */
+  	else
+--- 64,86 ----
+   * 'tabstop' at "ts"
+   */
+      int
+! get_indent_str(ptr, ts, list)
+      char_u	*ptr;
+      int		ts;
++     int		list; /* if TRUE, count only screen size for tabs */
+  {
+      int		count = 0;
+  
+      for ( ; *ptr; ++ptr)
+      {
+! 	if (*ptr == TAB)
+! 	{
+! 	    if (!list || lcs_tab1)    /* count a tab for what it is worth */
+! 		count += ts - (count % ts);
+! 	    else
+! 	/* in list mode, when tab is not set, count screen char width for Tab: ^I */
+! 		count += ptr2cells(ptr);
+! 	}
+  	else if (*ptr == ' ')
+  	    ++count;		/* count a space for one */
+  	else
+***************
+*** 476,481 ****
+--- 483,540 ----
+      return (int)col;
+  }
+  
++ #if defined(FEAT_LINEBREAK) || defined(PROTO)
++ /*
++  * Return appropriate space number for breakindent, taking influencing
++  * parameters into account. Window must be specified, since it is not
++  * necessarily always the current one.
++  */
++     int
++ get_breakindent_win(wp, line)
++     win_T	*wp;
++     char_u	*line; /* start of the line */
++ {
++     static int	    prev_indent = 0;  /* cached indent value */
++     static long	    prev_ts     = 0L; /* cached tabstop value */
++     static char_u   *prev_line = NULL; /* cached pointer to line */
++     int		    bri = 0;
++     /* window width minus window margin space, i.e. what rests for text */
++     const int	    eff_wwidth = W_WIDTH(wp)
++ 			    - ((wp->w_p_nu || wp->w_p_rnu)
++ 				&& (vim_strchr(p_cpo, CPO_NUMCOL) == NULL)
++ 						? number_width(wp) + 1 : 0);
++ 
++     /* used cached indent, unless pointer or 'tabstop' changed */
++     if (prev_line != line || prev_ts != wp->w_buffer->b_p_ts)
++     {
++ 	prev_line = line;
++ 	prev_ts = wp->w_buffer->b_p_ts;
++ 	prev_indent = get_indent_str(line,
++ 		  (int)wp->w_buffer->b_p_ts, wp->w_p_list) + wp->w_p_brishift;
++     }
++ 
++     /* indent minus the length of the showbreak string */
++     bri = prev_indent;
++     if (wp->w_p_brisbr)
++ 	bri -= vim_strsize(p_sbr);
++ 
++     /* Add offset for number column, if 'n' is in 'cpoptions' */
++     bri += win_col_off2(wp);
++ 
++     /* never indent past left window margin */
++     if (bri < 0)
++ 	bri = 0;
++     /* always leave at least bri_min characters on the left,
++      * if text width is sufficient */
++     else if (bri > eff_wwidth - wp->w_p_brimin)
++ 	bri = (eff_wwidth - wp->w_p_brimin < 0)
++ 			    ? 0 : eff_wwidth - wp->w_p_brimin;
++ 
++     return bri;
++ }
++ #endif
++ 
++ 
+  #if defined(FEAT_CINDENT) || defined(FEAT_SMARTINDENT)
+  
+  static int cin_is_cinword __ARGS((char_u *line));
+***************
+*** 678,684 ****
+  	/*
+  	 * count white space on current line
+  	 */
+! 	newindent = get_indent_str(saved_line, (int)curbuf->b_p_ts);
+  	if (newindent == 0 && !(flags & OPENLINE_COM_LIST))
+  	    newindent = second_line_indent; /* for ^^D command in insert mode */
+  
+--- 737,743 ----
+  	/*
+  	 * count white space on current line
+  	 */
+! 	newindent = get_indent_str(saved_line, (int)curbuf->b_p_ts, FALSE);
+  	if (newindent == 0 && !(flags & OPENLINE_COM_LIST))
+  	    newindent = second_line_indent; /* for ^^D command in insert mode */
+  
+***************
+*** 1201,1207 ****
+  					|| do_si
+  #endif
+  							   )
+! 			newindent = get_indent_str(leader, (int)curbuf->b_p_ts);
+  
+  		    /* Add the indent offset */
+  		    if (newindent + off < 0)
+--- 1260,1266 ----
+  					|| do_si
+  #endif
+  							   )
+! 			newindent = get_indent_str(leader, (int)curbuf->b_p_ts, FALSE);
+  
+  		    /* Add the indent offset */
+  		    if (newindent + off < 0)
+***************
+*** 1994,1999 ****
+--- 2053,2059 ----
+      char_u	*s;
+      int		lines = 0;
+      int		width;
++     char_u	*line;
+  
+  #ifdef FEAT_DIFF
+      /* Check for filler lines above this buffer line.  When folded the result
+***************
+*** 2009,2020 ****
+  	return lines + 1;
+  #endif
+  
+!     s = ml_get_buf(wp->w_buffer, lnum, FALSE);
+  
+      col = 0;
+      while (*s != NUL && --column >= 0)
+      {
+! 	col += win_lbr_chartabsize(wp, s, (colnr_T)col, NULL);
+  	mb_ptr_adv(s);
+      }
+  
+--- 2069,2080 ----
+  	return lines + 1;
+  #endif
+  
+!     line = s = ml_get_buf(wp->w_buffer, lnum, FALSE);
+  
+      col = 0;
+      while (*s != NUL && --column >= 0)
+      {
+! 	col += win_lbr_chartabsize(wp, line, s, (colnr_T)col, NULL);
+  	mb_ptr_adv(s);
+      }
+  
+***************
+*** 2026,2032 ****
+       * 'ts') -- webb.
+       */
+      if (*s == TAB && (State & NORMAL) && (!wp->w_p_list || lcs_tab1))
+! 	col += win_lbr_chartabsize(wp, s, (colnr_T)col, NULL) - 1;
+  
+      /*
+       * Add column offset for 'number', 'relativenumber', 'foldcolumn', etc.
+--- 2086,2092 ----
+       * 'ts') -- webb.
+       */
+      if (*s == TAB && (State & NORMAL) && (!wp->w_p_list || lcs_tab1))
+! 	col += win_lbr_chartabsize(wp, line, s, (colnr_T)col, NULL) - 1;
+  
+      /*
+       * Add column offset for 'number', 'relativenumber', 'foldcolumn', etc.
+***************
+*** 9002,9011 ****
+  		amount = 2;
+  	    else
+  	    {
+  		amount = 0;
+  		while (*that && col)
+  		{
+! 		    amount += lbr_chartabsize_adv(&that, (colnr_T)amount);
+  		    col--;
+  		}
+  
+--- 9062,9073 ----
+  		amount = 2;
+  	    else
+  	    {
++ 		char_u *line = that;
++ 
+  		amount = 0;
+  		while (*that && col)
+  		{
+! 		    amount += lbr_chartabsize_adv(line, &that, (colnr_T)amount);
+  		    col--;
+  		}
+  
+***************
+*** 9028,9034 ****
+  
+  		    while (vim_iswhite(*that))
+  		    {
+! 			amount += lbr_chartabsize(that, (colnr_T)amount);
+  			++that;
+  		    }
+  
+--- 9090,9096 ----
+  
+  		    while (vim_iswhite(*that))
+  		    {
+! 			amount += lbr_chartabsize(line, that, (colnr_T)amount);
+  			++that;
+  		    }
+  
+***************
+*** 9066,9080 ****
+  							       && !quotecount)
+  				    --parencount;
+  				if (*that == '\\' && *(that+1) != NUL)
+! 				    amount += lbr_chartabsize_adv(&that,
+! 							     (colnr_T)amount);
+! 				amount += lbr_chartabsize_adv(&that,
+! 							     (colnr_T)amount);
+  			    }
+  			}
+  			while (vim_iswhite(*that))
+  			{
+! 			    amount += lbr_chartabsize(that, (colnr_T)amount);
+  			    that++;
+  			}
+  			if (!*that || *that == ';')
+--- 9128,9143 ----
+  							       && !quotecount)
+  				    --parencount;
+  				if (*that == '\\' && *(that+1) != NUL)
+! 				    amount += lbr_chartabsize_adv(
+! 						line, &that, (colnr_T)amount);
+! 				amount += lbr_chartabsize_adv(
+! 						line, &that, (colnr_T)amount);
+  			    }
+  			}
+  			while (vim_iswhite(*that))
+  			{
+! 			    amount += lbr_chartabsize(
+! 						 line, that, (colnr_T)amount);
+  			    that++;
+  			}
+  			if (!*that || *that == ';')
+*** ../vim-7.4.337/src/misc2.c	2014-05-07 18:35:25.669216052 +0200
+--- src/misc2.c	2014-06-25 13:21:18.474170904 +0200
+***************
+*** 201,210 ****
+  	{
+  	    /* Count a tab for what it's worth (if list mode not on) */
+  #ifdef FEAT_LINEBREAK
+! 	    csize = win_lbr_chartabsize(curwin, ptr, col, &head);
+  	    mb_ptr_adv(ptr);
+  #else
+! 	    csize = lbr_chartabsize_adv(&ptr, col);
+  #endif
+  	    col += csize;
+  	}
+--- 201,210 ----
+  	{
+  	    /* Count a tab for what it's worth (if list mode not on) */
+  #ifdef FEAT_LINEBREAK
+! 	    csize = win_lbr_chartabsize(curwin, line, ptr, col, &head);
+  	    mb_ptr_adv(ptr);
+  #else
+! 	    csize = lbr_chartabsize_adv(line, &ptr, col);
+  #endif
+  	    col += csize;
+  	}
+***************
+*** 2156,2162 ****
+      }
+  }
+  
+! #if (defined(UNIX) && !defined(USE_SYSTEM)) || defined(WIN3264)
+  /*
+   * Append the text in "gap" below the cursor line and clear "gap".
+   */
+--- 2156,2163 ----
+      }
+  }
+  
+! #if (defined(UNIX) && !defined(USE_SYSTEM)) || defined(WIN3264) \
+! 	|| defined(PROTO)
+  /*
+   * Append the text in "gap" below the cursor line and clear "gap".
+   */
+*** ../vim-7.4.337/src/ops.c	2014-06-17 18:16:08.420691059 +0200
+--- src/ops.c	2014-06-25 13:18:27.082164420 +0200
+***************
+*** 420,426 ****
+  	}
+  	for ( ; vim_iswhite(*bd.textstart); )
+  	{
+! 	    incr = lbr_chartabsize_adv(&bd.textstart, (colnr_T)(bd.start_vcol));
+  	    total += incr;
+  	    bd.start_vcol += incr;
+  	}
+--- 420,428 ----
+  	}
+  	for ( ; vim_iswhite(*bd.textstart); )
+  	{
+! 	    /* TODO: is passing bd.textstart for start of the line OK? */
+! 	    incr = lbr_chartabsize_adv(bd.textstart, &bd.textstart,
+! 						    (colnr_T)(bd.start_vcol));
+  	    total += incr;
+  	    bd.start_vcol += incr;
+  	}
+***************
+*** 480,486 ****
+  
+  	while (vim_iswhite(*non_white))
+  	{
+! 	    incr = lbr_chartabsize_adv(&non_white, non_white_col);
+  	    non_white_col += incr;
+  	}
+  
+--- 482,488 ----
+  
+  	while (vim_iswhite(*non_white))
+  	{
+! 	    incr = lbr_chartabsize_adv(bd.textstart, &non_white, non_white_col);
+  	    non_white_col += incr;
+  	}
+  
+***************
+*** 505,511 ****
+  	    verbatim_copy_width -= bd.start_char_vcols;
+  	while (verbatim_copy_width < destination_col)
+  	{
+! 	    incr = lbr_chartabsize(verbatim_copy_end, verbatim_copy_width);
+  	    if (verbatim_copy_width + incr > destination_col)
+  		break;
+  	    verbatim_copy_width += incr;
+--- 507,517 ----
+  	    verbatim_copy_width -= bd.start_char_vcols;
+  	while (verbatim_copy_width < destination_col)
+  	{
+! 	    char_u *line = verbatim_copy_end;
+! 
+! 	    /* TODO: is passing verbatim_copy_end for start of the line OK? */
+! 	    incr = lbr_chartabsize(line, verbatim_copy_end,
+! 							 verbatim_copy_width);
+  	    if (verbatim_copy_width + incr > destination_col)
+  		break;
+  	    verbatim_copy_width += incr;
+***************
+*** 3617,3623 ****
+  	    for (ptr = oldp; vcol < col && *ptr; )
+  	    {
+  		/* Count a tab for what it's worth (if list mode not on) */
+! 		incr = lbr_chartabsize_adv(&ptr, (colnr_T)vcol);
+  		vcol += incr;
+  	    }
+  	    bd.textcol = (colnr_T)(ptr - oldp);
+--- 3623,3629 ----
+  	    for (ptr = oldp; vcol < col && *ptr; )
+  	    {
+  		/* Count a tab for what it's worth (if list mode not on) */
+! 		incr = lbr_chartabsize_adv(oldp, &ptr, (colnr_T)vcol);
+  		vcol += incr;
+  	    }
+  	    bd.textcol = (colnr_T)(ptr - oldp);
+***************
+*** 3651,3657 ****
+  	    /* calculate number of spaces required to fill right side of block*/
+  	    spaces = y_width + 1;
+  	    for (j = 0; j < yanklen; j++)
+! 		spaces -= lbr_chartabsize(&y_array[i][j], 0);
+  	    if (spaces < 0)
+  		spaces = 0;
+  
+--- 3657,3663 ----
+  	    /* calculate number of spaces required to fill right side of block*/
+  	    spaces = y_width + 1;
+  	    for (j = 0; j < yanklen; j++)
+! 		spaces -= lbr_chartabsize(NULL, &y_array[i][j], 0);
+  	    if (spaces < 0)
+  		spaces = 0;
+  
+***************
+*** 5203,5209 ****
+      while (bdp->start_vcol < oap->start_vcol && *pstart)
+      {
+  	/* Count a tab for what it's worth (if list mode not on) */
+! 	incr = lbr_chartabsize(pstart, (colnr_T)bdp->start_vcol);
+  	bdp->start_vcol += incr;
+  #ifdef FEAT_VISUALEXTRA
+  	if (vim_iswhite(*pstart))
+--- 5209,5215 ----
+      while (bdp->start_vcol < oap->start_vcol && *pstart)
+      {
+  	/* Count a tab for what it's worth (if list mode not on) */
+! 	incr = lbr_chartabsize(line, pstart, (colnr_T)bdp->start_vcol);
+  	bdp->start_vcol += incr;
+  #ifdef FEAT_VISUALEXTRA
+  	if (vim_iswhite(*pstart))
+***************
+*** 5272,5278 ****
+  	    {
+  		/* Count a tab for what it's worth (if list mode not on) */
+  		prev_pend = pend;
+! 		incr = lbr_chartabsize_adv(&pend, (colnr_T)bdp->end_vcol);
+  		bdp->end_vcol += incr;
+  	    }
+  	    if (bdp->end_vcol <= oap->end_vcol
+--- 5278,5287 ----
+  	    {
+  		/* Count a tab for what it's worth (if list mode not on) */
+  		prev_pend = pend;
+! 		/* TODO: is passing prev_pend for start of the line OK?
+! 		 * perhaps it should be "line". */
+! 		incr = lbr_chartabsize_adv(prev_pend, &pend,
+! 						      (colnr_T)bdp->end_vcol);
+  		bdp->end_vcol += incr;
+  	    }
+  	    if (bdp->end_vcol <= oap->end_vcol
+***************
+*** 6882,6888 ****
+  	    validate_virtcol();
+  	    col_print(buf1, sizeof(buf1), (int)curwin->w_cursor.col + 1,
+  		    (int)curwin->w_virtcol + 1);
+! 	    col_print(buf2, sizeof(buf2), (int)STRLEN(p), linetabsize(p));
+  
+  	    if (char_count_cursor == byte_count_cursor
+  		    && char_count == byte_count)
+--- 6891,6898 ----
+  	    validate_virtcol();
+  	    col_print(buf1, sizeof(buf1), (int)curwin->w_cursor.col + 1,
+  		    (int)curwin->w_virtcol + 1);
+! 	    col_print(buf2, sizeof(buf2), (int)STRLEN(p),
+! 				linetabsize(p));
+  
+  	    if (char_count_cursor == byte_count_cursor
+  		    && char_count == byte_count)
+*** ../vim-7.4.337/src/option.c	2014-06-25 11:48:40.733960646 +0200
+--- src/option.c	2014-06-25 14:31:41.630330672 +0200
+***************
+*** 188,193 ****
+--- 188,197 ----
+  #ifdef FEAT_ARABIC
+  # define PV_ARAB	OPT_WIN(WV_ARAB)
+  #endif
++ #ifdef FEAT_LINEBREAK
++ # define PV_BRI		OPT_WIN(WV_BRI)
++ # define PV_BRIOPT	OPT_WIN(WV_BRIOPT)
++ #endif
+  #ifdef FEAT_DIFF
+  # define PV_DIFF	OPT_WIN(WV_DIFF)
+  #endif
+***************
+*** 648,653 ****
+--- 652,675 ----
+  			    {(char_u *)0L, (char_u *)0L}
+  #endif
+  			    SCRIPTID_INIT},
++     {"breakindent",   "bri",  P_BOOL|P_VI_DEF|P_VIM|P_RWIN,
++ #ifdef FEAT_LINEBREAK
++ 			    (char_u *)VAR_WIN, PV_BRI,
++ 			    {(char_u *)FALSE, (char_u *)0L}
++ #else
++ 			    (char_u *)NULL, PV_NONE,
++ 			    {(char_u *)0L, (char_u *)0L}
++ #endif
++ 			    SCRIPTID_INIT},
++     {"breakindentopt", "briopt", P_STRING|P_ALLOCED|P_VI_DEF|P_RBUF|P_COMMA|P_NODUP,
++ #ifdef FEAT_LINEBREAK
++ 			    (char_u *)VAR_WIN, PV_BRIOPT,
++ 			    {(char_u *)"", (char_u *)NULL}
++ #else
++ 			    (char_u *)NULL, PV_NONE,
++ 			    {(char_u *)"", (char_u *)NULL}
++ #endif
++ 			    SCRIPTID_INIT},
+      {"browsedir",   "bsdir",P_STRING|P_VI_DEF,
+  #ifdef FEAT_BROWSE
+  			    (char_u *)&p_bsdir, PV_NONE,
+***************
+*** 5256,5261 ****
+--- 5278,5286 ----
+      /* set cedit_key */
+      (void)check_cedit();
+  #endif
++ #ifdef FEAT_LINEBREAK
++     briopt_check();
++ #endif
+  }
+  
+  /*
+***************
+*** 5709,5714 ****
+--- 5734,5747 ----
+  		     *p_pm == '.' ? p_pm + 1 : p_pm) == 0)
+  	    errmsg = (char_u *)N_("E589: 'backupext' and 'patchmode' are equal");
+      }
++ #ifdef FEAT_LINEBREAK
++     /* 'breakindentopt' */
++     else if (varp == &curwin->w_p_briopt)
++     {
++ 	if (briopt_check() == FAIL)
++ 	    errmsg = e_invarg;
++     }
++ #endif
+  
+      /*
+       * 'isident', 'iskeyword', 'isprint or 'isfname' option: refill chartab[]
+***************
+*** 10018,10023 ****
+--- 10051,10058 ----
+  	case PV_WRAP:	return (char_u *)&(curwin->w_p_wrap);
+  #ifdef FEAT_LINEBREAK
+  	case PV_LBR:	return (char_u *)&(curwin->w_p_lbr);
++ 	case PV_BRI:	return (char_u *)&(curwin->w_p_bri);
++ 	case PV_BRIOPT: return (char_u *)&(curwin->w_p_briopt);
+  #endif
+  #ifdef FEAT_SCROLLBIND
+  	case PV_SCBIND: return (char_u *)&(curwin->w_p_scb);
+***************
+*** 10207,10212 ****
+--- 10242,10249 ----
+  #endif
+  #ifdef FEAT_LINEBREAK
+      to->wo_lbr = from->wo_lbr;
++     to->wo_bri = from->wo_bri;
++     to->wo_briopt = vim_strsave(from->wo_briopt);
+  #endif
+  #ifdef FEAT_SCROLLBIND
+      to->wo_scb = from->wo_scb;
+***************
+*** 10294,10299 ****
+--- 10331,10339 ----
+  #ifdef FEAT_CONCEAL
+      check_string_option(&wop->wo_cocu);
+  #endif
++ #ifdef FEAT_LINEBREAK
++     check_string_option(&wop->wo_briopt);
++ #endif
+  }
+  
+  /*
+***************
+*** 10313,10318 ****
+--- 10353,10361 ----
+  # endif
+      clear_string_option(&wop->wo_fmr);
+  #endif
++ #ifdef FEAT_LINEBREAK
++     clear_string_option(&wop->wo_briopt);
++ #endif
+  #ifdef FEAT_RIGHTLEFT
+      clear_string_option(&wop->wo_rlc);
+  #endif
+***************
+*** 11927,11929 ****
+--- 11970,12018 ----
+  	    ++ptr;
+      }
+  }
++ 
++ #if defined(FEAT_LINEBREAK) || defined(PROTO)
++ /*
++  * This is called when 'breakindentopt' is changed and when a window is
++  * initialized.
++  */
++     int
++ briopt_check()
++ {
++     char_u	*p;
++     int		bri_shift = 0;
++     long	bri_min = 20;
++     int		bri_sbr = FALSE;
++ 
++     p = curwin->w_p_briopt;
++     while (*p != NUL)
++     {
++ 	if (STRNCMP(p, "shift:", 6) == 0
++ 		 && ((p[6] == '-' && VIM_ISDIGIT(p[7])) || VIM_ISDIGIT(p[6])))
++ 	{
++ 	    p += 6;
++ 	    bri_shift = getdigits(&p);
++ 	}
++ 	else if (STRNCMP(p, "min:", 4) == 0 && VIM_ISDIGIT(p[4]))
++ 	{
++ 	    p += 4;
++ 	    bri_min = getdigits(&p);
++ 	}
++ 	else if (STRNCMP(p, "sbr", 3) == 0)
++ 	{
++ 	    p += 3;
++ 	    bri_sbr = TRUE;
++ 	}
++ 	if (*p != ',' && *p != NUL)
++ 	    return FAIL;
++ 	if (*p == ',')
++ 	    ++p;
++     }
++ 
++     curwin->w_p_brishift = bri_shift;
++     curwin->w_p_brimin   = bri_min;
++     curwin->w_p_brisbr   = bri_sbr;
++ 
++     return OK;
++ }
++ #endif
+*** ../vim-7.4.337/src/option.h	2014-05-28 21:40:47.092329130 +0200
+--- src/option.h	2014-06-25 12:57:01.002115765 +0200
+***************
+*** 1052,1057 ****
+--- 1052,1061 ----
+  #ifdef FEAT_CURSORBIND
+      , WV_CRBIND
+  #endif
++ #ifdef FEAT_LINEBREAK
++     , WV_BRI
++     , WV_BRIOPT
++ #endif
+  #ifdef FEAT_DIFF
+      , WV_DIFF
+  #endif
+*** ../vim-7.4.337/src/proto/charset.pro	2013-08-10 13:37:07.000000000 +0200
+--- src/proto/charset.pro	2014-06-25 13:22:32.934173721 +0200
+***************
+*** 16,22 ****
+  int chartabsize __ARGS((char_u *p, colnr_T col));
+  int linetabsize __ARGS((char_u *s));
+  int linetabsize_col __ARGS((int startcol, char_u *s));
+! int win_linetabsize __ARGS((win_T *wp, char_u *p, colnr_T len));
+  int vim_isIDc __ARGS((int c));
+  int vim_iswordc __ARGS((int c));
+  int vim_iswordc_buf __ARGS((int c, buf_T *buf));
+--- 16,22 ----
+  int chartabsize __ARGS((char_u *p, colnr_T col));
+  int linetabsize __ARGS((char_u *s));
+  int linetabsize_col __ARGS((int startcol, char_u *s));
+! int win_linetabsize __ARGS((win_T *wp, char_u *line, colnr_T len));
+  int vim_isIDc __ARGS((int c));
+  int vim_iswordc __ARGS((int c));
+  int vim_iswordc_buf __ARGS((int c, buf_T *buf));
+***************
+*** 26,34 ****
+  int vim_isfilec_or_wc __ARGS((int c));
+  int vim_isprintc __ARGS((int c));
+  int vim_isprintc_strict __ARGS((int c));
+! int lbr_chartabsize __ARGS((unsigned char *s, colnr_T col));
+! int lbr_chartabsize_adv __ARGS((char_u **s, colnr_T col));
+! int win_lbr_chartabsize __ARGS((win_T *wp, char_u *s, colnr_T col, int *headp));
+  int in_win_border __ARGS((win_T *wp, colnr_T vcol));
+  void getvcol __ARGS((win_T *wp, pos_T *pos, colnr_T *start, colnr_T *cursor, colnr_T *end));
+  colnr_T getvcol_nolist __ARGS((pos_T *posp));
+--- 26,34 ----
+  int vim_isfilec_or_wc __ARGS((int c));
+  int vim_isprintc __ARGS((int c));
+  int vim_isprintc_strict __ARGS((int c));
+! int lbr_chartabsize __ARGS((char_u *line, unsigned char *s, colnr_T col));
+! int lbr_chartabsize_adv __ARGS((char_u *line, char_u **s, colnr_T col));
+! int win_lbr_chartabsize __ARGS((win_T *wp, char_u *line, char_u *s, colnr_T col, int *headp));
+  int in_win_border __ARGS((win_T *wp, colnr_T vcol));
+  void getvcol __ARGS((win_T *wp, pos_T *pos, colnr_T *start, colnr_T *cursor, colnr_T *end));
+  colnr_T getvcol_nolist __ARGS((pos_T *posp));
+*** ../vim-7.4.337/src/proto/misc1.pro	2014-05-07 15:10:17.661108310 +0200
+--- src/proto/misc1.pro	2014-06-25 12:57:01.002115765 +0200
+***************
+*** 2,10 ****
+  int get_indent __ARGS((void));
+  int get_indent_lnum __ARGS((linenr_T lnum));
+  int get_indent_buf __ARGS((buf_T *buf, linenr_T lnum));
+! int get_indent_str __ARGS((char_u *ptr, int ts));
+  int set_indent __ARGS((int size, int flags));
+  int get_number_indent __ARGS((linenr_T lnum));
+  int open_line __ARGS((int dir, int flags, int second_line_indent));
+  int get_leader_len __ARGS((char_u *line, char_u **flags, int backward, int include_space));
+  int get_last_leader_offset __ARGS((char_u *line, char_u **flags));
+--- 2,11 ----
+  int get_indent __ARGS((void));
+  int get_indent_lnum __ARGS((linenr_T lnum));
+  int get_indent_buf __ARGS((buf_T *buf, linenr_T lnum));
+! int get_indent_str __ARGS((char_u *ptr, int ts, int list));
+  int set_indent __ARGS((int size, int flags));
+  int get_number_indent __ARGS((linenr_T lnum));
++ int get_breakindent_win __ARGS((win_T *wp, char_u *ptr));
+  int open_line __ARGS((int dir, int flags, int second_line_indent));
+  int get_leader_len __ARGS((char_u *line, char_u **flags, int backward, int include_space));
+  int get_last_leader_offset __ARGS((char_u *line, char_u **flags));
+*** ../vim-7.4.337/src/proto/option.pro	2014-01-14 16:54:53.000000000 +0100
+--- src/proto/option.pro	2014-06-25 14:16:04.882295233 +0200
+***************
+*** 63,66 ****
+--- 63,67 ----
+  long get_sw_value __ARGS((buf_T *buf));
+  long get_sts_value __ARGS((void));
+  void find_mps_values __ARGS((int *initc, int *findc, int *backwards, int switchit));
++ int briopt_check __ARGS((void));
+  /* vim: set ft=c : */
+*** ../vim-7.4.337/src/screen.c	2014-06-18 21:20:07.232377308 +0200
+--- src/screen.c	2014-06-25 13:43:39.930221653 +0200
+***************
+*** 2962,2971 ****
+  # define WL_SIGN	WL_FOLD		/* column for signs */
+  #endif
+  #define WL_NR		WL_SIGN + 1	/* line number */
+  #if defined(FEAT_LINEBREAK) || defined(FEAT_DIFF)
+! # define WL_SBR		WL_NR + 1	/* 'showbreak' or 'diff' */
+  #else
+! # define WL_SBR		WL_NR
+  #endif
+  #define WL_LINE		WL_SBR + 1	/* text in the line */
+      int		draw_state = WL_START;	/* what to draw next */
+--- 2962,2976 ----
+  # define WL_SIGN	WL_FOLD		/* column for signs */
+  #endif
+  #define WL_NR		WL_SIGN + 1	/* line number */
++ #ifdef FEAT_LINEBREAK
++ # define WL_BRI		WL_NR + 1	/* 'breakindent' */
++ #else
++ # define WL_BRI		WL_NR
++ #endif
+  #if defined(FEAT_LINEBREAK) || defined(FEAT_DIFF)
+! # define WL_SBR		WL_BRI + 1	/* 'showbreak' or 'diff' */
+  #else
+! # define WL_SBR		WL_BRI
+  #endif
+  #define WL_LINE		WL_SBR + 1	/* text in the line */
+      int		draw_state = WL_START;	/* what to draw next */
+***************
+*** 3301,3307 ****
+  #endif
+  	while (vcol < v && *ptr != NUL)
+  	{
+! 	    c = win_lbr_chartabsize(wp, ptr, (colnr_T)vcol, NULL);
+  	    vcol += c;
+  #ifdef FEAT_MBYTE
+  	    prev_ptr = ptr;
+--- 3306,3312 ----
+  #endif
+  	while (vcol < v && *ptr != NUL)
+  	{
+! 	    c = win_lbr_chartabsize(wp, line, ptr, (colnr_T)vcol, NULL);
+  	    vcol += c;
+  #ifdef FEAT_MBYTE
+  	    prev_ptr = ptr;
+***************
+*** 3670,3675 ****
+--- 3675,3718 ----
+  		}
+  	    }
+  
++ #ifdef FEAT_LINEBREAK
++ 	    if (wp->w_p_brisbr && draw_state == WL_BRI - 1
++ 					     && n_extra == 0 && *p_sbr != NUL)
++ 		/* draw indent after showbreak value */
++ 		draw_state = WL_BRI;
++ 	    else if (wp->w_p_brisbr && draw_state == WL_SBR && n_extra == 0)
++ 		/* After the showbreak, draw the breakindent */
++ 		draw_state = WL_BRI - 1;
++ 
++ 	    /* draw 'breakindent': indent wrapped text accordingly */
++ 	    if (draw_state == WL_BRI - 1 && n_extra == 0)
++ 	    {
++ 		draw_state = WL_BRI;
++ # ifdef FEAT_DIFF
++ # endif
++ 		if (wp->w_p_bri && n_extra == 0 && row != startrow
++ #ifdef FEAT_DIFF
++ 			&& filler_lines == 0
++ #endif
++ 		   )
++ 		{
++ 		    char_attr = 0; /* was: hl_attr(HLF_AT); */
++ #ifdef FEAT_DIFF
++ 		    if (diff_hlf != (hlf_T)0)
++ 			char_attr = hl_attr(diff_hlf);
++ #endif
++ 		    p_extra = NUL;
++ 		    c_extra = ' ';
++ 		    n_extra = get_breakindent_win(wp,
++ 				       ml_get_buf(wp->w_buffer, lnum, FALSE));
++ 		    /* Correct end of highlighted area for 'breakindent',
++ 		     * required when 'linebreak' is also set. */
++ 		    if (tocol == vcol)
++ 			tocol += n_extra;
++ 		}
++ 	    }
++ #endif
++ 
+  #if defined(FEAT_LINEBREAK) || defined(FEAT_DIFF)
+  	    if (draw_state == WL_SBR - 1 && n_extra == 0)
+  	    {
+***************
+*** 4382,4392 ****
+  		if (wp->w_p_lbr && vim_isbreak(c) && !vim_isbreak(*ptr)
+  							     && !wp->w_p_list)
+  		{
+! 		    n_extra = win_lbr_chartabsize(wp, ptr - (
+  # ifdef FEAT_MBYTE
+  				has_mbyte ? mb_l :
+  # endif
+! 				1), (colnr_T)vcol, NULL) - 1;
+  		    c_extra = ' ';
+  		    if (vim_iswhite(c))
+  		    {
+--- 4425,4438 ----
+  		if (wp->w_p_lbr && vim_isbreak(c) && !vim_isbreak(*ptr)
+  							     && !wp->w_p_list)
+  		{
+! 		    char_u *p = ptr - (
+  # ifdef FEAT_MBYTE
+  				has_mbyte ? mb_l :
+  # endif
+! 				1);
+! 		    /* TODO: is passing p for start of the line OK? */
+! 		    n_extra = win_lbr_chartabsize(wp, p, p, (colnr_T)vcol,
+! 								    NULL) - 1;
+  		    c_extra = ' ';
+  		    if (vim_iswhite(c))
+  		    {
+***************
+*** 8916,8923 ****
+  	{
+  	    if (noinvcurs)
+  		screen_stop_highlight();
+! 	    if (row == screen_cur_row && (col > screen_cur_col) &&
+! 								*T_CRI != NUL)
+  		term_cursor_right(col - screen_cur_col);
+  	    else
+  		term_windgoto(row, col);
+--- 8962,8969 ----
+  	{
+  	    if (noinvcurs)
+  		screen_stop_highlight();
+! 	    if (row == screen_cur_row && (col > screen_cur_col)
+! 							     && *T_CRI != NUL)
+  		term_cursor_right(col - screen_cur_col);
+  	    else
+  		term_windgoto(row, col);
+*** ../vim-7.4.337/src/structs.h	2014-06-17 17:48:21.784628008 +0200
+--- src/structs.h	2014-06-25 12:57:01.006115766 +0200
+***************
+*** 134,139 ****
+--- 134,145 ----
+      int		wo_arab;
+  # define w_p_arab w_onebuf_opt.wo_arab	/* 'arabic' */
+  #endif
++ #ifdef FEAT_LINEBREAK
++     int		wo_bri;
++ # define w_p_bri w_onebuf_opt.wo_bri	/* 'breakindent' */
++     char_u		*wo_briopt;
++ # define w_p_briopt w_onebuf_opt.wo_briopt /* 'breakindentopt' */
++ #endif
+  #ifdef FEAT_DIFF
+      int		wo_diff;
+  # define w_p_diff w_onebuf_opt.wo_diff	/* 'diff' */
+***************
+*** 2189,2194 ****
+--- 2195,2205 ----
+  #ifdef FEAT_SYN_HL
+      int		*w_p_cc_cols;	    /* array of columns to highlight or NULL */
+  #endif
++ #ifdef FEAT_LINEBREAK
++     int		w_p_brimin;	    /* minimum width for breakindent */
++     int		w_p_brishift;	    /* additional shift for breakindent */
++     int		w_p_brisbr;	    /* sbr in 'briopt' */
++ #endif
+  
+      /* transform a pointer to a "onebuf" option into a "allbuf" option */
+  #define GLOBAL_WO(p)	((char *)p + sizeof(winopt_T))
+*** ../vim-7.4.337/src/testdir/Make_amiga.mak	2014-05-29 11:47:19.804773758 +0200
+--- src/testdir/Make_amiga.mak	2014-06-25 12:57:01.006115766 +0200
+***************
+*** 37,42 ****
+--- 37,43 ----
+  		test99.out test100.out test101.out test102.out test103.out \
+  		test104.out test105.out test106.out test107.out \
+  		test_autoformat_join.out \
++ 		test_breakindent.out \
+  		test_eval.out \
+  		test_options.out
+  
+***************
+*** 163,167 ****
+--- 164,169 ----
+  test106.out: test106.in
+  test107.out: test107.in
+  test_autoformat_join.out: test_autoformat_join.in
++ test_breakindent.out: test_breakindent.in
+  test_eval.out: test_eval.in
+  test_options.out: test_options.in
+*** ../vim-7.4.337/src/testdir/Make_dos.mak	2014-05-29 11:47:19.804773758 +0200
+--- src/testdir/Make_dos.mak	2014-06-25 12:57:01.006115766 +0200
+***************
+*** 36,41 ****
+--- 36,42 ----
+  		test100.out test101.out test102.out test103.out test104.out \
+  		test105.out test106.out  test107.out\
+  		test_autoformat_join.out \
++ 		test_breakindent.out \
+  		test_eval.out \
+  		test_options.out
+  
+*** ../vim-7.4.337/src/testdir/Make_ming.mak	2014-05-29 11:47:19.804773758 +0200
+--- src/testdir/Make_ming.mak	2014-06-25 12:57:01.006115766 +0200
+***************
+*** 56,61 ****
+--- 56,62 ----
+  		test100.out test101.out test102.out test103.out test104.out \
+  		test105.out test106.out test107.out \
+  		test_autoformat_join.out \
++ 		test_breakindent.out \
+  		test_eval.out \
+  		test_options.out
+  
+*** ../vim-7.4.337/src/testdir/Make_os2.mak	2014-05-29 11:47:19.804773758 +0200
+--- src/testdir/Make_os2.mak	2014-06-25 12:59:45.774121999 +0200
+***************
+*** 39,44 ****
+--- 39,45 ----
+  		test105.out test106.out test107.out \
+  		test_autoformat_join.out \
+  		test_eval.out \
++ 		test_breakindent.out \
+  		test_options.out
+  
+  .SUFFIXES: .in .out
+*** ../vim-7.4.337/src/testdir/Make_vms.mms	2014-05-29 11:47:19.804773758 +0200
+--- src/testdir/Make_vms.mms	2014-06-25 12:57:01.006115766 +0200
+***************
+*** 97,102 ****
+--- 97,103 ----
+  	 test100.out test101.out test103.out test104.out \
+  	 test105.out test106.out test107.out \
+  	 test_autoformat_join.out \
++ 	 test_breakindent.out \
+  	 test_eval.out \
+  	 test_options.out
+  
+*** ../vim-7.4.337/src/testdir/Makefile	2014-05-29 11:47:19.804773758 +0200
+--- src/testdir/Makefile	2014-06-25 12:57:01.006115766 +0200
+***************
+*** 34,39 ****
+--- 34,40 ----
+  		test99.out test100.out test101.out test102.out test103.out \
+  		test104.out test105.out test106.out test107.out \
+  		test_autoformat_join.out \
++ 		test_breakindent.out \
+  		test_eval.out \
+  		test_options.out
+  
+*** ../vim-7.4.337/src/testdir/test_breakindent.in	2014-06-25 14:36:28.690341532 +0200
+--- src/testdir/test_breakindent.in	2014-06-25 14:26:00.994317785 +0200
+***************
+*** 0 ****
+--- 1,79 ----
++ Test for breakindent
++ 
++ STARTTEST
++ :so small.vim
++ :if !exists("+breakindent") | e! test.ok | w! test.out | qa! | endif
++ :10new|:vsp|:vert resize 20
++ :put =\"\tabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP\"
++ :set ts=4 sw=4 sts=4 breakindent
++ :fu! ScreenChar(width)
++ :	let c=''
++ :	for i in range(1,a:width)
++ :		let c.=nr2char(screenchar(line('.'), i))
++ :	endfor
++ :       let c.="\n"
++ :	for i in range(1,a:width)
++ :		let c.=nr2char(screenchar(line('.')+1, i))
++ :	endfor
++ :       let c.="\n"
++ :	for i in range(1,a:width)
++ :		let c.=nr2char(screenchar(line('.')+2, i))
++ :	endfor
++ :	return c
++ :endfu
++ :fu DoRecordScreen()
++ :	wincmd l
++ :	$put =printf(\"\n%s\", g:test)
++ :	$put =g:line1
++ :	wincmd p
++ :endfu
++ :let g:test="Test 1: Simple breakindent"
++ :let line1=ScreenChar(8)
++ :call DoRecordScreen()
++ :let g:test="Test 2: Simple breakindent + sbr=>>"
++ :set sbr=>>
++ :let line1=ScreenChar(8)
++ :call DoRecordScreen()
++ :let g:test ="Test 3: Simple breakindent + briopt:sbr"
++ :set briopt=sbr,min:0 sbr=++
++ :let line1=ScreenChar(8)
++ :call DoRecordScreen()
++ :let g:test ="Test 4: Simple breakindent + min width: 18"
++ :set sbr= briopt=min:18
++ :let line1=ScreenChar(8)
++ :call DoRecordScreen()
++ :let g:test =" Test 5: Simple breakindent + shift by 2"
++ :set briopt=shift:2,min:0
++ :let line1=ScreenChar(8)
++ :call DoRecordScreen()
++ :let g:test=" Test 6: Simple breakindent + shift by -1"
++ :set briopt=shift:-1,min:0
++ :let line1=ScreenChar(8)
++ :call DoRecordScreen()
++ :let g:test=" Test 7: breakindent + shift by +1 + nu + sbr=? briopt:sbr"
++ :set briopt=shift:1,sbr,min:0 nu sbr=? nuw=4
++ :let line1=ScreenChar(10)
++ :call DoRecordScreen()
++ :let g:test=" Test 8: breakindent + shift:1 + nu + sbr=# list briopt:sbr"
++ :set briopt=shift:1,sbr,min:0 nu sbr=# list
++ :let line1=ScreenChar(10)
++ :call DoRecordScreen()
++ :let g:test=" Test 9: breakindent + shift by +1 + 'nu' + sbr=# list"
++ :set briopt-=sbr
++ :let line1=ScreenChar(10)
++ :call DoRecordScreen()
++ :let g:test=" Test 10: breakindent + shift by +1 + 'nu' + sbr=~ cpo+=n"
++ :set cpo+=n sbr=~ nu nuw=4 nolist briopt=sbr,min:0
++ :let line1=ScreenChar(10)
++ :call DoRecordScreen()
++ :wincmd p
++ :let g:test="\n Test 11: strdisplaywidth when breakindent is on"
++ :set cpo-=n sbr=>> nu nuw=4 nolist briopt= ts=4
++ :let text=getline(2) "skip leading tab when calculating text width
++ :let width = strlen(text[1:])+indent(2)*4+strlen(&sbr)*3 " text wraps 3 times
++ :$put =g:test
++ :$put =printf(\"strdisplaywidth: %d == calculated: %d\", strdisplaywidth(text), width)
++ :%w! test.out
++ :qa!
++ ENDTEST
++ dummy text
+*** ../vim-7.4.337/src/testdir/test_breakindent.ok	2014-06-25 14:36:28.698341532 +0200
+--- src/testdir/test_breakindent.ok	2014-06-25 12:57:01.006115766 +0200
+***************
+*** 0 ****
+--- 1,55 ----
++ 
++ 	abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP
++ 
++ Test 1: Simple breakindent
++     abcd
++     qrst
++     GHIJ
++ 
++ Test 2: Simple breakindent + sbr=>>
++     abcd
++     >>qr
++     >>EF
++ 
++ Test 3: Simple breakindent + briopt:sbr
++     abcd
++ ++  qrst
++ ++  GHIJ
++ 
++ Test 4: Simple breakindent + min width: 18
++     abcd
++   qrstuv
++   IJKLMN
++ 
++  Test 5: Simple breakindent + shift by 2
++     abcd
++       qr
++       EF
++ 
++  Test 6: Simple breakindent + shift by -1
++     abcd
++    qrstu
++    HIJKL
++ 
++  Test 7: breakindent + shift by +1 + nu + sbr=? briopt:sbr
++   2     ab
++ ?        m
++ ?        x
++ 
++  Test 8: breakindent + shift:1 + nu + sbr=# list briopt:sbr
++   2 ^Iabcd
++ #      opq
++ #      BCD
++ 
++  Test 9: breakindent + shift by +1 + 'nu' + sbr=# list
++   2 ^Iabcd
++        #op
++        #AB
++ 
++  Test 10: breakindent + shift by +1 + 'nu' + sbr=~ cpo+=n
++   2     ab
++ ~       mn
++ ~       yz
++ 
++  Test 11: strdisplaywidth when breakindent is on
++ strdisplaywidth: 46 == calculated: 64
+*** ../vim-7.4.337/src/ui.c	2014-06-12 13:28:26.771694851 +0200
+--- src/ui.c	2014-06-25 13:22:20.218173240 +0200
+***************
+*** 3162,3176 ****
+      /* try to advance to the specified column */
+      int		count = 0;
+      char_u	*ptr;
+!     char_u	*start;
+  
+!     start = ptr = ml_get_buf(wp->w_buffer, lnum, FALSE);
+      while (count < vcol && *ptr != NUL)
+      {
+! 	count += win_lbr_chartabsize(wp, ptr, count, NULL);
+  	mb_ptr_adv(ptr);
+      }
+!     return (int)(ptr - start);
+  }
+  #endif
+  
+--- 3162,3176 ----
+      /* try to advance to the specified column */
+      int		count = 0;
+      char_u	*ptr;
+!     char_u	*line;
+  
+!     line = ptr = ml_get_buf(wp->w_buffer, lnum, FALSE);
+      while (count < vcol && *ptr != NUL)
+      {
+! 	count += win_lbr_chartabsize(wp, line, ptr, count, NULL);
+  	mb_ptr_adv(ptr);
+      }
+!     return (int)(ptr - line);
+  }
+  #endif
+  
+*** ../vim-7.4.337/src/version.c	2014-06-25 12:26:42.230046959 +0200
+--- src/version.c	2014-06-25 13:00:26.990123558 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     338,
+  /**/
+
+-- 
+MORTICIAN:    Bring out your dead!
+              [clang]
+              Bring out your dead!
+              [clang]
+              Bring out your dead!
+CUSTOMER:     Here's one -- nine pence.
+DEAD PERSON:  I'm not dead!
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.339 b/SOURCES/7.4.339
new file mode 100644
index 0000000..ffe2d16
--- /dev/null
+++ b/SOURCES/7.4.339
@@ -0,0 +1,79 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.339
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.339
+Problem:    Local function is available globally.
+Solution:   Add "static".
+Files:	    src/option.c, src/proto/option.pro
+
+
+*** ../vim-7.4.338/src/option.c	2014-06-25 14:39:35.110348584 +0200
+--- src/option.c	2014-06-25 14:42:33.986355351 +0200
+***************
+*** 3074,3079 ****
+--- 3074,3080 ----
+  static char_u *get_varp_scope __ARGS((struct vimoption *p, int opt_flags));
+  static char_u *get_varp __ARGS((struct vimoption *));
+  static void option_value2string __ARGS((struct vimoption *, int opt_flags));
++ static void check_winopt __ARGS((winopt_T *wop));
+  static int wc_use_keyname __ARGS((char_u *varp, long *wcp));
+  #ifdef FEAT_LANGMAP
+  static void langmap_init __ARGS((void));
+***************
+*** 10305,10311 ****
+  /*
+   * Check for NULL pointers in a winopt_T and replace them with empty_option.
+   */
+!     void
+  check_winopt(wop)
+      winopt_T	*wop UNUSED;
+  {
+--- 10306,10312 ----
+  /*
+   * Check for NULL pointers in a winopt_T and replace them with empty_option.
+   */
+!     static void
+  check_winopt(wop)
+      winopt_T	*wop UNUSED;
+  {
+*** ../vim-7.4.338/src/proto/option.pro	2014-06-25 14:39:35.110348584 +0200
+--- src/proto/option.pro	2014-06-25 14:42:38.702355530 +0200
+***************
+*** 40,46 ****
+  void win_copy_options __ARGS((win_T *wp_from, win_T *wp_to));
+  void copy_winopt __ARGS((winopt_T *from, winopt_T *to));
+  void check_win_options __ARGS((win_T *win));
+- void check_winopt __ARGS((winopt_T *wop));
+  void clear_winopt __ARGS((winopt_T *wop));
+  void buf_copy_options __ARGS((buf_T *buf, int flags));
+  void reset_modifiable __ARGS((void));
+--- 40,45 ----
+*** ../vim-7.4.338/src/version.c	2014-06-25 14:39:35.114348584 +0200
+--- src/version.c	2014-06-25 14:43:41.502357905 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     339,
+  /**/
+
+-- 
+MORTICIAN:    What?
+CUSTOMER:     Nothing -- here's your nine pence.
+DEAD PERSON:  I'm not dead!
+MORTICIAN:    Here -- he says he's not dead!
+CUSTOMER:     Yes, he is.
+DEAD PERSON:  I'm not!
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.340 b/SOURCES/7.4.340
new file mode 100644
index 0000000..f469420
--- /dev/null
+++ b/SOURCES/7.4.340
@@ -0,0 +1,97 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.340
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.340
+Problem:    Error from sed about illegal bytes when installing Vim.
+Solution:   Prepend LC_ALL=C. (Itchyny)
+Files:	    src/installman.sh
+
+
+*** ../vim-7.4.339/src/installman.sh	2010-05-15 13:04:07.000000000 +0200
+--- src/installman.sh	2014-06-25 14:54:11.742381748 +0200
+***************
+*** 43,52 ****
+     fi
+  fi
+  
+  if test $what = "install"; then
+     # vim.1
+     echo installing $destdir/$exename.1
+!    sed -e s+/usr/local/lib/vim+$vimloc+ \
+  	   -e s+$vimloc/doc+$helpsubloc+ \
+  	   -e s+$vimloc/print+$printsubloc+ \
+  	   -e s+$vimloc/syntax+$synsubloc+ \
+--- 43,55 ----
+     fi
+  fi
+  
++ # Note: setting LC_ALL to C is required to avoid illegal byte errors from sed
++ # on some systems.
++ 
+  if test $what = "install"; then
+     # vim.1
+     echo installing $destdir/$exename.1
+!    LC_ALL=C sed -e s+/usr/local/lib/vim+$vimloc+ \
+  	   -e s+$vimloc/doc+$helpsubloc+ \
+  	   -e s+$vimloc/print+$printsubloc+ \
+  	   -e s+$vimloc/syntax+$synsubloc+ \
+***************
+*** 64,70 ****
+  
+     # vimtutor.1
+     echo installing $destdir/$exename""tutor.1
+!    sed -e s+/usr/local/lib/vim+$vimloc+ \
+  	   -e s+$vimloc/tutor+$tutorsubloc+ \
+  	   $helpsource/vimtutor$langadd.1 > $destdir/$exename""tutor.1
+     chmod $manmod $destdir/$exename""tutor.1
+--- 67,73 ----
+  
+     # vimtutor.1
+     echo installing $destdir/$exename""tutor.1
+!    LC_ALL=C sed -e s+/usr/local/lib/vim+$vimloc+ \
+  	   -e s+$vimloc/tutor+$tutorsubloc+ \
+  	   $helpsource/vimtutor$langadd.1 > $destdir/$exename""tutor.1
+     chmod $manmod $destdir/$exename""tutor.1
+***************
+*** 76,82 ****
+  
+     # evim.1
+     echo installing $destdir/$evimname.1
+!    sed -e s+/usr/local/lib/vim+$vimloc+ \
+  	   -e s+$vimloc/evim.vim+$scriptloc/evim.vim+ \
+  	   $helpsource/evim$langadd.1 > $destdir/$evimname.1
+     chmod $manmod $destdir/$evimname.1
+--- 79,85 ----
+  
+     # evim.1
+     echo installing $destdir/$evimname.1
+!    LC_ALL=C sed -e s+/usr/local/lib/vim+$vimloc+ \
+  	   -e s+$vimloc/evim.vim+$scriptloc/evim.vim+ \
+  	   $helpsource/evim$langadd.1 > $destdir/$evimname.1
+     chmod $manmod $destdir/$evimname.1
+*** ../vim-7.4.339/src/version.c	2014-06-25 14:44:04.458358774 +0200
+--- src/version.c	2014-06-25 14:55:14.198384111 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     340,
+  /**/
+
+-- 
+DEAD PERSON:  I'm getting better!
+CUSTOMER:     No, you're not -- you'll be stone dead in a moment.
+MORTICIAN:    Oh, I can't take him like that -- it's against regulations.
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.341 b/SOURCES/7.4.341
new file mode 100644
index 0000000..061828a
--- /dev/null
+++ b/SOURCES/7.4.341
@@ -0,0 +1,178 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.341
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.341
+Problem:    sort() doesn't handle numbers well.
+Solution:   Add an argument to specify sorting on numbers. (Christian Brabandt)
+Files:	    runtime/doc/eval.txt, src/eval.c, src/testdir/test55.in,
+	    src/testdir/test55.ok
+
+
+*** ../vim-7.4.340/runtime/doc/eval.txt	2014-06-25 14:39:35.094348583 +0200
+--- runtime/doc/eval.txt	2014-06-25 17:05:50.606680574 +0200
+***************
+*** 5618,5628 ****
+  		
+  		If you want a list to remain unmodified make a copy first: >
+  			:let sortedlist = sort(copy(mylist))
+- <		Uses the string representation of each item to sort on.
+- 		Numbers sort after Strings, |Lists| after Numbers.
+- 		For sorting text in the current buffer use |:sort|.
+  
+! 		When {func} is given and it is one then case is ignored.
+  		When {func} is a |Funcref| or a function name, this function
+  		is called to compare items.  The function is invoked with two
+  		items as argument and must return zero if they are equal, 1 or
+--- 5628,5647 ----
+  		
+  		If you want a list to remain unmodified make a copy first: >
+  			:let sortedlist = sort(copy(mylist))
+  
+! <		When {func} is omitted, is empty or zero, then sort() uses the
+! 		string representation of each item to sort on.  Numbers sort
+! 		after Strings, |Lists| after Numbers.  For sorting text in the
+! 		current buffer use |:sort|.
+! 
+! 		When {func} is given and it is is '1' or 'i' then case is
+! 		ignored.
+! 		
+! 		When {func} is given and it is 'n' then all items will be
+! 		sorted numerical (Implementation detail: This uses the
+! 		strtod() function to parse numbers, Strings, Lists, Dicts and
+! 		Funcrefs will be considered as being 0).
+! 
+  		When {func} is a |Funcref| or a function name, this function
+  		is called to compare items.  The function is invoked with two
+  		items as argument and must return zero if they are equal, 1 or
+*** ../vim-7.4.340/src/eval.c	2014-06-17 17:48:21.776628008 +0200
+--- src/eval.c	2014-06-25 17:23:05.466719724 +0200
+***************
+*** 17330,17335 ****
+--- 17330,17336 ----
+  	item_compare2 __ARGS((const void *s1, const void *s2));
+  
+  static int	item_compare_ic;
++ static int	item_compare_numeric;
+  static char_u	*item_compare_func;
+  static dict_T	*item_compare_selfdict;
+  static int	item_compare_func_err;
+***************
+*** 17359,17368 ****
+  	p1 = (char_u *)"";
+      if (p2 == NULL)
+  	p2 = (char_u *)"";
+!     if (item_compare_ic)
+! 	res = STRICMP(p1, p2);
+      else
+! 	res = STRCMP(p1, p2);
+      vim_free(tofree1);
+      vim_free(tofree2);
+      return res;
+--- 17360,17379 ----
+  	p1 = (char_u *)"";
+      if (p2 == NULL)
+  	p2 = (char_u *)"";
+!     if (!item_compare_numeric)
+!     {
+! 	if (item_compare_ic)
+! 	    res = STRICMP(p1, p2);
+! 	else
+! 	    res = STRCMP(p1, p2);
+!     }
+      else
+!     {
+! 	double n1, n2;
+! 	n1 = strtod((char *)p1, (char **)&p1);
+! 	n2 = strtod((char *)p2, (char **)&p2);
+! 	res = n1 == n2 ? 0 : n1 > n2 ? 1 : -1;
+!     }
+      vim_free(tofree1);
+      vim_free(tofree2);
+      return res;
+***************
+*** 17439,17444 ****
+--- 17450,17456 ----
+  	    return;	/* short list sorts pretty quickly */
+  
+  	item_compare_ic = FALSE;
++ 	item_compare_numeric = FALSE;
+  	item_compare_func = NULL;
+  	item_compare_selfdict = NULL;
+  	if (argvars[1].v_type != VAR_UNKNOWN)
+***************
+*** 17457,17462 ****
+--- 17469,17487 ----
+  		    item_compare_ic = TRUE;
+  		else
+  		    item_compare_func = get_tv_string(&argvars[1]);
++ 		if (item_compare_func != NULL)
++ 		{
++ 		    if (STRCMP(item_compare_func, "n") == 0)
++ 		    {
++ 			item_compare_func = NULL;
++ 			item_compare_numeric = TRUE;
++ 		    }
++ 		    else if (STRCMP(item_compare_func, "i") == 0)
++ 		    {
++ 			item_compare_func = NULL;
++ 			item_compare_ic = TRUE;
++ 		    }
++ 		}
+  	    }
+  
+  	    if (argvars[2].v_type != VAR_UNKNOWN)
+*** ../vim-7.4.340/src/testdir/test55.in	2014-03-25 18:23:27.062087691 +0100
+--- src/testdir/test55.in	2014-06-25 17:20:47.006714486 +0200
+***************
+*** 332,337 ****
+--- 332,342 ----
+  :$put =string(reverse(sort(l)))
+  :$put =string(sort(reverse(sort(l))))
+  :$put =string(uniq(sort(l)))
++ :let l=[7, 9, 18, 12, 22, 10.0e-16, -1, 0xff, 0, -0, 0.22, 'foo', 'FOOBAR',{}, []]
++ :$put =string(sort(copy(l), 'n'))
++ :$put =string(sort(copy(l), 1))
++ :$put =string(sort(copy(l), 'i'))
++ :$put =string(sort(copy(l)))
+  :"
+  :" splitting a string to a List
+  :$put =string(split('  aa  bb '))
+*** ../vim-7.4.340/src/testdir/test55.ok	2014-03-25 18:23:27.062087691 +0100
+--- src/testdir/test55.ok	2014-06-25 17:23:31.382720704 +0200
+***************
+*** 101,106 ****
+--- 101,110 ----
+  [[0, 1, 2], [0, 1, 2], 4, 2, 2, 1.5, 'xaaa', 'x8', 'foo6', 'foo', 'foo', 'A11', '-0']
+  ['-0', 'A11', 'foo', 'foo', 'foo6', 'x8', 'xaaa', 1.5, 2, 2, 4, [0, 1, 2], [0, 1, 2]]
+  ['-0', 'A11', 'foo', 'foo6', 'x8', 'xaaa', 1.5, 2, 4, [0, 1, 2]]
++ [-1, 0, 0, 'foo', 'FOOBAR', {}, [], 1.0e-15, 0.22, 7, 9, 12, 18, 22, 255]
++ ['foo', 'FOOBAR', -1, 0, 0, 0.22, 1.0e-15, 12, 18, 22, 255, 7, 9, [], {}]
++ ['foo', 'FOOBAR', -1, 0, 0, 0.22, 1.0e-15, 12, 18, 22, 255, 7, 9, [], {}]
++ ['FOOBAR', 'foo', -1, 0, 0, 0.22, 1.0e-15, 12, 18, 22, 255, 7, 9, [], {}]
+  ['aa', 'bb']
+  ['aa', 'bb']
+  ['', 'aa', 'bb', '']
+*** ../vim-7.4.340/src/version.c	2014-06-25 15:02:29.250400570 +0200
+--- src/version.c	2014-06-25 16:46:45.438637250 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     341,
+  /**/
+
+-- 
+We do not stumble over mountains, but over molehills.
+				Confucius
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.342 b/SOURCES/7.4.342
new file mode 100644
index 0000000..8bdc72e
--- /dev/null
+++ b/SOURCES/7.4.342
@@ -0,0 +1,67 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.342
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.342
+Problem:    Clang gives warnings.
+Solution:   Add an else block. (Dominique Pelle)
+Files:	    src/gui_beval.c
+
+
+*** ../vim-7.4.341/src/gui_beval.c	2013-05-06 04:06:04.000000000 +0200
+--- src/gui_beval.c	2014-06-25 17:40:40.818759649 +0200
+***************
+*** 1193,1203 ****
+  	    XmFontList fl;
+  
+  	    fl = gui_motif_fontset2fontlist(&gui.tooltip_fontset);
+! 	    if (fl != NULL)
+  	    {
+! 		XmStringExtent(fl, s, &w, &h);
+! 		XmFontListFree(fl);
+  	    }
+  	}
+  	w += gui.border_offset << 1;
+  	h += gui.border_offset << 1;
+--- 1193,1205 ----
+  	    XmFontList fl;
+  
+  	    fl = gui_motif_fontset2fontlist(&gui.tooltip_fontset);
+! 	    if (fl == NULL)
+  	    {
+! 		XmStringFree(s);
+! 		return;
+  	    }
++ 	    XmStringExtent(fl, s, &w, &h);
++ 	    XmFontListFree(fl);
+  	}
+  	w += gui.border_offset << 1;
+  	h += gui.border_offset << 1;
+*** ../vim-7.4.341/src/version.c	2014-06-25 17:31:04.942737863 +0200
+--- src/version.c	2014-06-25 17:40:56.902760258 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     342,
+  /**/
+
+-- 
+CUSTOMER:     Well, can you hang around a couple of minutes?  He won't be
+              long.
+MORTICIAN:    Naaah, I got to go on to Robinson's -- they've lost nine today.
+CUSTOMER:     Well, when is your next round?
+MORTICIAN:    Thursday.
+DEAD PERSON:  I think I'll go for a walk.
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.343 b/SOURCES/7.4.343
new file mode 100644
index 0000000..141d981
--- /dev/null
+++ b/SOURCES/7.4.343
@@ -0,0 +1,60 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.343
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.343
+Problem:    matchdelete() does not always update the right lines.
+Solution:   Fix off-by-one error.  (Ozaki Kiichi)
+Files:	    src/window.c
+
+
+*** ../vim-7.4.342/src/window.c	2014-06-18 21:20:07.236377308 +0200
+--- src/window.c	2014-06-25 17:55:34.190793447 +0200
+***************
+*** 6891,6898 ****
+  	    }
+  	    if (toplnum == 0 || lnum < toplnum)
+  		toplnum = lnum;
+! 	    if (botlnum == 0 || lnum > botlnum)
+! 		botlnum = lnum;
+  	}
+  
+  	/* Calculate top and bottom lines for redrawing area */
+--- 6891,6898 ----
+  	    }
+  	    if (toplnum == 0 || lnum < toplnum)
+  		toplnum = lnum;
+! 	    if (botlnum == 0 || lnum >= botlnum)
+! 		botlnum = lnum + 1;
+  	}
+  
+  	/* Calculate top and bottom lines for redrawing area */
+*** ../vim-7.4.342/src/version.c	2014-06-25 17:44:45.850768919 +0200
+--- src/version.c	2014-06-25 17:54:14.258790423 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     343,
+  /**/
+
+-- 
+CUSTOMER:     You're not fooling anyone y'know.  Look, isn't there something
+              you can do?
+DEAD PERSON:  I feel happy... I feel happy.
+    [whop]
+CUSTOMER:     Ah, thanks very much.
+MORTICIAN:    Not at all.  See you on Thursday.
+CUSTOMER:     Right.
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.344 b/SOURCES/7.4.344
new file mode 100644
index 0000000..3b619e7
--- /dev/null
+++ b/SOURCES/7.4.344
@@ -0,0 +1,180 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.344
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.344
+Problem:    Unessecary initializations and other things related to
+	    matchaddpos().
+Solution:   Code cleanup. (Alexey Radkov)
+Files:	    runtime/doc/eval.txt, src/screen.c, src/window.c
+
+
+*** ../vim-7.4.343/runtime/doc/eval.txt	2014-06-25 17:31:04.934737863 +0200
+--- runtime/doc/eval.txt	2014-06-25 18:08:50.790823583 +0200
+***************
+*** 4353,4369 ****
+  		required, for example to highlight matching parentheses.
+  
+  		The list {pos} can contain one of these items:
+! 		- A number.  This while line will be highlighted.  The first
+  		  line has number 1.
+  		- A list with one number, e.g., [23]. The whole line with this
+  		  number will be highlighted.
+  		- A list with two numbers, e.g., [23, 11]. The first number is
+! 		  the line number, the second one the column number (first
+! 		  column is 1).  The character at this position will be
+! 		  highlighted.
+  		- A list with three numbers, e.g., [23, 11, 3]. As above, but
+! 		  the third number gives the length of the highlight in screen
+! 		  cells.
+  		
+  		The maximum number of positions is 8.
+  
+--- 4391,4407 ----
+  		required, for example to highlight matching parentheses.
+  
+  		The list {pos} can contain one of these items:
+! 		- A number.  This whole line will be highlighted.  The first
+  		  line has number 1.
+  		- A list with one number, e.g., [23]. The whole line with this
+  		  number will be highlighted.
+  		- A list with two numbers, e.g., [23, 11]. The first number is
+! 		  the line number, the second one is the column number (first
+! 		  column is 1, the value must correspond to the byte index as
+! 		  |col()| would return).  The character at this position will
+! 		  be highlighted.
+  		- A list with three numbers, e.g., [23, 11, 3]. As above, but
+! 		  the third number gives the length of the highlight in bytes.
+  		
+  		The maximum number of positions is 8.
+  
+*** ../vim-7.4.343/src/screen.c	2014-06-25 14:39:35.110348584 +0200
+--- src/screen.c	2014-06-25 18:10:11.906826652 +0200
+***************
+*** 7531,7537 ****
+      colnr_T	    mincol;	/* minimal column for a match */
+  {
+      int	    i;
+!     int     bot = -1;
+  
+      shl->lnum = 0;
+      for (i = posmatch->cur; i < MAXPOSMATCH; i++)
+--- 7531,7537 ----
+      colnr_T	    mincol;	/* minimal column for a match */
+  {
+      int	    i;
+!     int	    bot = -1;
+  
+      shl->lnum = 0;
+      for (i = posmatch->cur; i < MAXPOSMATCH; i++)
+*** ../vim-7.4.343/src/window.c	2014-06-25 17:58:07.346799241 +0200
+--- src/window.c	2014-06-25 18:10:45.698827930 +0200
+***************
+*** 6813,6819 ****
+      m->id = id;
+      m->priority = prio;
+      m->pattern = pat == NULL ? NULL : vim_strsave(pat);
+-     m->pos.cur = 0;
+      m->hlg_id = hlg_id;
+      m->match.regprog = regprog;
+      m->match.rmm_ic = FALSE;
+--- 6813,6818 ----
+***************
+*** 6827,6833 ****
+  	listitem_T	*li;
+  	int		i;
+  
+! 	for (i = 0, li = pos_list->lv_first; i < MAXPOSMATCH;
+  							i++, li = li->li_next)
+  	{
+  	    linenr_T	lnum = 0;
+--- 6826,6832 ----
+  	listitem_T	*li;
+  	int		i;
+  
+! 	for (i = 0, li = pos_list->lv_first; li != NULL && i < MAXPOSMATCH;
+  							i++, li = li->li_next)
+  	{
+  	    linenr_T	lnum = 0;
+***************
+*** 6837,6847 ****
+  	    listitem_T	*subli;
+  	    int		error = FALSE;
+  
+- 	    if (li == NULL)
+- 	    {
+- 		m->pos.pos[i].lnum = 0;
+- 		break;
+- 	    }
+  	    if (li->li_tv.v_type == VAR_LIST)
+  	    {
+  		subl = li->li_tv.vval.v_list;
+--- 6836,6841 ----
+***************
+*** 6853,6864 ****
+  		lnum = get_tv_number_chk(&subli->li_tv, &error);
+  		if (error == TRUE)
+  		    goto fail;
+- 		m->pos.pos[i].lnum = lnum;
+  		if (lnum == 0)
+  		{
+  		    --i;
+  		    continue;
+  		}
+  		subli = subli->li_next;
+  		if (subli != NULL)
+  		{
+--- 6847,6858 ----
+  		lnum = get_tv_number_chk(&subli->li_tv, &error);
+  		if (error == TRUE)
+  		    goto fail;
+  		if (lnum == 0)
+  		{
+  		    --i;
+  		    continue;
+  		}
++ 		m->pos.pos[i].lnum = lnum;
+  		subli = subli->li_next;
+  		if (subli != NULL)
+  		{
+***************
+*** 6879,6885 ****
+--- 6873,6882 ----
+  	    else if (li->li_tv.v_type == VAR_NUMBER)
+  	    {
+  		if (li->li_tv.vval.v_number == 0)
++ 		{
++ 		    --i;
+  		    continue;
++ 		}
+  		m->pos.pos[i].lnum = li->li_tv.vval.v_number;
+  		m->pos.pos[i].col = 0;
+  		m->pos.pos[i].len = 0;
+*** ../vim-7.4.343/src/version.c	2014-06-25 17:58:07.346799241 +0200
+--- src/version.c	2014-06-25 18:07:06.170819625 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     344,
+  /**/
+
+-- 
+    [clop clop]
+MORTICIAN:  Who's that then?
+CUSTOMER:   I don't know.
+MORTICIAN:  Must be a king.
+CUSTOMER:   Why?
+MORTICIAN:  He hasn't got shit all over him.
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.345 b/SOURCES/7.4.345
new file mode 100644
index 0000000..7cac5f6
--- /dev/null
+++ b/SOURCES/7.4.345
@@ -0,0 +1,73 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.345
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.345 (after 7.4.338)
+Problem:    Indent is not updated when deleting indent.
+Solution:   Remember changedtick.
+Files:	    src/misc1.c
+
+
+*** ../vim-7.4.344/src/misc1.c	2014-06-25 14:39:35.106348584 +0200
+--- src/misc1.c	2014-06-25 22:51:32.955465286 +0200
+***************
+*** 497,502 ****
+--- 497,503 ----
+      static int	    prev_indent = 0;  /* cached indent value */
+      static long	    prev_ts     = 0L; /* cached tabstop value */
+      static char_u   *prev_line = NULL; /* cached pointer to line */
++     static int	    prev_tick = 0;   /* changedtick of cached value */
+      int		    bri = 0;
+      /* window width minus window margin space, i.e. what rests for text */
+      const int	    eff_wwidth = W_WIDTH(wp)
+***************
+*** 505,514 ****
+  						? number_width(wp) + 1 : 0);
+  
+      /* used cached indent, unless pointer or 'tabstop' changed */
+!     if (prev_line != line || prev_ts != wp->w_buffer->b_p_ts)
+      {
+  	prev_line = line;
+  	prev_ts = wp->w_buffer->b_p_ts;
+  	prev_indent = get_indent_str(line,
+  		  (int)wp->w_buffer->b_p_ts, wp->w_p_list) + wp->w_p_brishift;
+      }
+--- 506,517 ----
+  						? number_width(wp) + 1 : 0);
+  
+      /* used cached indent, unless pointer or 'tabstop' changed */
+!     if (prev_line != line || prev_ts != wp->w_buffer->b_p_ts
+! 				  || prev_tick != wp->w_buffer->b_changedtick)
+      {
+  	prev_line = line;
+  	prev_ts = wp->w_buffer->b_p_ts;
++ 	prev_tick = wp->w_buffer->b_changedtick;
+  	prev_indent = get_indent_str(line,
+  		  (int)wp->w_buffer->b_p_ts, wp->w_p_list) + wp->w_p_brishift;
+      }
+*** ../vim-7.4.344/src/version.c	2014-06-25 18:15:18.446838249 +0200
+--- src/version.c	2014-06-25 22:52:55.971468427 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     345,
+  /**/
+
+-- 
+ARTHUR:  Well, I can't just call you `Man'.
+DENNIS:  Well, you could say `Dennis'.
+ARTHUR:  Well, I didn't know you were called `Dennis.'
+DENNIS:  Well, you didn't bother to find out, did you?
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.346 b/SOURCES/7.4.346
new file mode 100644
index 0000000..a40278e
--- /dev/null
+++ b/SOURCES/7.4.346
@@ -0,0 +1,61 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.346
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.346 (after 7.4.338)
+Problem:    Indent is not updated when changing 'breakindentopt'. (itchyny)
+Solution:   Do not cache "brishift". (Christian Brabandt)
+Files:	    src/misc1.c
+
+
+*** ../vim-7.4.345/src/misc1.c	2014-06-25 22:55:34.783474435 +0200
+--- src/misc1.c	2014-06-26 21:15:46.970516542 +0200
+***************
+*** 513,523 ****
+  	prev_ts = wp->w_buffer->b_p_ts;
+  	prev_tick = wp->w_buffer->b_changedtick;
+  	prev_indent = get_indent_str(line,
+! 		  (int)wp->w_buffer->b_p_ts, wp->w_p_list) + wp->w_p_brishift;
+      }
+  
+      /* indent minus the length of the showbreak string */
+-     bri = prev_indent;
+      if (wp->w_p_brisbr)
+  	bri -= vim_strsize(p_sbr);
+  
+--- 513,523 ----
+  	prev_ts = wp->w_buffer->b_p_ts;
+  	prev_tick = wp->w_buffer->b_changedtick;
+  	prev_indent = get_indent_str(line,
+! 				     (int)wp->w_buffer->b_p_ts, wp->w_p_list);
+      }
++     bri = prev_indent + wp->w_p_brishift;
+  
+      /* indent minus the length of the showbreak string */
+      if (wp->w_p_brisbr)
+  	bri -= vim_strsize(p_sbr);
+  
+*** ../vim-7.4.345/src/version.c	2014-06-25 22:55:34.783474435 +0200
+--- src/version.c	2014-06-26 21:17:10.342519697 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     346,
+  /**/
+
+-- 
+A computer programmer is a device for turning requirements into
+undocumented features.  It runs on cola, pizza and Dilbert cartoons.
+					Bram Moolenaar
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.347 b/SOURCES/7.4.347
new file mode 100644
index 0000000..7b6b6dd
--- /dev/null
+++ b/SOURCES/7.4.347
@@ -0,0 +1,74 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.347
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.347
+Problem:    test55 fails on some systems.
+Solution:   Remove the elements that all result in zero and can end up in an
+	    arbitrary position.
+Files:	    src/testdir/test55.in, src/testdir/test55.ok
+
+
+*** ../vim-7.4.346/src/testdir/test55.in	2014-06-25 17:31:04.942737863 +0200
+--- src/testdir/test55.in	2014-06-26 22:25:33.078674909 +0200
+***************
+*** 332,339 ****
+  :$put =string(reverse(sort(l)))
+  :$put =string(sort(reverse(sort(l))))
+  :$put =string(uniq(sort(l)))
+! :let l=[7, 9, 18, 12, 22, 10.0e-16, -1, 0xff, 0, -0, 0.22, 'foo', 'FOOBAR',{}, []]
+  :$put =string(sort(copy(l), 'n'))
+  :$put =string(sort(copy(l), 1))
+  :$put =string(sort(copy(l), 'i'))
+  :$put =string(sort(copy(l)))
+--- 332,340 ----
+  :$put =string(reverse(sort(l)))
+  :$put =string(sort(reverse(sort(l))))
+  :$put =string(uniq(sort(l)))
+! :let l=[7, 9, 18, 12, 22, 10.0e-16, -1, 0xff, 0.22, 'foo']
+  :$put =string(sort(copy(l), 'n'))
++ :let l=[7, 9, 18, 12, 22, 10.0e-16, -1, 0xff, 0, -0, 0.22, 'foo', 'FOOBAR',{}, []]
+  :$put =string(sort(copy(l), 1))
+  :$put =string(sort(copy(l), 'i'))
+  :$put =string(sort(copy(l)))
+*** ../vim-7.4.346/src/testdir/test55.ok	2014-06-25 17:31:04.942737863 +0200
+--- src/testdir/test55.ok	2014-06-26 22:26:38.662677390 +0200
+***************
+*** 101,107 ****
+  [[0, 1, 2], [0, 1, 2], 4, 2, 2, 1.5, 'xaaa', 'x8', 'foo6', 'foo', 'foo', 'A11', '-0']
+  ['-0', 'A11', 'foo', 'foo', 'foo6', 'x8', 'xaaa', 1.5, 2, 2, 4, [0, 1, 2], [0, 1, 2]]
+  ['-0', 'A11', 'foo', 'foo6', 'x8', 'xaaa', 1.5, 2, 4, [0, 1, 2]]
+! [-1, 0, 0, 'foo', 'FOOBAR', {}, [], 1.0e-15, 0.22, 7, 9, 12, 18, 22, 255]
+  ['foo', 'FOOBAR', -1, 0, 0, 0.22, 1.0e-15, 12, 18, 22, 255, 7, 9, [], {}]
+  ['foo', 'FOOBAR', -1, 0, 0, 0.22, 1.0e-15, 12, 18, 22, 255, 7, 9, [], {}]
+  ['FOOBAR', 'foo', -1, 0, 0, 0.22, 1.0e-15, 12, 18, 22, 255, 7, 9, [], {}]
+--- 101,107 ----
+  [[0, 1, 2], [0, 1, 2], 4, 2, 2, 1.5, 'xaaa', 'x8', 'foo6', 'foo', 'foo', 'A11', '-0']
+  ['-0', 'A11', 'foo', 'foo', 'foo6', 'x8', 'xaaa', 1.5, 2, 2, 4, [0, 1, 2], [0, 1, 2]]
+  ['-0', 'A11', 'foo', 'foo6', 'x8', 'xaaa', 1.5, 2, 4, [0, 1, 2]]
+! [-1, 'foo', 1.0e-15, 0.22, 7, 9, 12, 18, 22, 255]
+  ['foo', 'FOOBAR', -1, 0, 0, 0.22, 1.0e-15, 12, 18, 22, 255, 7, 9, [], {}]
+  ['foo', 'FOOBAR', -1, 0, 0, 0.22, 1.0e-15, 12, 18, 22, 255, 7, 9, [], {}]
+  ['FOOBAR', 'foo', -1, 0, 0, 0.22, 1.0e-15, 12, 18, 22, 255, 7, 9, [], {}]
+*** ../vim-7.4.346/src/version.c	2014-06-26 21:24:53.134537205 +0200
+--- src/version.c	2014-06-26 22:28:15.402681050 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     347,
+  /**/
+
+-- 
+Witches prefer brooms: vacuum-cleaners need extension cords!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.348 b/SOURCES/7.4.348
new file mode 100644
index 0000000..c881719
--- /dev/null
+++ b/SOURCES/7.4.348
@@ -0,0 +1,58 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.348
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.348
+Problem:    When using "J1" in 'cinoptions' a line below a continuation line
+	    gets too much indent.
+Solution:   Fix parenthesis in condition.
+Files:	    src/misc1.c
+
+
+*** ../vim-7.4.347/src/misc1.c	2014-06-26 21:24:53.134537205 +0200
+--- src/misc1.c	2014-07-02 16:58:08.854208322 +0200
+***************
+*** 7497,7505 ****
+  	     *			ldfd) {
+  	     *		    }
+  	     */
+! 	    if (curbuf->b_ind_js || (curbuf->b_ind_keep_case_label
+! 			   && cin_iscase(skipwhite(ml_get_curline()), FALSE)))
+  		amount = get_indent();
+  	    else
+  		amount = skip_label(lnum, &l);
+  
+--- 7497,7507 ----
+  	     *			ldfd) {
+  	     *		    }
+  	     */
+! 	    if ((curbuf->b_ind_js || curbuf->b_ind_keep_case_label)
+! 			   && cin_iscase(skipwhite(ml_get_curline()), FALSE))
+  		amount = get_indent();
++ 	    else if (curbuf->b_ind_js)
++ 		amount = get_indent_lnum(lnum);
+  	    else
+  		amount = skip_label(lnum, &l);
+  
+*** ../vim-7.4.347/src/version.c	2014-06-26 22:33:47.850693627 +0200
+--- src/version.c	2014-07-02 16:46:14.934197383 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     348,
+  /**/
+
+-- 
+5 out of 4 people have trouble with fractions.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.349 b/SOURCES/7.4.349
new file mode 100644
index 0000000..ce23202
--- /dev/null
+++ b/SOURCES/7.4.349
@@ -0,0 +1,111 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.349
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.349
+Problem:    When there are matches to highlight the whole window is redrawn,
+	    which is slow.
+Solution:   Only redraw everything when lines were inserted or deleted.
+	    Reset b_mod_xlines when needed.  (Alexey Radkov)
+Files:	    src/screen.c, src/window.c
+
+
+*** ../vim-7.4.348/src/screen.c	2014-06-25 18:15:18.446838249 +0200
+--- src/screen.c	2014-06-28 15:35:18.868836570 +0200
+***************
+*** 1769,1776 ****
+  					syntax_check_changed(lnum)))
+  #endif
+  #ifdef FEAT_SEARCH_EXTRA
+! 				/* match in fixed position might need redraw */
+! 				||  wp->w_match_head != NULL
+  #endif
+  				)))))
+  	{
+--- 1769,1778 ----
+  					syntax_check_changed(lnum)))
+  #endif
+  #ifdef FEAT_SEARCH_EXTRA
+! 				/* match in fixed position might need redraw
+! 				 * if lines were inserted or deleted */
+! 				|| (wp->w_match_head != NULL
+! 						    && buf->b_mod_xlines != 0)
+  #endif
+  				)))))
+  	{
+*** ../vim-7.4.348/src/window.c	2014-06-25 18:15:18.446838249 +0200
+--- src/window.c	2014-06-28 15:38:51.952839835 +0200
+***************
+*** 6904,6915 ****
+  	    }
+  	    else
+  	    {
+  		wp->w_buffer->b_mod_top = toplnum;
+  		wp->w_buffer->b_mod_bot = botlnum;
+  	    }
+  	    m->pos.toplnum = toplnum;
+  	    m->pos.botlnum = botlnum;
+- 	    wp->w_buffer->b_mod_set = TRUE;
+  	    rtype = VALID;
+  	}
+      }
+--- 6904,6916 ----
+  	    }
+  	    else
+  	    {
++ 		wp->w_buffer->b_mod_set = TRUE;
+  		wp->w_buffer->b_mod_top = toplnum;
+  		wp->w_buffer->b_mod_bot = botlnum;
++ 		wp->w_buffer->b_mod_xlines = 0;
+  	    }
+  	    m->pos.toplnum = toplnum;
+  	    m->pos.botlnum = botlnum;
+  	    rtype = VALID;
+  	}
+      }
+***************
+*** 6986,6995 ****
+  	}
+  	else
+  	{
+  	    wp->w_buffer->b_mod_top = cur->pos.toplnum;
+  	    wp->w_buffer->b_mod_bot = cur->pos.botlnum;
+  	}
+- 	wp->w_buffer->b_mod_set = TRUE;
+  	rtype = VALID;
+      }
+      vim_free(cur);
+--- 6987,6997 ----
+  	}
+  	else
+  	{
++ 	    wp->w_buffer->b_mod_set = TRUE;
+  	    wp->w_buffer->b_mod_top = cur->pos.toplnum;
+  	    wp->w_buffer->b_mod_bot = cur->pos.botlnum;
++ 	    wp->w_buffer->b_mod_xlines = 0;
+  	}
+  	rtype = VALID;
+      }
+      vim_free(cur);
+*** ../vim-7.4.348/src/version.c	2014-07-02 17:02:29.726212319 +0200
+--- src/version.c	2014-07-02 17:15:58.646224714 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     349,
+  /**/
+
+-- 
+Trees moving back and forth is what makes the wind blow.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.350 b/SOURCES/7.4.350
new file mode 100644
index 0000000..1c4a5a3
--- /dev/null
+++ b/SOURCES/7.4.350
@@ -0,0 +1,139 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.350
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.350
+Problem:    Using C indenting for Javascript does not work well for a {} block
+	    inside parenthesis.
+Solution:   When looking for a matching paren ignore one that is before the
+	    start of a {} block.
+Files:	    src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../vim-7.4.349/src/misc1.c	2014-07-02 17:02:29.722212319 +0200
+--- src/misc1.c	2014-07-02 18:09:39.670274070 +0200
+***************
+*** 6614,6620 ****
+  }
+  
+  /*
+!  * Find the matching '(', failing if it is in a comment.
+   * Return NULL if no match found.
+   */
+      static pos_T *
+--- 6614,6620 ----
+  }
+  
+  /*
+!  * Find the matching '(', ignoring it if it is in a comment.
+   * Return NULL if no match found.
+   */
+      static pos_T *
+***************
+*** 6645,6650 ****
+--- 6645,6676 ----
+  }
+  
+  /*
++  * Find the matching '(', ignoring it if it is in a comment or before an
++  * unmatched {.
++  * Return NULL if no match found.
++  */
++     static pos_T *
++ find_match_paren_after_brace(ind_maxparen)	    /* XXX */
++     int		ind_maxparen;
++ {
++     pos_T	*trypos = find_match_paren(ind_maxparen);
++ 
++     if (trypos != NULL)
++     {
++ 	pos_T	*tryposBrace = find_start_brace();
++ 
++ 	/* If both an unmatched '(' and '{' is found.  Ignore the '('
++ 	 * position if the '{' is further down. */
++ 	if (tryposBrace != NULL
++ 		&& (trypos->lnum != tryposBrace->lnum
++ 		    ? trypos->lnum < tryposBrace->lnum
++ 		    : trypos->col < tryposBrace->col))
++ 	    trypos = NULL;
++     }
++     return trypos;
++ }
++ 
++ /*
+   * Return ind_maxparen corrected for the difference in line number between the
+   * cursor position and "startpos".  This makes sure that searching for a
+   * matching paren above the cursor line doesn't find a match because of
+***************
+*** 7419,7425 ****
+  		{
+  		    curwin->w_cursor.lnum = our_paren_pos.lnum;
+  		    curwin->w_cursor.col = col;
+! 		    if (find_match_paren(curbuf->b_ind_maxparen) != NULL)
+  			amount += curbuf->b_ind_unclosed2;
+  		    else
+  		    {
+--- 7445,7452 ----
+  		{
+  		    curwin->w_cursor.lnum = our_paren_pos.lnum;
+  		    curwin->w_cursor.col = col;
+! 		    if (find_match_paren_after_brace(curbuf->b_ind_maxparen)
+! 								      != NULL)
+  			amount += curbuf->b_ind_unclosed2;
+  		    else
+  		    {
+*** ../vim-7.4.349/src/testdir/test3.in	2013-03-07 12:39:35.000000000 +0100
+--- src/testdir/test3.in	2014-07-02 18:08:06.430272641 +0200
+***************
+*** 1950,1955 ****
+--- 1950,1959 ----
+  JSSTART
+  (function($){
+  
++ if (cond &&
++ cond) {
++ stmt;
++ }
+  var class_name='myclass';
+  
+  function private_method() {
+*** ../vim-7.4.349/src/testdir/test3.ok	2013-03-07 12:40:03.000000000 +0100
+--- src/testdir/test3.ok	2014-07-02 18:09:14.470273684 +0200
+***************
+*** 1728,1733 ****
+--- 1728,1737 ----
+  JSSTART
+  (function($){
+  
++ 	if (cond &&
++ 			cond) {
++ 		stmt;
++ 	}
+  	var class_name='myclass';
+  
+  	function private_method() {
+*** ../vim-7.4.349/src/version.c	2014-07-02 17:16:51.334225522 +0200
+--- src/version.c	2014-07-02 18:06:31.330271184 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     350,
+  /**/
+
+-- 
+FATHER:    You killed eight wedding guests in all!
+LAUNCELOT: Er, Well ... the thing is ... I thought your son was a lady.
+FATHER:    I can understand that.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.351 b/SOURCES/7.4.351
new file mode 100644
index 0000000..0ace333
--- /dev/null
+++ b/SOURCES/7.4.351
@@ -0,0 +1,160 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.351
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.351
+Problem:    sort() is not stable.
+Solution:   When the items are identical, compare the pointers.
+Files:	    src/eval.c, src/testdir/test55.in, src/testdir/test55.ok
+
+
+*** ../vim-7.4.350/src/eval.c	2014-06-25 17:31:04.942737863 +0200
+--- src/eval.c	2014-07-02 18:52:19.102313288 +0200
+***************
+*** 17334,17339 ****
+--- 17334,17340 ----
+  static char_u	*item_compare_func;
+  static dict_T	*item_compare_selfdict;
+  static int	item_compare_func_err;
++ static int	item_compare_keep_zero;
+  static void	do_sort_uniq __ARGS((typval_T *argvars, typval_T *rettv, int sort));
+  #define ITEM_COMPARE_FAIL 999
+  
+***************
+*** 17374,17379 ****
+--- 17375,17386 ----
+  	n2 = strtod((char *)p2, (char **)&p2);
+  	res = n1 == n2 ? 0 : n1 > n2 ? 1 : -1;
+      }
++ 
++     /* When the result would be zero, compare the pointers themselves.  Makes
++      * the sort stable. */
++     if (res == 0 && !item_compare_keep_zero)
++ 	res = s1 > s2 ? 1 : -1;
++ 
+      vim_free(tofree1);
+      vim_free(tofree2);
+      return res;
+***************
+*** 17396,17402 ****
+      if (item_compare_func_err)
+  	return 0;
+  
+!     /* copy the values.  This is needed to be able to set v_lock to VAR_FIXED
+       * in the copy without changing the original list items. */
+      copy_tv(&(*(listitem_T **)s1)->li_tv, &argv[0]);
+      copy_tv(&(*(listitem_T **)s2)->li_tv, &argv[1]);
+--- 17403,17409 ----
+      if (item_compare_func_err)
+  	return 0;
+  
+!     /* Copy the values.  This is needed to be able to set v_lock to VAR_FIXED
+       * in the copy without changing the original list items. */
+      copy_tv(&(*(listitem_T **)s1)->li_tv, &argv[0]);
+      copy_tv(&(*(listitem_T **)s2)->li_tv, &argv[1]);
+***************
+*** 17415,17420 ****
+--- 17422,17433 ----
+      if (item_compare_func_err)
+  	res = ITEM_COMPARE_FAIL;  /* return value has wrong type */
+      clear_tv(&rettv);
++ 
++     /* When the result would be zero, compare the pointers themselves.  Makes
++      * the sort stable. */
++     if (res == 0 && !item_compare_keep_zero)
++ 	res = s1 > s2 ? 1 : -1;
++ 
+      return res;
+  }
+  
+***************
+*** 17509,17514 ****
+--- 17522,17528 ----
+  		ptrs[i++] = li;
+  
+  	    item_compare_func_err = FALSE;
++ 	    item_compare_keep_zero = FALSE;
+  	    /* test the compare function */
+  	    if (item_compare_func != NULL
+  		    && item_compare2((void *)&ptrs[0], (void *)&ptrs[1])
+***************
+*** 17536,17541 ****
+--- 17550,17556 ----
+  
+  	    /* f_uniq(): ptrs will be a stack of items to remove */
+  	    item_compare_func_err = FALSE;
++ 	    item_compare_keep_zero = TRUE;
+  	    item_compare_func_ptr = item_compare_func
+  					       ? item_compare2 : item_compare;
+  
+*** ../vim-7.4.350/src/testdir/test55.in	2014-06-26 22:33:47.850693627 +0200
+--- src/testdir/test55.in	2014-07-02 19:00:09.238320492 +0200
+***************
+*** 332,340 ****
+  :$put =string(reverse(sort(l)))
+  :$put =string(sort(reverse(sort(l))))
+  :$put =string(uniq(sort(l)))
+! :let l=[7, 9, 18, 12, 22, 10.0e-16, -1, 0xff, 0.22, 'foo']
+  :$put =string(sort(copy(l), 'n'))
+! :let l=[7, 9, 18, 12, 22, 10.0e-16, -1, 0xff, 0, -0, 0.22, 'foo', 'FOOBAR',{}, []]
+  :$put =string(sort(copy(l), 1))
+  :$put =string(sort(copy(l), 'i'))
+  :$put =string(sort(copy(l)))
+--- 332,340 ----
+  :$put =string(reverse(sort(l)))
+  :$put =string(sort(reverse(sort(l))))
+  :$put =string(uniq(sort(l)))
+! :let l=[7, 9, 'one', 18, 12, 22, 'two', 10.0e-16, -1, 'three', 0xff, 0.22, 'four']
+  :$put =string(sort(copy(l), 'n'))
+! :let l=[7, 9, 18, 12, 22, 10.0e-16, -1, 0xff, 0, -0, 0.22, 'bar', 'BAR', 'Bar', 'Foo', 'FOO', 'foo', 'FOOBAR', {}, []]
+  :$put =string(sort(copy(l), 1))
+  :$put =string(sort(copy(l), 'i'))
+  :$put =string(sort(copy(l)))
+*** ../vim-7.4.350/src/testdir/test55.ok	2014-06-26 22:33:47.850693627 +0200
+--- src/testdir/test55.ok	2014-07-02 19:00:57.078321225 +0200
+***************
+*** 101,110 ****
+  [[0, 1, 2], [0, 1, 2], 4, 2, 2, 1.5, 'xaaa', 'x8', 'foo6', 'foo', 'foo', 'A11', '-0']
+  ['-0', 'A11', 'foo', 'foo', 'foo6', 'x8', 'xaaa', 1.5, 2, 2, 4, [0, 1, 2], [0, 1, 2]]
+  ['-0', 'A11', 'foo', 'foo6', 'x8', 'xaaa', 1.5, 2, 4, [0, 1, 2]]
+! [-1, 'foo', 1.0e-15, 0.22, 7, 9, 12, 18, 22, 255]
+! ['foo', 'FOOBAR', -1, 0, 0, 0.22, 1.0e-15, 12, 18, 22, 255, 7, 9, [], {}]
+! ['foo', 'FOOBAR', -1, 0, 0, 0.22, 1.0e-15, 12, 18, 22, 255, 7, 9, [], {}]
+! ['FOOBAR', 'foo', -1, 0, 0, 0.22, 1.0e-15, 12, 18, 22, 255, 7, 9, [], {}]
+  ['aa', 'bb']
+  ['aa', 'bb']
+  ['', 'aa', 'bb', '']
+--- 101,110 ----
+  [[0, 1, 2], [0, 1, 2], 4, 2, 2, 1.5, 'xaaa', 'x8', 'foo6', 'foo', 'foo', 'A11', '-0']
+  ['-0', 'A11', 'foo', 'foo', 'foo6', 'x8', 'xaaa', 1.5, 2, 2, 4, [0, 1, 2], [0, 1, 2]]
+  ['-0', 'A11', 'foo', 'foo6', 'x8', 'xaaa', 1.5, 2, 4, [0, 1, 2]]
+! [-1, 'one', 'two', 'three', 'four', 1.0e-15, 0.22, 7, 9, 12, 18, 22, 255]
+! ['bar', 'BAR', 'Bar', 'Foo', 'FOO', 'foo', 'FOOBAR', -1, 0, 0, 0.22, 1.0e-15, 12, 18, 22, 255, 7, 9, [], {}]
+! ['bar', 'BAR', 'Bar', 'Foo', 'FOO', 'foo', 'FOOBAR', -1, 0, 0, 0.22, 1.0e-15, 12, 18, 22, 255, 7, 9, [], {}]
+! ['BAR', 'Bar', 'FOO', 'FOOBAR', 'Foo', 'bar', 'foo', -1, 0, 0, 0.22, 1.0e-15, 12, 18, 22, 255, 7, 9, [], {}]
+  ['aa', 'bb']
+  ['aa', 'bb']
+  ['', 'aa', 'bb', '']
+*** ../vim-7.4.350/src/version.c	2014-07-02 18:27:44.662290695 +0200
+--- src/version.c	2014-07-02 18:46:38.230308065 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     351,
+  /**/
+
+-- 
+The early bird gets the worm. If you want something else for
+breakfast, get up later.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.352 b/SOURCES/7.4.352
new file mode 100644
index 0000000..ecfabb3
--- /dev/null
+++ b/SOURCES/7.4.352
@@ -0,0 +1,101 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.352
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.352
+Problem:    With 'linebreak' a tab causes missing line break.
+Solution:   Count a tab for what it's worth also for shorter lines.
+	    (Christian Brabandt)
+Files:	    src/charset.c
+
+
+*** ../vim-7.4.351/src/charset.c	2014-06-25 14:39:35.098348584 +0200
+--- src/charset.c	2014-07-02 19:34:28.142352040 +0200
+***************
+*** 1078,1083 ****
+--- 1078,1084 ----
+      int		c;
+      int		size;
+      colnr_T	col2;
++     colnr_T	col_adj = 0; /* col + screen size of tab */
+      colnr_T	colmax;
+      int		added;
+  # ifdef FEAT_MBYTE
+***************
+*** 1109,1114 ****
+--- 1110,1117 ----
+       */
+      size = win_chartabsize(wp, s, col);
+      c = *s;
++     if (tab_corr)
++ 	col_adj = size - 1;
+  
+      /*
+       * If 'linebreak' set check at a blank before a non-blank if the line
+***************
+*** 1130,1141 ****
+  	 */
+  	numberextra = win_col_off(wp);
+  	col2 = col;
+! 	colmax = (colnr_T)(W_WIDTH(wp) - numberextra);
+  	if (col >= colmax)
+  	{
+! 	    n = colmax + win_col_off2(wp);
+  	    if (n > 0)
+! 		colmax += (((col - colmax) / n) + 1) * n;
+  	}
+  
+  	for (;;)
+--- 1133,1145 ----
+  	 */
+  	numberextra = win_col_off(wp);
+  	col2 = col;
+! 	colmax = (colnr_T)(W_WIDTH(wp) - numberextra - col_adj);
+  	if (col >= colmax)
+  	{
+! 	    colmax += col_adj;
+! 	    n = colmax +  win_col_off2(wp);
+  	    if (n > 0)
+! 		colmax += (((col - colmax) / n) + 1) * n - col_adj;
+  	}
+  
+  	for (;;)
+***************
+*** 1152,1158 ****
+  	    col2 += win_chartabsize(wp, s, col2);
+  	    if (col2 >= colmax)		/* doesn't fit */
+  	    {
+! 		size = colmax - col;
+  		tab_corr = FALSE;
+  		break;
+  	    }
+--- 1156,1162 ----
+  	    col2 += win_chartabsize(wp, s, col2);
+  	    if (col2 >= colmax)		/* doesn't fit */
+  	    {
+! 		size = colmax - col + col_adj;
+  		tab_corr = FALSE;
+  		break;
+  	    }
+*** ../vim-7.4.351/src/version.c	2014-07-02 19:06:14.686326091 +0200
+--- src/version.c	2014-07-02 19:32:50.218350540 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     352,
+  /**/
+
+-- 
+The early bird gets the worm. The second mouse gets the cheese.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.353 b/SOURCES/7.4.353
new file mode 100644
index 0000000..a099d04
--- /dev/null
+++ b/SOURCES/7.4.353
@@ -0,0 +1,446 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.353
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.353
+Problem:    'linebreak' doesn't work with the 'list' option.
+Solution:   Make it work. (Christian Brabandt)
+Files:	    src/charset.c, src/screen.c,
+	    src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
+	    src/testdir/Make_ming.mak, src/testdir/Make_os2.mak,
+	    src/testdir/Make_vms.mms, src/testdir/Makefile,
+	    src/testdir/test_listlbr.in, src/testdir/test_listlbr.ok
+
+
+*** ../vim-7.4.352/src/charset.c	2014-07-02 19:37:38.462354956 +0200
+--- src/charset.c	2014-07-02 19:47:21.602363892 +0200
+***************
+*** 1120,1126 ****
+      if (wp->w_p_lbr
+  	    && vim_isbreak(c)
+  	    && !vim_isbreak(s[1])
+- 	    && !wp->w_p_list
+  	    && wp->w_p_wrap
+  # ifdef FEAT_VERTSPLIT
+  	    && wp->w_width != 0
+--- 1120,1125 ----
+*** ../vim-7.4.352/src/screen.c	2014-07-02 17:16:51.330225522 +0200
+--- src/screen.c	2014-07-02 19:51:42.082367883 +0200
+***************
+*** 2843,2848 ****
+--- 2843,2849 ----
+      char_u	extra[18];		/* "%ld" and 'fdc' must fit in here */
+      int		n_extra = 0;		/* number of extra chars */
+      char_u	*p_extra = NULL;	/* string of extra chars, plus NUL */
++     char_u	*p_extra_free = NULL;   /* p_extra needs to be freed */
+      int		c_extra = NUL;		/* extra chars, all the same */
+      int		extra_attr = 0;		/* attributes when n_extra != 0 */
+      static char_u *at_end_str = (char_u *)""; /* used for p_extra when
+***************
+*** 4053,4058 ****
+--- 4054,4064 ----
+  	}
+  	else
+  	{
++ 	    if (p_extra_free != NULL)
++ 	    {
++ 		vim_free(p_extra_free);
++ 		p_extra_free = NULL;
++ 	    }
+  	    /*
+  	     * Get a character from the line itself.
+  	     */
+***************
+*** 4424,4431 ****
+  		/*
+  		 * Found last space before word: check for line break.
+  		 */
+! 		if (wp->w_p_lbr && vim_isbreak(c) && !vim_isbreak(*ptr)
+! 							     && !wp->w_p_list)
+  		{
+  		    char_u *p = ptr - (
+  # ifdef FEAT_MBYTE
+--- 4430,4436 ----
+  		/*
+  		 * Found last space before word: check for line break.
+  		 */
+! 		if (wp->w_p_lbr && vim_isbreak(c) && !vim_isbreak(*ptr))
+  		{
+  		    char_u *p = ptr - (
+  # ifdef FEAT_MBYTE
+***************
+*** 4433,4439 ****
+  # endif
+  				1);
+  		    /* TODO: is passing p for start of the line OK? */
+! 		    n_extra = win_lbr_chartabsize(wp, p, p, (colnr_T)vcol,
+  								    NULL) - 1;
+  		    c_extra = ' ';
+  		    if (vim_iswhite(c))
+--- 4438,4444 ----
+  # endif
+  				1);
+  		    /* TODO: is passing p for start of the line OK? */
+! 		    n_extra = win_lbr_chartabsize(wp, line, p, (colnr_T)vcol,
+  								    NULL) - 1;
+  		    c_extra = ' ';
+  		    if (vim_iswhite(c))
+***************
+*** 4443,4449 ****
+  			    /* See "Tab alignment" below. */
+  			    FIX_FOR_BOGUSCOLS;
+  #endif
+! 			c = ' ';
+  		    }
+  		}
+  #endif
+--- 4448,4455 ----
+  			    /* See "Tab alignment" below. */
+  			    FIX_FOR_BOGUSCOLS;
+  #endif
+! 			if (!wp->w_p_list)
+! 			    c = ' ';
+  		    }
+  		}
+  #endif
+***************
+*** 4483,4491 ****
+  		 */
+  		if (c == TAB && (!wp->w_p_list || lcs_tab1))
+  		{
+  		    /* tab amount depends on current column */
+! 		    n_extra = (int)wp->w_buffer->b_p_ts
+  					- vcol % (int)wp->w_buffer->b_p_ts - 1;
+  #ifdef FEAT_CONCEAL
+  		    /* Tab alignment should be identical regardless of
+  		     * 'conceallevel' value. So tab compensates of all
+--- 4489,4538 ----
+  		 */
+  		if (c == TAB && (!wp->w_p_list || lcs_tab1))
+  		{
++ 		    int tab_len = 0;
+  		    /* tab amount depends on current column */
+! 		    tab_len = (int)wp->w_buffer->b_p_ts
+  					- vcol % (int)wp->w_buffer->b_p_ts - 1;
++ #ifdef FEAT_LINEBREAK
++ 		    if (!wp->w_p_lbr)
++ #endif
++ 		    /* tab amount depends on current column */
++ 			n_extra = tab_len;
++ #ifdef FEAT_LINEBREAK
++ 		    else
++ 		    {
++ 			char_u *p;
++ 			int	len = n_extra;
++ 			int	i;
++ 			int	saved_nextra = n_extra;
++ 
++ 			/* if n_extra > 0, it gives the number of chars, to
++ 			 * use for a tab, else we need to calculate the width
++ 			 * for a tab */
++ #ifdef FEAT_MBYTE
++ 			len = (tab_len * mb_char2len(lcs_tab2));
++ 			if (n_extra > 0)
++ 			    len += n_extra - tab_len;
++ #endif
++ 			c = lcs_tab1;
++ 			p = alloc((unsigned)(len + 1));
++ 			vim_memset(p, ' ', len);
++ 			p[len] = NUL;
++ 			p_extra_free = p;
++ 			for (i = 0; i < tab_len; i++)
++ 			{
++ #ifdef FEAT_MBYTE
++ 			    mb_char2bytes(lcs_tab2, p);
++ 			    p += mb_char2len(lcs_tab2);
++ 			    n_extra += mb_char2len(lcs_tab2)
++ 						 - (saved_nextra > 0 ? 1 : 0);
++ #else
++ 			    p[i] = lcs_tab2;
++ #endif
++ 			}
++ 			p_extra = p_extra_free;
++ 		    }
++ #endif
+  #ifdef FEAT_CONCEAL
+  		    /* Tab alignment should be identical regardless of
+  		     * 'conceallevel' value. So tab compensates of all
+***************
+*** 4501,4508 ****
+  		    if (wp->w_p_list)
+  		    {
+  			c = lcs_tab1;
+! 			c_extra = lcs_tab2;
+! 			n_attr = n_extra + 1;
+  			extra_attr = hl_attr(HLF_8);
+  			saved_attr2 = char_attr; /* save current attr */
+  #ifdef FEAT_MBYTE
+--- 4548,4560 ----
+  		    if (wp->w_p_list)
+  		    {
+  			c = lcs_tab1;
+! #ifdef FEAT_LINEBREAK
+! 			if (wp->w_p_lbr)
+! 			    c_extra = NUL; /* using p_extra from above */
+! 			else
+! #endif
+! 			    c_extra = lcs_tab2;
+! 			n_attr = tab_len + 1;
+  			extra_attr = hl_attr(HLF_8);
+  			saved_attr2 = char_attr; /* save current attr */
+  #ifdef FEAT_MBYTE
+***************
+*** 4598,4606 ****
+  		    if ((dy_flags & DY_UHEX) && wp->w_p_rl)
+  			rl_mirror(p_extra);	/* reverse "<12>" */
+  #endif
+- 		    n_extra = byte2cells(c) - 1;
+  		    c_extra = NUL;
+! 		    c = *p_extra++;
+  		    if (!attr_pri)
+  		    {
+  			n_attr = n_extra + 1;
+--- 4650,4674 ----
+  		    if ((dy_flags & DY_UHEX) && wp->w_p_rl)
+  			rl_mirror(p_extra);	/* reverse "<12>" */
+  #endif
+  		    c_extra = NUL;
+! #ifdef FEAT_LINEBREAK
+! 		    if (wp->w_p_lbr)
+! 		    {
+! 			char_u *p;
+! 
+! 			c = *p_extra;
+! 			p = alloc((unsigned)n_extra + 1);
+! 			vim_memset(p, ' ', n_extra);
+! 			STRNCPY(p, p_extra + 1, STRLEN(p_extra) - 1);
+! 			p[n_extra] = NUL;
+! 			p_extra_free = p_extra = p;
+! 		    }
+! 		    else
+! #endif
+! 		    {
+! 			n_extra = byte2cells(c) - 1;
+! 			c = *p_extra++;
+! 		    }
+  		    if (!attr_pri)
+  		    {
+  			n_attr = n_extra + 1;
+*** ../vim-7.4.352/src/testdir/Make_amiga.mak	2014-06-25 14:39:35.110348584 +0200
+--- src/testdir/Make_amiga.mak	2014-07-02 19:47:21.610363892 +0200
+***************
+*** 38,43 ****
+--- 38,44 ----
+  		test104.out test105.out test106.out test107.out \
+  		test_autoformat_join.out \
+  		test_breakindent.out \
++ 		test_listlbr.out \
+  		test_eval.out \
+  		test_options.out
+  
+***************
+*** 165,169 ****
+--- 166,171 ----
+  test107.out: test107.in
+  test_autoformat_join.out: test_autoformat_join.in
+  test_breakindent.out: test_breakindent.in
++ test_listlbr.out: test_listlbr.in
+  test_eval.out: test_eval.in
+  test_options.out: test_options.in
+*** ../vim-7.4.352/src/testdir/Make_dos.mak	2014-06-25 14:39:35.110348584 +0200
+--- src/testdir/Make_dos.mak	2014-07-02 19:47:21.610363892 +0200
+***************
+*** 37,42 ****
+--- 37,43 ----
+  		test105.out test106.out  test107.out\
+  		test_autoformat_join.out \
+  		test_breakindent.out \
++ 		test_listlbr \
+  		test_eval.out \
+  		test_options.out
+  
+*** ../vim-7.4.352/src/testdir/Make_ming.mak	2014-06-25 14:39:35.110348584 +0200
+--- src/testdir/Make_ming.mak	2014-07-02 19:47:21.610363892 +0200
+***************
+*** 57,62 ****
+--- 57,63 ----
+  		test105.out test106.out test107.out \
+  		test_autoformat_join.out \
+  		test_breakindent.out \
++ 		test_listlbr.out \
+  		test_eval.out \
+  		test_options.out
+  
+*** ../vim-7.4.352/src/testdir/Make_os2.mak	2014-06-25 14:39:35.114348584 +0200
+--- src/testdir/Make_os2.mak	2014-07-02 19:47:21.610363892 +0200
+***************
+*** 40,45 ****
+--- 40,46 ----
+  		test_autoformat_join.out \
+  		test_eval.out \
+  		test_breakindent.out \
++ 		test_listlbr.out \
+  		test_options.out
+  
+  .SUFFIXES: .in .out
+*** ../vim-7.4.352/src/testdir/Make_vms.mms	2014-06-25 14:39:35.114348584 +0200
+--- src/testdir/Make_vms.mms	2014-07-02 19:47:21.610363892 +0200
+***************
+*** 98,103 ****
+--- 98,104 ----
+  	 test105.out test106.out test107.out \
+  	 test_autoformat_join.out \
+  	 test_breakindent.out \
++ 	 test_listlbr.out \
+  	 test_eval.out \
+  	 test_options.out
+  
+*** ../vim-7.4.352/src/testdir/Makefile	2014-06-25 14:39:35.114348584 +0200
+--- src/testdir/Makefile	2014-07-02 19:47:21.610363892 +0200
+***************
+*** 35,40 ****
+--- 35,41 ----
+  		test104.out test105.out test106.out test107.out \
+  		test_autoformat_join.out \
+  		test_breakindent.out \
++ 		test_listlbr.out \
+  		test_eval.out \
+  		test_options.out
+  
+*** ../vim-7.4.352/src/testdir/test_listlbr.in	2014-07-02 19:58:25.642374067 +0200
+--- src/testdir/test_listlbr.in	2014-07-02 19:47:21.610363892 +0200
+***************
+*** 0 ****
+--- 1,62 ----
++ Test for linebreak and list option
++ 
++ STARTTEST
++ :so small.vim
++ :if !exists("+linebreak") | e! test.ok | w! test.out | qa! | endif
++ :10new|:vsp|:vert resize 20
++ :put =\"\tabcdef hijklmn\tpqrstuvwxyz\u00a01060ABCDEFGHIJKLMNOP \"
++ :norm! zt
++ :set ts=4 sw=4 sts=4 linebreak sbr=+ wrap
++ :fu! ScreenChar(width)
++ :	let c=''
++ :	for j in range(1,4)
++ :	    for i in range(1,a:width)
++ :	    	let c.=nr2char(screenchar(j, i))
++ :	    endfor
++ :           let c.="\n"
++ :	endfor
++ :	return c
++ :endfu
++ :fu! DoRecordScreen()
++ :	wincmd l
++ :	$put =printf(\"\n%s\", g:test)
++ :	$put =g:line
++ :	wincmd p
++ :endfu
++ :let g:test="Test 1: set linebreak"
++ :redraw!
++ :let line=ScreenChar(winwidth(0))
++ :call DoRecordScreen()
++ :let g:test="Test 2: set linebreak + set list"
++ :set linebreak list listchars=
++ :redraw!
++ :let line=ScreenChar(winwidth(0))
++ :call DoRecordScreen()
++ :let g:test ="Test 3: set linebreak + set list + fancy listchars"
++ :exe "set linebreak list listchars=nbsp:\u2423,tab:\u2595\u2014,trail:\u02d1,eol:\ub6"
++ :redraw!
++ :let line=ScreenChar(winwidth(0))
++ :call DoRecordScreen()
++ :let g:test ="Test 4: set linebreak nolist"
++ :set nolist linebreak
++ :redraw!
++ :let line=ScreenChar(winwidth(0))
++ :call DoRecordScreen()
++ :let g:test ="Test 5: set nolinebreak list"
++ :set list nolinebreak
++ :redraw!
++ :let line=ScreenChar(winwidth(0))
++ :call DoRecordScreen()
++ :let g:test ="Test 6: set linebreak with tab and 1 line as long as screen: should break!"
++ :set nolist linebreak ts=8
++ :let line="1\t".repeat('a', winwidth(0)-2)
++ :$put =line
++ :$
++ :norm! zt
++ :redraw!
++ :let line=ScreenChar(winwidth(0))
++ :call DoRecordScreen()
++ :%w! test.out
++ :qa!
++ ENDTEST
++ dummy text
+*** ../vim-7.4.352/src/testdir/test_listlbr.ok	2014-07-02 19:58:25.646374067 +0200
+--- src/testdir/test_listlbr.ok	2014-07-02 19:47:21.610363892 +0200
+***************
+*** 0 ****
+--- 1,39 ----
++ 
++ 	abcdef hijklmn	pqrstuvwxyz 1060ABCDEFGHIJKLMNOP 
++ 
++ Test 1: set linebreak
++     abcdef          
++ +hijklmn            
++ +pqrstuvwxyz 1060ABC
++ +DEFGHIJKLMNOP      
++ 
++ Test 2: set linebreak + set list
++ ^Iabcdef hijklmn^I  
++ +pqrstuvwxyz 1060ABC
++ +DEFGHIJKLMNOP      
++                     
++ 
++ Test 3: set linebreak + set list + fancy listchars
++ ▕———abcdef          
++ +hijklmn▕———        
++ +pqrstuvwxyz␣1060ABC
++ +DEFGHIJKLMNOPˑ¶    
++ 
++ Test 4: set linebreak nolist
++     abcdef          
++ +hijklmn            
++ +pqrstuvwxyz 1060ABC
++ +DEFGHIJKLMNOP      
++ 
++ Test 5: set nolinebreak list
++ ▕———abcdef hijklmn▕—
++ +pqrstuvwxyz␣1060ABC
++ +DEFGHIJKLMNOPˑ¶    
++ ¶                   
++ 1	aaaaaaaaaaaaaaaaaa
++ 
++ Test 6: set linebreak with tab and 1 line as long as screen: should break!
++ 1                   
++ +aaaaaaaaaaaaaaaaaa 
++ ~                   
++ ~                   
+*** ../vim-7.4.352/src/version.c	2014-07-02 19:37:38.462354956 +0200
+--- src/version.c	2014-07-02 19:57:44.066373430 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     353,
+  /**/
+
+-- 
+FATHER:    You only killed the bride's father - that's all -
+LAUNCELOT: Oh dear, I didn't really mean to...
+FATHER:    Didn't mean to?  You put your sword right through his head!
+LAUNCELOT: Gosh - Is he all right?
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.354 b/SOURCES/7.4.354
new file mode 100644
index 0000000..1bbcf6d
--- /dev/null
+++ b/SOURCES/7.4.354
@@ -0,0 +1,56 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.354
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.354
+Problem:    Compiler warning.
+Solution:   Change NUL to NULL. (Ken Takata)
+Files:	    src/screen.c
+
+
+*** ../vim-7.4.353/src/screen.c	2014-07-02 19:59:35.454375136 +0200
+--- src/screen.c	2014-07-03 14:08:03.579375847 +0200
+***************
+*** 3704,3710 ****
+  		    if (diff_hlf != (hlf_T)0)
+  			char_attr = hl_attr(diff_hlf);
+  #endif
+! 		    p_extra = NUL;
+  		    c_extra = ' ';
+  		    n_extra = get_breakindent_win(wp,
+  				       ml_get_buf(wp->w_buffer, lnum, FALSE));
+--- 3704,3710 ----
+  		    if (diff_hlf != (hlf_T)0)
+  			char_attr = hl_attr(diff_hlf);
+  #endif
+! 		    p_extra = NULL;
+  		    c_extra = ' ';
+  		    n_extra = get_breakindent_win(wp,
+  				       ml_get_buf(wp->w_buffer, lnum, FALSE));
+*** ../vim-7.4.353/src/version.c	2014-07-02 19:59:35.454375136 +0200
+--- src/version.c	2014-07-03 14:08:38.875376388 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     354,
+  /**/
+
+-- 
+   [SIR LAUNCELOT runs back up the stairs, grabs a rope
+   of the wall and swings out over the heads of the CROWD in a
+   swashbuckling manner towards a large window.  He stops just short
+   of the window and is left swing pathetically back and forth.]
+LAUNCELOT: Excuse me ... could somebody give me a push ...
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.355 b/SOURCES/7.4.355
new file mode 100644
index 0000000..49d4276
--- /dev/null
+++ b/SOURCES/7.4.355
@@ -0,0 +1,929 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.355
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.355
+Problem:    Several problems with Javascript indenting.
+Solution:   Improve Javascript indenting.
+Files:	    src/misc1.c
+
+
+*** ../vim-7.4.354/src/misc1.c	2014-07-02 18:27:44.662290695 +0200
+--- src/misc1.c	2014-07-03 22:42:20.315848662 +0200
+***************
+*** 5382,5387 ****
+--- 5382,5388 ----
+  static char_u	*cin_skipcomment __ARGS((char_u *));
+  static int	cin_nocode __ARGS((char_u *));
+  static pos_T	*find_line_comment __ARGS((void));
++ static int	cin_has_js_key __ARGS((char_u *text));
+  static int	cin_islabel_skip __ARGS((char_u **));
+  static int	cin_isdefault __ARGS((char_u *));
+  static char_u	*after_label __ARGS((char_u *l));
+***************
+*** 5410,5415 ****
+--- 5411,5417 ----
+  static int	cin_skip2pos __ARGS((pos_T *trypos));
+  static pos_T	*find_start_brace __ARGS((void));
+  static pos_T	*find_match_paren __ARGS((int));
++ static pos_T	*find_match_char __ARGS((int c, int ind_maxparen));
+  static int	corr_ind_maxparen __ARGS((pos_T *startpos));
+  static int	find_last_paren __ARGS((char_u *l, int start, int end));
+  static int	find_match __ARGS((int lookfor, linenr_T ourscope));
+***************
+*** 5494,5500 ****
+--- 5496,5533 ----
+  }
+  
+  /*
++  * Return TRUE if "text" starts with "key:".
++  */
++     static int
++ cin_has_js_key(text)
++     char_u *text;
++ {
++     char_u *s = skipwhite(text);
++     int	    quote = 0;
++ 
++     if (*s == '\'' || *s == '"')
++     {
++ 	/* can be 'key': or "key": */
++ 	quote = *s;
++ 	++s;
++     }
++     if (!vim_isIDc(*s))	    /* need at least one ID character */
++ 	return FALSE;
++ 
++     while (vim_isIDc(*s))
++ 	++s;
++     if (*s == quote)
++ 	++s;
++ 
++     s = cin_skipcomment(s);
++ 
++     /* "::" is not a label, it's C++ */
++     return (*s == ':' && s[1] != ':');
++ }
++ 
++ /*
+   * Check if string matches "label:"; move to character after ':' if true.
++  * "*s" must point to the start of the label, if there is one.
+   */
+      static int
+  cin_islabel_skip(s)
+***************
+*** 6621,6632 ****
+  find_match_paren(ind_maxparen)	    /* XXX */
+      int		ind_maxparen;
+  {
+      pos_T	cursor_save;
+      pos_T	*trypos;
+      static pos_T pos_copy;
+  
+      cursor_save = curwin->w_cursor;
+!     if ((trypos = findmatchlimit(NULL, '(', 0, ind_maxparen)) != NULL)
+      {
+  	/* check if the ( is in a // comment */
+  	if ((colnr_T)cin_skip2pos(trypos) > trypos->col)
+--- 6654,6673 ----
+  find_match_paren(ind_maxparen)	    /* XXX */
+      int		ind_maxparen;
+  {
++     return find_match_char('(', ind_maxparen);
++ }
++ 
++     static pos_T *
++ find_match_char(c, ind_maxparen)	    /* XXX */
++     int		c;
++     int		ind_maxparen;
++ {
+      pos_T	cursor_save;
+      pos_T	*trypos;
+      static pos_T pos_copy;
+  
+      cursor_save = curwin->w_cursor;
+!     if ((trypos = findmatchlimit(NULL, c, 0, ind_maxparen)) != NULL)
+      {
+  	/* check if the ( is in a // comment */
+  	if ((colnr_T)cin_skip2pos(trypos) > trypos->col)
+***************
+*** 6976,6981 ****
+--- 7017,7024 ----
+  #define LOOKFOR_NOBREAK		8
+  #define LOOKFOR_CPP_BASECLASS	9
+  #define LOOKFOR_ENUM_OR_INIT	10
++ #define LOOKFOR_JS_KEY		11
++ #define LOOKFOR_NO_COMMA	12
+  
+      int		whilelevel;
+      linenr_T	lnum;
+***************
+*** 6986,6991 ****
+--- 7029,7035 ----
+      int		cont_amount = 0;    /* amount for continuation line */
+      int		original_line_islabel;
+      int		added_to_amount = 0;
++     int		js_cur_has_key = 0;
+  
+      /* make a copy, value is changed below */
+      int		ind_continuation = curbuf->b_ind_continuation;
+***************
+*** 7209,7214 ****
+--- 7253,7268 ----
+      }
+  
+      /*
++      * Are we looking at a ']' that has a match?
++      */
++     else if (*skipwhite(theline) == ']'
++ 	    && (trypos = find_match_char('[', curbuf->b_ind_maxparen)) != NULL)
++     {
++ 	/* align with the line containing the '['. */
++ 	amount = get_indent_lnum(trypos->lnum);
++     }
++ 
++     /*
+       * Are we inside parentheses or braces?
+       */						    /* XXX */
+      else if (((trypos = find_match_paren(curbuf->b_ind_maxparen)) != NULL
+***************
+*** 7473,7486 ****
+  	if (cin_iscomment(theline))
+  	    amount += curbuf->b_ind_comment;
+        }
+- 
+-       /*
+-        * Are we at least inside braces, then?
+-        */
+        else
+        {
+  	trypos = tryposBrace;
+- 
+  	ourscope = trypos->lnum;
+  	start = ml_get(ourscope);
+  
+--- 7527,7539 ----
+  	if (cin_iscomment(theline))
+  	    amount += curbuf->b_ind_comment;
+        }
+        else
+        {
++ 	/*
++ 	 * We are inside braces, there is a { before this line at the position
++ 	 * stored in tryposBrace.
++ 	 */
+  	trypos = tryposBrace;
+  	ourscope = trypos->lnum;
+  	start = ml_get(ourscope);
+  
+***************
+*** 7502,7525 ****
+  	}
+  	else
+  	{
+! 	    /*
+! 	     * that opening brace might have been on a continuation
+! 	     * line.  if so, find the start of the line.
+! 	     */
+  	    curwin->w_cursor.lnum = ourscope;
+  
+! 	    /*
+! 	     * position the cursor over the rightmost paren, so that
+! 	     * matching it will take us back to the start of the line.
+! 	     */
+  	    lnum = ourscope;
+  	    if (find_last_paren(start, '(', ')')
+  			&& (trypos = find_match_paren(curbuf->b_ind_maxparen))
+  								      != NULL)
+  		lnum = trypos->lnum;
+  
+! 	    /*
+! 	     * It could have been something like
+  	     *	   case 1: if (asdf &&
+  	     *			ldfd) {
+  	     *		    }
+--- 7555,7573 ----
+  	}
+  	else
+  	{
+! 	    /* That opening brace might have been on a continuation
+! 	     * line.  if so, find the start of the line. */
+  	    curwin->w_cursor.lnum = ourscope;
+  
+! 	    /* Position the cursor over the rightmost paren, so that
+! 	     * matching it will take us back to the start of the line. */
+  	    lnum = ourscope;
+  	    if (find_last_paren(start, '(', ')')
+  			&& (trypos = find_match_paren(curbuf->b_ind_maxparen))
+  								      != NULL)
+  		lnum = trypos->lnum;
+  
+! 	    /* It could have been something like
+  	     *	   case 1: if (asdf &&
+  	     *			ldfd) {
+  	     *		    }
+***************
+*** 7535,7542 ****
+  	    start_brace = BRACE_AT_END;
+  	}
+  
+  	/*
+! 	 * if we're looking at a closing brace, that's where
+  	 * we want to be.  otherwise, add the amount of room
+  	 * that an indent is supposed to be.
+  	 */
+--- 7583,7594 ----
+  	    start_brace = BRACE_AT_END;
+  	}
+  
++ 	/* For Javascript check if the line starts with "key:". */
++ 	if (curbuf->b_ind_js)
++ 	    js_cur_has_key = cin_has_js_key(theline);
++ 
+  	/*
+! 	 * If we're looking at a closing brace, that's where
+  	 * we want to be.  otherwise, add the amount of room
+  	 * that an indent is supposed to be.
+  	 */
+***************
+*** 7643,7649 ****
+  	     * Search backwards.  If we find something we recognize, line up
+  	     * with that.
+  	     *
+! 	     * if we're looking at an open brace, indent
+  	     * the usual amount relative to the conditional
+  	     * that opens the block.
+  	     */
+--- 7695,7701 ----
+  	     * Search backwards.  If we find something we recognize, line up
+  	     * with that.
+  	     *
+! 	     * If we're looking at an open brace, indent
+  	     * the usual amount relative to the conditional
+  	     * that opens the block.
+  	     */
+***************
+*** 8051,8056 ****
+--- 8103,8143 ----
+  		 */
+  		terminated = cin_isterminated(l, FALSE, TRUE);
+  
++ 		if (js_cur_has_key)
++ 		{
++ 		    js_cur_has_key = 0; /* only check the first line */
++ 		    if (curbuf->b_ind_js && terminated == ',')
++ 		    {
++ 			/* For Javascript we might be inside an object:
++ 			 *   key: something,  <- align with this
++ 			 *   key: something
++ 			 * or:
++ 			 *   key: something +  <- align with this
++ 			 *       something,
++ 			 *   key: something
++ 			 */
++ 			lookfor = LOOKFOR_JS_KEY;
++ 		    }
++ 		}
++ 		if (lookfor == LOOKFOR_JS_KEY && cin_has_js_key(l))
++ 		{
++ 		    amount = get_indent();
++ 		    break;
++ 		}
++ 		if (lookfor == LOOKFOR_NO_COMMA)
++ 		{
++ 		    if (terminated != ',')
++ 			/* line below current line is the one that starts a
++ 			 * (possibly broken) line ending in a comma. */
++ 			break;
++ 		    amount = get_indent();
++ 		    if (curwin->w_cursor.lnum - 1 == ourscope)
++ 			/* line above is start of the scope, thus current line
++ 			 * is the one that stars a (possibly broken) line
++ 			 * ending in a comma. */
++ 			break;
++ 		}
++ 
+  		if (terminated == 0 || (lookfor != LOOKFOR_UNTERM
+  							&& terminated == ','))
+  		{
+***************
+*** 8062,8072 ****
+  		     *		    bar )
+  		     */
+  		    /*
+! 		     * position the cursor over the rightmost paren, so that
+  		     * matching it will take us back to the start of the line.
+  		     */
+  		    (void)find_last_paren(l, '(', ')');
+  		    trypos = find_match_paren(corr_ind_maxparen(&cur_curpos));
+  
+  		    /*
+  		     * If we are looking for ',', we also look for matching
+--- 8149,8164 ----
+  		     *		    bar )
+  		     */
+  		    /*
+! 		     * Position the cursor over the rightmost paren, so that
+  		     * matching it will take us back to the start of the line.
++ 		     * Ignore a match before the start of the block.
+  		     */
+  		    (void)find_last_paren(l, '(', ')');
+  		    trypos = find_match_paren(corr_ind_maxparen(&cur_curpos));
++ 		    if (trypos != NULL && (trypos->lnum < tryposBrace->lnum
++ 				|| (trypos->lnum == tryposBrace->lnum
++ 				    && trypos->col < tryposBrace->col)))
++ 			trypos = NULL;
+  
+  		    /*
+  		     * If we are looking for ',', we also look for matching
+***************
+*** 8117,8126 ****
+  		     * Get indent and pointer to text for current line,
+  		     * ignoring any jump label.	    XXX
+  		     */
+! 		    if (!curbuf->b_ind_js)
+! 			cur_amount = skip_label(curwin->w_cursor.lnum, &l);
+! 		    else
+  			cur_amount = get_indent();
+  		    /*
+  		     * If this is just above the line we are indenting, and it
+  		     * starts with a '{', line it up with this line.
+--- 8209,8218 ----
+  		     * Get indent and pointer to text for current line,
+  		     * ignoring any jump label.	    XXX
+  		     */
+! 		    if (curbuf->b_ind_js)
+  			cur_amount = get_indent();
++ 		    else
++ 			cur_amount = skip_label(curwin->w_cursor.lnum, &l);
+  		    /*
+  		     * If this is just above the line we are indenting, and it
+  		     * starts with a '{', line it up with this line.
+***************
+*** 8142,8148 ****
+  			if (*skipwhite(l) != '{')
+  			    amount += curbuf->b_ind_open_extra;
+  
+! 			if (curbuf->b_ind_cpp_baseclass)
+  			{
+  			    /* have to look back, whether it is a cpp base
+  			     * class declaration or initialization */
+--- 8234,8240 ----
+  			if (*skipwhite(l) != '{')
+  			    amount += curbuf->b_ind_open_extra;
+  
+! 			if (curbuf->b_ind_cpp_baseclass && !curbuf->b_ind_js)
+  			{
+  			    /* have to look back, whether it is a cpp base
+  			     * class declaration or initialization */
+***************
+*** 8302,8309 ****
+  			     */
+  			    if (lookfor == LOOKFOR_INITIAL && terminated == ',')
+  			    {
+! 				lookfor = LOOKFOR_ENUM_OR_INIT;
+! 				cont_amount = cin_first_id_amount();
+  			    }
+  			    else
+  			    {
+--- 8394,8434 ----
+  			     */
+  			    if (lookfor == LOOKFOR_INITIAL && terminated == ',')
+  			    {
+! 				if (curbuf->b_ind_js)
+! 				{
+! 				    /* Search for a line ending in a comma
+! 				     * and line up with the line below it
+! 				     * (could be the current line).
+! 				     * some = [
+! 				     *     1,     <- line up here
+! 				     *     2,
+! 				     * some = [
+! 				     *     3 +    <- line up here
+! 				     *       4 *
+! 				     *        5,
+! 				     *     6,
+! 				     */
+! 				    lookfor = LOOKFOR_NO_COMMA;
+! 				    amount = get_indent();	    /* XXX */
+! 				    trypos = find_match_char('[',
+! 						      curbuf->b_ind_maxparen);
+! 				    if (trypos != NULL)
+! 				    {
+! 					if (trypos->lnum
+! 						 == curwin->w_cursor.lnum - 1)
+! 					{
+! 					    /* Current line is first inside
+! 					     * [], line up with it. */
+! 					    break;
+! 					}
+! 					ourscope = trypos->lnum;
+! 				    }
+! 				}
+! 				else
+! 				{
+! 				    lookfor = LOOKFOR_ENUM_OR_INIT;
+! 				    cont_amount = cin_first_id_amount();
+! 				}
+  			    }
+  			    else
+  			    {
+***************
+*** 8313,8319 ****
+  								/* XXX */
+  				    cont_amount = cin_get_equal_amount(
+  						       curwin->w_cursor.lnum);
+! 				if (lookfor != LOOKFOR_TERM)
+  				    lookfor = LOOKFOR_UNTERM;
+  			    }
+  			}
+--- 8438,8445 ----
+  								/* XXX */
+  				    cont_amount = cin_get_equal_amount(
+  						       curwin->w_cursor.lnum);
+! 				if (lookfor != LOOKFOR_TERM
+! 						 && lookfor != LOOKFOR_JS_KEY)
+  				    lookfor = LOOKFOR_UNTERM;
+  			    }
+  			}
+***************
+*** 8324,8331 ****
+  		 * Check if we are after a while (cond);
+  		 * If so: Ignore until the matching "do".
+  		 */
+! 							/* XXX */
+! 		else if (cin_iswhileofdo_end(terminated))
+  		{
+  		    /*
+  		     * Found an unterminated line after a while ();, line up
+--- 8450,8456 ----
+  		 * Check if we are after a while (cond);
+  		 * If so: Ignore until the matching "do".
+  		 */
+! 		else if (cin_iswhileofdo_end(terminated)) /* XXX */
+  		{
+  		    /*
+  		     * Found an unterminated line after a while ();, line up
+***************
+*** 8538,8555 ****
+        if (curbuf->b_ind_jump_label > 0 && original_line_islabel)
+  	  amount -= curbuf->b_ind_jump_label;
+      }
+- 
+-     /*
+-      * ok -- we're not inside any sort of structure at all!
+-      *
+-      * this means we're at the top level, and everything should
+-      * basically just match where the previous line is, except
+-      * for the lines immediately following a function declaration,
+-      * which are K&R-style parameters and need to be indented.
+-      */
+      else
+      {
+  	/*
+  	 * if our line starts with an open brace, forget about any
+  	 * prevailing indent and make sure it looks like the start
+  	 * of a function
+--- 8663,8678 ----
+        if (curbuf->b_ind_jump_label > 0 && original_line_islabel)
+  	  amount -= curbuf->b_ind_jump_label;
+      }
+      else
+      {
+  	/*
++ 	 * ok -- we're not inside any sort of structure at all!
++ 	 *
++ 	 * This means we're at the top level, and everything should
++ 	 * basically just match where the previous line is, except
++ 	 * for the lines immediately following a function declaration,
++ 	 * which are K&R-style parameters and need to be indented.
++ 	 *
+  	 * if our line starts with an open brace, forget about any
+  	 * prevailing indent and make sure it looks like the start
+  	 * of a function
+***************
+*** 8700,8705 ****
+--- 8823,8840 ----
+  		    break;
+  
+  		/*
++ 		 * If the previous line ends on '[' we are probably in an
++ 		 * array constant:
++ 		 * something = [
++ 		 *     234,  <- extra indent
++ 		 */
++ 		if (cin_ends_in(l, (char_u *)"[", NULL))
++ 		{
++ 		    amount = get_indent() + ind_continuation;
++ 		    break;
++ 		}
++ 
++ 		/*
+  		 * Find a line only has a semicolon that belongs to a previous
+  		 * line ending in '}', e.g. before an #endif.  Don't increase
+  		 * indent then.
+*** ../vim-7.4.354/src/testdir/test3.in	2014-07-02 18:27:44.662290695 +0200
+--- src/testdir/test3.in	2014-07-03 22:41:38.743848025 +0200
+***************
+*** 1432,1438 ****
+  
+  STARTTEST
+  :set cino=(0,ts
+! 2kdd=][
+  ENDTEST
+  
+  void func(int a
+--- 1432,1438 ----
+  
+  STARTTEST
+  :set cino=(0,ts
+! 2kdd2j=][
+  ENDTEST
+  
+  void func(int a
+***************
+*** 1446,1452 ****
+  
+  STARTTEST
+  :set cino=(0
+! 2kdd=][
+  ENDTEST
+  
+  void
+--- 1446,1452 ----
+  
+  STARTTEST
+  :set cino=(0
+! 2kdd2j=][
+  ENDTEST
+  
+  void
+***************
+*** 1461,1467 ****
+  
+  STARTTEST
+  :set cino&
+! 2kdd=7][
+  ENDTEST
+  
+  void func(void)
+--- 1461,1467 ----
+  
+  STARTTEST
+  :set cino&
+! 2kdd2j=7][
+  ENDTEST
+  
+  void func(void)
+***************
+*** 1538,1544 ****
+  STARTTEST
+  :set cino&
+  :set cino+=l1
+! 2kdd=][
+  ENDTEST
+  
+  void func(void)
+--- 1538,1544 ----
+  STARTTEST
+  :set cino&
+  :set cino+=l1
+! 2kdd2j=][
+  ENDTEST
+  
+  void func(void)
+***************
+*** 1567,1573 ****
+  
+  STARTTEST
+  :set cino&
+! 2kdd=][
+  ENDTEST
+  
+  void func(void)
+--- 1567,1573 ----
+  
+  STARTTEST
+  :set cino&
+! 2kdd2j=][
+  ENDTEST
+  
+  void func(void)
+***************
+*** 1592,1598 ****
+  
+  STARTTEST
+  :set cino&
+! 2kdd=][
+  ENDTEST
+  
+  void func(void)
+--- 1592,1598 ----
+  
+  STARTTEST
+  :set cino&
+! 2kdd2j=][
+  ENDTEST
+  
+  void func(void)
+***************
+*** 1919,1928 ****
+  
+  JSSTART
+  var foo = [
+! 1,  // indent 8 more
+  2,
+  3
+! ];  // indent 8 less
+  JSEND
+  
+  STARTTEST
+--- 1919,1928 ----
+  
+  JSSTART
+  var foo = [
+! 1,
+  2,
+  3
+! ];
+  JSEND
+  
+  STARTTEST
+***************
+*** 1937,1943 ****
+  1,
+  2,
+  3
+! ];  // indent 16 less
+  }
+  JSEND
+  
+--- 1937,1943 ----
+  1,
+  2,
+  3
+! ];
+  }
+  JSEND
+  
+***************
+*** 1954,1959 ****
+--- 1954,1961 ----
+  cond) {
+  stmt;
+  }
++ window.something.left =
++ (width - 50 + offset) + "px";
+  var class_name='myclass';
+  
+  function private_method() {
+***************
+*** 1969,1983 ****
+  
+  $(this).data(class_name+'_public',$.extend({},{
+  foo: 'bar',
+! bar: 2,  // indent 8 more
+! foobar: [  // indent 8 more
+! 1,  // indent 8 more
+! 2,  // indent 16 more
+! 3   // indent 16 more
+  ],
+! callback: function(){  // indent 8 more
+! return true;  // indent 8 more
+! }  // indent 8 more
+  }, options||{}));
+  }
+  
+--- 1971,1985 ----
+  
+  $(this).data(class_name+'_public',$.extend({},{
+  foo: 'bar',
+! bar: 2,
+! foobar: [
+! 1,
+! 2,
+! 3
+  ],
+! callback: function(){
+! return true;
+! }
+  }, options||{}));
+  }
+  
+***************
+*** 2018,2026 ****
+  foo: 'bar',
+  bar: 2,
+  foobar: [
+! 1,  // indent 8 more
+! 2,  // indent 8 more
+! 3   // indent 8 more
+  ],
+  callback: function(){
+  return true;
+--- 2020,2028 ----
+  foo: 'bar',
+  bar: 2,
+  foobar: [
+! 1,
+! 2,
+! 3
+  ],
+  callback: function(){
+  return true;
+***************
+*** 2040,2054 ****
+  function init(options) {
+  $(this).data(class_name+'_public',$.extend({},{
+  foo: 'bar',
+! bar: 2,  // indent 8 more
+! foobar: [  // indent 8 more
+! 1,  // indent 8 more
+! 2,  // indent 16 more
+! 3  // indent 16 more
+  ],
+! callback: function(){  // indent 8 more
+! return true;  // indent 8 more
+! }  // indent 8 more
+  }, options||{}));
+  }
+  })(jQuery);
+--- 2042,2056 ----
+  function init(options) {
+  $(this).data(class_name+'_public',$.extend({},{
+  foo: 'bar',
+! bar: 2,
+! foobar: [
+! 1,
+! 2,
+! 3
+  ],
+! callback: function(){
+! return true;
+! }
+  }, options||{}));
+  }
+  })(jQuery);
+*** ../vim-7.4.354/src/testdir/test3.ok	2014-07-02 18:27:44.662290695 +0200
+--- src/testdir/test3.ok	2014-07-03 22:18:58.167827177 +0200
+***************
+*** 1707,1716 ****
+  
+  JSSTART
+  var foo = [
+! 1,  // indent 8 more
+  	2,
+  	3
+! 	];  // indent 8 less
+  JSEND
+  
+  
+--- 1707,1716 ----
+  
+  JSSTART
+  var foo = [
+! 	1,
+  	2,
+  	3
+! ];
+  JSEND
+  
+  
+***************
+*** 1720,1726 ****
+  		1,
+  		2,
+  		3
+! 			];  // indent 16 less
+  }
+  JSEND
+  
+--- 1720,1726 ----
+  		1,
+  		2,
+  		3
+! 	];
+  }
+  JSEND
+  
+***************
+*** 1732,1737 ****
+--- 1732,1739 ----
+  			cond) {
+  		stmt;
+  	}
++ 	window.something.left =
++ 		(width - 50 + offset) + "px";
+  	var class_name='myclass';
+  
+  	function private_method() {
+***************
+*** 1747,1761 ****
+  
+  		$(this).data(class_name+'_public',$.extend({},{
+  			foo: 'bar',
+! 		bar: 2,  // indent 8 more
+! 		foobar: [  // indent 8 more
+! 			1,  // indent 8 more
+! 		2,  // indent 16 more
+! 		3   // indent 16 more
+  			],
+! 		callback: function(){  // indent 8 more
+! 			return true;  // indent 8 more
+! 		}  // indent 8 more
+  		}, options||{}));
+  	}
+  
+--- 1749,1763 ----
+  
+  		$(this).data(class_name+'_public',$.extend({},{
+  			foo: 'bar',
+! 			bar: 2,
+! 			foobar: [
+! 				1,
+! 				2,
+! 				3
+  			],
+! 			callback: function(){
+! 				return true;
+! 			}
+  		}, options||{}));
+  	}
+  
+***************
+*** 1791,1799 ****
+  		foo: 'bar',
+  		bar: 2,
+  		foobar: [
+! 		1,  // indent 8 more
+! 		2,  // indent 8 more
+! 		3   // indent 8 more
+  		],
+  		callback: function(){
+  			return true;
+--- 1793,1801 ----
+  		foo: 'bar',
+  		bar: 2,
+  		foobar: [
+! 			1,
+! 			2,
+! 			3
+  		],
+  		callback: function(){
+  			return true;
+***************
+*** 1808,1822 ****
+  	function init(options) {
+  		$(this).data(class_name+'_public',$.extend({},{
+  			foo: 'bar',
+! 		bar: 2,  // indent 8 more
+! 		foobar: [  // indent 8 more
+! 			1,  // indent 8 more
+! 		2,  // indent 16 more
+! 		3  // indent 16 more
+  			],
+! 		callback: function(){  // indent 8 more
+! 			return true;  // indent 8 more
+! 		}  // indent 8 more
+  		}, options||{}));
+  	}
+  })(jQuery);
+--- 1810,1824 ----
+  	function init(options) {
+  		$(this).data(class_name+'_public',$.extend({},{
+  			foo: 'bar',
+! 			bar: 2,
+! 			foobar: [
+! 				1,
+! 				2,
+! 				3
+  			],
+! 			callback: function(){
+! 				return true;
+! 			}
+  		}, options||{}));
+  	}
+  })(jQuery);
+*** ../vim-7.4.354/src/version.c	2014-07-03 22:54:04.911859458 +0200
+--- src/version.c	2014-07-03 22:54:40.971860011 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     355,
+  /**/
+
+-- 
+MESKIMEN'S LAW
+    There's never time to do it right, but always time to do it over.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.356 b/SOURCES/7.4.356
new file mode 100644
index 0000000..58af038
--- /dev/null
+++ b/SOURCES/7.4.356
@@ -0,0 +1,38 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.356
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.356
+Problem:    Mercurial does not ignore memfile_test. (Daniel Hahler)
+Solution:   Add memfile_test to ignored files, remove trailing spaces.
+Files:	    .hgignore
+
+
+Note: This patch was made empty, because .hgignore is not part of the
+distributed files.
+
+
+*** ../vim-7.4.355/src/version.c	2014-07-03 22:57:51.299862927 +0200
+--- src/version.c	2014-07-09 13:41:39.855060005 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     356,
+  /**/
+
+-- 
+In Africa some of the native tribes have a custom of beating the ground
+with clubs and uttering spine chilling cries.  Anthropologists call
+this a form of primitive self-expression.  In America we call it golf.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.357 b/SOURCES/7.4.357
new file mode 100644
index 0000000..e1d638f
--- /dev/null
+++ b/SOURCES/7.4.357
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.357
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.357
+Problem:    After completion some characters are not redrawn.
+Solution:   Clear the command line unconditionally. (Jacob Niehus)
+Files:	    src/edit.c
+
+
+*** ../vim-7.4.356/src/edit.c	2014-06-25 14:39:35.102348584 +0200
+--- src/edit.c	2014-07-09 13:22:22.747075922 +0200
+***************
+*** 3854,3861 ****
+  	    ins_compl_free();
+  	    compl_started = FALSE;
+  	    compl_matches = 0;
+! 	    if (!shortmess(SHM_COMPLETIONMENU))
+! 		msg_clr_cmdline();	/* necessary for "noshowmode" */
+  	    ctrl_x_mode = 0;
+  	    compl_enter_selects = FALSE;
+  	    if (edit_submode != NULL)
+--- 3854,3860 ----
+  	    ins_compl_free();
+  	    compl_started = FALSE;
+  	    compl_matches = 0;
+! 	    msg_clr_cmdline();	/* necessary for "noshowmode" */
+  	    ctrl_x_mode = 0;
+  	    compl_enter_selects = FALSE;
+  	    if (edit_submode != NULL)
+*** ../vim-7.4.356/src/version.c	2014-07-09 13:43:18.399058649 +0200
+--- src/version.c	2014-07-09 13:58:35.483046034 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     357,
+  /**/
+
+-- 
+Why isn't there mouse-flavored cat food?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.358 b/SOURCES/7.4.358
new file mode 100644
index 0000000..a36803d
--- /dev/null
+++ b/SOURCES/7.4.358
@@ -0,0 +1,290 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.358
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.358 (after 7.4.351)
+Problem:    Sort is not always stable.
+Solution:   Add an index instead of relying on the pointer to remain the same.
+	    Idea by Jun Takimoto.
+Files:	    src/eval.c
+
+
+*** ../vim-7.4.357/src/eval.c	2014-07-02 19:06:14.686326091 +0200
+--- src/eval.c	2014-07-09 17:42:05.699813489 +0200
+***************
+*** 17329,17334 ****
+--- 17329,17341 ----
+  #endif
+  	item_compare2 __ARGS((const void *s1, const void *s2));
+  
++ /* struct used in the array that's given to qsort() */
++ typedef struct
++ {
++     listitem_T	*item;
++     int		idx;
++ } sortItem_T;
++ 
+  static int	item_compare_ic;
+  static int	item_compare_numeric;
+  static char_u	*item_compare_func;
+***************
+*** 17349,17362 ****
+      const void	*s1;
+      const void	*s2;
+  {
+      char_u	*p1, *p2;
+      char_u	*tofree1, *tofree2;
+      int		res;
+      char_u	numbuf1[NUMBUFLEN];
+      char_u	numbuf2[NUMBUFLEN];
+  
+!     p1 = tv2string(&(*(listitem_T **)s1)->li_tv, &tofree1, numbuf1, 0);
+!     p2 = tv2string(&(*(listitem_T **)s2)->li_tv, &tofree2, numbuf2, 0);
+      if (p1 == NULL)
+  	p1 = (char_u *)"";
+      if (p2 == NULL)
+--- 17356,17372 ----
+      const void	*s1;
+      const void	*s2;
+  {
++     sortItem_T  *si1, *si2;
+      char_u	*p1, *p2;
+      char_u	*tofree1, *tofree2;
+      int		res;
+      char_u	numbuf1[NUMBUFLEN];
+      char_u	numbuf2[NUMBUFLEN];
+  
+!     si1 = (sortItem_T *)s1;
+!     si2 = (sortItem_T *)s2;
+!     p1 = tv2string(&si1->item->li_tv, &tofree1, numbuf1, 0);
+!     p2 = tv2string(&si2->item->li_tv, &tofree2, numbuf2, 0);
+      if (p1 == NULL)
+  	p1 = (char_u *)"";
+      if (p2 == NULL)
+***************
+*** 17379,17385 ****
+      /* When the result would be zero, compare the pointers themselves.  Makes
+       * the sort stable. */
+      if (res == 0 && !item_compare_keep_zero)
+! 	res = s1 > s2 ? 1 : -1;
+  
+      vim_free(tofree1);
+      vim_free(tofree2);
+--- 17389,17395 ----
+      /* When the result would be zero, compare the pointers themselves.  Makes
+       * the sort stable. */
+      if (res == 0 && !item_compare_keep_zero)
+! 	res = si1->idx > si2->idx ? 1 : -1;
+  
+      vim_free(tofree1);
+      vim_free(tofree2);
+***************
+*** 17394,17399 ****
+--- 17404,17410 ----
+      const void	*s1;
+      const void	*s2;
+  {
++     sortItem_T  *si1, *si2;
+      int		res;
+      typval_T	rettv;
+      typval_T	argv[3];
+***************
+*** 17403,17412 ****
+      if (item_compare_func_err)
+  	return 0;
+  
+      /* Copy the values.  This is needed to be able to set v_lock to VAR_FIXED
+       * in the copy without changing the original list items. */
+!     copy_tv(&(*(listitem_T **)s1)->li_tv, &argv[0]);
+!     copy_tv(&(*(listitem_T **)s2)->li_tv, &argv[1]);
+  
+      rettv.v_type = VAR_UNKNOWN;		/* clear_tv() uses this */
+      res = call_func(item_compare_func, (int)STRLEN(item_compare_func),
+--- 17414,17426 ----
+      if (item_compare_func_err)
+  	return 0;
+  
++     si1 = (sortItem_T *)s1;
++     si2 = (sortItem_T *)s2;
++ 
+      /* Copy the values.  This is needed to be able to set v_lock to VAR_FIXED
+       * in the copy without changing the original list items. */
+!     copy_tv(&si1->item->li_tv, &argv[0]);
+!     copy_tv(&si2->item->li_tv, &argv[1]);
+  
+      rettv.v_type = VAR_UNKNOWN;		/* clear_tv() uses this */
+      res = call_func(item_compare_func, (int)STRLEN(item_compare_func),
+***************
+*** 17426,17432 ****
+      /* When the result would be zero, compare the pointers themselves.  Makes
+       * the sort stable. */
+      if (res == 0 && !item_compare_keep_zero)
+! 	res = s1 > s2 ? 1 : -1;
+  
+      return res;
+  }
+--- 17440,17446 ----
+      /* When the result would be zero, compare the pointers themselves.  Makes
+       * the sort stable. */
+      if (res == 0 && !item_compare_keep_zero)
+! 	res = si1->idx > si2->idx ? 1 : -1;
+  
+      return res;
+  }
+***************
+*** 17442,17448 ****
+  {
+      list_T	*l;
+      listitem_T	*li;
+!     listitem_T	**ptrs;
+      long	len;
+      long	i;
+  
+--- 17456,17462 ----
+  {
+      list_T	*l;
+      listitem_T	*li;
+!     sortItem_T	*ptrs;
+      long	len;
+      long	i;
+  
+***************
+*** 17510,17516 ****
+  	}
+  
+  	/* Make an array with each entry pointing to an item in the List. */
+! 	ptrs = (listitem_T **)alloc((int)(len * sizeof(listitem_T *)));
+  	if (ptrs == NULL)
+  	    return;
+  
+--- 17524,17530 ----
+  	}
+  
+  	/* Make an array with each entry pointing to an item in the List. */
+! 	ptrs = (sortItem_T *)alloc((int)(len * sizeof(sortItem_T)));
+  	if (ptrs == NULL)
+  	    return;
+  
+***************
+*** 17519,17525 ****
+  	{
+  	    /* sort(): ptrs will be the list to sort */
+  	    for (li = l->lv_first; li != NULL; li = li->li_next)
+! 		ptrs[i++] = li;
+  
+  	    item_compare_func_err = FALSE;
+  	    item_compare_keep_zero = FALSE;
+--- 17533,17543 ----
+  	{
+  	    /* sort(): ptrs will be the list to sort */
+  	    for (li = l->lv_first; li != NULL; li = li->li_next)
+! 	    {
+! 		ptrs[i].item = li;
+! 		ptrs[i].idx = i;
+! 		++i;
+! 	    }
+  
+  	    item_compare_func_err = FALSE;
+  	    item_compare_keep_zero = FALSE;
+***************
+*** 17531,17537 ****
+  	    else
+  	    {
+  		/* Sort the array with item pointers. */
+! 		qsort((void *)ptrs, (size_t)len, sizeof(listitem_T *),
+  		    item_compare_func == NULL ? item_compare : item_compare2);
+  
+  		if (!item_compare_func_err)
+--- 17549,17555 ----
+  	    else
+  	    {
+  		/* Sort the array with item pointers. */
+! 		qsort((void *)ptrs, (size_t)len, sizeof(sortItem_T),
+  		    item_compare_func == NULL ? item_compare : item_compare2);
+  
+  		if (!item_compare_func_err)
+***************
+*** 17540,17546 ****
+  		    l->lv_first = l->lv_last = l->lv_idx_item = NULL;
+  		    l->lv_len = 0;
+  		    for (i = 0; i < len; ++i)
+! 			list_append(l, ptrs[i]);
+  		}
+  	    }
+  	}
+--- 17558,17564 ----
+  		    l->lv_first = l->lv_last = l->lv_idx_item = NULL;
+  		    l->lv_len = 0;
+  		    for (i = 0; i < len; ++i)
+! 			list_append(l, ptrs[i].item);
+  		}
+  	    }
+  	}
+***************
+*** 17559,17565 ****
+  	    {
+  		if (item_compare_func_ptr((void *)&li, (void *)&li->li_next)
+  									 == 0)
+! 		    ptrs[i++] = li;
+  		if (item_compare_func_err)
+  		{
+  		    EMSG(_("E882: Uniq compare function failed"));
+--- 17577,17583 ----
+  	    {
+  		if (item_compare_func_ptr((void *)&li, (void *)&li->li_next)
+  									 == 0)
+! 		    ptrs[i++].item = li;
+  		if (item_compare_func_err)
+  		{
+  		    EMSG(_("E882: Uniq compare function failed"));
+***************
+*** 17571,17582 ****
+  	    {
+  		while (--i >= 0)
+  		{
+! 		    li = ptrs[i]->li_next;
+! 		    ptrs[i]->li_next = li->li_next;
+  		    if (li->li_next != NULL)
+! 			li->li_next->li_prev = ptrs[i];
+  		    else
+! 			l->lv_last = ptrs[i];
+  		    list_fix_watch(l, li);
+  		    listitem_free(li);
+  		    l->lv_len--;
+--- 17589,17600 ----
+  	    {
+  		while (--i >= 0)
+  		{
+! 		    li = ptrs[i].item->li_next;
+! 		    ptrs[i].item->li_next = li->li_next;
+  		    if (li->li_next != NULL)
+! 			li->li_next->li_prev = ptrs[i].item;
+  		    else
+! 			l->lv_last = ptrs[i].item;
+  		    list_fix_watch(l, li);
+  		    listitem_free(li);
+  		    l->lv_len--;
+*** ../vim-7.4.357/src/version.c	2014-07-09 14:00:45.175044250 +0200
+--- src/version.c	2014-07-09 17:23:12.791836515 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     358,
+  /**/
+
+-- 
+An indication you must be a manager:
+You can explain to somebody the difference between "re-engineering",
+"down-sizing", "right-sizing", and "firing people's asses".
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.359 b/SOURCES/7.4.359
new file mode 100644
index 0000000..ab695d5
--- /dev/null
+++ b/SOURCES/7.4.359
@@ -0,0 +1,103 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.359
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.359
+Problem:    When 'ttymouse' is set to 'uxterm' the xterm version is not
+	    requested. (Tomas Janousek)
+Solution:   Do not mark uxterm as a conflict mouse and add
+	    resume_get_esc_sequence().
+Files:	    src/term.c, src/os_unix.c, src/proto/term.pro
+
+
+*** ../vim-7.4.358/src/term.c	2014-05-22 21:22:15.361995652 +0200
+--- src/term.c	2014-07-09 18:49:57.127730739 +0200
+***************
+*** 3330,3335 ****
+--- 3330,3348 ----
+      return crv_status == CRV_SENT || u7_status == U7_SENT
+  						|| xt_index_out > xt_index_in;
+  }
++ 
++ /*
++  * If requesting the version was disabled in did_request_esc_sequence(),
++  * enable it again.
++  */
++     void
++ resume_get_esc_sequence()
++ {
++     if (crv_status == 0)
++ 	crv_status = CRV_GET;
++     if (u7_status == 0)
++ 	u7_status = U7_GET;
++ }
+  # endif
+  
+  
+*** ../vim-7.4.358/src/os_unix.c	2014-05-22 21:22:15.361995652 +0200
+--- src/os_unix.c	2014-07-09 18:56:58.483722175 +0200
+***************
+*** 3780,3788 ****
+  # ifdef FEAT_MOUSE_URXVT
+      /* same as the dec mouse */
+      if (use_xterm_mouse() == 3
+- #  ifdef FEAT_TERMRESPONSE
+- 	    && !did_request_esc_sequence()
+- #  endif
+  #  ifdef FEAT_GUI
+  	    && !gui.in_use
+  #  endif
+--- 3780,3785 ----
+***************
+*** 3797,3803 ****
+  	    mch_setmouse(FALSE);
+  	    setmouse();
+  	}
+! 	xterm_conflict_mouse = TRUE;
+      }
+      else
+  	del_mouse_termcode(KS_URXVT_MOUSE);
+--- 3794,3801 ----
+  	    mch_setmouse(FALSE);
+  	    setmouse();
+  	}
+! 	/* It's OK to request the xterm version for uxterm. */
+! 	resume_get_esc_sequence();
+      }
+      else
+  	del_mouse_termcode(KS_URXVT_MOUSE);
+*** ../vim-7.4.358/src/proto/term.pro	2014-05-22 18:14:27.570224664 +0200
+--- src/proto/term.pro	2014-07-09 18:53:31.827726375 +0200
+***************
+*** 35,40 ****
+--- 35,41 ----
+  void starttermcap __ARGS((void));
+  void stoptermcap __ARGS((void));
+  int did_request_esc_sequence __ARGS((void));
++ void resume_get_esc_sequence __ARGS((void));
+  void may_req_termresponse __ARGS((void));
+  void may_req_ambiguous_char_width __ARGS((void));
+  int swapping_screen __ARGS((void));
+*** ../vim-7.4.358/src/version.c	2014-07-09 17:51:46.075801693 +0200
+--- src/version.c	2014-07-09 18:50:55.515729552 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     359,
+  /**/
+
+-- 
+An indication you must be a manager:
+You give constructive feedback to your dog.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.360 b/SOURCES/7.4.360
new file mode 100644
index 0000000..9bd5212
--- /dev/null
+++ b/SOURCES/7.4.360
@@ -0,0 +1,80 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.360
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.360
+Problem:    In a regexp pattern a "$" followed by \v or \V is not seen as the
+	    end-of-line.
+Solution:   Handle the situation. (Ozaki Kiichi)
+Files:	    src/regexp.c
+
+
+*** ../vim-7.4.359/src/regexp.c	2014-05-13 19:37:19.489786520 +0200
+--- src/regexp.c	2014-07-09 19:28:51.871683287 +0200
+***************
+*** 3109,3123 ****
+  	    if (reg_magic >= MAGIC_OFF)
+  	    {
+  		char_u *p = regparse + 1;
+  
+! 		/* ignore \c \C \m and \M after '$' */
+  		while (p[0] == '\\' && (p[1] == 'c' || p[1] == 'C'
+! 				|| p[1] == 'm' || p[1] == 'M' || p[1] == 'Z'))
+  		    p += 2;
+  		if (p[0] == NUL
+  			|| (p[0] == '\\'
+  			    && (p[1] == '|' || p[1] == '&' || p[1] == ')'
+  				|| p[1] == 'n'))
+  			|| reg_magic == MAGIC_ALL)
+  		    curchr = Magic('$');
+  	    }
+--- 3109,3133 ----
+  	    if (reg_magic >= MAGIC_OFF)
+  	    {
+  		char_u *p = regparse + 1;
++ 		int is_magic_all = (reg_magic == MAGIC_ALL);
+  
+! 		/* ignore \c \C \m \M \v \V and \Z after '$' */
+  		while (p[0] == '\\' && (p[1] == 'c' || p[1] == 'C'
+! 				|| p[1] == 'm' || p[1] == 'M'
+! 				|| p[1] == 'v' || p[1] == 'V' || p[1] == 'Z'))
+! 		{
+! 		    if (p[1] == 'v')
+! 			is_magic_all = TRUE;
+! 		    else if (p[1] == 'm' || p[1] == 'M' || p[1] == 'V')
+! 			is_magic_all = FALSE;
+  		    p += 2;
++ 		}
+  		if (p[0] == NUL
+  			|| (p[0] == '\\'
+  			    && (p[1] == '|' || p[1] == '&' || p[1] == ')'
+  				|| p[1] == 'n'))
++ 			|| (is_magic_all
++ 			       && (p[0] == '|' || p[0] == '&' || p[0] == ')'))
+  			|| reg_magic == MAGIC_ALL)
+  		    curchr = Magic('$');
+  	    }
+*** ../vim-7.4.359/src/version.c	2014-07-09 19:13:45.007701718 +0200
+--- src/version.c	2014-07-09 19:18:36.599695792 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     360,
+  /**/
+
+-- 
+An indication you must be a manager:
+You believe you never have any problems in your life, just
+"issues" and "improvement opportunities".
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.361 b/SOURCES/7.4.361
new file mode 100644
index 0000000..7629b12
--- /dev/null
+++ b/SOURCES/7.4.361
@@ -0,0 +1,48 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.361
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.361
+Problem:    Lots of flickering when filling the preview window for 'omnifunc'.
+Solution:   Disable redrawing. (Hirohito Higashi)
+Files:	    src/popupmnu.c
+
+
+*** ../vim-7.4.360/src/popupmnu.c	2013-11-06 04:04:29.000000000 +0100
+--- src/popupmnu.c	2014-07-09 19:56:25.663649674 +0200
+***************
+*** 567,573 ****
+--- 567,575 ----
+  	    g_do_tagpreview = 3;
+  	    if (p_pvh > 0 && p_pvh < g_do_tagpreview)
+  		g_do_tagpreview = p_pvh;
++ 	    ++RedrawingDisabled;
+  	    resized = prepare_tagpreview(FALSE);
++ 	    --RedrawingDisabled;
+  	    g_do_tagpreview = 0;
+  
+  	    if (curwin->w_p_pvw)
+*** ../vim-7.4.360/src/version.c	2014-07-09 19:32:30.939678834 +0200
+--- src/version.c	2014-07-09 19:55:48.995650419 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     361,
+  /**/
+
+-- 
+Lose weight, NEVER Diet again with
+                  The "Invisible Weight Loss Patch"
+						(spam e-mail)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.362 b/SOURCES/7.4.362
new file mode 100644
index 0000000..beeb6dd
--- /dev/null
+++ b/SOURCES/7.4.362
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.362
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.362
+Problem:    When matchaddpos() uses a length smaller than the number of bytes
+	    in the (last) character the highlight continues until the end of
+	    the line.
+Solution:   Change condition from equal to larger-or-equal.
+Files:	    src/screen.c
+
+
+*** ../vim-7.4.361/src/screen.c	2014-07-03 22:54:04.911859458 +0200
+--- src/screen.c	2014-07-09 20:14:46.611627298 +0200
+***************
+*** 3852,3858 ****
+  			{
+  			    shl->attr_cur = shl->attr;
+  			}
+! 			else if (v == (long)shl->endcol)
+  			{
+  			    shl->attr_cur = 0;
+  			    next_search_hl(wp, shl, lnum, (colnr_T)v, cur);
+--- 3852,3858 ----
+  			{
+  			    shl->attr_cur = shl->attr;
+  			}
+! 			else if (v >= (long)shl->endcol)
+  			{
+  			    shl->attr_cur = 0;
+  			    next_search_hl(wp, shl, lnum, (colnr_T)v, cur);
+*** ../vim-7.4.361/src/version.c	2014-07-09 19:58:21.115647328 +0200
+--- src/version.c	2014-07-09 20:20:14.423620635 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     362,
+  /**/
+
+-- 
+Compilation process failed successfully.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.363 b/SOURCES/7.4.363
new file mode 100644
index 0000000..d225cdb
--- /dev/null
+++ b/SOURCES/7.4.363
@@ -0,0 +1,160 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.363
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.363
+Problem:    In Windows console typing 0xCE does not work.
+Solution:   Convert 0xCE to K_NUL 3. (Nobuhiro Takasaki et al.)
+Files:	    src/os_win32.c, src/term.c
+
+
+*** ../vim-7.4.362/src/os_win32.c	2014-04-01 21:00:45.436733663 +0200
+--- src/os_win32.c	2014-07-09 20:29:30.787609327 +0200
+***************
+*** 619,625 ****
+  	return FALSE;
+      }
+  
+!     tokenPrivileges.PrivilegeCount           = 1;
+      tokenPrivileges.Privileges[0].Luid       = luid;
+      tokenPrivileges.Privileges[0].Attributes = bEnable ?
+  						    SE_PRIVILEGE_ENABLED : 0;
+--- 619,625 ----
+  	return FALSE;
+      }
+  
+!     tokenPrivileges.PrivilegeCount	     = 1;
+      tokenPrivileges.Privileges[0].Luid       = luid;
+      tokenPrivileges.Privileges[0].Attributes = bEnable ?
+  						    SE_PRIVILEGE_ENABLED : 0;
+***************
+*** 1785,1797 ****
+  #endif
+  	    {
+  		int	n = 1;
+  
+- 		/* A key may have one or two bytes. */
+  		typeahead[typeaheadlen] = c;
+  		if (ch2 != NUL)
+  		{
+! 		    typeahead[typeaheadlen + 1] = ch2;
+! 		    ++n;
+  		}
+  #ifdef FEAT_MBYTE
+  		/* Only convert normal characters, not special keys.  Need to
+--- 1785,1798 ----
+  #endif
+  	    {
+  		int	n = 1;
++ 		int     conv = FALSE;
+  
+  		typeahead[typeaheadlen] = c;
+  		if (ch2 != NUL)
+  		{
+! 		    typeahead[typeaheadlen + 1] = 3;
+! 		    typeahead[typeaheadlen + 2] = ch2;
+! 		    n += 2;
+  		}
+  #ifdef FEAT_MBYTE
+  		/* Only convert normal characters, not special keys.  Need to
+***************
+*** 1800,1805 ****
+--- 1801,1807 ----
+  		if (input_conv.vc_type != CONV_NONE
+  						&& (ch2 == NUL || c != K_NUL))
+  		{
++ 		    conv = TRUE;
+  		    typeaheadlen -= unconverted;
+  		    n = convert_input_safe(typeahead + typeaheadlen,
+  				n + unconverted, TYPEAHEADLEN - typeaheadlen,
+***************
+*** 1807,1812 ****
+--- 1809,1832 ----
+  		}
+  #endif
+  
++ 		if (conv)
++ 		{
++ 		    char_u *p = typeahead + typeaheadlen;
++ 		    char_u *e = typeahead + TYPEAHEADLEN;
++ 
++ 		    while (*p && p < e)
++ 		    {
++ 			if (*p == K_NUL)
++ 			{
++ 			    ++p;
++ 			    mch_memmove(p + 1, p, ((size_t)(e - p)) - 1);
++ 			    *p = 3;
++ 			    ++n;
++ 			}
++ 			++p;
++ 		    }
++ 		}
++ 
+  		/* Use the ALT key to set the 8th bit of the character
+  		 * when it's one byte, the 8th bit isn't set yet and not
+  		 * using a double-byte encoding (would become a lead
+*** ../vim-7.4.362/src/term.c	2014-07-09 19:13:45.003701718 +0200
+--- src/term.c	2014-07-09 20:26:28.655613029 +0200
+***************
+*** 3724,3730 ****
+--- 3724,3734 ----
+  	return;
+      }
+  
++ #if defined(WIN3264) && !defined(FEAT_GUI)
++     s = vim_strnsave(string, (int)STRLEN(string) + 1);
++ #else
+      s = vim_strsave(string);
++ #endif
+      if (s == NULL)
+  	return;
+  
+***************
+*** 3734,3739 ****
+--- 3738,3752 ----
+  	STRMOVE(s, s + 1);
+  	s[0] = term_7to8bit(string);
+      }
++ 
++ #if defined(WIN3264) && !defined(FEAT_GUI)
++     if (s[0] == K_NUL)
++     {
++         STRMOVE(s + 1, s);
++         s[1] = 3;
++     }
++ #endif
++ 
+      len = (int)STRLEN(s);
+  
+      need_gather = TRUE;		/* need to fill termleader[] */
+*** ../vim-7.4.362/src/version.c	2014-07-09 20:20:40.359620108 +0200
+--- src/version.c	2014-07-09 20:26:38.903612821 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     363,
+  /**/
+
+-- 
+BROTHER MAYNARD: Armaments Chapter Two Verses Nine to Twenty One.
+ANOTHER MONK:    And St.  Attila raised his hand grenade up on high saying "O
+                 Lord bless this thy hand grenade that with it thou mayest
+                 blow thine enemies to tiny bits, in thy mercy. "and the Lord
+                 did grin and people did feast upon the lambs and sloths and
+                 carp and anchovies and orang-utans and breakfast cereals and
+                 fruit bats and...
+BROTHER MAYNARD: Skip a bit brother ...
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.364 b/SOURCES/7.4.364
new file mode 100644
index 0000000..493056c
--- /dev/null
+++ b/SOURCES/7.4.364
@@ -0,0 +1,70 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.364
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.364
+Problem:    When the viminfo file can't be renamed there is no error message.
+	    (Vladimir Berezhnoy)
+Solution:   Check for the rename to fail.
+Files:	    src/ex_cmds.c
+
+
+*** ../vim-7.4.363/src/ex_cmds.c	2014-05-22 14:00:12.694534712 +0200
+--- src/ex_cmds.c	2014-07-09 21:11:44.531557830 +0200
+***************
+*** 2004,2014 ****
+      {
+  	fclose(fp_in);
+  
+! 	/*
+! 	 * In case of an error keep the original viminfo file.
+! 	 * Otherwise rename the newly written file.
+! 	 */
+! 	if (viminfo_errcnt || vim_rename(tempname, fname) == -1)
+  	    mch_remove(tempname);
+  
+  #ifdef WIN3264
+--- 2004,2017 ----
+      {
+  	fclose(fp_in);
+  
+! 	/* In case of an error keep the original viminfo file.  Otherwise
+! 	 * rename the newly written file.  Give an error if that fails. */
+! 	if (viminfo_errcnt == 0 && vim_rename(tempname, fname) == -1)
+! 	{
+! 	    ++viminfo_errcnt;
+! 	    EMSG2(_("E886: Can't rename viminfo file to %s!"), fname);
+! 	}
+! 	if (viminfo_errcnt > 0)
+  	    mch_remove(tempname);
+  
+  #ifdef WIN3264
+*** ../vim-7.4.363/src/version.c	2014-07-09 20:51:04.519583033 +0200
+--- src/version.c	2014-07-09 21:13:18.575555919 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     364,
+  /**/
+
+-- 
+MONK: ... and the Lord spake, saying, "First shalt thou take out the Holy Pin,
+      then shalt thou count to three, no more, no less.  Three shalt be the
+      number thou shalt count, and the number of the counting shalt be three.
+      Four shalt thou not count, neither count thou two, excepting that thou
+      then proceed to three.  Five is right out.  Once the number three, being
+      the third number, be reached, then lobbest thou thy Holy Hand Grenade of
+      Antioch towards thou foe, who being naughty in my sight, shall snuff it.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.365 b/SOURCES/7.4.365
new file mode 100644
index 0000000..196e66e
--- /dev/null
+++ b/SOURCES/7.4.365
@@ -0,0 +1,159 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.365
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.365
+Problem:    Crash when using ":botright split" when there isn't much space.
+Solution:   Add a check for the minimum width/height. (Yukihiro Nakadaira)
+Files:	    src/window.c
+
+
+*** ../vim-7.4.364/src/window.c	2014-07-02 17:16:51.334225522 +0200
+--- src/window.c	2014-07-16 14:14:37.751774230 +0200
+***************
+*** 686,691 ****
+--- 686,693 ----
+      int		layout;
+      frame_T	*frp, *curfrp;
+      int		before;
++     int		minwidth;
++     int		minheight;
+  
+      if (flags & WSP_TOP)
+  	oldwin = firstwin;
+***************
+*** 725,735 ****
+  	    needed += p_wiw - p_wmw;
+  	if (p_ea || (flags & (WSP_BOT | WSP_TOP)))
+  	{
+  	    available = topframe->fr_width;
+! 	    needed += frame_minwidth(topframe, NULL);
+  	}
+  	else
+  	    available = oldwin->w_width;
+  	if (available < needed && new_wp == NULL)
+  	{
+  	    EMSG(_(e_noroom));
+--- 727,741 ----
+  	    needed += p_wiw - p_wmw;
+  	if (p_ea || (flags & (WSP_BOT | WSP_TOP)))
+  	{
++ 	    minwidth = frame_minwidth(topframe, NULL);
+  	    available = topframe->fr_width;
+! 	    needed += minwidth;
+  	}
+  	else
++ 	{
++ 	    minwidth = frame_minwidth(oldwin->w_frame, NULL);
+  	    available = oldwin->w_width;
++ 	}
+  	if (available < needed && new_wp == NULL)
+  	{
+  	    EMSG(_(e_noroom));
+***************
+*** 739,744 ****
+--- 745,752 ----
+  	    new_size = oldwin->w_width / 2;
+  	if (new_size > oldwin->w_width - p_wmw - 1)
+  	    new_size = oldwin->w_width - p_wmw - 1;
++ 	if (new_size > available - minwidth - 1)
++ 	    new_size = available - minwidth - 1;
+  	if (new_size < p_wmw)
+  	    new_size = p_wmw;
+  
+***************
+*** 786,796 ****
+  	    needed += p_wh - p_wmh;
+  	if (p_ea || (flags & (WSP_BOT | WSP_TOP)))
+  	{
+  	    available = topframe->fr_height;
+! 	    needed += frame_minheight(topframe, NULL);
+  	}
+  	else
+  	{
+  	    available = oldwin->w_height;
+  	    needed += p_wmh;
+  	}
+--- 794,806 ----
+  	    needed += p_wh - p_wmh;
+  	if (p_ea || (flags & (WSP_BOT | WSP_TOP)))
+  	{
++ 	    minheight = frame_minheight(topframe, NULL);
+  	    available = topframe->fr_height;
+! 	    needed += minheight;
+  	}
+  	else
+  	{
++ 	    minheight = frame_minheight(oldwin->w_frame, NULL);
+  	    available = oldwin->w_height;
+  	    needed += p_wmh;
+  	}
+***************
+*** 810,815 ****
+--- 820,827 ----
+  
+  	if (new_size > oldwin_height - p_wmh - STATUS_HEIGHT)
+  	    new_size = oldwin_height - p_wmh - STATUS_HEIGHT;
++ 	if (new_size > available - minheight - STATUS_HEIGHT)
++ 	    new_size = available - minheight - STATUS_HEIGHT;
+  	if (new_size < p_wmh)
+  	    new_size = p_wmh;
+  
+***************
+*** 5732,5738 ****
+  		    --wp->w_wrow;
+  		}
+  	    }
+!             set_topline(wp, lnum);
+  	}
+  	else if (sline > 0)
+  	{
+--- 5744,5750 ----
+  		    --wp->w_wrow;
+  		}
+  	    }
+! 	    set_topline(wp, lnum);
+  	}
+  	else if (sline > 0)
+  	{
+***************
+*** 5778,5784 ****
+  		wp->w_wrow -= sline;
+  	    }
+  
+!             set_topline(wp, lnum);
+  	}
+      }
+  
+--- 5790,5796 ----
+  		wp->w_wrow -= sline;
+  	    }
+  
+! 	    set_topline(wp, lnum);
+  	}
+      }
+  
+*** ../vim-7.4.364/src/version.c	2014-07-09 21:17:59.755550204 +0200
+--- src/version.c	2014-07-16 14:10:41.191779038 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     365,
+  /**/
+
+-- 
+"Software is like sex... it's better when it's free."
+		-- Linus Torvalds, initiator of the free Linux OS
+Makes me wonder what FSF stands for...?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.366 b/SOURCES/7.4.366
new file mode 100644
index 0000000..76097be
--- /dev/null
+++ b/SOURCES/7.4.366
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.366
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.366
+Problem:    Can't run the linebreak test on MS-Windows.
+Solution:   Fix the output file name. (Taro Muraoka)
+Files:	    src/testdir/Make_dos.mak
+
+
+*** ../vim-7.4.365/src/testdir/Make_dos.mak	2014-07-02 19:59:35.454375136 +0200
+--- src/testdir/Make_dos.mak	2014-07-16 14:19:39.719768093 +0200
+***************
+*** 37,43 ****
+  		test105.out test106.out  test107.out\
+  		test_autoformat_join.out \
+  		test_breakindent.out \
+! 		test_listlbr \
+  		test_eval.out \
+  		test_options.out
+  
+--- 37,43 ----
+  		test105.out test106.out  test107.out\
+  		test_autoformat_join.out \
+  		test_breakindent.out \
+! 		test_listlbr.out \
+  		test_eval.out \
+  		test_options.out
+  
+*** ../vim-7.4.365/src/version.c	2014-07-16 14:16:41.519771715 +0200
+--- src/version.c	2014-07-16 14:18:43.307769239 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     366,
+  /**/
+
+-- 
+<Beeth> Girls are like internet domain names,
+        the ones I like are already taken.
+<honx>  Well, you can stil get one from a strange country :-P
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.367 b/SOURCES/7.4.367
new file mode 100644
index 0000000..c184192
--- /dev/null
+++ b/SOURCES/7.4.367
@@ -0,0 +1,67 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.367
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.367 (after 7.4.357)
+Problem:    Other solution for redrawing after completion.
+Solution:   Schedule a window redraw instead of just clearing the command
+	    line. (Jacob Niehus)
+Files:	    src/edit.c
+
+
+*** ../vim-7.4.366/src/edit.c	2014-07-09 14:00:45.175044250 +0200
+--- src/edit.c	2014-07-16 14:36:00.679748155 +0200
+***************
+*** 3854,3860 ****
+  	    ins_compl_free();
+  	    compl_started = FALSE;
+  	    compl_matches = 0;
+! 	    msg_clr_cmdline();	/* necessary for "noshowmode" */
+  	    ctrl_x_mode = 0;
+  	    compl_enter_selects = FALSE;
+  	    if (edit_submode != NULL)
+--- 3854,3861 ----
+  	    ins_compl_free();
+  	    compl_started = FALSE;
+  	    compl_matches = 0;
+! 	    if (!shortmess(SHM_COMPLETIONMENU))
+! 		msg_clr_cmdline();	/* necessary for "noshowmode" */
+  	    ctrl_x_mode = 0;
+  	    compl_enter_selects = FALSE;
+  	    if (edit_submode != NULL)
+***************
+*** 4591,4597 ****
+--- 4592,4601 ----
+       */
+      i = compl_col + (compl_cont_status & CONT_ADDING ? compl_length : 0);
+      backspace_until_column(i);
++ 
++     /* Not sure what is still valid, better redraw everything. */
+      changed_cline_bef_curs();
++     redraw_curbuf_later(NOT_VALID);
+  }
+  
+  /* Insert the new text being completed. */
+*** ../vim-7.4.366/src/version.c	2014-07-16 14:20:38.255766903 +0200
+--- src/version.c	2014-07-16 14:42:23.059740384 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     367,
+  /**/
+
+-- 
+No children may attend school with their breath smelling of "wild onions."
+		[real standing law in West Virginia, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.368 b/SOURCES/7.4.368
new file mode 100644
index 0000000..0dd85e3
--- /dev/null
+++ b/SOURCES/7.4.368
@@ -0,0 +1,79 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.368
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.368
+Problem:    Restoring the window sizes after closing the command line window
+	    doesn't work properly if there are nested splits.
+Solution:   Restore the sizes twice. (Hirohito Higashi)
+Files:	    src/window.c
+
+
+*** ../vim-7.4.367/src/window.c	2014-07-16 14:16:41.519771715 +0200
+--- src/window.c	2014-07-16 15:13:52.895701974 +0200
+***************
+*** 4848,4862 ****
+      garray_T	*gap;
+  {
+      win_T	*wp;
+!     int		i;
+  
+      if (win_count() * 2 == gap->ga_len)
+      {
+! 	i = 0;
+! 	for (wp = firstwin; wp != NULL; wp = wp->w_next)
+  	{
+! 	    frame_setwidth(wp->w_frame, ((int *)gap->ga_data)[i++]);
+! 	    win_setheight_win(((int *)gap->ga_data)[i++], wp);
+  	}
+  	/* recompute the window positions */
+  	(void)win_comp_pos();
+--- 4848,4867 ----
+      garray_T	*gap;
+  {
+      win_T	*wp;
+!     int		i, j;
+  
+      if (win_count() * 2 == gap->ga_len)
+      {
+! 	/* The order matters, because frames contain other frames, but it's
+! 	 * difficult to get right. The easy way out is to do it twice. */
+! 	for (j = 0; j < 2; ++j)
+  	{
+! 	    i = 0;
+! 	    for (wp = firstwin; wp != NULL; wp = wp->w_next)
+! 	    {
+! 		frame_setwidth(wp->w_frame, ((int *)gap->ga_data)[i++]);
+! 		win_setheight_win(((int *)gap->ga_data)[i++], wp);
+! 	    }
+  	}
+  	/* recompute the window positions */
+  	(void)win_comp_pos();
+*** ../vim-7.4.367/src/version.c	2014-07-16 14:42:37.923740082 +0200
+--- src/version.c	2014-07-16 15:14:46.035700894 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     368,
+  /**/
+
+-- 
+FROG: How you English say:  I one more time, mac, I unclog my nose towards
+      you, sons of a window-dresser,  so, you think you could out-clever us
+      French fellows with your silly knees-bent creeping about advancing
+      behaviour.  (blows a raspberry) I wave my private parts at your aunties,
+      you brightly-coloured, mealy-templed, cranberry-smelling, electric
+      donkey-bottom biters.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.369 b/SOURCES/7.4.369
new file mode 100644
index 0000000..c501c64
--- /dev/null
+++ b/SOURCES/7.4.369
@@ -0,0 +1,70 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.369
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.369
+Problem:    Using freed memory when exiting while compiled with EXITFREE.
+Solution:   Set curwin to NULL and check for that. (Dominique Pelle)
+Files:	    src/buffer.c, src/window.c
+
+
+*** ../vim-7.4.368/src/buffer.c	2014-06-12 14:01:27.571769788 +0200
+--- src/buffer.c	2014-07-16 16:20:04.443621254 +0200
+***************
+*** 5702,5709 ****
+      signlist_T	*next;
+  
+      /* When deleting the last sign need to redraw the windows to remove the
+!      * sign column. */
+!     if (buf->b_signlist != NULL)
+      {
+  	redraw_buf_later(buf, NOT_VALID);
+  	changed_cline_bef_curs();
+--- 5702,5709 ----
+      signlist_T	*next;
+  
+      /* When deleting the last sign need to redraw the windows to remove the
+!      * sign column. Not when curwin is NULL (this means we're exiting). */
+!     if (buf->b_signlist != NULL && curwin != NULL)
+      {
+  	redraw_buf_later(buf, NOT_VALID);
+  	changed_cline_bef_curs();
+*** ../vim-7.4.368/src/window.c	2014-07-16 15:18:22.903696486 +0200
+--- src/window.c	2014-07-16 16:15:41.063626607 +0200
+***************
+*** 2489,2494 ****
+--- 2489,2498 ----
+  
+      while (firstwin != NULL)
+  	(void)win_free_mem(firstwin, &dummy, NULL);
++ 
++     /* No window should be used after this. Set curwin to NULL to crash
++      * instead of using freed memory. */
++     curwin = NULL;
+  }
+  #endif
+  
+*** ../vim-7.4.368/src/version.c	2014-07-16 15:18:22.907696486 +0200
+--- src/version.c	2014-07-16 16:18:36.827623035 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     369,
+  /**/
+
+-- 
+ARTHUR: If you do not open these doors, we will take this castle by force ...
+   [A bucket of slops land on ARTHUR.  He tries to retain his dignity.]
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.370 b/SOURCES/7.4.370
new file mode 100644
index 0000000..5da13f4
--- /dev/null
+++ b/SOURCES/7.4.370
@@ -0,0 +1,316 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.370
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.370
+Problem:    Linebreak test fails when encoding is not utf-8. (Danek Duvall)
+Solution:   Split the test in a single byte one and a utf-8 one. (Christian
+	    Brabandt)
+Files:	    src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
+	    src/testdir/Make_ming.mak, src/testdir/Make_os2.mak,
+	    src/testdir/Make_vms.mms, src/testdir/Makefile,
+	    src/testdir/test_listlbr.in, src/testdir/test_listlbr.ok,
+	    src/testdir/test_listlbr_utf8.in, src/testdir/test_listlbr_utf8.ok
+
+
+*** ../vim-7.4.369/src/testdir/Make_amiga.mak	2014-07-02 19:59:35.454375136 +0200
+--- src/testdir/Make_amiga.mak	2014-07-16 16:55:15.311578352 +0200
+***************
+*** 39,44 ****
+--- 39,45 ----
+  		test_autoformat_join.out \
+  		test_breakindent.out \
+  		test_listlbr.out \
++ 		test_listlbr_utf8.out \
+  		test_eval.out \
+  		test_options.out
+  
+***************
+*** 167,171 ****
+--- 168,173 ----
+  test_autoformat_join.out: test_autoformat_join.in
+  test_breakindent.out: test_breakindent.in
+  test_listlbr.out: test_listlbr.in
++ test_listlbr_utf8.out: test_listlbr_utf8.in
+  test_eval.out: test_eval.in
+  test_options.out: test_options.in
+*** ../vim-7.4.369/src/testdir/Make_dos.mak	2014-07-16 14:20:38.255766903 +0200
+--- src/testdir/Make_dos.mak	2014-07-16 16:56:02.423577394 +0200
+***************
+*** 38,43 ****
+--- 38,44 ----
+  		test_autoformat_join.out \
+  		test_breakindent.out \
+  		test_listlbr.out \
++ 		test_listlbr_utf8.out \
+  		test_eval.out \
+  		test_options.out
+  
+*** ../vim-7.4.369/src/testdir/Make_ming.mak	2014-07-02 19:59:35.454375136 +0200
+--- src/testdir/Make_ming.mak	2014-07-16 16:55:15.311578352 +0200
+***************
+*** 58,63 ****
+--- 58,64 ----
+  		test_autoformat_join.out \
+  		test_breakindent.out \
+  		test_listlbr.out \
++ 		test_listlbr_utf8.out \
+  		test_eval.out \
+  		test_options.out
+  
+*** ../vim-7.4.369/src/testdir/Make_os2.mak	2014-07-02 19:59:35.454375136 +0200
+--- src/testdir/Make_os2.mak	2014-07-16 16:55:15.311578352 +0200
+***************
+*** 40,45 ****
+--- 40,46 ----
+  		test_autoformat_join.out \
+  		test_eval.out \
+  		test_breakindent.out \
++ 		test_listlbr_utf8.out \
+  		test_listlbr.out \
+  		test_options.out
+  
+*** ../vim-7.4.369/src/testdir/Make_vms.mms	2014-07-02 19:59:35.454375136 +0200
+--- src/testdir/Make_vms.mms	2014-07-16 16:55:15.311578352 +0200
+***************
+*** 99,104 ****
+--- 99,105 ----
+  	 test_autoformat_join.out \
+  	 test_breakindent.out \
+  	 test_listlbr.out \
++ 	 test_listlbr_utf8.out \
+  	 test_eval.out \
+  	 test_options.out
+  
+*** ../vim-7.4.369/src/testdir/Makefile	2014-07-02 19:59:35.454375136 +0200
+--- src/testdir/Makefile	2014-07-16 16:55:15.311578352 +0200
+***************
+*** 36,41 ****
+--- 36,42 ----
+  		test_autoformat_join.out \
+  		test_breakindent.out \
+  		test_listlbr.out \
++ 		test_listlbr_utf8.out \
+  		test_eval.out \
+  		test_options.out
+  
+*** ../vim-7.4.369/src/testdir/test_listlbr.in	2014-07-02 19:59:35.454375136 +0200
+--- src/testdir/test_listlbr.in	2014-07-16 16:55:15.311578352 +0200
+***************
+*** 1,10 ****
+! Test for linebreak and list option
+  
+  STARTTEST
+  :so small.vim
+  :if !exists("+linebreak") | e! test.ok | w! test.out | qa! | endif
+  :10new|:vsp|:vert resize 20
+! :put =\"\tabcdef hijklmn\tpqrstuvwxyz\u00a01060ABCDEFGHIJKLMNOP \"
+  :norm! zt
+  :set ts=4 sw=4 sts=4 linebreak sbr=+ wrap
+  :fu! ScreenChar(width)
+--- 1,10 ----
+! Test for linebreak and list option (non-utf8)
+  
+  STARTTEST
+  :so small.vim
+  :if !exists("+linebreak") | e! test.ok | w! test.out | qa! | endif
+  :10new|:vsp|:vert resize 20
+! :put =\"\tabcdef hijklmn\tpqrstuvwxyz_1060ABCDEFGHIJKLMNOP \"
+  :norm! zt
+  :set ts=4 sw=4 sts=4 linebreak sbr=+ wrap
+  :fu! ScreenChar(width)
+***************
+*** 32,53 ****
+  :redraw!
+  :let line=ScreenChar(winwidth(0))
+  :call DoRecordScreen()
+! :let g:test ="Test 3: set linebreak + set list + fancy listchars"
+! :exe "set linebreak list listchars=nbsp:\u2423,tab:\u2595\u2014,trail:\u02d1,eol:\ub6"
+! :redraw!
+! :let line=ScreenChar(winwidth(0))
+! :call DoRecordScreen()
+! :let g:test ="Test 4: set linebreak nolist"
+  :set nolist linebreak
+  :redraw!
+  :let line=ScreenChar(winwidth(0))
+  :call DoRecordScreen()
+! :let g:test ="Test 5: set nolinebreak list"
+! :set list nolinebreak
+! :redraw!
+! :let line=ScreenChar(winwidth(0))
+! :call DoRecordScreen()
+! :let g:test ="Test 6: set linebreak with tab and 1 line as long as screen: should break!"
+  :set nolist linebreak ts=8
+  :let line="1\t".repeat('a', winwidth(0)-2)
+  :$put =line
+--- 32,43 ----
+  :redraw!
+  :let line=ScreenChar(winwidth(0))
+  :call DoRecordScreen()
+! :let g:test ="Test 3: set linebreak nolist"
+  :set nolist linebreak
+  :redraw!
+  :let line=ScreenChar(winwidth(0))
+  :call DoRecordScreen()
+! :let g:test ="Test 4: set linebreak with tab and 1 line as long as screen: should break!"
+  :set nolist linebreak ts=8
+  :let line="1\t".repeat('a', winwidth(0)-2)
+  :$put =line
+*** ../vim-7.4.369/src/testdir/test_listlbr.ok	2014-07-02 19:59:35.454375136 +0200
+--- src/testdir/test_listlbr.ok	2014-07-16 16:55:15.315578352 +0200
+***************
+*** 1,38 ****
+  
+! 	abcdef hijklmn	pqrstuvwxyz 1060ABCDEFGHIJKLMNOP 
+  
+  Test 1: set linebreak
+      abcdef          
+  +hijklmn            
+! +pqrstuvwxyz 1060ABC
+  +DEFGHIJKLMNOP      
+  
+  Test 2: set linebreak + set list
+  ^Iabcdef hijklmn^I  
+! +pqrstuvwxyz 1060ABC
+  +DEFGHIJKLMNOP      
+                      
+  
+! Test 3: set linebreak + set list + fancy listchars
+! ▕———abcdef          
+! +hijklmn▕———        
+! +pqrstuvwxyz␣1060ABC
+! +DEFGHIJKLMNOPˑ¶    
+! 
+! Test 4: set linebreak nolist
+      abcdef          
+  +hijklmn            
+! +pqrstuvwxyz 1060ABC
+  +DEFGHIJKLMNOP      
+- 
+- Test 5: set nolinebreak list
+- ▕———abcdef hijklmn▕—
+- +pqrstuvwxyz␣1060ABC
+- +DEFGHIJKLMNOPˑ¶    
+- ¶                   
+  1	aaaaaaaaaaaaaaaaaa
+  
+! Test 6: set linebreak with tab and 1 line as long as screen: should break!
+  1                   
+  +aaaaaaaaaaaaaaaaaa 
+  ~                   
+--- 1,26 ----
+  
+! 	abcdef hijklmn	pqrstuvwxyz_1060ABCDEFGHIJKLMNOP 
+  
+  Test 1: set linebreak
+      abcdef          
+  +hijklmn            
+! +pqrstuvwxyz_1060ABC
+  +DEFGHIJKLMNOP      
+  
+  Test 2: set linebreak + set list
+  ^Iabcdef hijklmn^I  
+! +pqrstuvwxyz_1060ABC
+  +DEFGHIJKLMNOP      
+                      
+  
+! Test 3: set linebreak nolist
+      abcdef          
+  +hijklmn            
+! +pqrstuvwxyz_1060ABC
+  +DEFGHIJKLMNOP      
+  1	aaaaaaaaaaaaaaaaaa
+  
+! Test 4: set linebreak with tab and 1 line as long as screen: should break!
+  1                   
+  +aaaaaaaaaaaaaaaaaa 
+  ~                   
+*** ../vim-7.4.369/src/testdir/test_listlbr_utf8.in	2014-07-16 17:01:25.415570829 +0200
+--- src/testdir/test_listlbr_utf8.in	2014-07-16 16:55:15.315578352 +0200
+***************
+*** 0 ****
+--- 1,41 ----
++ Test for linebreak and list option in utf-8 mode
++ 
++ STARTTEST
++ :so small.vim
++ :if !exists("+linebreak") | e! test.ok | w! test.out | qa! | endif
++ :so mbyte.vim
++ :if &enc !=? 'utf-8'|:e! test.ok|:w! test.out|qa!|endif
++ :10new|:vsp|:vert resize 20
++ :put =\"\tabcdef hijklmn\tpqrstuvwxyz\u00a01060ABCDEFGHIJKLMNOP \"
++ :norm! zt
++ :set ts=4 sw=4 sts=4 linebreak sbr=+ wrap
++ :fu! ScreenChar(width)
++ :	let c=''
++ :	for j in range(1,4)
++ :	    for i in range(1,a:width)
++ :	    	let c.=nr2char(screenchar(j, i))
++ :	    endfor
++ :           let c.="\n"
++ :	endfor
++ :	return c
++ :endfu
++ :fu! DoRecordScreen()
++ :	wincmd l
++ :	$put =printf(\"\n%s\", g:test)
++ :	$put =g:line
++ :	wincmd p
++ :endfu
++ :let g:test ="Test 1: set linebreak + set list + fancy listchars"
++ :exe "set linebreak list listchars=nbsp:\u2423,tab:\u2595\u2014,trail:\u02d1,eol:\ub6"
++ :redraw!
++ :let line=ScreenChar(winwidth(0))
++ :call DoRecordScreen()
++ :let g:test ="Test 2: set nolinebreak list"
++ :set list nolinebreak
++ :redraw!
++ :let line=ScreenChar(winwidth(0))
++ :call DoRecordScreen()
++ :%w! test.out
++ :qa!
++ ENDTEST
++ dummy text
+*** ../vim-7.4.369/src/testdir/test_listlbr_utf8.ok	2014-07-16 17:01:25.419570829 +0200
+--- src/testdir/test_listlbr_utf8.ok	2014-07-16 16:55:15.315578352 +0200
+***************
+*** 0 ****
+--- 1,14 ----
++ 
++ 	abcdef hijklmn	pqrstuvwxyz 1060ABCDEFGHIJKLMNOP 
++ 
++ Test 1: set linebreak + set list + fancy listchars
++ ▕———abcdef          
++ +hijklmn▕———        
++ +pqrstuvwxyz␣1060ABC
++ +DEFGHIJKLMNOPˑ¶    
++ 
++ Test 2: set nolinebreak list
++ ▕———abcdef hijklmn▕—
++ +pqrstuvwxyz␣1060ABC
++ +DEFGHIJKLMNOPˑ¶    
++ ¶                   
+*** ../vim-7.4.369/src/version.c	2014-07-16 16:30:21.647608710 +0200
+--- src/version.c	2014-07-16 16:56:38.755576656 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     370,
+  /**/
+
+-- 
+   Another bucket of what can only be described as human ordure hits ARTHUR.
+ARTHUR: ... Right!  (to the KNIGHTS) That settles it!
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.371 b/SOURCES/7.4.371
new file mode 100644
index 0000000..f915a8f
--- /dev/null
+++ b/SOURCES/7.4.371
@@ -0,0 +1,59 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.371
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.371
+Problem:    When 'linebreak' is set control characters are not correctly
+	    displayed. (Kimmy Lindvall)
+Solution:   Set n_extra. (Christian Brabandt)
+Files:	    src/screen.c
+
+
+*** ../vim-7.4.370/src/screen.c	2014-07-09 20:20:40.359620108 +0200
+--- src/screen.c	2014-07-16 17:12:38.599557147 +0200
+***************
+*** 4646,4651 ****
+--- 4646,4653 ----
+  		else if (c != NUL)
+  		{
+  		    p_extra = transchar(c);
++ 		    if (n_extra == 0)
++ 			n_extra = byte2cells(c) - 1;
+  #ifdef FEAT_RIGHTLEFT
+  		    if ((dy_flags & DY_UHEX) && wp->w_p_rl)
+  			rl_mirror(p_extra);	/* reverse "<12>" */
+*** ../vim-7.4.370/src/version.c	2014-07-16 17:01:38.279570568 +0200
+--- src/version.c	2014-07-16 17:13:21.815556269 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     371,
+  /**/
+
+-- 
+LETTERS TO THE EDITOR (The Times of London)
+
+Dear Sir,
+
+I am firmly opposed to the spread of microchips either to the home or
+to the office.  We have more than enough of them foisted upon us in
+public places.  They are a disgusting Americanism, and can only result
+in the farmers being forced to grow smaller potatoes, which in turn
+will cause massive unemployment in the already severely depressed
+agricultural industry.
+
+Yours faithfully,
+        Capt. Quinton D'Arcy, J. P.
+        Sevenoaks
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.372 b/SOURCES/7.4.372
new file mode 100644
index 0000000..11d0254
--- /dev/null
+++ b/SOURCES/7.4.372
@@ -0,0 +1,188 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.372
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.372
+Problem:    When 'winminheight' is zero there might not be one line for the
+	    current window.
+Solution:   Change the size computations. (Yukihiro Nakadaira)
+Files:	    src/window.c
+
+
+*** ../vim-7.4.371/src/window.c	2014-07-16 16:30:21.647608710 +0200
+--- src/window.c	2014-07-16 18:06:53.123491001 +0200
+***************
+*** 688,693 ****
+--- 688,695 ----
+      int		before;
+      int		minwidth;
+      int		minheight;
++     int		wmw1;
++     int		wmh1;
+  
+      if (flags & WSP_TOP)
+  	oldwin = firstwin;
+***************
+*** 722,740 ****
+  	 * Check if we are able to split the current window and compute its
+  	 * width.
+  	 */
+! 	needed = p_wmw + 1;
+  	if (flags & WSP_ROOM)
+! 	    needed += p_wiw - p_wmw;
+  	if (p_ea || (flags & (WSP_BOT | WSP_TOP)))
+  	{
+! 	    minwidth = frame_minwidth(topframe, NULL);
+  	    available = topframe->fr_width;
+  	    needed += minwidth;
+  	}
+  	else
+  	{
+! 	    minwidth = frame_minwidth(oldwin->w_frame, NULL);
+! 	    available = oldwin->w_width;
+  	}
+  	if (available < needed && new_wp == NULL)
+  	{
+--- 724,745 ----
+  	 * Check if we are able to split the current window and compute its
+  	 * width.
+  	 */
+! 	/* Current window requires at least 1 space. */
+! 	wmw1 = (p_wmw == 0 ? 1 : p_wmw);
+! 	needed = wmw1 + 1;
+  	if (flags & WSP_ROOM)
+! 	    needed += p_wiw - wmw1;
+  	if (p_ea || (flags & (WSP_BOT | WSP_TOP)))
+  	{
+! 	    minwidth = frame_minwidth(topframe, NOWIN);
+  	    available = topframe->fr_width;
+  	    needed += minwidth;
+  	}
+  	else
+  	{
+! 	    minwidth = frame_minwidth(oldwin->w_frame, NOWIN);
+! 	    available = oldwin->w_frame->fr_width;
+! 	    needed += minwidth;
+  	}
+  	if (available < needed && new_wp == NULL)
+  	{
+***************
+*** 743,754 ****
+  	}
+  	if (new_size == 0)
+  	    new_size = oldwin->w_width / 2;
+- 	if (new_size > oldwin->w_width - p_wmw - 1)
+- 	    new_size = oldwin->w_width - p_wmw - 1;
+  	if (new_size > available - minwidth - 1)
+  	    new_size = available - minwidth - 1;
+! 	if (new_size < p_wmw)
+! 	    new_size = p_wmw;
+  
+  	/* if it doesn't fit in the current window, need win_equal() */
+  	if (oldwin->w_width - new_size - 1 < p_wmw)
+--- 748,757 ----
+  	}
+  	if (new_size == 0)
+  	    new_size = oldwin->w_width / 2;
+  	if (new_size > available - minwidth - 1)
+  	    new_size = available - minwidth - 1;
+! 	if (new_size < wmw1)
+! 	    new_size = wmw1;
+  
+  	/* if it doesn't fit in the current window, need win_equal() */
+  	if (oldwin->w_width - new_size - 1 < p_wmw)
+***************
+*** 789,808 ****
+  	 * Check if we are able to split the current window and compute its
+  	 * height.
+  	 */
+! 	needed = p_wmh + STATUS_HEIGHT + need_status;
+  	if (flags & WSP_ROOM)
+! 	    needed += p_wh - p_wmh;
+  	if (p_ea || (flags & (WSP_BOT | WSP_TOP)))
+  	{
+! 	    minheight = frame_minheight(topframe, NULL);
+  	    available = topframe->fr_height;
+  	    needed += minheight;
+  	}
+  	else
+  	{
+! 	    minheight = frame_minheight(oldwin->w_frame, NULL);
+! 	    available = oldwin->w_height;
+! 	    needed += p_wmh;
+  	}
+  	if (available < needed && new_wp == NULL)
+  	{
+--- 792,813 ----
+  	 * Check if we are able to split the current window and compute its
+  	 * height.
+  	 */
+! 	/* Current window requires at least 1 space. */
+! 	wmh1 = (p_wmh == 0 ? 1 : p_wmh);
+! 	needed = wmh1 + STATUS_HEIGHT;
+  	if (flags & WSP_ROOM)
+! 	    needed += p_wh - wmh1;
+  	if (p_ea || (flags & (WSP_BOT | WSP_TOP)))
+  	{
+! 	    minheight = frame_minheight(topframe, NOWIN) + need_status;
+  	    available = topframe->fr_height;
+  	    needed += minheight;
+  	}
+  	else
+  	{
+! 	    minheight = frame_minheight(oldwin->w_frame, NOWIN) + need_status;
+! 	    available = oldwin->w_frame->fr_height;
+! 	    needed += minheight;
+  	}
+  	if (available < needed && new_wp == NULL)
+  	{
+***************
+*** 817,829 ****
+  	}
+  	if (new_size == 0)
+  	    new_size = oldwin_height / 2;
+- 
+- 	if (new_size > oldwin_height - p_wmh - STATUS_HEIGHT)
+- 	    new_size = oldwin_height - p_wmh - STATUS_HEIGHT;
+  	if (new_size > available - minheight - STATUS_HEIGHT)
+  	    new_size = available - minheight - STATUS_HEIGHT;
+! 	if (new_size < p_wmh)
+! 	    new_size = p_wmh;
+  
+  	/* if it doesn't fit in the current window, need win_equal() */
+  	if (oldwin_height - new_size - STATUS_HEIGHT < p_wmh)
+--- 822,831 ----
+  	}
+  	if (new_size == 0)
+  	    new_size = oldwin_height / 2;
+  	if (new_size > available - minheight - STATUS_HEIGHT)
+  	    new_size = available - minheight - STATUS_HEIGHT;
+! 	if (new_size < wmh1)
+! 	    new_size = wmh1;
+  
+  	/* if it doesn't fit in the current window, need win_equal() */
+  	if (oldwin_height - new_size - STATUS_HEIGHT < p_wmh)
+*** ../vim-7.4.371/src/version.c	2014-07-16 17:29:46.691536252 +0200
+--- src/version.c	2014-07-16 17:34:14.795530803 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     372,
+  /**/
+
+-- 
+   [The rest of the ARMY stand around looking at a loss.]
+INSPECTOR END OF FILM: (picks up megaphone) All right!  Clear off!  Go on!
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.373 b/SOURCES/7.4.373
new file mode 100644
index 0000000..0d2841d
--- /dev/null
+++ b/SOURCES/7.4.373
@@ -0,0 +1,98 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.373
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.373
+Problem:    Compiler warning for unused argument and unused variable.
+Solution:   Add UNUSED.  Move variable inside #ifdef.
+Files:	    src/charset.c, src/window.c
+
+
+*** ../vim-7.4.372/src/charset.c	2014-07-02 19:59:35.450375136 +0200
+--- src/charset.c	2014-07-16 23:36:51.211088615 +0200
+***************
+*** 1024,1030 ****
+   */
+      int
+  lbr_chartabsize(line, s, col)
+!     char_u		*line; /* start of the line */
+      unsigned char	*s;
+      colnr_T		col;
+  {
+--- 1024,1030 ----
+   */
+      int
+  lbr_chartabsize(line, s, col)
+!     char_u		*line UNUSED; /* start of the line */
+      unsigned char	*s;
+      colnr_T		col;
+  {
+***************
+*** 1069,1075 ****
+      int
+  win_lbr_chartabsize(wp, line, s, col, headp)
+      win_T	*wp;
+!     char_u	*line; /* start of the line */
+      char_u	*s;
+      colnr_T	col;
+      int		*headp UNUSED;
+--- 1069,1075 ----
+      int
+  win_lbr_chartabsize(wp, line, s, col, headp)
+      win_T	*wp;
+!     char_u	*line UNUSED; /* start of the line */
+      char_u	*s;
+      colnr_T	col;
+      int		*headp UNUSED;
+*** ../vim-7.4.372/src/window.c	2014-07-16 18:19:22.911475762 +0200
+--- src/window.c	2014-07-16 23:38:31.567086575 +0200
+***************
+*** 686,694 ****
+      int		layout;
+      frame_T	*frp, *curfrp;
+      int		before;
+-     int		minwidth;
+      int		minheight;
+-     int		wmw1;
+      int		wmh1;
+  
+      if (flags & WSP_TOP)
+--- 686,692 ----
+***************
+*** 718,723 ****
+--- 716,724 ----
+  #ifdef FEAT_VERTSPLIT
+      if (flags & WSP_VERT)
+      {
++ 	int	wmw1;
++ 	int	minwidth;
++ 
+  	layout = FR_ROW;
+  
+  	/*
+*** ../vim-7.4.372/src/version.c	2014-07-16 18:19:22.915475762 +0200
+--- src/version.c	2014-07-16 23:36:20.775089233 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     373,
+  /**/
+
+-- 
+INSPECTOR END OF FILM: Move along.  There's nothing to see!  Keep moving!
+   [Suddenly he notices the cameras.]
+INSPECTOR END OF FILM: (to Camera) All right, put that away sonny.
+   [He walks over to it and puts his hand over the lens.]
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.374 b/SOURCES/7.4.374
new file mode 100644
index 0000000..1657477
--- /dev/null
+++ b/SOURCES/7.4.374
@@ -0,0 +1,71 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.374
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.374
+Problem:    Character after "fb" command not mapped if it might be a composing
+	    character.
+Solution:   Don't disable mapping when looking for a composing character.
+	    (Jacob Niehus)
+Files:	    src/normal.c
+
+
+*** ../vim-7.4.373/src/normal.c	2014-04-29 12:15:22.856032651 +0200
+--- src/normal.c	2014-07-23 12:26:26.811992854 +0200
+***************
+*** 1076,1082 ****
+  #ifdef FEAT_MBYTE
+  	    /* When getting a text character and the next character is a
+  	     * multi-byte character, it could be a composing character.
+! 	     * However, don't wait for it to arrive. */
+  	    while (enc_utf8 && lang && (c = vpeekc()) > 0
+  				 && (c >= 0x100 || MB_BYTE2LEN(vpeekc()) > 1))
+  	    {
+--- 1076,1085 ----
+  #ifdef FEAT_MBYTE
+  	    /* When getting a text character and the next character is a
+  	     * multi-byte character, it could be a composing character.
+! 	     * However, don't wait for it to arrive. Also, do enable mapping,
+! 	     * because if it's put back with vungetc() it's too late to apply
+! 	     * mapping. */
+! 	    --no_mapping;
+  	    while (enc_utf8 && lang && (c = vpeekc()) > 0
+  				 && (c >= 0x100 || MB_BYTE2LEN(vpeekc()) > 1))
+  	    {
+***************
+*** 1091,1096 ****
+--- 1094,1100 ----
+  		else
+  		    ca.ncharC2 = c;
+  	    }
++ 	    ++no_mapping;
+  #endif
+  	}
+  	--no_mapping;
+*** ../vim-7.4.373/src/version.c	2014-07-16 23:39:50.251084976 +0200
+--- src/version.c	2014-07-23 12:27:50.483992253 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     374,
+  /**/
+
+-- 
+CART DRIVER: Bring out your dead!
+   There are legs stick out of windows and doors.  Two MEN are fighting in the
+   mud - covered from head to foot in it.  Another MAN is on his hands in
+   knees shovelling mud into his mouth.  We just catch sight of a MAN falling
+   into a well.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.375 b/SOURCES/7.4.375
new file mode 100644
index 0000000..5ccfecf
--- /dev/null
+++ b/SOURCES/7.4.375
@@ -0,0 +1,59 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.375
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.375
+Problem:    Test 63 fails when run with GUI-only Vim.
+Solution:   Add guibg attributes. (suggested by Mike Soyka)
+Files:	    src/testdir/test63.in
+
+
+*** ../vim-7.4.374/src/testdir/test63.in	2014-06-17 17:48:21.784628008 +0200
+--- src/testdir/test63.in	2014-07-23 13:12:20.727973060 +0200
+***************
+*** 6,14 ****
+  :" --- Check that "matcharg()" returns the correct group and pattern if a match
+  :" --- is defined.
+  :let @r = "*** Test 1: "
+! :highlight MyGroup1 ctermbg=red
+! :highlight MyGroup2 ctermbg=green
+! :highlight MyGroup3 ctermbg=blue
+  :match MyGroup1 /TODO/
+  :2match MyGroup2 /FIXME/
+  :3match MyGroup3 /XXX/
+--- 6,14 ----
+  :" --- Check that "matcharg()" returns the correct group and pattern if a match
+  :" --- is defined.
+  :let @r = "*** Test 1: "
+! :highlight MyGroup1 ctermbg=red guibg=red
+! :highlight MyGroup2 ctermbg=green guibg=green
+! :highlight MyGroup3 ctermbg=blue guibg=blue
+  :match MyGroup1 /TODO/
+  :2match MyGroup2 /FIXME/
+  :3match MyGroup3 /XXX/
+*** ../vim-7.4.374/src/version.c	2014-07-23 12:31:17.207990767 +0200
+--- src/version.c	2014-07-23 13:13:15.167972669 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     375,
+  /**/
+
+-- 
+BODY:        I'm not dead!
+CART DRIVER: 'Ere.  He says he's not dead.
+LARGE MAN:   Yes he is.
+BODY:        I'm not!
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.376 b/SOURCES/7.4.376
new file mode 100644
index 0000000..93098cb
--- /dev/null
+++ b/SOURCES/7.4.376
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.376
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.376 (after 7.4.367)
+Problem:    Popup menu flickers too much.
+Solution:   Remove the forced redraw. (Hirohito Higashi)
+Files:	    src/edit.c
+
+
+*** ../vim-7.4.375/src/edit.c	2014-07-16 14:42:37.923740082 +0200
+--- src/edit.c	2014-07-23 13:49:03.535957228 +0200
+***************
+*** 4593,4601 ****
+      i = compl_col + (compl_cont_status & CONT_ADDING ? compl_length : 0);
+      backspace_until_column(i);
+  
+!     /* Not sure what is still valid, better redraw everything. */
+      changed_cline_bef_curs();
+-     redraw_curbuf_later(NOT_VALID);
+  }
+  
+  /* Insert the new text being completed. */
+--- 4593,4601 ----
+      i = compl_col + (compl_cont_status & CONT_ADDING ? compl_length : 0);
+      backspace_until_column(i);
+  
+!     /* TODO: is this sufficient for redrawing?  Redrawing everything causes
+!      * flicker, thus we can't do that. */
+      changed_cline_bef_curs();
+  }
+  
+  /* Insert the new text being completed. */
+*** ../vim-7.4.375/src/version.c	2014-07-23 13:16:26.727971292 +0200
+--- src/version.c	2014-07-23 13:48:02.031957670 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     376,
+  /**/
+
+-- 
+Why I like vim:
+> I like VIM because, when I ask a question in this newsgroup, I get a
+> one-line answer.  With xemacs, I get a 1Kb lisp script with bugs in it ;-)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.377 b/SOURCES/7.4.377
new file mode 100644
index 0000000..e5d86bd
--- /dev/null
+++ b/SOURCES/7.4.377
@@ -0,0 +1,144 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.377
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.377
+Problem:    When 'equalalways' is set a split may report "no room" even though
+	    there is plenty of room.
+Solution:   Compute the available room properly. (Yukihiro Nakadaira)
+Files:	    src/window.c
+
+
+*** ../vim-7.4.376/src/window.c	2014-07-16 23:39:50.251084976 +0200
+--- src/window.c	2014-07-23 15:19:10.491918366 +0200
+***************
+*** 684,690 ****
+      int		available;
+      int		oldwin_height = 0;
+      int		layout;
+!     frame_T	*frp, *curfrp;
+      int		before;
+      int		minheight;
+      int		wmh1;
+--- 684,690 ----
+      int		available;
+      int		oldwin_height = 0;
+      int		layout;
+!     frame_T	*frp, *curfrp, *frp2, *prevfrp;
+      int		before;
+      int		minheight;
+      int		wmh1;
+***************
+*** 730,741 ****
+  	needed = wmw1 + 1;
+  	if (flags & WSP_ROOM)
+  	    needed += p_wiw - wmw1;
+! 	if (p_ea || (flags & (WSP_BOT | WSP_TOP)))
+  	{
+  	    minwidth = frame_minwidth(topframe, NOWIN);
+  	    available = topframe->fr_width;
+  	    needed += minwidth;
+  	}
+  	else
+  	{
+  	    minwidth = frame_minwidth(oldwin->w_frame, NOWIN);
+--- 730,758 ----
+  	needed = wmw1 + 1;
+  	if (flags & WSP_ROOM)
+  	    needed += p_wiw - wmw1;
+! 	if (flags & (WSP_BOT | WSP_TOP))
+  	{
+  	    minwidth = frame_minwidth(topframe, NOWIN);
+  	    available = topframe->fr_width;
+  	    needed += minwidth;
+  	}
++ 	else if (p_ea)
++ 	{
++ 	    minwidth = frame_minwidth(oldwin->w_frame, NOWIN);
++ 	    prevfrp = oldwin->w_frame;
++ 	    for (frp = oldwin->w_frame->fr_parent; frp != NULL;
++ 							frp = frp->fr_parent)
++ 	    {
++ 		if (frp->fr_layout == FR_ROW)
++ 		    for (frp2 = frp->fr_child; frp2 != NULL;
++ 							frp2 = frp2->fr_next)
++ 			if (frp2 != prevfrp)
++ 			    minwidth += frame_minwidth(frp2, NOWIN);
++ 		prevfrp = frp;
++ 	    }
++ 	    available = topframe->fr_width;
++ 	    needed += minwidth;
++ 	}
+  	else
+  	{
+  	    minwidth = frame_minwidth(oldwin->w_frame, NOWIN);
+***************
+*** 798,809 ****
+  	needed = wmh1 + STATUS_HEIGHT;
+  	if (flags & WSP_ROOM)
+  	    needed += p_wh - wmh1;
+! 	if (p_ea || (flags & (WSP_BOT | WSP_TOP)))
+  	{
+  	    minheight = frame_minheight(topframe, NOWIN) + need_status;
+  	    available = topframe->fr_height;
+  	    needed += minheight;
+  	}
+  	else
+  	{
+  	    minheight = frame_minheight(oldwin->w_frame, NOWIN) + need_status;
+--- 815,843 ----
+  	needed = wmh1 + STATUS_HEIGHT;
+  	if (flags & WSP_ROOM)
+  	    needed += p_wh - wmh1;
+! 	if (flags & (WSP_BOT | WSP_TOP))
+  	{
+  	    minheight = frame_minheight(topframe, NOWIN) + need_status;
+  	    available = topframe->fr_height;
+  	    needed += minheight;
+  	}
++ 	else if (p_ea)
++ 	{
++ 	    minheight = frame_minheight(oldwin->w_frame, NOWIN) + need_status;
++ 	    prevfrp = oldwin->w_frame;
++ 	    for (frp = oldwin->w_frame->fr_parent; frp != NULL;
++ 							frp = frp->fr_parent)
++ 	    {
++ 		if (frp->fr_layout == FR_COL)
++ 		    for (frp2 = frp->fr_child; frp2 != NULL;
++ 							frp2 = frp2->fr_next)
++ 			if (frp2 != prevfrp)
++ 			    minheight += frame_minheight(frp2, NOWIN);
++ 		prevfrp = frp;
++ 	    }
++ 	    available = topframe->fr_height;
++ 	    needed += minheight;
++ 	}
+  	else
+  	{
+  	    minheight = frame_minheight(oldwin->w_frame, NOWIN) + need_status;
+*** ../vim-7.4.376/src/version.c	2014-07-23 13:50:41.839956521 +0200
+--- src/version.c	2014-07-23 15:20:33.227917771 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     377,
+  /**/
+
+-- 
+LARGE MAN:   Who's that then?
+CART DRIVER: (Grudgingly) I dunno, Must be a king.
+LARGE MAN:   Why?
+CART DRIVER: He hasn't got shit all over him.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.378 b/SOURCES/7.4.378
new file mode 100644
index 0000000..659f18f
--- /dev/null
+++ b/SOURCES/7.4.378
@@ -0,0 +1,336 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.378
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.378
+Problem:    Title of quickfist list is not kept for setqflist(list, 'r').
+Solution:   Keep the title.  Add a test. (Lcd)
+Files:	    src/quickfix.c, src/testdir/Make_amiga.mak,
+	    src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+	    src/testdir/Make_os2.mak, src/testdir/Make_vms.mms,
+	    src/testdir/Makefile, src/testdir/test_qf_title.in,
+	    src/testdir/test_qf_title.ok
+
+
+*** ../vim-7.4.377/src/quickfix.c	2014-03-27 17:02:22.080660944 +0100
+--- src/quickfix.c	2014-07-23 15:37:30.551910459 +0200
+***************
+*** 107,112 ****
+--- 107,113 ----
+  };
+  
+  static int	qf_init_ext __ARGS((qf_info_T *qi, char_u *efile, buf_T *buf, typval_T *tv, char_u *errorformat, int newlist, linenr_T lnumfirst, linenr_T lnumlast, char_u *qf_title));
++ static void	qf_store_title __ARGS((qf_info_T *qi, char_u *title));
+  static void	qf_new_list __ARGS((qf_info_T *qi, char_u *qf_title));
+  static void	ll_free_all __ARGS((qf_info_T **pqi));
+  static int	qf_add_entry __ARGS((qf_info_T *qi, qfline_T **prevp, char_u *dir, char_u *fname, int bufnum, char_u *mesg, long lnum, int col, int vis_col, char_u *pattern, int nr, int type, int valid));
+***************
+*** 126,132 ****
+  static win_T	*qf_find_win __ARGS((qf_info_T *qi));
+  static buf_T	*qf_find_buf __ARGS((qf_info_T *qi));
+  static void	qf_update_buffer __ARGS((qf_info_T *qi));
+! static void	qf_set_title __ARGS((qf_info_T *qi));
+  static void	qf_fill_buffer __ARGS((qf_info_T *qi));
+  #endif
+  static char_u	*get_mef_name __ARGS((void));
+--- 127,133 ----
+  static win_T	*qf_find_win __ARGS((qf_info_T *qi));
+  static buf_T	*qf_find_buf __ARGS((qf_info_T *qi));
+  static void	qf_update_buffer __ARGS((qf_info_T *qi));
+! static void	qf_set_title_var __ARGS((qf_info_T *qi));
+  static void	qf_fill_buffer __ARGS((qf_info_T *qi));
+  #endif
+  static char_u	*get_mef_name __ARGS((void));
+***************
+*** 884,889 ****
+--- 885,905 ----
+      return retval;
+  }
+  
++     static void
++ qf_store_title(qi, title)
++     qf_info_T	*qi;
++     char_u	*title;
++ {
++     if (title != NULL)
++     {
++ 	char_u *p = alloc((int)STRLEN(title) + 2);
++ 
++ 	qi->qf_lists[qi->qf_curlist].qf_title = p;
++ 	if (p != NULL)
++ 	    sprintf((char *)p, ":%s", (char *)title);
++     }
++ }
++ 
+  /*
+   * Prepare for adding a new quickfix list.
+   */
+***************
+*** 895,901 ****
+      int		i;
+  
+      /*
+!      * If the current entry is not the last entry, delete entries below
+       * the current entry.  This makes it possible to browse in a tree-like
+       * way with ":grep'.
+       */
+--- 911,917 ----
+      int		i;
+  
+      /*
+!      * If the current entry is not the last entry, delete entries beyond
+       * the current entry.  This makes it possible to browse in a tree-like
+       * way with ":grep'.
+       */
+***************
+*** 916,929 ****
+      else
+  	qi->qf_curlist = qi->qf_listcount++;
+      vim_memset(&qi->qf_lists[qi->qf_curlist], 0, (size_t)(sizeof(qf_list_T)));
+!     if (qf_title != NULL)
+!     {
+! 	char_u *p = alloc((int)STRLEN(qf_title) + 2);
+! 
+! 	qi->qf_lists[qi->qf_curlist].qf_title = p;
+! 	if (p != NULL)
+! 	    sprintf((char *)p, ":%s", (char *)qf_title);
+!     }
+  }
+  
+  /*
+--- 932,938 ----
+      else
+  	qi->qf_curlist = qi->qf_listcount++;
+      vim_memset(&qi->qf_lists[qi->qf_curlist], 0, (size_t)(sizeof(qf_list_T)));
+!     qf_store_title(qi, qf_title);
+  }
+  
+  /*
+***************
+*** 2444,2450 ****
+      qf_fill_buffer(qi);
+  
+      if (qi->qf_lists[qi->qf_curlist].qf_title != NULL)
+! 	qf_set_title(qi);
+  
+      curwin->w_cursor.lnum = qi->qf_lists[qi->qf_curlist].qf_index;
+      curwin->w_cursor.col = 0;
+--- 2453,2459 ----
+      qf_fill_buffer(qi);
+  
+      if (qi->qf_lists[qi->qf_curlist].qf_title != NULL)
+! 	qf_set_title_var(qi);
+  
+      curwin->w_cursor.lnum = qi->qf_lists[qi->qf_curlist].qf_index;
+      curwin->w_cursor.col = 0;
+***************
+*** 2599,2605 ****
+  	{
+  	    curwin_save = curwin;
+  	    curwin = win;
+! 	    qf_set_title(qi);
+  	    curwin = curwin_save;
+  
+  	}
+--- 2608,2614 ----
+  	{
+  	    curwin_save = curwin;
+  	    curwin = win;
+! 	    qf_set_title_var(qi);
+  	    curwin = curwin_save;
+  
+  	}
+***************
+*** 2612,2618 ****
+  }
+  
+      static void
+! qf_set_title(qi)
+      qf_info_T	*qi;
+  {
+      set_internal_string_var((char_u *)"w:quickfix_title",
+--- 2621,2627 ----
+  }
+  
+      static void
+! qf_set_title_var(qi)
+      qf_info_T	*qi;
+  {
+      set_internal_string_var((char_u *)"w:quickfix_title",
+***************
+*** 3845,3851 ****
+--- 3854,3863 ----
+  	     prevp->qf_next != prevp; prevp = prevp->qf_next)
+  	    ;
+      else if (action == 'r')
++     {
+  	qf_free(qi, qi->qf_curlist);
++ 	qf_store_title(qi, title);
++     }
+  
+      for (li = list->lv_first; li != NULL; li = li->li_next)
+      {
+*** ../vim-7.4.377/src/testdir/Make_amiga.mak	2014-07-16 17:01:38.275570568 +0200
+--- src/testdir/Make_amiga.mak	2014-07-23 15:26:51.455915053 +0200
+***************
+*** 40,45 ****
+--- 40,46 ----
+  		test_breakindent.out \
+  		test_listlbr.out \
+  		test_listlbr_utf8.out \
++ 		test_qf_title.out \
+  		test_eval.out \
+  		test_options.out
+  
+***************
+*** 169,173 ****
+--- 170,175 ----
+  test_breakindent.out: test_breakindent.in
+  test_listlbr.out: test_listlbr.in
+  test_listlbr_utf8.out: test_listlbr_utf8.in
++ test_qf_title.out: test_qf_title.in
+  test_eval.out: test_eval.in
+  test_options.out: test_options.in
+*** ../vim-7.4.377/src/testdir/Make_dos.mak	2014-07-16 17:01:38.279570568 +0200
+--- src/testdir/Make_dos.mak	2014-07-23 15:27:01.231914983 +0200
+***************
+*** 39,44 ****
+--- 39,45 ----
+  		test_breakindent.out \
+  		test_listlbr.out \
+  		test_listlbr_utf8.out \
++ 		test_qf_title.out \
+  		test_eval.out \
+  		test_options.out
+  
+*** ../vim-7.4.377/src/testdir/Make_ming.mak	2014-07-16 17:01:38.279570568 +0200
+--- src/testdir/Make_ming.mak	2014-07-23 15:27:13.163914897 +0200
+***************
+*** 59,64 ****
+--- 59,65 ----
+  		test_breakindent.out \
+  		test_listlbr.out \
+  		test_listlbr_utf8.out \
++ 		test_qf_title.out \
+  		test_eval.out \
+  		test_options.out
+  
+*** ../vim-7.4.377/src/testdir/Make_os2.mak	2014-07-16 17:01:38.279570568 +0200
+--- src/testdir/Make_os2.mak	2014-07-23 15:27:25.999914805 +0200
+***************
+*** 40,47 ****
+  		test_autoformat_join.out \
+  		test_eval.out \
+  		test_breakindent.out \
+- 		test_listlbr_utf8.out \
+  		test_listlbr.out \
+  		test_options.out
+  
+  .SUFFIXES: .in .out
+--- 40,48 ----
+  		test_autoformat_join.out \
+  		test_eval.out \
+  		test_breakindent.out \
+  		test_listlbr.out \
++ 		test_listlbr_utf8.out \
++ 		test_qf_title.out \
+  		test_options.out
+  
+  .SUFFIXES: .in .out
+*** ../vim-7.4.377/src/testdir/Make_vms.mms	2014-07-16 17:01:38.279570568 +0200
+--- src/testdir/Make_vms.mms	2014-07-23 15:27:34.787914741 +0200
+***************
+*** 4,10 ****
+  # Authors:	Zoltan Arpadffy, <arpadffy@polarhome.com>
+  #		Sandor Kopanyi,  <sandor.kopanyi@mailbox.hu>
+  #
+! # Last change:  2014 May 28
+  #
+  # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+  # Edit the lines in the Configuration section below to select.
+--- 4,10 ----
+  # Authors:	Zoltan Arpadffy, <arpadffy@polarhome.com>
+  #		Sandor Kopanyi,  <sandor.kopanyi@mailbox.hu>
+  #
+! # Last change:  2014 Jul 23
+  #
+  # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+  # Edit the lines in the Configuration section below to select.
+***************
+*** 100,105 ****
+--- 100,106 ----
+  	 test_breakindent.out \
+  	 test_listlbr.out \
+  	 test_listlbr_utf8.out \
++ 	 test_qf_title.out \
+  	 test_eval.out \
+  	 test_options.out
+  
+*** ../vim-7.4.377/src/testdir/Makefile	2014-07-16 17:01:38.279570568 +0200
+--- src/testdir/Makefile	2014-07-23 15:27:46.947914654 +0200
+***************
+*** 37,42 ****
+--- 37,43 ----
+  		test_breakindent.out \
+  		test_listlbr.out \
+  		test_listlbr_utf8.out \
++ 		test_qf_title.out \
+  		test_eval.out \
+  		test_options.out
+  
+*** ../vim-7.4.377/src/testdir/test_qf_title.in	2014-07-23 15:53:26.279903590 +0200
+--- src/testdir/test_qf_title.in	2014-07-23 15:26:02.495915405 +0200
+***************
+*** 0 ****
+--- 1,18 ----
++ Tests for quickfix window's title     vim: set ft=vim :
++ 
++ STARTTEST
++ :so small.vim
++ :if !has('quickfix') | e! test.ok | wq! test.out | endif
++ :set efm=%E%f:%l:%c:%m
++ :cgetexpr ['file:1:1:message']
++ :let qflist=getqflist()
++ :call setqflist(qflist, 'r')
++ :copen
++ :let g:quickfix_title=w:quickfix_title
++ :wincmd p
++ :$put =g:quickfix_title
++ :/^Results/,$w test.out
++ :qa!
++ ENDTEST
++ 
++ Results of test_qf_title:
+*** ../vim-7.4.377/src/testdir/test_qf_title.ok	2014-07-23 15:53:26.283903590 +0200
+--- src/testdir/test_qf_title.ok	2014-07-23 15:25:55.303915456 +0200
+***************
+*** 0 ****
+--- 1,2 ----
++ Results of test_qf_title:
++ :setqflist()
+*** ../vim-7.4.377/src/version.c	2014-07-23 15:21:16.247917462 +0200
+--- src/version.c	2014-07-23 15:28:57.251914149 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     378,
+  /**/
+
+-- 
+ARTHUR: Old woman!
+DENNIS: Man!
+ARTHUR: Man.  I'm sorry.  Old man, What knight live in that castle over there?
+DENNIS: I'm thirty-seven.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.379 b/SOURCES/7.4.379
new file mode 100644
index 0000000..79d8593
--- /dev/null
+++ b/SOURCES/7.4.379
@@ -0,0 +1,45 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.379
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.379
+Problem:    Accessing freed memory after using setqflist(list, 'r'). (Lcd)
+Solution:   Reset qf_index.
+Files:	    src/quickfix.c
+
+
+*** ../vim-7.4.378/src/quickfix.c	2014-07-23 15:54:43.443903036 +0200
+--- src/quickfix.c	2014-07-23 16:11:59.915895586 +0200
+***************
+*** 2173,2178 ****
+--- 2173,2179 ----
+      }
+      vim_free(qi->qf_lists[idx].qf_title);
+      qi->qf_lists[idx].qf_title = NULL;
++     qi->qf_lists[idx].qf_index = 0;
+  }
+  
+  /*
+*** ../vim-7.4.378/src/version.c	2014-07-23 15:54:43.443903036 +0200
+--- src/version.c	2014-07-23 16:14:43.995894407 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     379,
+  /**/
+
+-- 
+"Lisp has all the visual appeal of oatmeal with nail clippings thrown in."
+                                                         -- Larry Wall
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.380 b/SOURCES/7.4.380
new file mode 100644
index 0000000..8c93e07
--- /dev/null
+++ b/SOURCES/7.4.380
@@ -0,0 +1,115 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.380
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.380
+Problem:    Loading python may cause Vim to exit.
+Solution:   Avoid loading the "site" module. (Taro Muraoka)
+Files:	    src/if_python.c
+
+
+*** ../vim-7.4.379/src/if_python.c	2014-03-30 16:11:37.176530823 +0200
+--- src/if_python.c	2014-07-23 16:46:42.863880615 +0200
+***************
+*** 295,300 ****
+--- 295,303 ----
+  #  define PyCObject_FromVoidPtr dll_PyCObject_FromVoidPtr
+  #  define PyCObject_AsVoidPtr dll_PyCObject_AsVoidPtr
+  # endif
++ # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
++ #  define Py_NoSiteFlag (*dll_Py_NoSiteFlag)
++ # endif
+  
+  /*
+   * Pointers for dynamic link
+***************
+*** 440,445 ****
+--- 443,451 ----
+  static PyObject* (*dll_PyCObject_FromVoidPtr)(void *cobj, void (*destr)(void *));
+  static void* (*dll_PyCObject_AsVoidPtr)(PyObject *);
+  # endif
++ # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
++ static int* dll_Py_NoSiteFlag;
++ # endif
+  
+  static HINSTANCE hinstPython = 0; /* Instance of python.dll */
+  
+***************
+*** 633,638 ****
+--- 639,647 ----
+      {"PyCObject_FromVoidPtr", (PYTHON_PROC*)&dll_PyCObject_FromVoidPtr},
+      {"PyCObject_AsVoidPtr", (PYTHON_PROC*)&dll_PyCObject_AsVoidPtr},
+  # endif
++ # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
++     {"Py_NoSiteFlag", (PYTHON_PROC*)&dll_Py_NoSiteFlag},
++ # endif
+      {"", NULL},
+  };
+  
+***************
+*** 901,906 ****
+--- 910,919 ----
+  {
+      if (!initialised)
+      {
++ #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
++ 	PyObject *site;
++ #endif
++ 
+  #ifdef DYNAMIC_PYTHON
+  	if (!python_enabled(TRUE))
+  	{
+***************
+*** 915,925 ****
+--- 928,956 ----
+  
+  	init_structs();
+  
++ #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
++ 	/* Disable implicit 'import site', because it may cause Vim to exit
++ 	 * when it can't be found. */
++ 	Py_NoSiteFlag++;
++ #endif
++ 
+  #if !defined(MACOS) || defined(MACOS_X_UNIX)
+  	Py_Initialize();
+  #else
+  	PyMac_Initialize();
+  #endif
++ 
++ #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
++ 	/* 'import site' explicitly. */
++ 	site = PyImport_ImportModule("site");
++ 	if (site == NULL)
++ 	{
++ 	    EMSG(_("E887: Sorry, this command is disabled, the Python's site module could not be loaded."));
++ 	    goto fail;
++ 	}
++ 	Py_DECREF(site);
++ #endif
++ 
+  	/* Initialise threads, and below save the state using
+  	 * PyEval_SaveThread.  Without the call to PyEval_SaveThread, thread
+  	 * specific state (such as the system trace hook), will be lost
+*** ../vim-7.4.379/src/version.c	2014-07-23 16:33:04.079886500 +0200
+--- src/version.c	2014-07-23 16:43:47.939881872 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     380,
+  /**/
+
+-- 
+Looking at Perl through Lisp glasses, Perl looks atrocious.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.381 b/SOURCES/7.4.381
new file mode 100644
index 0000000..188124e
--- /dev/null
+++ b/SOURCES/7.4.381
@@ -0,0 +1,45 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.381
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.381
+Problem:    Get u_undo error when backspacing in Insert mode deletes more than
+	    one line break. (Ayberk Ozgur)
+Solution:   Also decrement Insstart.lnum.
+Files:	    src/edit.c
+
+
+*** ../vim-7.4.380/src/edit.c	2014-07-23 13:50:41.839956521 +0200
+--- src/edit.c	2014-07-23 17:35:05.747859751 +0200
+***************
+*** 8833,8838 ****
+--- 8833,8839 ----
+  		return FALSE;
+  	    --Insstart_orig.lnum;
+  	    Insstart_orig.col = MAXCOL;
++ 	    Insstart = Insstart_orig;
+  	}
+  	/*
+  	 * In replace mode:
+*** ../vim-7.4.380/src/version.c	2014-07-23 16:56:56.587876204 +0200
+--- src/version.c	2014-07-23 17:38:54.467858107 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     381,
+  /**/
+
+-- 
+Friends?  I have lots of friends!  In fact, I have all episodes ever made.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.382 b/SOURCES/7.4.382
new file mode 100644
index 0000000..e1ca90b
--- /dev/null
+++ b/SOURCES/7.4.382
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.382
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.382
+Problem:    Mapping characters may not work after typing Esc in Insert mode.
+Solution:   Fix the noremap flags for inserted characters. (Jacob Niehus)
+Files:	    src/getchar.c
+
+
+*** ../vim-7.4.381/src/getchar.c	2014-06-25 14:39:35.102348584 +0200
+--- src/getchar.c	2014-07-23 20:10:25.651792765 +0200
+***************
+*** 2731,2736 ****
+--- 2731,2741 ----
+  		}
+  		if (c < 0)
+  		    continue;	/* end of input script reached */
++ 
++ 		/* Allow mapping for just typed characters. When we get here c
++ 		 * is the number of extra bytes and typebuf.tb_len is 1. */
++ 		for (n = 1; n <= c; ++n)
++ 		    typebuf.tb_noremap[typebuf.tb_off + n] = RM_YES;
+  		typebuf.tb_len += c;
+  
+  		/* buffer full, don't map */
+*** ../vim-7.4.381/src/version.c	2014-07-23 17:39:21.815857910 +0200
+--- src/version.c	2014-07-23 18:26:42.663837492 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     382,
+  /**/
+
+-- 
+DENNIS: Oh, very nice. King, eh!  I expect you've got a palace and fine
+        clothes and courtiers and plenty of food.  And how d'you get that?  By
+        exploiting the workers! By hanging on to outdated imperialist dogma
+        which perpetuates the social and economic differences in our society!
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.383 b/SOURCES/7.4.383
new file mode 100644
index 0000000..f022812
--- /dev/null
+++ b/SOURCES/7.4.383
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.383
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.383
+Problem:    Bad interaction between preview window and omnifunc.
+Solution:   Avoid redrawing the status line. (Hirohito Higashi)
+Files:	    src/popupmnu.c
+
+
+*** ../vim-7.4.382/src/popupmnu.c	2014-07-09 19:58:21.111647328 +0200
+--- src/popupmnu.c	2014-07-23 20:56:17.131772989 +0200
+***************
+*** 643,648 ****
+--- 643,654 ----
+  
+  		    if (curwin != curwin_save && win_valid(curwin_save))
+  		    {
++ 			/* When the first completion is done and the preview
++ 			 * window is not resized, skip the preview window's
++ 			 * status line redrawing. */
++ 			if (ins_compl_active() && !resized)
++ 			    curwin->w_redr_status = FALSE;
++ 
+  			/* Return cursor to where we were */
+  			validate_cursor();
+  			redraw_later(SOME_VALID);
+*** ../vim-7.4.382/src/version.c	2014-07-23 20:41:09.895779510 +0200
+--- src/version.c	2014-07-23 20:58:12.079772163 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     383,
+  /**/
+
+-- 
+ARTHUR:    ... and I am your king ....
+OLD WOMAN: Ooooh!  I didn't know we had a king.  I thought we were an
+           autonomous collective ...
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.384 b/SOURCES/7.4.384
new file mode 100644
index 0000000..6c2b046
--- /dev/null
+++ b/SOURCES/7.4.384
@@ -0,0 +1,47 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.384
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.384
+Problem:    Test 102 fails when compiled with small features.
+Solution:   Source small.vim. (Jacob Niehus)
+Files:	    src/testdir/test102.in
+
+
+*** ../vim-7.4.383/src/testdir/test102.in	2013-11-12 05:28:08.000000000 +0100
+--- src/testdir/test102.in	2014-07-27 21:10:34.881282860 +0200
+***************
+*** 1,6 ****
+--- 1,7 ----
+  Test if fnameescape is correct for special chars like !
+  
+  STARTTEST
++ :so small.vim
+  :%d
+  :let fname = 'Xspa ce'
+  :try | exe "w! " . fnameescape(fname) | put='Space' | endtry 
+*** ../vim-7.4.383/src/version.c	2014-07-23 21:10:39.867766788 +0200
+--- src/version.c	2014-07-30 13:15:18.047624849 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     384,
+  /**/
+
+-- 
+An easy way to determine if you have enough teamwork to be doomed is simply to
+measure how long it takes from the time you decide to go to lunch together
+until the time you actually eat.
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.385 b/SOURCES/7.4.385
new file mode 100644
index 0000000..8cfe098
--- /dev/null
+++ b/SOURCES/7.4.385
@@ -0,0 +1,76 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.385
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.385
+Problem:    When building with tiny or small features building the .mo files
+	    fails.
+Solution:   In autoconf do not setup for building the .mo files when it would
+	    fail.
+Files:	    src/configure.in, src/auto/configure
+
+
+*** ../vim-7.4.384/src/configure.in	2014-05-22 14:44:08.094481148 +0200
+--- src/configure.in	2014-07-27 21:26:39.349275928 +0200
+***************
+*** 3818,3824 ****
+      else
+        AC_MSG_RESULT([msgfmt not found - disabled]);
+      fi
+!     if test $have_gettext = "yes"; then
+        AC_DEFINE(HAVE_GETTEXT)
+        MAKEMO=yes
+        AC_SUBST(MAKEMO)
+--- 3818,3824 ----
+      else
+        AC_MSG_RESULT([msgfmt not found - disabled]);
+      fi
+!     if test $have_gettext = "yes" -a "x$features" != "xtiny" -a "x$features" != "xsmall"; then
+        AC_DEFINE(HAVE_GETTEXT)
+        MAKEMO=yes
+        AC_SUBST(MAKEMO)
+*** ../vim-7.4.384/src/auto/configure	2014-05-22 14:44:08.098481148 +0200
+--- src/auto/configure	2014-07-27 21:26:41.969275909 +0200
+***************
+*** 12966,12972 ****
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: msgfmt not found - disabled" >&5
+  $as_echo "msgfmt not found - disabled" >&6; };
+      fi
+!     if test $have_gettext = "yes"; then
+        $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h
+  
+        MAKEMO=yes
+--- 12966,12972 ----
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: msgfmt not found - disabled" >&5
+  $as_echo "msgfmt not found - disabled" >&6; };
+      fi
+!     if test $have_gettext = "yes" -a "x$features" != "xtiny" -a "x$features" != "xsmall"; then
+        $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h
+  
+        MAKEMO=yes
+*** ../vim-7.4.384/src/version.c	2014-07-30 13:20:35.719622565 +0200
+--- src/version.c	2014-07-30 13:22:07.295621907 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     385,
+  /**/
+
+-- 
+"You're fired." (1980)
+"You're laid off." (1985)
+"You're downsized." (1990)
+"You're rightsized." (1992)
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.386 b/SOURCES/7.4.386
new file mode 100644
index 0000000..2b0db1f
--- /dev/null
+++ b/SOURCES/7.4.386
@@ -0,0 +1,186 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.386
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.386
+Problem:    When splitting a window the changelist position is wrong.
+Solution:   Copy the changelist position. (Jacob Niehus)
+Files:	    src/window.c, src/testdir/Make_amiga.mak,
+	    src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+	    src/testdir/Make_os2.mak, src/testdir/Make_vms.mms,
+	    src/testdir/Makefile, src/testdir/test_changelist.in,
+	    src/testdir/test_changelist.ok
+
+
+*** ../vim-7.4.385/src/window.c	2014-07-23 15:21:16.247917462 +0200
+--- src/window.c	2014-07-30 13:55:49.275607374 +0200
+***************
+*** 1178,1183 ****
+--- 1178,1188 ----
+  	    p_wh = size;
+      }
+  
++ #ifdef FEAT_JUMPLIST
++     /* Keep same changelist position in new window. */
++     wp->w_changelistidx = oldwin->w_changelistidx;
++ #endif
++ 
+      /*
+       * make the new window the current window
+       */
+*** ../vim-7.4.385/src/testdir/Make_amiga.mak	2014-07-23 15:54:43.443903036 +0200
+--- src/testdir/Make_amiga.mak	2014-07-30 13:54:06.871608110 +0200
+***************
+*** 41,46 ****
+--- 41,47 ----
+  		test_listlbr.out \
+  		test_listlbr_utf8.out \
+  		test_qf_title.out \
++ 		test_changelist.out \
+  		test_eval.out \
+  		test_options.out
+  
+***************
+*** 171,175 ****
+--- 172,177 ----
+  test_listlbr.out: test_listlbr.in
+  test_listlbr_utf8.out: test_listlbr_utf8.in
+  test_qf_title.out: test_qf_title.in
++ test_changelist.out: test_changelist.in
+  test_eval.out: test_eval.in
+  test_options.out: test_options.in
+*** ../vim-7.4.385/src/testdir/Make_dos.mak	2014-07-23 15:54:43.443903036 +0200
+--- src/testdir/Make_dos.mak	2014-07-30 13:54:16.091608044 +0200
+***************
+*** 40,45 ****
+--- 40,46 ----
+  		test_listlbr.out \
+  		test_listlbr_utf8.out \
+  		test_qf_title.out \
++ 		test_changelist.out \
+  		test_eval.out \
+  		test_options.out
+  
+*** ../vim-7.4.385/src/testdir/Make_ming.mak	2014-07-23 15:54:43.443903036 +0200
+--- src/testdir/Make_ming.mak	2014-07-30 13:54:19.775608018 +0200
+***************
+*** 60,65 ****
+--- 60,66 ----
+  		test_listlbr.out \
+  		test_listlbr_utf8.out \
+  		test_qf_title.out \
++ 		test_changelist.out \
+  		test_eval.out \
+  		test_options.out
+  
+*** ../vim-7.4.385/src/testdir/Make_os2.mak	2014-07-23 15:54:43.443903036 +0200
+--- src/testdir/Make_os2.mak	2014-07-30 13:54:24.207607986 +0200
+***************
+*** 38,43 ****
+--- 38,44 ----
+  		test100.out test101.out test102.out test103.out test104.out \
+  		test105.out test106.out test107.out \
+  		test_autoformat_join.out \
++ 		test_changelist.out \
+  		test_eval.out \
+  		test_breakindent.out \
+  		test_listlbr.out \
+*** ../vim-7.4.385/src/testdir/Make_vms.mms	2014-07-23 15:54:43.443903036 +0200
+--- src/testdir/Make_vms.mms	2014-07-30 13:54:31.151607936 +0200
+***************
+*** 4,10 ****
+  # Authors:	Zoltan Arpadffy, <arpadffy@polarhome.com>
+  #		Sandor Kopanyi,  <sandor.kopanyi@mailbox.hu>
+  #
+! # Last change:  2014 Jul 23
+  #
+  # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+  # Edit the lines in the Configuration section below to select.
+--- 4,10 ----
+  # Authors:	Zoltan Arpadffy, <arpadffy@polarhome.com>
+  #		Sandor Kopanyi,  <sandor.kopanyi@mailbox.hu>
+  #
+! # Last change:  2014 Jul 30
+  #
+  # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+  # Edit the lines in the Configuration section below to select.
+***************
+*** 101,106 ****
+--- 101,107 ----
+  	 test_listlbr.out \
+  	 test_listlbr_utf8.out \
+  	 test_qf_title.out \
++ 	 test_changelist.out \
+  	 test_eval.out \
+  	 test_options.out
+  
+*** ../vim-7.4.385/src/testdir/Makefile	2014-07-23 15:54:43.443903036 +0200
+--- src/testdir/Makefile	2014-07-30 13:54:45.291607834 +0200
+***************
+*** 38,43 ****
+--- 38,44 ----
+  		test_listlbr.out \
+  		test_listlbr_utf8.out \
+  		test_qf_title.out \
++ 		test_changelist.out \
+  		test_eval.out \
+  		test_options.out
+  
+*** ../vim-7.4.385/src/testdir/test_changelist.in	2014-07-30 14:04:27.507603650 +0200
+--- src/testdir/test_changelist.in	2014-07-30 13:52:21.363608869 +0200
+***************
+*** 0 ****
+--- 1,22 ----
++ Test changelist position after splitting window
++ Set 'undolevels' to make changelist for sourced file
++ 
++ STARTTEST
++ :so small.vim
++ Gkylp:set ul=100
++ Gylp:set ul=100
++ gg
++ :vsplit
++ :try
++ :  normal g;
++ :  normal ggVGcpass
++ :catch
++ :  normal ggVGcfail
++ :finally
++ :  %w! test.out
++ :endtry
++ :qa!
++ ENDTEST
++ 
++ 1
++ 2
+*** ../vim-7.4.385/src/testdir/test_changelist.ok	2014-07-30 14:04:27.515603650 +0200
+--- src/testdir/test_changelist.ok	2014-07-30 13:53:41.991608289 +0200
+***************
+*** 0 ****
+--- 1 ----
++ pass
+*** ../vim-7.4.385/src/version.c	2014-07-30 13:22:48.271621613 +0200
+--- src/version.c	2014-07-30 13:56:49.951606938 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     386,
+  /**/
+
+-- 
+Our job was to build a computer information system for the branch banks.  We
+were the perfect people for the job: Dean had seen a computer once, and I had
+heard Dean talk about it.
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.387 b/SOURCES/7.4.387
new file mode 100644
index 0000000..ff0b2a0
--- /dev/null
+++ b/SOURCES/7.4.387
@@ -0,0 +1,199 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.387
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.387
+Problem:    "4gro" replaces one character then executes "ooo". (Urtica Dioica)
+Solution:   Write the ESC in the second stuff buffer.
+Files:	    src/getchar.c, src/proto/getchar.pro, src/edit.c,
+	    src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
+	    src/testdir/Make_ming.mak, src/testdir/Make_os2.mak,
+	    src/testdir/Make_vms.mms, src/testdir/Makefile,
+	    src/testdir/test_insertcount.in, src/testdir/test_insertcount.ok
+
+
+*** ../vim-7.4.386/src/getchar.c	2014-07-23 20:41:09.891779510 +0200
+--- src/getchar.c	2014-07-30 14:35:08.831590415 +0200
+***************
+*** 678,683 ****
+--- 678,694 ----
+      add_buff(&readbuf1, s, -1L);
+  }
+  
++ /*
++  * Append string "s" to the redo stuff buffer.
++  * CSI and K_SPECIAL must already have been escaped.
++  */
++     void
++ stuffRedoReadbuff(s)
++     char_u	*s;
++ {
++     add_buff(&readbuf2, s, -1L);
++ }
++ 
+      void
+  stuffReadbuffLen(s, len)
+      char_u	*s;
+*** ../vim-7.4.386/src/proto/getchar.pro	2014-02-11 15:10:38.134111836 +0100
+--- src/proto/getchar.pro	2014-07-30 14:36:18.851589912 +0200
+***************
+*** 15,20 ****
+--- 15,21 ----
+  void AppendCharToRedobuff __ARGS((int c));
+  void AppendNumberToRedobuff __ARGS((long n));
+  void stuffReadbuff __ARGS((char_u *s));
++ void stuffRedoReadbuff __ARGS((char_u *s));
+  void stuffReadbuffLen __ARGS((char_u *s, long len));
+  void stuffReadbuffSpec __ARGS((char_u *s));
+  void stuffcharReadbuff __ARGS((int c));
+*** ../vim-7.4.386/src/edit.c	2014-07-23 17:39:21.815857910 +0200
+--- src/edit.c	2014-07-30 14:47:56.875584895 +0200
+***************
+*** 8389,8395 ****
+  
+  	    (void)start_redo_ins();
+  	    if (cmdchar == 'r' || cmdchar == 'v')
+! 		stuffReadbuff(ESC_STR);	/* no ESC in redo buffer */
+  	    ++RedrawingDisabled;
+  	    disabled_redraw = TRUE;
+  	    return FALSE;	/* repeat the insert */
+--- 8389,8395 ----
+  
+  	    (void)start_redo_ins();
+  	    if (cmdchar == 'r' || cmdchar == 'v')
+! 		stuffRedoReadbuff(ESC_STR);	/* no ESC in redo buffer */
+  	    ++RedrawingDisabled;
+  	    disabled_redraw = TRUE;
+  	    return FALSE;	/* repeat the insert */
+*** ../vim-7.4.386/src/testdir/Make_amiga.mak	2014-07-30 14:04:49.131603494 +0200
+--- src/testdir/Make_amiga.mak	2014-07-30 15:57:52.819554737 +0200
+***************
+*** 43,48 ****
+--- 43,49 ----
+  		test_qf_title.out \
+  		test_changelist.out \
+  		test_eval.out \
++ 		test_insertcount.out \
+  		test_options.out
+  
+  .SUFFIXES: .in .out
+***************
+*** 174,177 ****
+--- 175,179 ----
+  test_qf_title.out: test_qf_title.in
+  test_changelist.out: test_changelist.in
+  test_eval.out: test_eval.in
++ test_insertcount.out: test_insertcount.in
+  test_options.out: test_options.in
+*** ../vim-7.4.386/src/testdir/Make_dos.mak	2014-07-30 14:04:49.131603494 +0200
+--- src/testdir/Make_dos.mak	2014-07-30 15:57:59.071554692 +0200
+***************
+*** 42,47 ****
+--- 42,48 ----
+  		test_qf_title.out \
+  		test_changelist.out \
+  		test_eval.out \
++ 		test_insertcount.out \
+  		test_options.out
+  
+  SCRIPTS32 =	test50.out test70.out
+*** ../vim-7.4.386/src/testdir/Make_ming.mak	2014-07-30 14:04:49.131603494 +0200
+--- src/testdir/Make_ming.mak	2014-07-30 15:58:02.351554669 +0200
+***************
+*** 62,67 ****
+--- 62,68 ----
+  		test_qf_title.out \
+  		test_changelist.out \
+  		test_eval.out \
++ 		test_insertcount.out \
+  		test_options.out
+  
+  SCRIPTS32 =	test50.out test70.out
+*** ../vim-7.4.386/src/testdir/Make_os2.mak	2014-07-30 14:04:49.131603494 +0200
+--- src/testdir/Make_os2.mak	2014-07-30 15:58:05.975554643 +0200
+***************
+*** 40,45 ****
+--- 40,46 ----
+  		test_autoformat_join.out \
+  		test_changelist.out \
+  		test_eval.out \
++ 		test_insertcount.out \
+  		test_breakindent.out \
+  		test_listlbr.out \
+  		test_listlbr_utf8.out \
+*** ../vim-7.4.386/src/testdir/Make_vms.mms	2014-07-30 14:04:49.131603494 +0200
+--- src/testdir/Make_vms.mms	2014-07-30 15:58:10.099554613 +0200
+***************
+*** 103,108 ****
+--- 103,109 ----
+  	 test_qf_title.out \
+  	 test_changelist.out \
+  	 test_eval.out \
++ 	 test_insertcount.out \
+  	 test_options.out
+  
+  # Known problems:
+*** ../vim-7.4.386/src/testdir/Makefile	2014-07-30 14:04:49.131603494 +0200
+--- src/testdir/Makefile	2014-07-30 15:58:16.539554567 +0200
+***************
+*** 40,45 ****
+--- 40,46 ----
+  		test_qf_title.out \
+  		test_changelist.out \
+  		test_eval.out \
++ 		test_insertcount.out \
+  		test_options.out
+  
+  SCRIPTS_GUI = test16.out
+*** ../vim-7.4.386/src/testdir/test_insertcount.in	2014-07-30 15:56:12.087555461 +0200
+--- src/testdir/test_insertcount.in	2014-07-30 14:47:36.335585043 +0200
+***************
+*** 0 ****
+--- 1,14 ----
++ Tests for repeating insert and replace.
++ 
++ STARTTEST
++ :so small.vim
++ :/Second
++ 4gro
++ :/^First/,$wq! test.out
++ :" get here when failed and in Insert mode
++ :.wq! test.out
++ ENDTEST
++ 
++ First line
++ Second line
++ Last line
+*** ../vim-7.4.386/src/testdir/test_insertcount.ok	2014-07-30 15:56:12.091555461 +0200
+--- src/testdir/test_insertcount.ok	2014-07-30 14:45:43.491585854 +0200
+***************
+*** 0 ****
+--- 1,3 ----
++ First line
++ ooooecond line
++ Last line
+*** ../vim-7.4.386/src/version.c	2014-07-30 14:04:49.131603494 +0200
+--- src/version.c	2014-07-30 14:48:45.039584549 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     387,
+  /**/
+
+-- 
+If your company is not involved in something called "ISO 9000" you probably
+have no idea what it is.  If your company _is_ involved in ISO 9000 then you
+definitely have no idea what it is.
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.388 b/SOURCES/7.4.388
new file mode 100644
index 0000000..21db642
--- /dev/null
+++ b/SOURCES/7.4.388
@@ -0,0 +1,98 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.388
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.388
+Problem:    With 'linebreak' set and 'list' unset a Tab is not counted
+	    properly. (Kent Sibilev)
+Solution:   Check the 'list' option. (Christian Brabandt)
+Files:	    src/screen.c, src/testdir/test_listlbr_utf8.in,
+	    src/testdir/test_listlbr_utf8.ok
+
+
+*** ../vim-7.4.387/src/screen.c	2014-07-16 17:29:46.691536252 +0200
+--- src/screen.c	2014-07-30 16:41:15.167536033 +0200
+***************
+*** 4494,4500 ****
+  		    tab_len = (int)wp->w_buffer->b_p_ts
+  					- vcol % (int)wp->w_buffer->b_p_ts - 1;
+  #ifdef FEAT_LINEBREAK
+! 		    if (!wp->w_p_lbr)
+  #endif
+  		    /* tab amount depends on current column */
+  			n_extra = tab_len;
+--- 4494,4500 ----
+  		    tab_len = (int)wp->w_buffer->b_p_ts
+  					- vcol % (int)wp->w_buffer->b_p_ts - 1;
+  #ifdef FEAT_LINEBREAK
+! 		    if (!wp->w_p_lbr || !wp->w_p_list)
+  #endif
+  		    /* tab amount depends on current column */
+  			n_extra = tab_len;
+*** ../vim-7.4.387/src/testdir/test_listlbr_utf8.in	2014-07-16 17:01:38.279570568 +0200
+--- src/testdir/test_listlbr_utf8.in	2014-07-30 16:37:26.703537675 +0200
+***************
+*** 30,40 ****
+--- 30,51 ----
+  :redraw!
+  :let line=ScreenChar(winwidth(0))
+  :call DoRecordScreen()
++ :"
+  :let g:test ="Test 2: set nolinebreak list"
+  :set list nolinebreak
+  :redraw!
+  :let line=ScreenChar(winwidth(0))
+  :call DoRecordScreen()
++ :"
++ :let g:test ="Test 3: set linebreak nolist"
++ :$put =\"\t*mask = nil;\"
++ :$
++ :norm! zt
++ :set nolist linebreak
++ :redraw!
++ :let line=ScreenChar(winwidth(0))
++ :call DoRecordScreen()
++ :"
+  :%w! test.out
+  :qa!
+  ENDTEST
+*** ../vim-7.4.387/src/testdir/test_listlbr_utf8.ok	2014-07-16 17:01:38.279570568 +0200
+--- src/testdir/test_listlbr_utf8.ok	2014-07-30 16:40:17.043536451 +0200
+***************
+*** 12,14 ****
+--- 12,21 ----
+  +pqrstuvwxyz␣1060ABC
+  +DEFGHIJKLMNOPˑ¶    
+  ¶                   
++ 	*mask = nil;
++ 
++ Test 3: set linebreak nolist
++     *mask = nil;    
++ ~                   
++ ~                   
++ ~                   
+*** ../vim-7.4.387/src/version.c	2014-07-30 16:00:45.551553496 +0200
+--- src/version.c	2014-07-30 16:40:57.659536159 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     388,
+  /**/
+
+-- 
+You can test a person's importance in the organization by asking how much RAM
+his computer has.  Anybody who knows the answer to that question is not a
+decision-maker.
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.389 b/SOURCES/7.4.389
new file mode 100644
index 0000000..6778941
--- /dev/null
+++ b/SOURCES/7.4.389
@@ -0,0 +1,490 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.389
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.389
+Problem:    Still sometimes Vim enters Replace mode when starting up.
+Solution:   Use a different solution in detecting the termresponse and
+	    location response. (Hayaki Saito)
+Files:	    src/globals.h, src/os_unix.c, src/term.c, src/proto/term.pro
+
+
+*** ../vim-7.4.388/src/globals.h	2014-06-12 14:01:27.575769788 +0200
+--- src/globals.h	2014-07-30 17:02:57.711526671 +0200
+***************
+*** 1336,1344 ****
+  #if defined(UNIX) || defined(VMS)
+  EXTERN int	term_is_xterm INIT(= FALSE);	/* xterm-like 'term' */
+  #endif
+- #if defined(UNIX)
+- EXTERN int	xterm_conflict_mouse INIT(= FALSE);
+- #endif
+  
+  #ifdef BACKSLASH_IN_FILENAME
+  EXTERN char	psepc INIT(= '\\');	/* normal path separator character */
+--- 1336,1341 ----
+*** ../vim-7.4.388/src/os_unix.c	2014-07-09 19:13:45.007701718 +0200
+--- src/os_unix.c	2014-07-30 17:06:02.375525344 +0200
+***************
+*** 3667,3674 ****
+      void
+  check_mouse_termcode()
+  {
+-     xterm_conflict_mouse = FALSE;
+- 
+  # ifdef FEAT_MOUSE_XTERM
+      if (use_xterm_mouse()
+  # ifdef FEAT_MOUSE_URXVT
+--- 3667,3672 ----
+***************
+*** 3713,3719 ****
+  # endif
+  
+  # ifdef FEAT_MOUSE_JSB
+!     /* There is no conflict, but it was disabled for xterm before. */
+      if (!use_xterm_mouse()
+  #  ifdef FEAT_GUI
+  	    && !gui.in_use
+--- 3711,3717 ----
+  # endif
+  
+  # ifdef FEAT_MOUSE_JSB
+!     /* Conflicts with xterm mouse: "\033[" and "\033[M" ??? */
+      if (!use_xterm_mouse()
+  #  ifdef FEAT_GUI
+  	    && !gui.in_use
+***************
+*** 3740,3784 ****
+  # endif
+  
+  # ifdef FEAT_MOUSE_DEC
+!     /* Conflicts with xterm mouse: "\033[" and "\033[M".
+!      * Also conflicts with the xterm termresponse, skip this if it was
+!      * requested already. */
+      if (!use_xterm_mouse()
+- #  ifdef FEAT_TERMRESPONSE
+- 	    && !did_request_esc_sequence()
+- #  endif
+  #  ifdef FEAT_GUI
+  	    && !gui.in_use
+  #  endif
+  	    )
+-     {
+  	set_mouse_termcode(KS_DEC_MOUSE, (char_u *)(term_is_8bit(T_NAME)
+  		     ? IF_EB("\233", CSI_STR) : IF_EB("\033[", ESC_STR "[")));
+- 	xterm_conflict_mouse = TRUE;
+-     }
+      else
+  	del_mouse_termcode(KS_DEC_MOUSE);
+  # endif
+  # ifdef FEAT_MOUSE_PTERM
+!     /* same as the dec mouse */
+      if (!use_xterm_mouse()
+- #  ifdef FEAT_TERMRESPONSE
+- 	    && !did_request_esc_sequence()
+- #  endif
+  #  ifdef FEAT_GUI
+  	    && !gui.in_use
+  #  endif
+  	    )
+-     {
+  	set_mouse_termcode(KS_PTERM_MOUSE,
+  				      (char_u *) IF_EB("\033[", ESC_STR "["));
+- 	xterm_conflict_mouse = TRUE;
+-     }
+      else
+  	del_mouse_termcode(KS_PTERM_MOUSE);
+  # endif
+  # ifdef FEAT_MOUSE_URXVT
+!     /* same as the dec mouse */
+      if (use_xterm_mouse() == 3
+  #  ifdef FEAT_GUI
+  	    && !gui.in_use
+--- 3738,3768 ----
+  # endif
+  
+  # ifdef FEAT_MOUSE_DEC
+!     /* Conflicts with xterm mouse: "\033[" and "\033[M" */
+      if (!use_xterm_mouse()
+  #  ifdef FEAT_GUI
+  	    && !gui.in_use
+  #  endif
+  	    )
+  	set_mouse_termcode(KS_DEC_MOUSE, (char_u *)(term_is_8bit(T_NAME)
+  		     ? IF_EB("\233", CSI_STR) : IF_EB("\033[", ESC_STR "[")));
+      else
+  	del_mouse_termcode(KS_DEC_MOUSE);
+  # endif
+  # ifdef FEAT_MOUSE_PTERM
+!     /* same conflict as the dec mouse */
+      if (!use_xterm_mouse()
+  #  ifdef FEAT_GUI
+  	    && !gui.in_use
+  #  endif
+  	    )
+  	set_mouse_termcode(KS_PTERM_MOUSE,
+  				      (char_u *) IF_EB("\033[", ESC_STR "["));
+      else
+  	del_mouse_termcode(KS_PTERM_MOUSE);
+  # endif
+  # ifdef FEAT_MOUSE_URXVT
+!     /* same conflict as the dec mouse */
+      if (use_xterm_mouse() == 3
+  #  ifdef FEAT_GUI
+  	    && !gui.in_use
+***************
+*** 3794,3801 ****
+  	    mch_setmouse(FALSE);
+  	    setmouse();
+  	}
+- 	/* It's OK to request the xterm version for uxterm. */
+- 	resume_get_esc_sequence();
+      }
+      else
+  	del_mouse_termcode(KS_URXVT_MOUSE);
+--- 3778,3783 ----
+*** ../vim-7.4.388/src/term.c	2014-07-09 20:51:04.519583033 +0200
+--- src/term.c	2014-07-30 17:20:54.915518929 +0200
+***************
+*** 153,163 ****
+  static char_u *vim_tgetstr __ARGS((char *s, char_u **pp));
+  #endif /* HAVE_TGETENT */
+  
+- #if defined(FEAT_TERMRESPONSE)
+- static int xt_index_in = 0;
+- static int xt_index_out = 0;
+- #endif
+- 
+  static int  detected_8bit = FALSE;	/* detected 8-bit terminal */
+  
+  static struct builtin_term builtin_termcaps[] =
+--- 153,158 ----
+***************
+*** 3312,3351 ****
+  }
+  
+  #if defined(FEAT_TERMRESPONSE) || defined(PROTO)
+- # if defined(UNIX) || defined(PROTO)
+- /*
+-  * Return TRUE when the xterm version was requested or anything else that
+-  * would send an ESC sequence back to Vim.
+-  * If not sent yet, prevent it from being sent soon.
+-  * Used to check whether it is OK to enable checking for DEC mouse codes,
+-  * which conflict with may xterm ESC sequences.
+-  */
+-     int
+- did_request_esc_sequence()
+- {
+-     if (crv_status == CRV_GET)
+- 	crv_status = 0;
+-     if (u7_status == U7_GET)
+- 	u7_status = 0;
+-     return crv_status == CRV_SENT || u7_status == U7_SENT
+- 						|| xt_index_out > xt_index_in;
+- }
+- 
+- /*
+-  * If requesting the version was disabled in did_request_esc_sequence(),
+-  * enable it again.
+-  */
+-     void
+- resume_get_esc_sequence()
+- {
+-     if (crv_status == 0)
+- 	crv_status = CRV_GET;
+-     if (u7_status == 0)
+- 	u7_status = U7_GET;
+- }
+- # endif
+- 
+- 
+  /*
+   * Request version string (for xterm) when needed.
+   * Only do this after switching to raw mode, otherwise the result will be
+--- 3307,3312 ----
+***************
+*** 3358,3365 ****
+   * Insert mode.
+   * On Unix only do it when both output and input are a tty (avoid writing
+   * request to terminal while reading from a file).
+-  * Do not do this when a mouse is being detected that starts with the same ESC
+-  * sequence as the termresponse.
+   * The result is caught in check_termcode().
+   */
+      void
+--- 3319,3324 ----
+***************
+*** 3373,3379 ****
+  # ifdef UNIX
+  	    && isatty(1)
+  	    && isatty(read_cmd_fd)
+- 	    && !xterm_conflict_mouse
+  # endif
+  	    && *T_CRV != NUL)
+      {
+--- 3332,3337 ----
+***************
+*** 3742,3749 ****
+  #if defined(WIN3264) && !defined(FEAT_GUI)
+      if (s[0] == K_NUL)
+      {
+!         STRMOVE(s + 1, s);
+!         s[1] = 3;
+      }
+  #endif
+  
+--- 3700,3707 ----
+  #if defined(WIN3264) && !defined(FEAT_GUI)
+      if (s[0] == K_NUL)
+      {
+! 	STRMOVE(s + 1, s);
+! 	s[1] = 3;
+      }
+  #endif
+  
+***************
+*** 4212,4235 ****
+  
+  #ifdef FEAT_TERMRESPONSE
+  	if (key_name[0] == NUL
+! 	    /* URXVT mouse uses <ESC>[#;#;#M, but we are matching <ESC>[ */
+  	    || key_name[0] == KS_URXVT_MOUSE
+- # ifdef FEAT_MBYTE
+- 	    || u7_status == U7_SENT
+  # endif
+!             )
+  	{
+! 	    /* Check for some responses from terminal start with "<Esc>[" or
+! 	     * CSI.
+  	     *
+! 	     * - xterm version string: <Esc>[>{x};{vers};{y}c
+  	     *   Also eat other possible responses to t_RV, rxvt returns
+  	     *   "<Esc>[?1;2c". Also accept CSI instead of <Esc>[.
+  	     *   mrxvt has been reported to have "+" in the version. Assume
+  	     *   the escape sequence ends with a letter or one of "{|}~".
+  	     *
+! 	     * - cursor position report: <Esc>[{row};{col}R
+! 	     *   The final byte is 'R'. now it is only used for checking for
+  	     *   ambiguous-width character state.
+  	     */
+  	    p = tp[0] == CSI ? tp + 1 : tp + 2;
+--- 4170,4200 ----
+  
+  #ifdef FEAT_TERMRESPONSE
+  	if (key_name[0] == NUL
+! 	    /* Mouse codes of DEC, pterm, and URXVT start with <ESC>[.  When
+! 	     * detecting the start of these mouse codes they might as well be
+! 	     * another key code or terminal response. */
+! # ifdef FEAT_MOUSE_DEC
+! 	    || key_name[0] == KS_DEC_MOUSE
+! # endif
+! # ifdef FEAT_MOUSE_PTERM
+! 	    || key_name[0] == KS_PTERM_MOUSE
+! # endif
+! # ifdef FEAT_MOUSE_URXVT
+  	    || key_name[0] == KS_URXVT_MOUSE
+  # endif
+! 	   )
+  	{
+! 	    /* Check for some responses from the terminal starting with
+! 	     * "<Esc>[" or CSI:
+  	     *
+! 	     * - Xterm version string: <Esc>[>{x};{vers};{y}c
+  	     *   Also eat other possible responses to t_RV, rxvt returns
+  	     *   "<Esc>[?1;2c". Also accept CSI instead of <Esc>[.
+  	     *   mrxvt has been reported to have "+" in the version. Assume
+  	     *   the escape sequence ends with a letter or one of "{|}~".
+  	     *
+! 	     * - Cursor position report: <Esc>[{row};{col}R
+! 	     *   The final byte must be 'R'. It is used for checking the
+  	     *   ambiguous-width character state.
+  	     */
+  	    p = tp[0] == CSI ? tp + 1 : tp + 2;
+***************
+*** 4269,4304 ****
+  		 * u7_status is not "sent", it may be from a previous Vim that
+  		 * just exited.  But not for <S-F3>, it sends something
+  		 * similar, check for row and column to make sense. */
+! 		if (j == 1 && tp[i] == 'R' && row_char == '2' && col >= 2)
+  		{
+! 		    char *aw = NULL;
+  
+! 		    LOG_TR("Received U7 status");
+! 		    u7_status = U7_GOT;
+  # ifdef FEAT_AUTOCMD
+! 		    did_cursorhold = TRUE;
+  # endif
+! 		    if (col == 2)
+! 			aw = "single";
+! 		    else if (col == 3)
+! 			aw = "double";
+! 		    if (aw != NULL && STRCMP(aw, p_ambw) != 0)
+! 		    {
+! 			/* Setting the option causes a screen redraw. Do that
+! 			 * right away if possible, keeping any messages. */
+! 			set_option_value((char_u *)"ambw", 0L, (char_u *)aw, 0);
+! # ifdef DEBUG_TERMRESPONSE
+  			{
+! 			    char buf[100];
+! 			    int  r = redraw_asap(CLEAR);
+  
+! 			    sprintf(buf, "set 'ambiwidth', redraw_asap(): %d",
+! 									   r);
+! 			    log_tr(buf);
+! 			}
+  # else
+! 			redraw_asap(CLEAR);
+  # endif
+  		    }
+  		    key_name[0] = (int)KS_EXTRA;
+  		    key_name[1] = (int)KE_IGNORE;
+--- 4234,4275 ----
+  		 * u7_status is not "sent", it may be from a previous Vim that
+  		 * just exited.  But not for <S-F3>, it sends something
+  		 * similar, check for row and column to make sense. */
+! 		if (j == 1 && tp[i] == 'R')
+  		{
+! 		    if (row_char == '2' && col >= 2)
+! 		    {
+! 			char *aw = NULL;
+  
+! 			LOG_TR("Received U7 status");
+! 			u7_status = U7_GOT;
+  # ifdef FEAT_AUTOCMD
+! 			did_cursorhold = TRUE;
+  # endif
+! 			if (col == 2)
+! 			    aw = "single";
+! 			else if (col == 3)
+! 			    aw = "double";
+! 			if (aw != NULL && STRCMP(aw, p_ambw) != 0)
+  			{
+! 			    /* Setting the option causes a screen redraw. Do
+! 			     * that right away if possible, keeping any
+! 			     * messages. */
+! 			    set_option_value((char_u *)"ambw", 0L,
+! 					     (char_u *)aw, 0);
+! # ifdef DEBUG_TERMRESPONSE
+! 			    {
+! 				char buf[100];
+! 				int  r = redraw_asap(CLEAR);
+  
+! 				sprintf(buf,
+! 					"set 'ambiwidth', redraw_asap(): %d",
+! 					r);
+! 				log_tr(buf);
+! 			    }
+  # else
+! 			    redraw_asap(CLEAR);
+  # endif
++ 			}
+  		    }
+  		    key_name[0] = (int)KS_EXTRA;
+  		    key_name[1] = (int)KE_IGNORE;
+***************
+*** 4563,4581 ****
+  			return -1;
+  
+  		    /* when mouse reporting is SGR, add 32 to mouse code */
+!                     if (key_name[0] == KS_SGR_MOUSE)
+!                         mouse_code += 32;
+  
+  		    mouse_col = getdigits(&p) - 1;
+  		    if (*p++ != ';')
+  			return -1;
+  
+  		    mouse_row = getdigits(&p) - 1;
+!                     if (key_name[0] == KS_SGR_MOUSE && *p == 'm')
+  			mouse_code |= MOUSE_RELEASE;
+!                     else if (*p != 'M')
+  			return -1;
+!                     p++;
+  
+  		    slen += (int)(p - (tp + slen));
+  
+--- 4534,4552 ----
+  			return -1;
+  
+  		    /* when mouse reporting is SGR, add 32 to mouse code */
+! 		    if (key_name[0] == KS_SGR_MOUSE)
+! 			mouse_code += 32;
+  
+  		    mouse_col = getdigits(&p) - 1;
+  		    if (*p++ != ';')
+  			return -1;
+  
+  		    mouse_row = getdigits(&p) - 1;
+! 		    if (key_name[0] == KS_SGR_MOUSE && *p == 'm')
+  			mouse_code |= MOUSE_RELEASE;
+! 		    else if (*p != 'M')
+  			return -1;
+! 		    p++;
+  
+  		    slen += (int)(p - (tp + slen));
+  
+***************
+*** 4592,4598 ****
+  			for (slen2 = slen; slen2 < len; slen2++)
+  			{
+  			    if (tp[slen2] == 'M'
+!                                 || (key_name[0] == KS_SGR_MOUSE
+  							 && tp[slen2] == 'm'))
+  			    {
+  				cmd_complete = 1;
+--- 4563,4569 ----
+  			for (slen2 = slen; slen2 < len; slen2++)
+  			{
+  			    if (tp[slen2] == 'M'
+! 				    || (key_name[0] == KS_SGR_MOUSE
+  							 && tp[slen2] == 'm'))
+  			    {
+  				cmd_complete = 1;
+***************
+*** 5769,5774 ****
+--- 5740,5748 ----
+   * termcap codes from the terminal itself.
+   * We get them one by one to avoid a very long response string.
+   */
++ static int xt_index_in = 0;
++ static int xt_index_out = 0;
++ 
+      static void
+  req_codes_from_term()
+  {
+*** ../vim-7.4.388/src/proto/term.pro	2014-07-09 19:13:45.007701718 +0200
+--- src/proto/term.pro	2014-07-30 17:04:40.791525930 +0200
+***************
+*** 34,41 ****
+  void settmode __ARGS((int tmode));
+  void starttermcap __ARGS((void));
+  void stoptermcap __ARGS((void));
+- int did_request_esc_sequence __ARGS((void));
+- void resume_get_esc_sequence __ARGS((void));
+  void may_req_termresponse __ARGS((void));
+  void may_req_ambiguous_char_width __ARGS((void));
+  int swapping_screen __ARGS((void));
+--- 34,39 ----
+*** ../vim-7.4.388/src/version.c	2014-07-30 16:44:17.503534723 +0200
+--- src/version.c	2014-07-30 17:03:13.715526556 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     389,
+  /**/
+
+-- 
+The only way the average employee can speak to an executive is by taking a
+second job as a golf caddie.
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.390 b/SOURCES/7.4.390
new file mode 100644
index 0000000..5dcc9c5
--- /dev/null
+++ b/SOURCES/7.4.390
@@ -0,0 +1,51 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.390
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.390
+Problem:    Advancing pointer over end of a string.
+Solution:   Init quote character to -1 instead of zero. (Dominique Pelle)
+Files:	    src/misc1.c
+
+
+*** ../vim-7.4.389/src/misc1.c	2014-07-03 22:57:51.299862927 +0200
+--- src/misc1.c	2014-08-06 12:43:33.191291602 +0200
+***************
+*** 5503,5509 ****
+      char_u *text;
+  {
+      char_u *s = skipwhite(text);
+!     int	    quote = 0;
+  
+      if (*s == '\'' || *s == '"')
+      {
+--- 5503,5509 ----
+      char_u *text;
+  {
+      char_u *s = skipwhite(text);
+!     int	    quote = -1;
+  
+      if (*s == '\'' || *s == '"')
+      {
+*** ../vim-7.4.389/src/version.c	2014-07-30 17:21:53.819518506 +0200
+--- src/version.c	2014-08-06 12:44:31.643291182 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     390,
+  /**/
+
+-- 
+A radioactive cat has eighteen half-lives.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.391 b/SOURCES/7.4.391
new file mode 100644
index 0000000..e2edae0
--- /dev/null
+++ b/SOURCES/7.4.391
@@ -0,0 +1,118 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.391
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.391
+Problem:    No 'cursorline' highlighting when the cursor is on a line with
+	    diff highlighting. (Benjamin Fritz)
+Solution:   Combine the highlight attributes. (Christian Brabandt)
+Files:	    src/screen.c
+
+
+*** ../vim-7.4.390/src/screen.c	2014-07-30 16:44:17.499534723 +0200
+--- src/screen.c	2014-08-06 13:14:02.163278457 +0200
+***************
+*** 3702,3708 ****
+--- 3702,3713 ----
+  		    char_attr = 0; /* was: hl_attr(HLF_AT); */
+  #ifdef FEAT_DIFF
+  		    if (diff_hlf != (hlf_T)0)
++ 		    {
+  			char_attr = hl_attr(diff_hlf);
++ 			if (wp->w_p_cul && lnum == wp->w_cursor.lnum)
++ 			    char_attr = hl_combine_attr(char_attr,
++ 							    hl_attr(HLF_CUL));
++ 		    }
+  #endif
+  		    p_extra = NULL;
+  		    c_extra = ' ';
+***************
+*** 3753,3759 ****
+  #ifdef FEAT_SYN_HL
+  		    /* combine 'showbreak' with 'cursorline' */
+  		    if (wp->w_p_cul && lnum == wp->w_cursor.lnum)
+! 			char_attr = hl_combine_attr(char_attr, HLF_CLN);
+  #endif
+  		}
+  # endif
+--- 3758,3765 ----
+  #ifdef FEAT_SYN_HL
+  		    /* combine 'showbreak' with 'cursorline' */
+  		    if (wp->w_p_cul && lnum == wp->w_cursor.lnum)
+! 			char_attr = hl_combine_attr(char_attr,
+! 							    hl_attr(HLF_CUL));
+  #endif
+  		}
+  # endif
+***************
+*** 3931,3936 ****
+--- 3937,3944 ----
+  							      && n_extra == 0)
+  		    diff_hlf = HLF_CHD;		/* changed line */
+  		line_attr = hl_attr(diff_hlf);
++ 		if (wp->w_p_cul && lnum == wp->w_cursor.lnum)
++ 		    line_attr = hl_combine_attr(line_attr, hl_attr(HLF_CUL));
+  	    }
+  #endif
+  
+***************
+*** 4729,4735 ****
+--- 4737,4748 ----
+  		    {
+  			diff_hlf = HLF_CHD;
+  			if (attr == 0 || char_attr != attr)
++ 			{
+  			    char_attr = hl_attr(diff_hlf);
++ 			    if (wp->w_p_cul && lnum == wp->w_cursor.lnum)
++ 				char_attr = hl_combine_attr(char_attr,
++ 							    hl_attr(HLF_CUL));
++ 			}
+  		    }
+  # endif
+  		}
+***************
+*** 10174,10182 ****
+  			break;
+  		    screen_puts_len(NameBuff, len, 0, col,
+  #if defined(FEAT_SYN_HL)
+! 					   hl_combine_attr(attr, hl_attr(HLF_T))
+  #else
+! 					   attr
+  #endif
+  					       );
+  		    col += len;
+--- 10187,10195 ----
+  			break;
+  		    screen_puts_len(NameBuff, len, 0, col,
+  #if defined(FEAT_SYN_HL)
+! 					 hl_combine_attr(attr, hl_attr(HLF_T))
+  #else
+! 					 attr
+  #endif
+  					       );
+  		    col += len;
+*** ../vim-7.4.390/src/version.c	2014-08-06 12:49:06.711289205 +0200
+--- src/version.c	2014-08-06 13:19:19.135276179 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     391,
+  /**/
+
+-- 
+It's totally unfair to suggest - as many have - that engineers are socially
+inept.  Engineers simply have different objectives when it comes to social
+interaction.
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.392 b/SOURCES/7.4.392
new file mode 100644
index 0000000..48a7328
--- /dev/null
+++ b/SOURCES/7.4.392
@@ -0,0 +1,86 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.392
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.392
+Problem:    Not easy to detect type of command line window.
+Solution:   Add the getcmdwintype() function. (Jacob Niehus)
+Files:	    src/eval.c
+
+
+*** ../vim-7.4.391/src/eval.c	2014-07-09 17:51:46.075801693 +0200
+--- src/eval.c	2014-08-06 13:35:59.303268990 +0200
+***************
+*** 554,559 ****
+--- 554,560 ----
+  static void f_getcmdline __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_getcmdpos __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_getcmdtype __ARGS((typval_T *argvars, typval_T *rettv));
++ static void f_getcmdwintype __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_getcwd __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_getfontname __ARGS((typval_T *argvars, typval_T *rettv));
+  static void f_getfperm __ARGS((typval_T *argvars, typval_T *rettv));
+***************
+*** 7984,7989 ****
+--- 7985,7991 ----
+      {"getcmdline",	0, 0, f_getcmdline},
+      {"getcmdpos",	0, 0, f_getcmdpos},
+      {"getcmdtype",	0, 0, f_getcmdtype},
++     {"getcmdwintype",	0, 0, f_getcmdwintype},
+      {"getcurpos",	0, 0, f_getcurpos},
+      {"getcwd",		0, 0, f_getcwd},
+      {"getfontname",	0, 1, f_getfontname},
+***************
+*** 11503,11508 ****
+--- 11505,11530 ----
+  }
+  
+  /*
++  * "getcmdwintype()" function
++  */
++     static void
++ f_getcmdwintype(argvars, rettv)
++     typval_T	*argvars UNUSED;
++     typval_T	*rettv;
++ {
++     rettv->v_type = VAR_STRING;
++     rettv->vval.v_string = NULL;
++ #ifdef FEAT_CMDWIN
++     rettv->vval.v_string = alloc(2);
++     if (rettv->vval.v_string != NULL)
++     {
++ 	rettv->vval.v_string[0] = cmdwin_type;
++ 	rettv->vval.v_string[1] = NUL;
++     }
++ #endif
++ }
++ 
++ /*
+   * "getcwd()" function
+   */
+      static void
+*** ../vim-7.4.391/src/version.c	2014-08-06 13:20:51.799275513 +0200
+--- src/version.c	2014-08-06 13:34:42.903269539 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     392,
+  /**/
+
+-- 
+I learned the customs and mannerisms of engineers by observing them, much the
+way Jane Goodall learned about the great apes, but without the hassle of
+grooming.
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.393 b/SOURCES/7.4.393
new file mode 100644
index 0000000..957ce24
--- /dev/null
+++ b/SOURCES/7.4.393
@@ -0,0 +1,1946 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.393
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.393
+Problem:    Text drawing on newer MS-Windows systems is suboptimal.  Some
+	    multi-byte characters are not displayed, even though the same font
+	    in Notepad can display them. (Srinath Avadhanula)
+Solution:   Add the 'renderoptions' option to enable Direct-X drawing. (Taro
+	    Muraoka)
+Files:	    runtime/doc/eval.txt, runtime/doc/options.txt,
+	    runtime/doc/various.txt, src/Make_cyg.mak, src/Make_ming.mak,
+	    src/Make_mvc.mak, src/eval.c, src/gui_dwrite.cpp,
+	    src/gui_dwrite.h, src/gui_w32.c, src/gui_w48.c, src/option.c,
+	    src/option.h, src/version.c, src/vim.h, src/proto/gui_w32.pro
+
+
+*** ../vim-7.4.392/runtime/doc/eval.txt	2014-06-25 18:15:18.442838249 +0200
+--- runtime/doc/eval.txt	2014-08-06 14:35:24.871243363 +0200
+***************
+*** 6606,6611 ****
+--- 6622,6628 ----
+  dialog_gui		Compiled with GUI dialog support.
+  diff			Compiled with |vimdiff| and 'diff' support.
+  digraphs		Compiled with support for digraphs.
++ directx			Compiled with support for Direct-X and 'renderoptions'.
+  dnd			Compiled with support for the "~ register |quote_~|.
+  dos16			16 bits DOS version of Vim.
+  dos32			32 bits DOS (DJGPP) version of Vim.
+***************
+*** 6744,6750 ****
+  writebackup		Compiled with 'writebackup' default on.
+  xfontset		Compiled with X fontset support |xfontset|.
+  xim			Compiled with X input method support |xim|.
+! xpm_w32			Compiled with pixmap support for Win32.
+  xsmp			Compiled with X session management support.
+  xsmp_interact		Compiled with interactive X session management support.
+  xterm_clipboard		Compiled with support for xterm clipboard.
+--- 6761,6769 ----
+  writebackup		Compiled with 'writebackup' default on.
+  xfontset		Compiled with X fontset support |xfontset|.
+  xim			Compiled with X input method support |xim|.
+! xpm			Compiled with pixmap support.
+! xpm_w32			Compiled with pixmap support for Win32. (Only for
+! 			backward compatibility. Use "xpm" instead.)
+  xsmp			Compiled with X session management support.
+  xsmp_interact		Compiled with interactive X session management support.
+  xterm_clipboard		Compiled with support for xterm clipboard.
+*** ../vim-7.4.392/runtime/doc/options.txt	2014-07-02 19:59:35.446375136 +0200
+--- runtime/doc/options.txt	2014-08-06 14:36:59.591242682 +0200
+***************
+*** 5647,5652 ****
+--- 5650,5726 ----
+  	this option at the default "on".  Only switch it off when working with
+  	old Vi scripts.
+  
++                                                *'renderoptions'* *'rop'*
++ 'renderoptions' 'rop'	string  (default: empty)
++ 			global
++ 			{not in Vi}
++ 			{only available when compiled with GUI and DIRECTX on
++ 			MS-Windows}
++ 	Select a text renderer and set its options.  The options depend on the
++ 	renderer.
++ 
++ 	Syntax: >
++ 		set rop=type:{renderer}(,{name}:{value})*
++ <
++ 	Currently, only one optional renderer is available.
++ 
++ 	render	behavior    ~
++ 	directx	Vim will draw text using DirectX (DirectWrite).  It makes
++ 		drawn glyphs more beautiful than default GDI.
++ 		It requires 'encoding' is "utf-8", and only works on
++ 		MS-Windows Vista or newer version.
++ 
++ 		Options:
++ 		  name	    meaning		type	value       ~
++ 		  gamma	    gamma		float	1.0 - 2.2 (maybe)
++ 		  contrast  enhancedContrast	float	(unknown)
++ 		  level	    clearTypeLevel	float	(unknown)
++ 		  geom	    pixelGeometry	int	0 - 2 (see below)
++ 		  renmode   renderingMode	int	0 - 6 (see below)
++ 		  taamode   textAntialiasMode	int	0 - 3 (see below)
++ 
++ 		See this URL for detail:
++ 		  http://msdn.microsoft.com/en-us/library/dd368190.aspx
++ 
++ 		For geom: structure of a device pixel.
++ 		  0 - DWRITE_PIXEL_GEOMETRY_FLAT
++ 		  1 - DWRITE_PIXEL_GEOMETRY_RGB
++ 		  2 - DWRITE_PIXEL_GEOMETRY_BGR
++ 
++ 		See this URL for detail:
++ 		  http://msdn.microsoft.com/en-us/library/dd368114.aspx
++ 
++ 		For renmode: method of rendering glyphs.
++ 		  0 - DWRITE_RENDERING_MODE_DEFAULT
++ 		  1 - DWRITE_RENDERING_MODE_ALIASED
++ 		  2 - DWRITE_RENDERING_MODE_GDI_CLASSIC
++ 		  3 - DWRITE_RENDERING_MODE_GDI_NATURAL
++ 		  4 - DWRITE_RENDERING_MODE_NATURAL
++ 		  5 - DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC
++ 		  6 - DWRITE_RENDERING_MODE_OUTLINE
++ 
++ 		See this URL for detail:
++ 		  http://msdn.microsoft.com/en-us/library/dd368118.aspx
++ 
++ 		For taamode: antialiasing mode used for drawing text.
++ 		  0 - D2D1_TEXT_ANTIALIAS_MODE_DEFAULT
++ 		  1 - D2D1_TEXT_ANTIALIAS_MODE_CLEARTYPE
++ 		  2 - D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE
++ 		  3 - D2D1_TEXT_ANTIALIAS_MODE_ALIASED
++ 
++ 		See this URL for detail:
++ 		  http://msdn.microsoft.com/en-us/library/dd368170.aspx
++ 
++ 		Example: >
++ 		  set encoding=utf-8
++ 		  set gfn=Ricty_Diminished:h12:cSHIFTJIS
++ 		  set rop=type:directx
++ <
++ 		If select a raster font (Courier, Terminal or FixedSys) to
++ 		'guifont', it fallbacks to be drawn by GDI automatically.
++ 
++ 	Other render types are currently not supported.
++ 
+  						*'report'*
+  'report'		number	(default 2)
+  			global
+*** ../vim-7.4.392/runtime/doc/various.txt	2013-08-10 13:25:06.000000000 +0200
+--- runtime/doc/various.txt	2014-08-06 14:37:28.843242472 +0200
+***************
+*** 320,325 ****
+--- 337,343 ----
+  N  *+dialog_con_gui*	Support for |:confirm| with GUI and console dialog.
+  N  *+diff*		|vimdiff| and 'diff'
+  N  *+digraphs*		|digraphs| *E196*
++ m  *+directx*		Win32 GUI only: DirectX and |'renderoptions'|
+     *+dnd*		Support for DnD into the "~ register |quote_~|.
+  B  *+emacs_tags*	|emacs-tags| files
+  N  *+eval*		expression evaluation |eval.txt|
+***************
+*** 426,431 ****
+--- 445,451 ----
+  m  *+writebackup*	|'writebackup'| is default on
+  m  *+xim*		X input method |xim|
+     *+xfontset*		X fontset support |xfontset|
++    *+xpm*		pixmap support
+  m  *+xpm_w32*		Win32 GUI only: pixmap support |w32-xpm-support|
+     *+xsmp*		XSMP (X session management) support
+     *+xsmp_interact*	interactive XSMP (X session management) support
+*** ../vim-7.4.392/src/Make_cyg.mak	2013-12-11 15:06:36.000000000 +0100
+--- src/Make_cyg.mak	2014-08-06 14:21:57.455249166 +0200
+***************
+*** 8,13 ****
+--- 8,14 ----
+  # Cygwin application use the Makefile (just like on Unix).
+  #
+  # GUI		no or yes: set to yes if you want the GUI version (yes)
++ # DIRECTX	no or yes: set to yes if you want use DirectWrite (no)
+  # PERL		define to path to Perl dir to get Perl support (not defined)
+  #   PERL_VER	  define to version of Perl being used (56)
+  #   DYNAMIC_PERL  no or yes: set to yes to load the Perl DLL dynamically (yes)
+***************
+*** 88,93 ****
+--- 89,98 ----
+  ARCH = i386
+  endif
+  
++ ifndef DIRECTX
++ DIRECTX = no
++ endif
++ 
+  ifndef WINVER
+  WINVER = 0x0500
+  endif
+***************
+*** 470,475 ****
+--- 475,489 ----
+  endif
+  
+  ##############################
++ ifeq (yes, $(DIRECTX))
++ # Only allow DIRECTX for a GUI build.
++ DEFINES += -DFEAT_DIRECTX -DDYNAMIC_DIRECTX
++ EXTRA_OBJS += $(OUTDIR)/gui_dwrite.o
++ EXTRA_LIBS += -ld2d1 -ldwrite
++ USE_STDCPLUS = yes
++ endif
++ 
++ ##############################
+  ifdef XPM
+  # Only allow XPM for a GUI build.
+  DEFINES += -DFEAT_XPM_W32
+***************
+*** 495,505 ****
+  DEFINES += -DFEAT_OLE
+  EXTRA_OBJS += $(OUTDIR)/if_ole.o
+  EXTRA_LIBS += -loleaut32
+! ifeq (yes, $(STATIC_STDCPLUS))
+! EXTRA_LIBS += -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
+! else
+! EXTRA_LIBS += -lstdc++
+! endif
+  endif
+  
+  ##############################
+--- 509,515 ----
+  DEFINES += -DFEAT_OLE
+  EXTRA_OBJS += $(OUTDIR)/if_ole.o
+  EXTRA_LIBS += -loleaut32
+! USE_STDCPLUS = yes
+  endif
+  
+  ##############################
+***************
+*** 513,518 ****
+--- 523,537 ----
+  DIRSLASH = \\
+  endif
+  
++ ##############################
++ ifeq (yes, $(USE_STDCPLUS))
++ ifeq (yes, $(STATIC_STDCPLUS))
++ EXTRA_LIBS += -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
++ else
++ EXTRA_LIBS += -lstdc++
++ endif
++ endif
++ 
+  #>>>>> end of choices
+  ###########################################################################
+  
+***************
+*** 643,648 ****
+--- 662,670 ----
+  $(OUTDIR)/gui_w32.o:	gui_w32.c gui_w48.c $(INCL)
+  	$(CC) -c $(CFLAGS) gui_w32.c -o $(OUTDIR)/gui_w32.o
+  
++ $(OUTDIR)/gui_dwrite.o:	gui_dwrite.cpp $(INCL) gui_dwrite.h
++ 	$(CC) -c $(CFLAGS) gui_dwrite.cpp -o $(OUTDIR)/gui_dwrite.o
++ 
+  $(OUTDIR)/if_cscope.o:	if_cscope.c $(INCL) if_cscope.h
+  	$(CC) -c $(CFLAGS) if_cscope.c -o $(OUTDIR)/if_cscope.o
+  
+*** ../vim-7.4.392/src/Make_ming.mak	2014-01-06 15:44:59.000000000 +0100
+--- src/Make_ming.mak	2014-08-06 14:21:57.455249166 +0200
+***************
+*** 31,36 ****
+--- 31,38 ----
+  OPTIMIZE=MAXSPEED
+  # set to yes to make gvim, no for vim
+  GUI=yes
++ # set to yes if you want to use DirectWrite (DirectX)
++ DIRECTX=no
+  # FEATURES=[TINY | SMALL  | NORMAL | BIG | HUGE]
+  # Set to TINY to make minimal version (few features).
+  FEATURES=BIG
+***************
+*** 456,461 ****
+--- 458,471 ----
+  endif
+  endif
+  
++ # DirectWrite (DirectX)
++ ifeq ($(DIRECTX),yes)
++ # Only allow DirectWrite for a GUI build.
++ ifeq (yes, $(GUI))
++ DEFINES += -DFEAT_DIRECTX -DDYNAMIC_DIRECTX
++ endif
++ endif
++ 
+  # Only allow XPM for a GUI build.
+  ifeq (yes, $(GUI))
+  
+***************
+*** 593,598 ****
+--- 603,616 ----
+  LIB += -lwsock32
+  endif
+  endif
++ ifeq ($(DIRECTX),yes)
++ # Only allow DIRECTX for a GUI build.
++ ifeq (yes, $(GUI))
++ OBJ += $(OUTDIR)/gui_dwrite.o
++ LIB += -ld2d1 -ldwrite
++ USE_STDCPLUS = yes
++ endif
++ endif
+  ifdef XPM
+  # Only allow XPM for a GUI build.
+  ifeq (yes, $(GUI))
+***************
+*** 650,660 ****
+  ifeq (yes, $(OLE))
+  LIB += -loleaut32
+  OBJ += $(OUTDIR)/if_ole.o
+! ifeq (yes, $(STATIC_STDCPLUS))
+! LIB += -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
+! else
+! LIB += -lstdc++
+! endif
+  endif
+  
+  ifeq (yes, $(MBYTE))
+--- 668,674 ----
+  ifeq (yes, $(OLE))
+  LIB += -loleaut32
+  OBJ += $(OUTDIR)/if_ole.o
+! USE_STDCPLUS = yes
+  endif
+  
+  ifeq (yes, $(MBYTE))
+***************
+*** 678,683 ****
+--- 692,705 ----
+  DEFINES+=-DDYNAMIC_ICONV
+  endif
+  
++ ifeq (yes, $(USE_STDCPLUS))
++ ifeq (yes, $(STATIC_STDCPLUS))
++ LIB += -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
++ else
++ LIB += -lstdc++
++ endif
++ endif
++ 
+  all: $(TARGET) vimrun.exe xxd/xxd.exe install.exe uninstal.exe GvimExt/gvimext.dll
+  
+  vimrun.exe: vimrun.c
+***************
+*** 751,756 ****
+--- 773,781 ----
+  $(OUTDIR)/gui_w32.o:	gui_w32.c gui_w48.c $(INCL)
+  	$(CC) -c $(CFLAGS) gui_w32.c -o $(OUTDIR)/gui_w32.o
+  
++ $(OUTDIR)/gui_dwrite.o:	gui_dwrite.cpp $(INCL) gui_dwrite.h
++ 	$(CC) -c $(CFLAGS) gui_dwrite.cpp -o $(OUTDIR)/gui_dwrite.o
++ 
+  $(OUTDIR)/if_cscope.o:	if_cscope.c $(INCL) if_cscope.h
+  	$(CC) -c $(CFLAGS) if_cscope.c -o $(OUTDIR)/if_cscope.o
+  
+*** ../vim-7.4.392/src/Make_mvc.mak	2014-05-22 16:29:03.374353200 +0200
+--- src/Make_mvc.mak	2014-08-06 14:21:57.455249166 +0200
+***************
+*** 24,29 ****
+--- 24,32 ----
+  #
+  #	GUI interface: GUI=yes (default is no)
+  #
++ #	GUI with DirectWrite(DirectX): DIRECTX=yes
++ #	  (default is no, requires GUI=yes)
++ #
+  #	OLE interface: OLE=yes (usually with GUI=yes)
+  #
+  #	Multibyte support: MBYTE=yes (default is no)
+***************
+*** 168,173 ****
+--- 171,179 ----
+  !else
+  OBJDIR = .\ObjC
+  !endif
++ !if "$(DIRECTX)" == "yes"
++ OBJDIR = $(OBJDIR)X
++ !endif
+  !if "$(OLE)" == "yes"
+  OBJDIR = $(OBJDIR)O
+  !endif
+***************
+*** 292,297 ****
+--- 298,310 ----
+  NETBEANS_LIB	= WSock32.lib
+  !endif
+  
++ # DirectWrite(DirectX)
++ !if "$(DIRECTX)" == "yes"
++ DIRECTX_DEFS	= -DFEAT_DIRECTX -DDYNAMIC_DIRECTX
++ DIRECTX_INCL	= gui_dwrite.h
++ DIRECTX_OBJ	= $(OUTDIR)\gui_dwrite.obj
++ !endif
++ 
+  !ifndef XPM
+  # XPM is not set, use the included xpm files, depending on the architecture.
+  !if "$(CPU)" == "AMD64"
+***************
+*** 642,647 ****
+--- 655,666 ----
+  SUBSYSTEM = console
+  !endif
+  
++ !if "$(GUI)" == "yes" && "$(DIRECTX)" == "yes"
++ CFLAGS = $(CFLAGS) $(DIRECTX_DEFS)
++ GUI_INCL = $(GUI_INCL) $(DIRECTX_INCL)
++ GUI_OBJ = $(GUI_OBJ) $(DIRECTX_OBJ)
++ !endif
++ 
+  # iconv.dll library (dynamically loaded)
+  !ifndef ICONV
+  ICONV = yes
+***************
+*** 1107,1112 ****
+--- 1126,1133 ----
+  
+  $(OUTDIR)/gui_w32.obj:	$(OUTDIR) gui_w32.c gui_w48.c $(INCL) $(GUI_INCL)
+  
++ $(OUTDIR)/gui_dwrite.obj:	$(OUTDIR) gui_dwrite.cpp $(INCL) $(GUI_INCL)
++ 
+  $(OUTDIR)/if_cscope.obj: $(OUTDIR) if_cscope.c  $(INCL)
+  
+  $(OUTDIR)/if_lua.obj: $(OUTDIR) if_lua.c  $(INCL)
+*** ../vim-7.4.392/src/eval.c	2014-08-06 13:36:56.091268582 +0200
+--- src/eval.c	2014-08-06 14:21:57.459249166 +0200
+***************
+*** 12464,12469 ****
+--- 12464,12472 ----
+  #ifdef FEAT_DIGRAPHS
+  	"digraphs",
+  #endif
++ #ifdef FEAT_DIRECTX
++ 	"directx",
++ #endif
+  #ifdef FEAT_DND
+  	"dnd",
+  #endif
+*** ../vim-7.4.392/src/gui_dwrite.cpp	2014-08-06 14:49:19.663237363 +0200
+--- src/gui_dwrite.cpp	2014-08-06 14:39:48.775241466 +0200
+***************
+*** 0 ****
+--- 1,901 ----
++ /* vi:set ts=8 sts=4 sw=4 noet: */
++ /*
++  * Author: MURAOKA Taro <koron.kaoriya@gmail.com>
++  *
++  * Contributors:
++  *  - Ken Takata
++  *
++  * Copyright (C) 2013 MURAOKA Taro <koron.kaoriya@gmail.com>
++  * THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
++  */
++ 
++ #define WIN32_LEAN_AND_MEAN
++ 
++ #ifndef DYNAMIC_DIRECTX
++ # if WINVER < 0x0600
++ #  error WINVER must be 0x0600 or above to use DirectWrite(DirectX)
++ # endif
++ #endif
++ 
++ #include <windows.h>
++ #include <crtdbg.h>
++ #include <assert.h>
++ #include <math.h>
++ #include <d2d1.h>
++ #include <d2d1helper.h>
++ #include <dwrite.h>
++ 
++ #include "gui_dwrite.h"
++ 
++ #ifdef __MINGW32__
++ # define __maybenull	SAL__maybenull
++ # define __in		SAL__in
++ # define __out		SAL__out
++ #endif
++ 
++ #ifdef DYNAMIC_DIRECTX
++ extern "C" HINSTANCE vimLoadLib(char *name);
++ 
++ typedef int (WINAPI *PGETUSERDEFAULTLOCALENAME)(LPWSTR, int);
++ typedef HRESULT (WINAPI *PD2D1CREATEFACTORY)(D2D1_FACTORY_TYPE,
++ 	REFIID, const D2D1_FACTORY_OPTIONS *, void **);
++ typedef HRESULT (WINAPI *PDWRITECREATEFACTORY)(DWRITE_FACTORY_TYPE,
++ 	REFIID, IUnknown **);
++ 
++ static HINSTANCE hD2D1DLL = NULL;
++ static HINSTANCE hDWriteDLL = NULL;
++ 
++ static PGETUSERDEFAULTLOCALENAME pGetUserDefaultLocaleName = NULL;
++ static PD2D1CREATEFACTORY pD2D1CreateFactory = NULL;
++ static PDWRITECREATEFACTORY pDWriteCreateFactory = NULL;
++ 
++ #define GetUserDefaultLocaleName	(*pGetUserDefaultLocaleName)
++ #define D2D1CreateFactory		(*pD2D1CreateFactory)
++ #define DWriteCreateFactory		(*pDWriteCreateFactory)
++ 
++     static void
++ unload(HINSTANCE &hinst)
++ {
++     if (hinst != NULL)
++     {
++ 	FreeLibrary(hinst);
++ 	hinst = NULL;
++     }
++ }
++ #endif // DYNAMIC_DIRECTX
++ 
++ template <class T> inline void SafeRelease(T **ppT)
++ {
++     if (*ppT)
++     {
++ 	(*ppT)->Release();
++ 	*ppT = NULL;
++     }
++ }
++ 
++ struct GdiTextRendererContext
++ {
++     // const fields.
++     COLORREF color;
++     FLOAT cellWidth;
++ 
++     // working fields.
++     FLOAT offsetX;
++ };
++ 
++     static DWRITE_PIXEL_GEOMETRY
++ ToPixelGeometry(int value)
++ {
++     switch (value)
++     {
++ 	default:
++ 	case 0:
++ 	    return DWRITE_PIXEL_GEOMETRY_FLAT;
++ 	case 1:
++ 	    return DWRITE_PIXEL_GEOMETRY_RGB;
++ 	case 2:
++ 	    return DWRITE_PIXEL_GEOMETRY_BGR;
++     }
++ }
++ 
++     static int
++ ToInt(DWRITE_PIXEL_GEOMETRY value)
++ {
++     switch (value)
++     {
++ 	case DWRITE_PIXEL_GEOMETRY_FLAT:
++ 	    return 0;
++ 	case DWRITE_PIXEL_GEOMETRY_RGB:
++ 	    return 1;
++ 	case DWRITE_PIXEL_GEOMETRY_BGR:
++ 	    return 2;
++ 	default:
++ 	    return -1;
++     }
++ }
++ 
++     static DWRITE_RENDERING_MODE
++ ToRenderingMode(int value)
++ {
++     switch (value)
++     {
++ 	default:
++ 	case 0:
++ 	    return DWRITE_RENDERING_MODE_DEFAULT;
++ 	case 1:
++ 	    return DWRITE_RENDERING_MODE_ALIASED;
++ 	case 2:
++ 	    return DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC;
++ 	case 3:
++ 	    return DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL;
++ 	case 4:
++ 	    return DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL;
++ 	case 5:
++ 	    return DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC;
++ 	case 6:
++ 	    return DWRITE_RENDERING_MODE_OUTLINE;
++     }
++ }
++ 
++     static D2D1_TEXT_ANTIALIAS_MODE
++ ToTextAntialiasMode(int value)
++ {
++     switch (value)
++     {
++ 	default:
++ 	case 0:
++ 	    return D2D1_TEXT_ANTIALIAS_MODE_DEFAULT;
++ 	case 1:
++ 	    return D2D1_TEXT_ANTIALIAS_MODE_CLEARTYPE;
++ 	case 2:
++ 	    return D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE;
++ 	case 3:
++ 	    return D2D1_TEXT_ANTIALIAS_MODE_ALIASED;
++     }
++ }
++ 
++     static int
++ ToInt(DWRITE_RENDERING_MODE value)
++ {
++     switch (value)
++     {
++ 	case DWRITE_RENDERING_MODE_DEFAULT:
++ 	    return 0;
++ 	case DWRITE_RENDERING_MODE_ALIASED:
++ 	    return 1;
++ 	case DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC:
++ 	    return 2;
++ 	case DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL:
++ 	    return 3;
++ 	case DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL:
++ 	    return 4;
++ 	case DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC:
++ 	    return 5;
++ 	case DWRITE_RENDERING_MODE_OUTLINE:
++ 	    return 6;
++ 	default:
++ 	    return -1;
++     }
++ }
++ 
++ class AdjustedGlyphRun : public DWRITE_GLYPH_RUN
++ {
++ private:
++     FLOAT mDelta;
++     FLOAT *mAdjustedAdvances;
++ 
++ public:
++     AdjustedGlyphRun(
++ 	    const DWRITE_GLYPH_RUN *glyphRun,
++ 	    FLOAT cellWidth) :
++ 	DWRITE_GLYPH_RUN(*glyphRun),
++ 	mDelta(0.0f),
++ 	mAdjustedAdvances(new FLOAT[glyphRun->glyphCount])
++     {
++ 	assert(cellWidth != 0.0f);
++ 	for (UINT32 i = 0; i < glyphRun->glyphCount; ++i)
++ 	{
++ 	    FLOAT orig = glyphRun->glyphAdvances[i];
++ 	    FLOAT adjusted = adjustToCell(orig, cellWidth);
++ 	    mAdjustedAdvances[i] = adjusted;
++ 	    mDelta += adjusted - orig;
++ 	}
++ 	glyphAdvances = mAdjustedAdvances;
++     }
++ 
++     ~AdjustedGlyphRun(void)
++     {
++ 	delete[] mAdjustedAdvances;
++     }
++ 
++     FLOAT getDelta(void) const
++     {
++ 	return mDelta;
++     }
++ 
++     static FLOAT adjustToCell(FLOAT value, FLOAT cellWidth)
++     {
++ 	int cellCount = (int)floor(value / cellWidth + 0.5f);
++ 	if (cellCount < 1)
++ 	    cellCount = 1;
++ 	return cellCount * cellWidth;
++     }
++ };
++ 
++ class GdiTextRenderer : public IDWriteTextRenderer
++ {
++ public:
++     GdiTextRenderer(
++ 	    IDWriteBitmapRenderTarget* bitmapRenderTarget,
++ 	    IDWriteRenderingParams* renderingParams) :
++ 	cRefCount_(0),
++ 	pRenderTarget_(bitmapRenderTarget),
++ 	pRenderingParams_(renderingParams)
++     {
++ 	pRenderTarget_->AddRef();
++ 	pRenderingParams_->AddRef();
++ 	AddRef();
++     }
++ 
++     ~GdiTextRenderer()
++     {
++ 	SafeRelease(&pRenderTarget_);
++ 	SafeRelease(&pRenderingParams_);
++     }
++ 
++     IFACEMETHOD(IsPixelSnappingDisabled)(
++ 	__maybenull void* clientDrawingContext,
++ 	__out BOOL* isDisabled)
++     {
++ 	*isDisabled = FALSE;
++ 	return S_OK;
++     }
++ 
++     IFACEMETHOD(GetCurrentTransform)(
++ 	__maybenull void* clientDrawingContext,
++ 	__out DWRITE_MATRIX* transform)
++     {
++ 	//forward the render target's transform
++ 	pRenderTarget_->GetCurrentTransform(transform);
++ 	return S_OK;
++     }
++ 
++     IFACEMETHOD(GetPixelsPerDip)(
++ 	__maybenull void* clientDrawingContext,
++ 	__out FLOAT* pixelsPerDip)
++     {
++ 	*pixelsPerDip = pRenderTarget_->GetPixelsPerDip();
++ 	return S_OK;
++     }
++ 
++     IFACEMETHOD(DrawGlyphRun)(
++ 	__maybenull void* clientDrawingContext,
++ 	FLOAT baselineOriginX,
++ 	FLOAT baselineOriginY,
++ 	DWRITE_MEASURING_MODE measuringMode,
++ 	__in DWRITE_GLYPH_RUN const* glyphRun,
++ 	__in DWRITE_GLYPH_RUN_DESCRIPTION const* glyphRunDescription,
++ 	IUnknown* clientDrawingEffect)
++     {
++ 	HRESULT hr = S_OK;
++ 
++ 	GdiTextRendererContext *context =
++ 	    reinterpret_cast<GdiTextRendererContext*>(clientDrawingContext);
++ 
++ 	AdjustedGlyphRun adjustedGlyphRun(glyphRun, context->cellWidth);
++ 
++ 	// Pass on the drawing call to the render target to do the real work.
++ 	RECT dirtyRect = {0};
++ 
++ 	hr = pRenderTarget_->DrawGlyphRun(
++ 		baselineOriginX + context->offsetX,
++ 		baselineOriginY,
++ 		measuringMode,
++ 		&adjustedGlyphRun,
++ 		pRenderingParams_,
++ 		context->color,
++ 		&dirtyRect);
++ 
++ 	context->offsetX += adjustedGlyphRun.getDelta();
++ 
++ 	return hr;
++     }
++ 
++     IFACEMETHOD(DrawUnderline)(
++ 	__maybenull void* clientDrawingContext,
++ 	FLOAT baselineOriginX,
++ 	FLOAT baselineOriginY,
++ 	__in DWRITE_UNDERLINE const* underline,
++ 	IUnknown* clientDrawingEffect)
++     {
++ 	return E_NOTIMPL;
++     }
++ 
++     IFACEMETHOD(DrawStrikethrough)(
++ 	__maybenull void* clientDrawingContext,
++ 	FLOAT baselineOriginX,
++ 	FLOAT baselineOriginY,
++ 	__in DWRITE_STRIKETHROUGH const* strikethrough,
++ 	IUnknown* clientDrawingEffect)
++     {
++ 	return E_NOTIMPL;
++     }
++ 
++     IFACEMETHOD(DrawInlineObject)(
++ 	__maybenull void* clientDrawingContext,
++ 	FLOAT originX,
++ 	FLOAT originY,
++ 	IDWriteInlineObject* inlineObject,
++ 	BOOL isSideways,
++ 	BOOL isRightToLeft,
++ 	IUnknown* clientDrawingEffect)
++     {
++ 	return E_NOTIMPL;
++     }
++ 
++ public:
++     IFACEMETHOD_(unsigned long, AddRef) ()
++     {
++ 	return InterlockedIncrement(&cRefCount_);
++     }
++ 
++     IFACEMETHOD_(unsigned long, Release) ()
++     {
++ 	long newCount = InterlockedDecrement(&cRefCount_);
++ 
++ 	if (newCount == 0)
++ 	{
++ 	    delete this;
++ 	    return 0;
++ 	}
++ 	return newCount;
++     }
++ 
++     IFACEMETHOD(QueryInterface)(
++ 	IID const& riid,
++ 	void** ppvObject)
++     {
++ 	if (__uuidof(IDWriteTextRenderer) == riid)
++ 	{
++ 	    *ppvObject = this;
++ 	}
++ 	else if (__uuidof(IDWritePixelSnapping) == riid)
++ 	{
++ 	    *ppvObject = this;
++ 	}
++ 	else if (__uuidof(IUnknown) == riid)
++ 	{
++ 	    *ppvObject = this;
++ 	}
++ 	else
++ 	{
++ 	    *ppvObject = NULL;
++ 	    return E_FAIL;
++ 	}
++ 
++ 	return S_OK;
++     }
++ 
++ private:
++     unsigned long cRefCount_;
++     IDWriteBitmapRenderTarget* pRenderTarget_;
++     IDWriteRenderingParams* pRenderingParams_;
++ };
++ 
++ struct DWriteContext {
++     FLOAT mDpiScaleX;
++     FLOAT mDpiScaleY;
++     bool mDrawing;
++ 
++     ID2D1Factory *mD2D1Factory;
++ 
++     ID2D1DCRenderTarget *mRT;
++     ID2D1SolidColorBrush *mBrush;
++ 
++     IDWriteFactory *mDWriteFactory;
++     IDWriteGdiInterop *mGdiInterop;
++     IDWriteRenderingParams *mRenderingParams;
++     IDWriteTextFormat *mTextFormat;
++ 
++     HFONT mLastHFont;
++     DWRITE_FONT_WEIGHT mFontWeight;
++     DWRITE_FONT_STYLE mFontStyle;
++ 
++     D2D1_TEXT_ANTIALIAS_MODE mTextAntialiasMode;
++ 
++     // METHODS
++ 
++     DWriteContext();
++ 
++     virtual ~DWriteContext();
++ 
++     HRESULT SetLOGFONT(const LOGFONTW &logFont, float fontSize);
++ 
++     void SetFont(HFONT hFont);
++ 
++     void SetFont(const LOGFONTW &logFont);
++ 
++     void DrawText(HDC hdc, const WCHAR* text, int len,
++ 	int x, int y, int w, int h, int cellWidth, COLORREF color);
++ 
++     float PixelsToDipsX(int x);
++ 
++     float PixelsToDipsY(int y);
++ 
++     void SetRenderingParams(
++ 	    const DWriteRenderingParams *params);
++ 
++     DWriteRenderingParams *GetRenderingParams(
++ 	    DWriteRenderingParams *params);
++ };
++ 
++ DWriteContext::DWriteContext() :
++     mDpiScaleX(1.f),
++     mDpiScaleY(1.f),
++     mDrawing(false),
++     mD2D1Factory(NULL),
++     mRT(NULL),
++     mBrush(NULL),
++     mDWriteFactory(NULL),
++     mGdiInterop(NULL),
++     mRenderingParams(NULL),
++     mTextFormat(NULL),
++     mLastHFont(NULL),
++     mFontWeight(DWRITE_FONT_WEIGHT_NORMAL),
++     mFontStyle(DWRITE_FONT_STYLE_NORMAL),
++     mTextAntialiasMode(D2D1_TEXT_ANTIALIAS_MODE_DEFAULT)
++ {
++     HRESULT hr;
++ 
++     HDC screen = ::GetDC(0);
++     mDpiScaleX = ::GetDeviceCaps(screen, LOGPIXELSX) / 96.0f;
++     mDpiScaleY = ::GetDeviceCaps(screen, LOGPIXELSY) / 96.0f;
++     ::ReleaseDC(0, screen);
++ 
++     hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED,
++ 	    __uuidof(ID2D1Factory), NULL,
++ 	    reinterpret_cast<void**>(&mD2D1Factory));
++     _RPT2(_CRT_WARN, "D2D1CreateFactory: hr=%p p=%p\n", hr, mD2D1Factory);
++ 
++     if (SUCCEEDED(hr))
++     {
++ 	D2D1_RENDER_TARGET_PROPERTIES props = {
++ 	    D2D1_RENDER_TARGET_TYPE_DEFAULT,
++ 	    { DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_IGNORE },
++ 	    0, 0,
++ 	    D2D1_RENDER_TARGET_USAGE_NONE,
++ 	    D2D1_FEATURE_LEVEL_DEFAULT
++ 	};
++ 	hr = mD2D1Factory->CreateDCRenderTarget(&props, &mRT);
++ 	_RPT2(_CRT_WARN, "CreateDCRenderTarget: hr=%p p=%p\n", hr, mRT);
++     }
++ 
++     if (SUCCEEDED(hr))
++     {
++ 	hr = mRT->CreateSolidColorBrush(
++ 		D2D1::ColorF(D2D1::ColorF::Black),
++ 		&mBrush);
++ 	_RPT2(_CRT_WARN, "CreateSolidColorBrush: hr=%p p=%p\n", hr, mBrush);
++     }
++ 
++     if (SUCCEEDED(hr))
++     {
++ 	hr = DWriteCreateFactory(
++ 		DWRITE_FACTORY_TYPE_SHARED,
++ 		__uuidof(IDWriteFactory),
++ 		reinterpret_cast<IUnknown**>(&mDWriteFactory));
++ 	_RPT2(_CRT_WARN, "DWriteCreateFactory: hr=%p p=%p\n", hr,
++ 		mDWriteFactory);
++     }
++ 
++     if (SUCCEEDED(hr))
++     {
++ 	hr = mDWriteFactory->GetGdiInterop(&mGdiInterop);
++ 	_RPT2(_CRT_WARN, "GetGdiInterop: hr=%p p=%p\n", hr, mGdiInterop);
++     }
++ 
++     if (SUCCEEDED(hr))
++     {
++ 	hr = mDWriteFactory->CreateRenderingParams(&mRenderingParams);
++ 	_RPT2(_CRT_WARN, "CreateRenderingParams: hr=%p p=%p\n", hr,
++ 		mRenderingParams);
++     }
++ }
++ 
++ DWriteContext::~DWriteContext()
++ {
++     SafeRelease(&mTextFormat);
++     SafeRelease(&mRenderingParams);
++     SafeRelease(&mGdiInterop);
++     SafeRelease(&mDWriteFactory);
++     SafeRelease(&mBrush);
++     SafeRelease(&mRT);
++     SafeRelease(&mD2D1Factory);
++ }
++ 
++     HRESULT
++ DWriteContext::SetLOGFONT(const LOGFONTW &logFont, float fontSize)
++ {
++     // Most of this function is copy from: http://msdn.microsoft.com/en-us/library/windows/desktop/dd941783(v=vs.85).aspx
++     HRESULT hr = S_OK;
++ 
++     IDWriteFont *font = NULL;
++     IDWriteFontFamily *fontFamily = NULL;
++     IDWriteLocalizedStrings *localizedFamilyNames = NULL;
++ 
++     if (SUCCEEDED(hr))
++     {
++ 	hr = mGdiInterop->CreateFontFromLOGFONT(&logFont, &font);
++     }
++ 
++     // Get the font family to which this font belongs.
++     if (SUCCEEDED(hr))
++     {
++ 	hr = font->GetFontFamily(&fontFamily);
++     }
++ 
++     // Get the family names. This returns an object that encapsulates one or
++     // more names with the same meaning but in different languages.
++     if (SUCCEEDED(hr))
++     {
++ 	hr = fontFamily->GetFamilyNames(&localizedFamilyNames);
++     }
++ 
++     // Get the family name at index zero. If we were going to display the name
++     // we'd want to try to find one that matched the use locale, but for
++     // purposes of creating a text format object any language will do.
++ 
++     wchar_t familyName[100];
++     if (SUCCEEDED(hr))
++     {
++ 	hr = localizedFamilyNames->GetString(0, familyName,
++ 		ARRAYSIZE(familyName));
++     }
++ 
++     if (SUCCEEDED(hr))
++     {
++ 	// If no font size was passed in use the lfHeight of the LOGFONT.
++ 	if (fontSize == 0)
++ 	{
++ 	    // Convert from pixels to DIPs.
++ 	    fontSize = PixelsToDipsY(logFont.lfHeight);
++ 	    if (fontSize < 0)
++ 	    {
++ 		// Negative lfHeight represents the size of the em unit.
++ 		fontSize = -fontSize;
++ 	    }
++ 	    else
++ 	    {
++ 		// Positive lfHeight represents the cell height (ascent +
++ 		// descent).
++ 		DWRITE_FONT_METRICS fontMetrics;
++ 		font->GetMetrics(&fontMetrics);
++ 
++ 		// Convert the cell height (ascent + descent) from design units
++ 		// to ems.
++ 		float cellHeight = static_cast<float>(
++ 			fontMetrics.ascent + fontMetrics.descent)
++ 					       / fontMetrics.designUnitsPerEm;
++ 
++ 		// Divide the font size by the cell height to get the font em
++ 		// size.
++ 		fontSize /= cellHeight;
++ 	    }
++ 	}
++     }
++ 
++     // The text format includes a locale name. Ideally, this would be the
++     // language of the text, which may or may not be the same as the primary
++     // language of the user. However, for our purposes the user locale will do.
++     wchar_t localeName[LOCALE_NAME_MAX_LENGTH];
++     if (SUCCEEDED(hr))
++     {
++ 	if (GetUserDefaultLocaleName(localeName, LOCALE_NAME_MAX_LENGTH) == 0)
++ 	    hr = HRESULT_FROM_WIN32(GetLastError());
++     }
++ 
++     if (SUCCEEDED(hr))
++     {
++ 	// Create the text format object.
++ 	hr = mDWriteFactory->CreateTextFormat(
++ 		familyName,
++ 		NULL, // no custom font collection
++ 		font->GetWeight(),
++ 		font->GetStyle(),
++ 		font->GetStretch(),
++ 		fontSize,
++ 		localeName,
++ 		&mTextFormat);
++     }
++ 
++     if (SUCCEEDED(hr))
++     {
++ 	mFontWeight = static_cast<DWRITE_FONT_WEIGHT>(logFont.lfWeight);
++ 	mFontStyle = logFont.lfItalic ? DWRITE_FONT_STYLE_ITALIC
++ 	    : DWRITE_FONT_STYLE_NORMAL;
++     }
++ 
++     SafeRelease(&localizedFamilyNames);
++     SafeRelease(&fontFamily);
++     SafeRelease(&font);
++ 
++     return hr;
++ }
++ 
++     void
++ DWriteContext::SetFont(HFONT hFont)
++ {
++     if (mLastHFont != hFont)
++     {
++ 	LOGFONTW lf;
++ 	if (GetObjectW(hFont, sizeof(lf), &lf))
++ 	{
++ 	    SetFont(lf);
++ 	    mLastHFont = hFont;
++ 	}
++     }
++ }
++ 
++     void
++ DWriteContext::SetFont(const LOGFONTW &logFont)
++ {
++     SafeRelease(&mTextFormat);
++     mLastHFont = NULL;
++ 
++     HRESULT hr = SetLOGFONT(logFont, 0.f);
++ 
++     if (SUCCEEDED(hr))
++ 	hr = mTextFormat->SetTextAlignment(DWRITE_TEXT_ALIGNMENT_LEADING);
++ 
++     if (SUCCEEDED(hr))
++ 	hr = mTextFormat->SetParagraphAlignment(
++ 		DWRITE_PARAGRAPH_ALIGNMENT_CENTER);
++ 
++     if (SUCCEEDED(hr))
++ 	hr = mTextFormat->SetWordWrapping(DWRITE_WORD_WRAPPING_NO_WRAP);
++ }
++ 
++     void
++ DWriteContext::DrawText(HDC hdc, const WCHAR* text, int len,
++ 	int x, int y, int w, int h, int cellWidth, COLORREF color)
++ {
++     HRESULT hr = S_OK;
++     IDWriteBitmapRenderTarget *bmpRT = NULL;
++ 
++     // Skip when any fonts are not set.
++     if (mTextFormat == NULL)
++ 	return;
++ 
++     // Check possibility of zero divided error.
++     if (cellWidth == 0 || mDpiScaleX == 0.0f || mDpiScaleY == 0.0f)
++ 	return;
++ 
++     if (SUCCEEDED(hr))
++ 	hr = mGdiInterop->CreateBitmapRenderTarget(hdc, w, h, &bmpRT);
++ 
++     if (SUCCEEDED(hr))
++     {
++ 	IDWriteTextLayout *textLayout = NULL;
++ 
++ 	HDC memdc = bmpRT->GetMemoryDC();
++ 	BitBlt(memdc, 0, 0, w, h, hdc, x, y, SRCCOPY);
++ 
++ 	hr = mDWriteFactory->CreateGdiCompatibleTextLayout(
++ 		text, len, mTextFormat, PixelsToDipsX(w),
++ 		PixelsToDipsY(h), mDpiScaleX, NULL, TRUE, &textLayout);
++ 
++ 	if (SUCCEEDED(hr))
++ 	{
++ 	    DWRITE_TEXT_RANGE textRange = { 0, len };
++ 	    textLayout->SetFontWeight(mFontWeight, textRange);
++ 	    textLayout->SetFontStyle(mFontStyle, textRange);
++ 	}
++ 
++ 	if (SUCCEEDED(hr))
++ 	{
++ 	    GdiTextRenderer *renderer = new GdiTextRenderer(bmpRT,
++ 		    mRenderingParams);
++ 	    GdiTextRendererContext data = {
++ 		color,
++ 		PixelsToDipsX(cellWidth),
++ 		0.0f
++ 	    };
++ 	    textLayout->Draw(&data, renderer, 0, 0);
++ 	    SafeRelease(&renderer);
++ 	}
++ 
++ 	BitBlt(hdc, x, y, w, h, memdc, 0, 0, SRCCOPY);
++ 
++ 	SafeRelease(&textLayout);
++     }
++ 
++     SafeRelease(&bmpRT);
++ }
++ 
++     float
++ DWriteContext::PixelsToDipsX(int x)
++ {
++     return x / mDpiScaleX;
++ }
++ 
++     float
++ DWriteContext::PixelsToDipsY(int y)
++ {
++     return y / mDpiScaleY;
++ }
++ 
++     void
++ DWriteContext::SetRenderingParams(
++ 	const DWriteRenderingParams *params)
++ {
++     if (mDWriteFactory == NULL)
++ 	return;
++ 
++     IDWriteRenderingParams *renderingParams = NULL;
++     D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode =
++ 	D2D1_TEXT_ANTIALIAS_MODE_DEFAULT;
++     HRESULT hr;
++     if (params != NULL)
++     {
++ 	hr = mDWriteFactory->CreateCustomRenderingParams(params->gamma,
++ 		params->enhancedContrast, params->clearTypeLevel,
++ 		ToPixelGeometry(params->pixelGeometry),
++ 		ToRenderingMode(params->renderingMode), &renderingParams);
++ 	textAntialiasMode = ToTextAntialiasMode(params->textAntialiasMode);
++     }
++     else
++ 	hr = mDWriteFactory->CreateRenderingParams(&renderingParams);
++     if (SUCCEEDED(hr) && renderingParams != NULL)
++     {
++ 	SafeRelease(&mRenderingParams);
++ 	mRenderingParams = renderingParams;
++ 	mTextAntialiasMode = textAntialiasMode;
++     }
++ }
++ 
++     DWriteRenderingParams *
++ DWriteContext::GetRenderingParams(
++ 	DWriteRenderingParams *params)
++ {
++     if (params != NULL && mRenderingParams != NULL)
++     {
++ 	params->gamma = mRenderingParams->GetGamma();
++ 	params->enhancedContrast = mRenderingParams->GetEnhancedContrast();
++ 	params->clearTypeLevel = mRenderingParams->GetClearTypeLevel();
++ 	params->pixelGeometry = ToInt(mRenderingParams->GetPixelGeometry());
++ 	params->renderingMode = ToInt(mRenderingParams->GetRenderingMode());
++ 	params->textAntialiasMode = mTextAntialiasMode;
++     }
++     return params;
++ }
++ 
++ ////////////////////////////////////////////////////////////////////////////
++ // PUBLIC C INTERFACES
++ 
++     void
++ DWrite_Init(void)
++ {
++ #ifdef DYNAMIC_DIRECTX
++     // Load libraries.
++     hD2D1DLL = vimLoadLib(const_cast<char*>("d2d1.dll"));
++     hDWriteDLL = vimLoadLib(const_cast<char*>("dwrite.dll"));
++     if (hD2D1DLL == NULL || hDWriteDLL == NULL)
++     {
++ 	DWrite_Final();
++ 	return;
++     }
++     // Get address of procedures.
++     pGetUserDefaultLocaleName = (PGETUSERDEFAULTLOCALENAME)GetProcAddress(
++ 	    GetModuleHandle("kernel32.dll"), "GetUserDefaultLocaleName");
++     pD2D1CreateFactory = (PD2D1CREATEFACTORY)GetProcAddress(hD2D1DLL,
++ 	    "D2D1CreateFactory");
++     pDWriteCreateFactory = (PDWRITECREATEFACTORY)GetProcAddress(hDWriteDLL,
++ 	    "DWriteCreateFactory");
++ #endif
++ }
++ 
++     void
++ DWrite_Final(void)
++ {
++ #ifdef DYNAMIC_DIRECTX
++     pGetUserDefaultLocaleName = NULL;
++     pD2D1CreateFactory = NULL;
++     pDWriteCreateFactory = NULL;
++     unload(hDWriteDLL);
++     unload(hD2D1DLL);
++ #endif
++ }
++ 
++     DWriteContext *
++ DWriteContext_Open(void)
++ {
++ #ifdef DYNAMIC_DIRECTX
++     if (pGetUserDefaultLocaleName == NULL || pD2D1CreateFactory == NULL
++ 	    || pDWriteCreateFactory == NULL)
++ 	return NULL;
++ #endif
++     return new DWriteContext();
++ }
++ 
++     void
++ DWriteContext_BeginDraw(DWriteContext *ctx)
++ {
++     if (ctx != NULL && ctx->mRT != NULL)
++     {
++ 	ctx->mRT->BeginDraw();
++ 	ctx->mRT->SetTransform(D2D1::IdentityMatrix());
++ 	ctx->mDrawing = true;
++     }
++ }
++ 
++     void
++ DWriteContext_BindDC(DWriteContext *ctx, HDC hdc, RECT *rect)
++ {
++     if (ctx != NULL && ctx->mRT != NULL)
++     {
++ 	ctx->mRT->BindDC(hdc, rect);
++ 	ctx->mRT->SetTextAntialiasMode(ctx->mTextAntialiasMode);
++     }
++ }
++ 
++     void
++ DWriteContext_SetFont(DWriteContext *ctx, HFONT hFont)
++ {
++     if (ctx != NULL)
++     {
++ 	ctx->SetFont(hFont);
++     }
++ }
++ 
++     void
++ DWriteContext_DrawText(
++ 	DWriteContext *ctx,
++ 	HDC hdc,
++ 	const WCHAR* text,
++ 	int len,
++ 	int x,
++ 	int y,
++ 	int w,
++ 	int h,
++ 	int cellWidth,
++ 	COLORREF color)
++ {
++     if (ctx != NULL)
++ 	ctx->DrawText(hdc, text, len, x, y, w, h, cellWidth, color);
++ }
++ 
++     void
++ DWriteContext_EndDraw(DWriteContext *ctx)
++ {
++     if (ctx != NULL && ctx->mRT != NULL)
++     {
++ 	ctx->mRT->EndDraw();
++ 	ctx->mDrawing = false;
++     }
++ }
++ 
++     void
++ DWriteContext_Close(DWriteContext *ctx)
++ {
++     delete ctx;
++ }
++ 
++     void
++ DWriteContext_SetRenderingParams(
++ 	DWriteContext *ctx,
++ 	const DWriteRenderingParams *params)
++ {
++     if (ctx != NULL)
++ 	ctx->SetRenderingParams(params);
++ }
++ 
++     DWriteRenderingParams *
++ DWriteContext_GetRenderingParams(
++ 	DWriteContext *ctx,
++ 	DWriteRenderingParams *params)
++ {
++     if (ctx != NULL)
++ 	return ctx->GetRenderingParams(params);
++     else
++ 	return NULL;
++ }
+*** ../vim-7.4.392/src/gui_dwrite.h	2014-08-06 14:49:19.667237363 +0200
+--- src/gui_dwrite.h	2014-08-06 14:21:57.459249166 +0200
+***************
+*** 0 ****
+--- 1,85 ----
++ /* vi:set ts=8 sts=4 sw=4 noet: */
++ /*
++  * Author: MURAOKA Taro <koron.kaoriya@gmail.com>
++  *
++  * Contributors:
++  *  - Ken Takata
++  *
++  * Copyright (C) 2013 MURAOKA Taro <koron.kaoriya@gmail.com>
++  * THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
++  */
++ 
++ #ifndef GUI_DWRITE_H
++ #define GUI_DWRITE_H
++ 
++ #ifdef __cplusplus
++ extern "C" {
++ #endif
++ 
++ typedef struct DWriteContext DWriteContext;
++ 
++ typedef struct DWriteRenderingParams {
++     float gamma;
++     float enhancedContrast;
++     float clearTypeLevel;
++     /*
++      * pixelGeometry:
++      *	0 - DWRITE_PIXEL_GEOMETRY_FLAT
++      *	1 - DWRITE_PIXEL_GEOMETRY_RGB
++      *	2 - DWRITE_PIXEL_GEOMETRY_BGR
++      */
++     int pixelGeometry;
++     /*
++      * renderingMode:
++      *	0 - DWRITE_RENDERING_MODE_DEFAULT
++      *	1 - DWRITE_RENDERING_MODE_ALIASED
++      *	2 - DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC
++      *	3 - DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL
++      *	4 - DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL
++      *	5 - DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC
++      *	6 - DWRITE_RENDERING_MODE_OUTLINE
++      */
++     int renderingMode;
++     /*
++      * antialiasMode:
++      *	0 - D2D1_TEXT_ANTIALIAS_MODE_DEFAULT
++      *	1 - D2D1_TEXT_ANTIALIAS_MODE_CLEARTYPE
++      *	2 - D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE
++      *	3 - D2D1_TEXT_ANTIALIAS_MODE_ALIASED
++      */
++     int textAntialiasMode;
++ } DWriteRenderingParams;
++ 
++ void DWrite_Init(void);
++ void DWrite_Final(void);
++ 
++ DWriteContext *DWriteContext_Open(void);
++ void DWriteContext_BeginDraw(DWriteContext *ctx);
++ void DWriteContext_BindDC(DWriteContext *ctx, HDC hdc, RECT *rect);
++ void DWriteContext_SetFont(DWriteContext *ctx, HFONT hFont);
++ void DWriteContext_DrawText(
++ 	DWriteContext *ctx,
++ 	HDC hdc,
++ 	const WCHAR* text,
++ 	int len,
++ 	int x,
++ 	int y,
++ 	int w,
++ 	int h,
++ 	int cellWidth,
++ 	COLORREF color);
++ void DWriteContext_EndDraw(DWriteContext *ctx);
++ void DWriteContext_Close(DWriteContext *ctx);
++ 
++ void DWriteContext_SetRenderingParams(
++ 	DWriteContext *ctx,
++ 	const DWriteRenderingParams *params);
++ 
++ DWriteRenderingParams *DWriteContext_GetRenderingParams(
++ 	DWriteContext *ctx,
++ 	DWriteRenderingParams *params);
++ 
++ #ifdef __cplusplus
++ }
++ #endif
++ #endif/*GUI_DWRITE_H*/
+*** ../vim-7.4.392/src/gui_w32.c	2013-08-04 16:15:37.000000000 +0200
+--- src/gui_w32.c	2014-08-06 14:45:43.495238916 +0200
+***************
+*** 25,30 ****
+--- 25,169 ----
+  
+  #include "vim.h"
+  
++ #if defined(FEAT_DIRECTX)
++ # include "gui_dwrite.h"
++ #endif
++ 
++ #if defined(FEAT_DIRECTX) || defined(PROTO)
++ static DWriteContext *s_dwc = NULL;
++ static int s_directx_enabled = 0;
++ static int s_directx_load_attempted = 0;
++ # define IS_ENABLE_DIRECTX() (s_directx_enabled && s_dwc != NULL)
++ 
++     int
++ directx_enabled(void)
++ {
++     if (s_dwc != NULL)
++ 	return 1;
++     else if (s_directx_load_attempted)
++ 	return 0;
++     /* load DirectX */
++     DWrite_Init();
++     s_directx_load_attempted = 1;
++     s_dwc = DWriteContext_Open();
++     return s_dwc != NULL ? 1 : 0;
++ }
++ #endif
++ 
++ #if defined(FEAT_RENDER_OPTIONS) || defined(PROTO)
++     int
++ gui_mch_set_rendering_options(char_u *s)
++ {
++ #ifdef FEAT_DIRECTX
++     int	    retval = FAIL;
++     char_u  *p, *q;
++ 
++     int	    dx_enable = 0;
++     int	    dx_flags = 0;
++     float   dx_gamma = 0.0f;
++     float   dx_contrast = 0.0f;
++     float   dx_level = 0.0f;
++     int	    dx_geom = 0;
++     int	    dx_renmode = 0;
++     int	    dx_taamode = 0;
++ 
++     /* parse string as rendering options. */
++     for (p = s; p != NULL && *p != NUL; )
++     {
++ 	char_u  item[256];
++ 	char_u  name[128];
++ 	char_u  value[128];
++ 
++ 	copy_option_part(&p, item, sizeof(item), ","); 
++ 	if (p == NULL)
++ 	    break;
++ 	q = &item[0];
++ 	copy_option_part(&q, name, sizeof(name), ":");
++ 	if (q == NULL)
++ 	    return FAIL;
++ 	copy_option_part(&q, value, sizeof(value), ":");
++ 
++ 	if (STRCMP(name, "type") == 0)
++ 	{
++ 	    if (STRCMP(value, "directx") == 0)
++ 		dx_enable = 1;
++ 	    else
++ 		return FAIL;
++ 	}
++ 	else if (STRCMP(name, "gamma") == 0)
++ 	{
++ 	    dx_flags |= 1 << 0;
++ 	    dx_gamma = (float)atof(value);
++ 	}
++ 	else if (STRCMP(name, "contrast") == 0)
++ 	{
++ 	    dx_flags |= 1 << 1;
++ 	    dx_contrast = (float)atof(value);
++ 	}
++ 	else if (STRCMP(name, "level") == 0)
++ 	{
++ 	    dx_flags |= 1 << 2;
++ 	    dx_level = (float)atof(value);
++ 	}
++ 	else if (STRCMP(name, "geom") == 0)
++ 	{
++ 	    dx_flags |= 1 << 3;
++ 	    dx_geom = atoi(value);
++ 	    if (dx_geom < 0 || dx_geom > 2)
++ 		return FAIL;
++ 	}
++ 	else if (STRCMP(name, "renmode") == 0)
++ 	{
++ 	    dx_flags |= 1 << 4;
++ 	    dx_renmode = atoi(value);
++ 	    if (dx_renmode < 0 || dx_renmode > 6)
++ 		return FAIL;
++ 	}
++ 	else if (STRCMP(name, "taamode") == 0)
++ 	{
++ 	    dx_flags |= 1 << 5;
++ 	    dx_taamode = atoi(value);
++ 	    if (dx_taamode < 0 || dx_taamode > 3)
++ 		return FAIL;
++ 	}
++ 	else
++ 	    return FAIL;
++     }
++ 
++     /* Enable DirectX/DirectWrite */
++     if (dx_enable)
++     {
++ 	if (!directx_enabled())
++ 	    return FAIL;
++ 	DWriteContext_SetRenderingParams(s_dwc, NULL);
++ 	if (dx_flags)
++ 	{
++ 	    DWriteRenderingParams param;
++ 	    DWriteContext_GetRenderingParams(s_dwc, &param);
++ 	    if (dx_flags & (1 << 0))
++ 		param.gamma = dx_gamma;
++ 	    if (dx_flags & (1 << 1))
++ 		param.enhancedContrast = dx_contrast;
++ 	    if (dx_flags & (1 << 2))
++ 		param.clearTypeLevel = dx_level;
++ 	    if (dx_flags & (1 << 3))
++ 		param.pixelGeometry = dx_geom;
++ 	    if (dx_flags & (1 << 4))
++ 		param.renderingMode = dx_renmode;
++ 	    if (dx_flags & (1 << 5))
++ 		param.textAntialiasMode = dx_taamode;
++ 	    DWriteContext_SetRenderingParams(s_dwc, &param);
++ 	}
++     }
++     s_directx_enabled = dx_enable;
++ 
++     return OK;
++ #else
++     return FAIL;
++ #endif
++ }
++ #endif
++ 
+  /*
+   * These are new in Windows ME/XP, only defined in recent compilers.
+   */
+***************
+*** 1624,1629 ****
+--- 1763,1773 ----
+      set_vim_var_nr(VV_WINDOWID, HandleToLong(s_hwnd));
+  #endif
+  
++ #ifdef FEAT_RENDER_OPTIONS
++     if (p_rop)
++ 	(void)gui_mch_set_rendering_options(p_rop);
++ #endif
++ 
+  theend:
+      /* Display any pending error messages */
+      display_errors();
+***************
+*** 1695,1703 ****
+  
+      /* compute the size of the outside of the window */
+      win_width = width + (GetSystemMetrics(SM_CXFRAME) +
+!                          GetSystemMetrics(SM_CXPADDEDBORDER)) * 2;
+      win_height = height + (GetSystemMetrics(SM_CYFRAME) +
+!                            GetSystemMetrics(SM_CXPADDEDBORDER)) * 2
+  			+ GetSystemMetrics(SM_CYCAPTION)
+  #ifdef FEAT_MENU
+  			+ gui_mswin_get_menu_height(FALSE)
+--- 1839,1847 ----
+  
+      /* compute the size of the outside of the window */
+      win_width = width + (GetSystemMetrics(SM_CXFRAME) +
+! 			 GetSystemMetrics(SM_CXPADDEDBORDER)) * 2;
+      win_height = height + (GetSystemMetrics(SM_CYFRAME) +
+! 			   GetSystemMetrics(SM_CXPADDEDBORDER)) * 2
+  			+ GetSystemMetrics(SM_CYCAPTION)
+  #ifdef FEAT_MENU
+  			+ gui_mswin_get_menu_height(FALSE)
+***************
+*** 2239,2244 ****
+--- 2383,2391 ----
+  #endif
+      HPEN	hpen, old_pen;
+      int		y;
++ #ifdef FEAT_DIRECTX
++     int		font_is_ttf_or_vector = 0;
++ #endif
+  
+  #ifndef MSWIN16_FASTTEXT
+      /*
+***************
+*** 2326,2331 ****
+--- 2473,2492 ----
+      SetTextColor(s_hdc, gui.currFgColor);
+      SelectFont(s_hdc, gui.currFont);
+  
++ #ifdef FEAT_DIRECTX
++     if (IS_ENABLE_DIRECTX())
++     {
++ 	TEXTMETRIC tm;
++ 
++ 	GetTextMetrics(s_hdc, &tm);
++ 	if (tm.tmPitchAndFamily & (TMPF_TRUETYPE | TMPF_VECTOR))
++ 	{
++ 	    font_is_ttf_or_vector = 1;
++ 	    DWriteContext_SetFont(s_dwc, (HFONT)gui.currFont);
++ 	}
++     }
++ #endif
++ 
+      if (pad_size != Columns || padding == NULL || padding[0] != gui.char_width)
+      {
+  	vim_free(padding);
+***************
+*** 2360,2365 ****
+--- 2521,2534 ----
+  	    if (text[n] >= 0x80)
+  		break;
+  
++ #if defined(FEAT_DIRECTX)
++     /* Quick hack to enable DirectWrite.  To use DirectWrite (antialias), it is
++      * required that unicode drawing routine, currently.  So this forces it
++      * enabled. */
++     if (enc_utf8 && IS_ENABLE_DIRECTX())
++ 	n = 0; /* Keep n < len, to enter block for unicode. */
++ #endif
++ 
+      /* Check if the Unicode buffer exists and is big enough.  Create it
+       * with the same length as the multi-byte string, the number of wide
+       * characters is always equal or smaller. */
+***************
+*** 2418,2425 ****
+  	    i += utfc_ptr2len_len(text + i, len - i);
+  	    ++clen;
+  	}
+! 	ExtTextOutW(s_hdc, TEXT_X(col), TEXT_Y(row),
+! 			   foptions, pcliprect, unicodebuf, wlen, unicodepdy);
+  	len = cells;	/* used for underlining */
+      }
+      else if ((enc_codepage > 0 && (int)GetACP() != enc_codepage) || enc_latin9)
+--- 2587,2603 ----
+  	    i += utfc_ptr2len_len(text + i, len - i);
+  	    ++clen;
+  	}
+! #if defined(FEAT_DIRECTX)
+! 	if (IS_ENABLE_DIRECTX() && font_is_ttf_or_vector)
+! 	{
+! 	    DWriteContext_DrawText(s_dwc, s_hdc, unicodebuf, wlen,
+! 		    TEXT_X(col), TEXT_Y(row), FILL_X(cells), FILL_Y(1),
+! 		    gui.char_width, gui.currFgColor);
+! 	}
+! 	else
+! #endif
+! 	    ExtTextOutW(s_hdc, TEXT_X(col), TEXT_Y(row),
+! 		    foptions, pcliprect, unicodebuf, wlen, unicodepdy);
+  	len = cells;	/* used for underlining */
+      }
+      else if ((enc_codepage > 0 && (int)GetACP() != enc_codepage) || enc_latin9)
+***************
+*** 2549,2562 ****
+  
+      *screen_w = workarea_rect.right - workarea_rect.left
+  		- (GetSystemMetrics(SM_CXFRAME) +
+!                    GetSystemMetrics(SM_CXPADDEDBORDER)) * 2;
+  
+      /* FIXME: dirty trick: Because the gui_get_base_height() doesn't include
+       * the menubar for MSwin, we subtract it from the screen height, so that
+       * the window size can be made to fit on the screen. */
+      *screen_h = workarea_rect.bottom - workarea_rect.top
+  		- (GetSystemMetrics(SM_CYFRAME) +
+!                    GetSystemMetrics(SM_CXPADDEDBORDER)) * 2
+  		- GetSystemMetrics(SM_CYCAPTION)
+  #ifdef FEAT_MENU
+  		- gui_mswin_get_menu_height(FALSE)
+--- 2727,2740 ----
+  
+      *screen_w = workarea_rect.right - workarea_rect.left
+  		- (GetSystemMetrics(SM_CXFRAME) +
+! 		   GetSystemMetrics(SM_CXPADDEDBORDER)) * 2;
+  
+      /* FIXME: dirty trick: Because the gui_get_base_height() doesn't include
+       * the menubar for MSwin, we subtract it from the screen height, so that
+       * the window size can be made to fit on the screen. */
+      *screen_h = workarea_rect.bottom - workarea_rect.top
+  		- (GetSystemMetrics(SM_CYFRAME) +
+! 		   GetSystemMetrics(SM_CXPADDEDBORDER)) * 2
+  		- GetSystemMetrics(SM_CYCAPTION)
+  #ifdef FEAT_MENU
+  		- gui_mswin_get_menu_height(FALSE)
+***************
+*** 3188,3200 ****
+  	GetWindowRect(s_hwnd, &rect);
+  	maxDialogWidth = rect.right - rect.left
+  				   - (GetSystemMetrics(SM_CXFRAME) +
+!                                       GetSystemMetrics(SM_CXPADDEDBORDER)) * 2;
+  	if (maxDialogWidth < DLG_MIN_MAX_WIDTH)
+  	    maxDialogWidth = DLG_MIN_MAX_WIDTH;
+  
+  	maxDialogHeight = rect.bottom - rect.top
+  				   - (GetSystemMetrics(SM_CYFRAME) +
+!                                       GetSystemMetrics(SM_CXPADDEDBORDER)) * 4
+  				   - GetSystemMetrics(SM_CYCAPTION);
+  	if (maxDialogHeight < DLG_MIN_MAX_HEIGHT)
+  	    maxDialogHeight = DLG_MIN_MAX_HEIGHT;
+--- 3366,3378 ----
+  	GetWindowRect(s_hwnd, &rect);
+  	maxDialogWidth = rect.right - rect.left
+  				   - (GetSystemMetrics(SM_CXFRAME) +
+! 				      GetSystemMetrics(SM_CXPADDEDBORDER)) * 2;
+  	if (maxDialogWidth < DLG_MIN_MAX_WIDTH)
+  	    maxDialogWidth = DLG_MIN_MAX_WIDTH;
+  
+  	maxDialogHeight = rect.bottom - rect.top
+  				   - (GetSystemMetrics(SM_CYFRAME) +
+! 				      GetSystemMetrics(SM_CXPADDEDBORDER)) * 4
+  				   - GetSystemMetrics(SM_CYCAPTION);
+  	if (maxDialogHeight < DLG_MIN_MAX_HEIGHT)
+  	    maxDialogHeight = DLG_MIN_MAX_HEIGHT;
+***************
+*** 3351,3361 ****
+      /* Restrict the size to a maximum.  Causes a scrollbar to show up. */
+      if (dlgheight > maxDialogHeight)
+      {
+!         msgheight = msgheight - (dlgheight - maxDialogHeight);
+!         dlgheight = maxDialogHeight;
+!         scroll_flag = WS_VSCROLL;
+!         /* Make sure scrollbar doesn't appear in the middle of the dialog */
+!         messageWidth = dlgwidth - DLG_ICON_WIDTH - 3 * dlgPaddingX;
+      }
+  
+      add_word(PixelToDialogY(dlgheight));
+--- 3529,3539 ----
+      /* Restrict the size to a maximum.  Causes a scrollbar to show up. */
+      if (dlgheight > maxDialogHeight)
+      {
+! 	msgheight = msgheight - (dlgheight - maxDialogHeight);
+! 	dlgheight = maxDialogHeight;
+! 	scroll_flag = WS_VSCROLL;
+! 	/* Make sure scrollbar doesn't appear in the middle of the dialog */
+! 	messageWidth = dlgwidth - DLG_ICON_WIDTH - 3 * dlgPaddingX;
+      }
+  
+      add_word(PixelToDialogY(dlgheight));
+*** ../vim-7.4.392/src/gui_w48.c	2014-03-23 15:12:29.923264336 +0100
+--- src/gui_w48.c	2014-08-06 14:21:57.463249166 +0200
+***************
+*** 2785,2790 ****
+--- 2785,2794 ----
+  
+  	out_flush();	    /* make sure all output has been processed */
+  	(void)BeginPaint(hwnd, &ps);
++ #if defined(FEAT_DIRECTX)
++ 	if (IS_ENABLE_DIRECTX())
++ 	    DWriteContext_BeginDraw(s_dwc);
++ #endif
+  
+  #ifdef FEAT_MBYTE
+  	/* prevent multi-byte characters from misprinting on an invalid
+***************
+*** 2800,2808 ****
+--- 2804,2823 ----
+  #endif
+  
+  	if (!IsRectEmpty(&ps.rcPaint))
++ 	{
++ #if defined(FEAT_DIRECTX)
++ 	    if (IS_ENABLE_DIRECTX())
++ 		DWriteContext_BindDC(s_dwc, s_hdc, &ps.rcPaint);
++ #endif
+  	    gui_redraw(ps.rcPaint.left, ps.rcPaint.top,
+  		    ps.rcPaint.right - ps.rcPaint.left + 1,
+  		    ps.rcPaint.bottom - ps.rcPaint.top + 1);
++ 	}
++ 
++ #if defined(FEAT_DIRECTX)
++ 	if (IS_ENABLE_DIRECTX())
++ 	    DWriteContext_EndDraw(s_dwc);
++ #endif
+  	EndPaint(hwnd, &ps);
+      }
+  }
+***************
+*** 3043,3048 ****
+--- 3058,3069 ----
+      void
+  gui_mch_exit(int rc)
+  {
++ #if defined(FEAT_DIRECTX)
++     DWriteContext_Close(s_dwc);
++     DWrite_Final();
++     s_dwc = NULL;
++ #endif
++ 
+      ReleaseDC(s_textArea, s_hdc);
+      DeleteObject(s_brush);
+  
+*** ../vim-7.4.392/src/option.c	2014-06-25 14:44:04.458358774 +0200
+--- src/option.c	2014-08-06 14:33:24.503244228 +0200
+***************
+*** 2124,2129 ****
+--- 2124,2138 ----
+      {"remap",	    NULL,   P_BOOL|P_VI_DEF,
+  			    (char_u *)&p_remap, PV_NONE,
+  			    {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
++     {"renderoptions", "rop", P_STRING|P_COMMA|P_RCLR|P_VI_DEF,
++ #ifdef FEAT_RENDER_OPTIONS
++ 			    (char_u *)&p_rop, PV_NONE,
++ 			    {(char_u *)"", (char_u *)0L}
++ #else
++ 			    (char_u *)NULL, PV_NONE,
++ 			    {(char_u *)NULL, (char_u *)0L}
++ #endif
++ 			    SCRIPTID_INIT},
+      {"report",	    NULL,   P_NUM|P_VI_DEF,
+  			    (char_u *)&p_report, PV_NONE,
+  			    {(char_u *)2L, (char_u *)0L} SCRIPTID_INIT},
+***************
+*** 6999,7004 ****
+--- 7008,7021 ----
+      }
+  #endif
+  
++ #if defined(FEAT_RENDER_OPTIONS)
++     else if (varp == &p_rop && gui.in_use)
++     {
++ 	if (!gui_mch_set_rendering_options(p_rop))
++ 	    errmsg = e_invarg;
++     }
++ #endif
++ 
+      /* Options that are a list of flags. */
+      else
+      {
+*** ../vim-7.4.392/src/option.h	2014-06-25 14:39:35.110348584 +0200
+--- src/option.h	2014-08-06 14:23:25.419248534 +0200
+***************
+*** 655,660 ****
+--- 655,663 ----
+  #endif
+  EXTERN int	p_remap;	/* 'remap' */
+  EXTERN long	p_re;		/* 'regexpengine' */
++ #ifdef FEAT_RENDER_OPTIONS
++ EXTERN char_u	*p_rop;		/* 'renderoptions' */
++ #endif
+  EXTERN long	p_report;	/* 'report' */
+  #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+  EXTERN long	p_pvh;		/* 'previewheight' */
+*** ../vim-7.4.392/src/version.c	2014-08-06 13:36:56.091268582 +0200
+--- src/version.c	2014-08-06 14:29:39.183245847 +0200
+***************
+*** 189,194 ****
+--- 189,201 ----
+  #else
+  	"-digraphs",
+  #endif
++ #ifdef FEAT_GUI_W32
++ # ifdef FEAT_DIRECTX
++ 	"+directx",
++ # else
++ 	"-directx",
++ # endif
++ #endif
+  #ifdef FEAT_DND
+  	"+dnd",
+  #else
+*** ../vim-7.4.392/src/vim.h	2014-04-02 19:54:58.275599459 +0200
+--- src/vim.h	2014-08-06 14:21:57.467249166 +0200
+***************
+*** 134,139 ****
+--- 134,146 ----
+  # endif
+  #endif
+  
++ /* Check support for rendering options */
++ #ifdef FEAT_GUI
++ # if defined(FEAT_DIRECTX)
++ #  define FEAT_RENDER_OPTIONS
++ # endif
++ #endif
++ 
+  /* Visual Studio 2005 has 'deprecated' many of the standard CRT functions */
+  #if _MSC_VER >= 1400
+  # define _CRT_SECURE_NO_DEPRECATE
+*** ../vim-7.4.392/src/proto/gui_w32.pro	2013-08-10 13:37:36.000000000 +0200
+--- src/proto/gui_w32.pro	2014-08-06 14:33:04.155244374 +0200
+***************
+*** 1,4 ****
+--- 1,6 ----
+  /* gui_w32.c */
++ int directx_enabled __ARGS((void));
++ int gui_mch_set_rendering_options __ARGS((char_u *s));
+  void gui_mch_set_blinking __ARGS((long wait, long on, long off));
+  void gui_mch_stop_blink __ARGS((void));
+  void gui_mch_start_blink __ARGS((void));
+*** ../vim-7.4.392/src/version.c	2014-08-06 13:36:56.091268582 +0200
+--- src/version.c	2014-08-06 14:29:39.183245847 +0200
+***************
+*** 736,737 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     393,
+  /**/
+
+-- 
+A consultant is a person who takes your money and annoys your employees while
+tirelessly searching for the best way to extend the consulting contract.
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.394 b/SOURCES/7.4.394
new file mode 100644
index 0000000..fbe199c
--- /dev/null
+++ b/SOURCES/7.4.394
@@ -0,0 +1,56 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.394
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.394 (after 7.4.393)
+Problem:    When using DirectX last italic character is incomplete.
+Solution:   Add one to the number of cells. (Ken Takata)
+Files:	    src/gui_w32.c
+
+
+*** ../vim-7.4.393/src/gui_w32.c	2014-08-06 14:52:05.043236174 +0200
+--- src/gui_w32.c	2014-08-06 16:45:56.927187071 +0200
+***************
+*** 2590,2597 ****
+  #if defined(FEAT_DIRECTX)
+  	if (IS_ENABLE_DIRECTX() && font_is_ttf_or_vector)
+  	{
+  	    DWriteContext_DrawText(s_dwc, s_hdc, unicodebuf, wlen,
+! 		    TEXT_X(col), TEXT_Y(row), FILL_X(cells), FILL_Y(1),
+  		    gui.char_width, gui.currFgColor);
+  	}
+  	else
+--- 2590,2598 ----
+  #if defined(FEAT_DIRECTX)
+  	if (IS_ENABLE_DIRECTX() && font_is_ttf_or_vector)
+  	{
++ 	    /* Add one to "cells" for italics. */
+  	    DWriteContext_DrawText(s_dwc, s_hdc, unicodebuf, wlen,
+! 		    TEXT_X(col), TEXT_Y(row), FILL_X(cells + 1), FILL_Y(1),
+  		    gui.char_width, gui.currFgColor);
+  	}
+  	else
+*** ../vim-7.4.393/src/version.c	2014-08-06 14:52:05.047236174 +0200
+--- src/version.c	2014-08-06 16:46:54.279186658 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     394,
+  /**/
+
+-- 
+The average life of an organization chart is six months.  You can safely
+ignore any order from your boss that would take six months to complete.
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.395 b/SOURCES/7.4.395
new file mode 100644
index 0000000..943b44e
--- /dev/null
+++ b/SOURCES/7.4.395
@@ -0,0 +1,99 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.395
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.395 (after 7.4.355)
+Problem:    C indent is wrong below an if with wrapped condition followed by
+	    curly braces. (Trevor Powell)
+Solution:   Make a copy of tryposBrace.
+Files:	    src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+
+*** ../vim-7.4.394/src/misc1.c	2014-08-06 12:49:06.711289205 +0200
+--- src/misc1.c	2014-08-06 17:35:45.003165594 +0200
+***************
+*** 6995,7000 ****
+--- 6995,7001 ----
+      char_u	*linecopy;
+      pos_T	*trypos;
+      pos_T	*tryposBrace = NULL;
++     pos_T	tryposBraceCopy;
+      pos_T	our_paren_pos;
+      char_u	*start;
+      int		start_brace;
+***************
+*** 7532,7538 ****
+--- 7533,7543 ----
+  	/*
+  	 * We are inside braces, there is a { before this line at the position
+  	 * stored in tryposBrace.
++ 	 * Make a copy of tryposBrace, it may point to pos_copy inside
++ 	 * find_start_brace(), which may be changed somewhere.
+  	 */
++ 	tryposBraceCopy = *tryposBrace;
++ 	tryposBrace = &tryposBraceCopy;
+  	trypos = tryposBrace;
+  	ourscope = trypos->lnum;
+  	start = ml_get(ourscope);
+*** ../vim-7.4.394/src/testdir/test3.in	2014-07-03 22:57:51.299862927 +0200
+--- src/testdir/test3.in	2014-08-06 17:19:41.099172522 +0200
+***************
+*** 464,469 ****
+--- 464,477 ----
+  	asdfasdf
+  }
+  
++ {
++ for ( int i = 0;
++ 	i < 10; i++ )
++ {
++ }
++ 	i = 0;
++ }
++ 
+  class bob
+  {
+  	int foo() {return 1;}
+*** ../vim-7.4.394/src/testdir/test3.ok	2014-07-03 22:57:51.299862927 +0200
+--- src/testdir/test3.ok	2014-08-06 17:20:11.867172301 +0200
+***************
+*** 452,457 ****
+--- 452,465 ----
+  	asdfasdf
+  }
+  
++ {
++ 	for ( int i = 0;
++ 			i < 10; i++ )
++ 	{
++ 	}
++ 	i = 0;
++ }
++ 
+  class bob
+  {
+  	int foo() {return 1;}
+*** ../vim-7.4.394/src/version.c	2014-08-06 16:49:51.203185387 +0200
+--- src/version.c	2014-08-06 17:43:44.243162150 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     395,
+  /**/
+
+-- 
+An operatingsystem is just a name you give to the rest of bloating
+idiosyncratic machine-based-features you left out of your editor.
+			(author unknown)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.396 b/SOURCES/7.4.396
new file mode 100644
index 0000000..47b9a0c
--- /dev/null
+++ b/SOURCES/7.4.396
@@ -0,0 +1,291 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.396
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.396
+Problem:    When 'clipboard' is "unnamed", :g/pat/d is very slow. (Praful)
+Solution:   Only set the clipboard after the last delete. (Christian Brabandt)
+Files:	    src/ex_cmds.c, src/ex_cmds2.c, src/ex_docmd.c, src/globals.h,
+	    src/ops.c, src/proto/ui.pro, src/ui.c
+
+
+*** ../vim-7.4.395/src/ex_cmds.c	2014-07-09 21:17:59.755550204 +0200
+--- src/ex_cmds.c	2014-08-06 18:06:37.931152276 +0200
+***************
+*** 5514,5520 ****
+--- 5514,5528 ----
+  	    smsg((char_u *)_("Pattern not found: %s"), pat);
+      }
+      else
++     {
++ #ifdef FEAT_CLIPBOARD
++ 	start_global_changes();
++ #endif
+  	global_exe(cmd);
++ #ifdef FEAT_CLIPBOARD
++ 	end_global_changes();
++ #endif
++     }
+  
+      ml_clearmarked();	   /* clear rest of the marks */
+      vim_regfree(regmatch.regprog);
+*** ../vim-7.4.395/src/ex_cmds2.c	2014-04-05 19:44:36.903160723 +0200
+--- src/ex_cmds2.c	2014-08-06 18:05:07.563152926 +0200
+***************
+*** 2464,2469 ****
+--- 2464,2472 ----
+  	 * great speed improvement. */
+  	save_ei = au_event_disable(",Syntax");
+  #endif
++ #ifdef FEAT_CLIPBOARD
++     start_global_changes();
++ #endif
+  
+      if (eap->cmdidx == CMD_windo
+  	    || eap->cmdidx == CMD_tabdo
+***************
+*** 2591,2596 ****
+--- 2594,2602 ----
+  					       curbuf->b_fname, TRUE, curbuf);
+      }
+  #endif
++ #ifdef FEAT_CLIPBOARD
++     end_global_changes();
++ #endif
+  }
+  
+  /*
+***************
+*** 2750,2757 ****
+   * used.
+   * Returns OK when at least one match found, FAIL otherwise.
+   *
+!  * If "name" is NULL calls callback for each entry in runtimepath. Cookie is 
+!  * passed by reference in this case, setting it to NULL indicates that callback 
+   * has done its job.
+   */
+      int
+--- 2756,2763 ----
+   * used.
+   * Returns OK when at least one match found, FAIL otherwise.
+   *
+!  * If "name" is NULL calls callback for each entry in runtimepath. Cookie is
+!  * passed by reference in this case, setting it to NULL indicates that callback
+   * has done its job.
+   */
+      int
+*** ../vim-7.4.395/src/ex_docmd.c	2014-06-17 17:48:21.780628008 +0200
+--- src/ex_docmd.c	2014-08-06 18:05:07.563152926 +0200
+***************
+*** 11534,11539 ****
+--- 11534,11543 ----
+  {
+      linenr_T	lnum;
+  
++ #ifdef FEAT_CLIPBOARD
++     start_global_changes();
++ #endif
++ 
+      /* First set the marks for all lines closed/open. */
+      for (lnum = eap->line1; lnum <= eap->line2; ++lnum)
+  	if (hasFolding(lnum, NULL, NULL) == (eap->cmdidx == CMD_folddoclosed))
+***************
+*** 11542,11546 ****
+--- 11546,11553 ----
+      /* Execute the command on the marked lines. */
+      global_exe(eap->arg);
+      ml_clearmarked();	   /* clear rest of the marks */
++ #ifdef FEAT_CLIPBOARD
++     end_global_changes();
++ #endif
+  }
+  #endif
+*** ../vim-7.4.395/src/globals.h	2014-07-30 17:21:53.815518506 +0200
+--- src/globals.h	2014-08-06 18:05:07.563152926 +0200
+***************
+*** 533,538 ****
+--- 533,540 ----
+  EXTERN int	clip_autoselectml INIT(= FALSE);
+  EXTERN int	clip_html INIT(= FALSE);
+  EXTERN regprog_T *clip_exclude_prog INIT(= NULL);
++ EXTERN int	clip_did_set_selection INIT(= TRUE);
++ EXTERN int	clip_unnamed_saved INIT(= 0);
+  #endif
+  
+  /*
+*** ../vim-7.4.395/src/ops.c	2014-06-25 14:39:35.106348584 +0200
+--- src/ops.c	2014-08-06 18:05:07.563152926 +0200
+***************
+*** 1597,1605 ****
+  {
+      /* If no reg. specified, and "unnamed" or "unnamedplus" is in 'clipboard',
+       * use '*' or '+' reg, respectively. "unnamedplus" prevails. */
+!     if (*rp == 0 && clip_unnamed != 0)
+! 	*rp = ((clip_unnamed & CLIP_UNNAMED_PLUS) && clip_plus.available)
+  								  ? '+' : '*';
+      if (!clip_star.available && *rp == '*')
+  	*rp = 0;
+      if (!clip_plus.available && *rp == '+')
+--- 1597,1611 ----
+  {
+      /* If no reg. specified, and "unnamed" or "unnamedplus" is in 'clipboard',
+       * use '*' or '+' reg, respectively. "unnamedplus" prevails. */
+!     if (*rp == 0 && (clip_unnamed != 0 || clip_unnamed_saved != 0))
+!     {
+! 	if (clip_unnamed != 0)
+! 	    *rp = ((clip_unnamed & CLIP_UNNAMED_PLUS) && clip_plus.available)
+! 								  ? '+' : '*';
+! 	else
+! 	    *rp = ((clip_unnamed_saved & CLIP_UNNAMED_PLUS) && clip_plus.available)
+  								  ? '+' : '*';
++     }
+      if (!clip_star.available && *rp == '*')
+  	*rp = 0;
+      if (!clip_plus.available && *rp == '+')
+***************
+*** 3203,3209 ****
+      if (clip_star.available
+  	    && (curr == &(y_regs[STAR_REGISTER])
+  		|| (!deleting && oap->regname == 0
+! 					   && (clip_unnamed & CLIP_UNNAMED))))
+      {
+  	if (curr != &(y_regs[STAR_REGISTER]))
+  	    /* Copy the text from register 0 to the clipboard register. */
+--- 3209,3215 ----
+      if (clip_star.available
+  	    && (curr == &(y_regs[STAR_REGISTER])
+  		|| (!deleting && oap->regname == 0
+! 		   && ((clip_unnamed | clip_unnamed_saved) & CLIP_UNNAMED))))
+      {
+  	if (curr != &(y_regs[STAR_REGISTER]))
+  	    /* Copy the text from register 0 to the clipboard register. */
+***************
+*** 3224,3230 ****
+      if (clip_plus.available
+  	    && (curr == &(y_regs[PLUS_REGISTER])
+  		|| (!deleting && oap->regname == 0
+! 				      && (clip_unnamed & CLIP_UNNAMED_PLUS))))
+      {
+  	if (curr != &(y_regs[PLUS_REGISTER]))
+  	    /* Copy the text from register 0 to the clipboard register. */
+--- 3230,3237 ----
+      if (clip_plus.available
+  	    && (curr == &(y_regs[PLUS_REGISTER])
+  		|| (!deleting && oap->regname == 0
+! 		  && ((clip_unnamed | clip_unnamed_saved) &
+! 		      CLIP_UNNAMED_PLUS))))
+      {
+  	if (curr != &(y_regs[PLUS_REGISTER]))
+  	    /* Copy the text from register 0 to the clipboard register. */
+*** ../vim-7.4.395/src/proto/ui.pro	2013-08-10 13:37:29.000000000 +0200
+--- src/proto/ui.pro	2014-08-06 18:05:07.563152926 +0200
+***************
+*** 14,19 ****
+--- 14,21 ----
+  void clip_update_selection __ARGS((VimClipboard *clip));
+  void clip_own_selection __ARGS((VimClipboard *cbd));
+  void clip_lose_selection __ARGS((VimClipboard *cbd));
++ void start_global_changes __ARGS((void));
++ void end_global_changes __ARGS((void));
+  void clip_auto_select __ARGS((void));
+  int clip_isautosel_star __ARGS((void));
+  int clip_isautosel_plus __ARGS((void));
+*** ../vim-7.4.395/src/ui.c	2014-06-25 14:39:35.114348584 +0200
+--- src/ui.c	2014-08-06 18:13:13.475149434 +0200
+***************
+*** 558,563 ****
+--- 558,608 ----
+  }
+  
+  /*
++  * Save and restore clip_unnamed before doing possibly many changes. This
++  * prevents accessing the clipboard very often which might slow down Vim
++  * considerably.
++  */
++ 
++ /*
++  * Save clip_unnamed and reset it.
++  */
++     void
++ start_global_changes()
++ {
++     clip_unnamed_saved = clip_unnamed;
++ 
++     if (clip_did_set_selection)
++     {
++ 	clip_unnamed = FALSE;
++ 	clip_did_set_selection = FALSE;
++     }
++ }
++ 
++ /*
++  * Restore clip_unnamed and set the selection when needed.
++  */
++     void
++ end_global_changes()
++ {
++     if (!clip_did_set_selection)
++     {
++ 	clip_did_set_selection = TRUE;
++ 	clip_unnamed = clip_unnamed_saved;
++ 	if (clip_unnamed & CLIP_UNNAMED)
++ 	{
++ 	    clip_own_selection(&clip_star);
++ 	    clip_gen_set_selection(&clip_star);
++ 	}
++ 	if (clip_unnamed & CLIP_UNNAMED_PLUS)
++ 	{
++ 	    clip_own_selection(&clip_plus);
++ 	    clip_gen_set_selection(&clip_plus);
++ 	}
++     }
++     clip_unnamed_saved = FALSE;
++ }
++ 
++ /*
+   * Called when Visual mode is ended: update the selection.
+   */
+      void
+***************
+*** 1428,1433 ****
+--- 1473,1487 ----
+  clip_gen_set_selection(cbd)
+      VimClipboard	*cbd;
+  {
++     if (!clip_did_set_selection)
++     {
++ 	/* Updating postponed, so that accessing the system clipboard won't
++ 	 * hang Vim when accessing it many times (e.g. on a :g comand). */
++ 	if (cbd == &clip_plus && (clip_unnamed_saved & CLIP_UNNAMED_PLUS))
++ 	    return;
++ 	else if (cbd == &clip_star && (clip_unnamed_saved & CLIP_UNNAMED))
++ 	    return;
++     }
+  #ifdef FEAT_XCLIPBOARD
+  # ifdef FEAT_GUI
+      if (gui.in_use)
+*** ../vim-7.4.395/src/version.c	2014-08-06 17:44:09.867161966 +0200
+--- src/version.c	2014-08-06 18:04:47.359153071 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     396,
+  /**/
+
+-- 
+You have heard the saying that if you put a thousand monkeys in a room with a
+thousand typewriters and waited long enough, eventually you would have a room
+full of dead monkeys.
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.397 b/SOURCES/7.4.397
new file mode 100644
index 0000000..4d70ca6
--- /dev/null
+++ b/SOURCES/7.4.397
@@ -0,0 +1,150 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.397
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.397
+Problem:    Matchparen only uses the topmost syntax item.
+Solution:   Go through the syntax stack to find items. (James McCoy)
+            Also use getcurpos() when possible.
+Files:      runtime/plugin/matchparen.vim
+
+
+*** ../vim-7.4.396/runtime/plugin/matchparen.vim	2014-06-17 17:48:21.772628007 +0200
+--- runtime/plugin/matchparen.vim	2014-08-06 19:02:04.967128364 +0200
+***************
+*** 1,6 ****
+  " Vim plugin for showing matching parens
+  " Maintainer:  Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2014 Jun 17
+  
+  " Exit quickly when:
+  " - this plugin was already loaded (or disabled)
+--- 1,6 ----
+  " Vim plugin for showing matching parens
+  " Maintainer:  Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2014 Jul 19
+  
+  " Exit quickly when:
+  " - this plugin was already loaded (or disabled)
+***************
+*** 54,67 ****
+    let c_col = col('.')
+    let before = 0
+  
+!   let c = getline(c_lnum)[c_col - 1]
+    let plist = split(&matchpairs, '.\zs[:,]')
+    let i = index(plist, c)
+    if i < 0
+      " not found, in Insert mode try character before the cursor
+      if c_col > 1 && (mode() == 'i' || mode() == 'R')
+        let before = 1
+!       let c = getline(c_lnum)[c_col - 2]
+        let i = index(plist, c)
+      endif
+      if i < 0
+--- 54,68 ----
+    let c_col = col('.')
+    let before = 0
+  
+!   let text = getline(c_lnum)
+!   let c = text[c_col - 1]
+    let plist = split(&matchpairs, '.\zs[:,]')
+    let i = index(plist, c)
+    if i < 0
+      " not found, in Insert mode try character before the cursor
+      if c_col > 1 && (mode() == 'i' || mode() == 'R')
+        let before = 1
+!       let c = text[c_col - 2]
+        let i = index(plist, c)
+      endif
+      if i < 0
+***************
+*** 87,100 ****
+    " Find the match.  When it was just before the cursor move it there for a
+    " moment.
+    if before > 0
+!     let save_cursor = winsaveview()
+      call cursor(c_lnum, c_col - before)
+    endif
+  
+!   " When not in a string or comment ignore matches inside them.
+    " We match "escape" for special items, such as lispEscapeSpecial.
+!   let s_skip ='synIDattr(synID(line("."), col("."), 0), "name") ' .
+! 	\ '=~?  "string\\|character\\|singlequote\\|escape\\|comment"'
+    execute 'if' s_skip '| let s_skip = 0 | endif'
+  
+    " Limit the search to lines visible in the window.
+--- 88,114 ----
+    " Find the match.  When it was just before the cursor move it there for a
+    " moment.
+    if before > 0
+!     let has_getcurpos = exists("*getcurpos")
+!     if has_getcurpos
+!       " getcurpos() is more efficient but doesn't exist before 7.4.313.
+!       let save_cursor = getcurpos()
+!     else
+!       let save_cursor = winsaveview()
+!     endif
+      call cursor(c_lnum, c_col - before)
+    endif
+  
+!   " Build an expression that detects whether the current cursor position is in
+!   " certain syntax types (string, comment, etc.), for use as searchpairpos()'s
+!   " skip argument.
+    " We match "escape" for special items, such as lispEscapeSpecial.
+!   let s_skip = '!empty(filter(map(synstack(line("."), col(".")), ''synIDattr(v:val, "name")''), ' .
+! 	\ '''v:val =~? "string\\|character\\|singlequote\\|escape\\|comment"''))'
+!   " If executing the expression determines that the cursor is currently in
+!   " one of the syntax types, then we want searchpairpos() to find the pair
+!   " within those syntax types (i.e., not skip).  Otherwise, the cursor is
+!   " outside of the syntax types and s_skip should keep its value so we skip any
+!   " matching pair inside the syntax types.
+    execute 'if' s_skip '| let s_skip = 0 | endif'
+  
+    " Limit the search to lines visible in the window.
+***************
+*** 147,153 ****
+    endtry
+  
+    if before > 0
+!     call winrestview(save_cursor)
+    endif
+  
+    " If a match is found setup match highlighting.
+--- 161,171 ----
+    endtry
+  
+    if before > 0
+!     if has_getcurpos
+!       call setpos('.', save_cursor)
+!     else
+!       call winrestview(save_cursor)
+!     endif
+    endif
+  
+    " If a match is found setup match highlighting.
+*** ../vim-7.4.396/src/version.c	2014-08-06 18:17:03.475147780 +0200
+--- src/version.c	2014-08-06 19:06:44.627126354 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     397,
+  /**/
+
+-- 
+Often you're less important than your furniture.  If you think about it, you
+can get fired but your furniture stays behind, gainfully employed at the
+company that didn't need _you_ anymore.
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.398 b/SOURCES/7.4.398
new file mode 100644
index 0000000..e710505
--- /dev/null
+++ b/SOURCES/7.4.398
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.398
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.398 (after 7.4.393)
+Problem:    Gcc error for the argument of InterlockedIncrement() and
+	    InterlockedDecrement(). (Axel Bender)
+Solution:   Remove "unsigned" from the cRefCount_ declaration.
+Files:	    src/gui_dwrite.cpp
+
+
+*** ../vim-7.4.397/src/gui_dwrite.cpp	2014-08-06 14:52:05.043236174 +0200
+--- src/gui_dwrite.cpp	2014-08-06 18:39:01.611138306 +0200
+***************
+*** 377,383 ****
+      }
+  
+  private:
+!     unsigned long cRefCount_;
+      IDWriteBitmapRenderTarget* pRenderTarget_;
+      IDWriteRenderingParams* pRenderingParams_;
+  };
+--- 377,383 ----
+      }
+  
+  private:
+!     long cRefCount_;
+      IDWriteBitmapRenderTarget* pRenderTarget_;
+      IDWriteRenderingParams* pRenderingParams_;
+  };
+*** ../vim-7.4.397/src/version.c	2014-08-06 19:08:33.563125571 +0200
+--- src/version.c	2014-08-07 13:54:40.162639943 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     398,
+  /**/
+
+-- 
+A)bort, R)etry, D)o it right this time
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.400 b/SOURCES/7.4.400
new file mode 100644
index 0000000..9c922a3
--- /dev/null
+++ b/SOURCES/7.4.400
@@ -0,0 +1,69 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.400
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.400
+Problem:    List of distributed files is incomplete.
+Solution:   Add recently added files.
+Files:	    Filelist
+
+
+*** ../vim-7.4.399/Filelist	2014-05-13 13:52:34.817605451 +0200
+--- Filelist	2014-08-10 13:43:31.612781775 +0200
+***************
+*** 11,16 ****
+--- 11,18 ----
+  		src/blowfish.c \
+  		src/buffer.c \
+  		src/charset.c \
++ 		src/crypt.c \
++ 		src/crypt_zip.c \
+  		src/diff.c \
+  		src/digraph.c \
+  		src/edit.c \
+***************
+*** 103,108 ****
+--- 105,112 ----
+  		src/proto/blowfish.pro \
+  		src/proto/buffer.pro \
+  		src/proto/charset.pro \
++ 		src/proto/crypt.pro \
++ 		src/proto/crypt_zip.pro \
+  		src/proto/diff.pro \
+  		src/proto/digraph.pro \
+  		src/proto/edit.pro \
+***************
+*** 289,294 ****
+--- 293,300 ----
+  		src/dosinst.h \
+  		src/glbl_ime.cpp \
+  		src/glbl_ime.h \
++ 		src/gui_dwrite.cpp \
++ 		src/gui_dwrite.h \
+  		src/gui_w16.c \
+  		src/gui_w32.c \
+  		src/gui_w48.c \
+*** ../vim-7.4.399/src/version.c	2014-08-10 13:34:59.064785459 +0200
+--- src/version.c	2014-08-10 13:45:45.800780810 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     400,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+17. You turn on your intercom when leaving the room so you can hear if new
+    e-mail arrives.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.401 b/SOURCES/7.4.401
new file mode 100644
index 0000000..408f33a
--- /dev/null
+++ b/SOURCES/7.4.401
@@ -0,0 +1,357 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.401
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.401 (after 7.4.399)
+Problem:    Can't build on MS-Windows.
+Solution:   Include the new files in all the Makefiles.
+Files:	    src/Make_bc3.mak, src/Make_bc5.mak, src/Make_cyg.mak,
+	    src/Make_dice.mak, src/Make_djg.mak, src/Make_ivc.mak,
+	    src/Make_manx.mak, src/Make_ming.mak, src/Make_morph.mak,
+	    src/Make_mvc.mak, src/Make_os2.mak, src/Make_sas.mak,
+	    Make_vms.mms
+
+
+*** ../vim-7.4.400/src/Make_bc3.mak	2010-05-18 20:27:58.000000000 +0200
+--- src/Make_bc3.mak	2014-08-10 16:20:20.068714153 +0200
+***************
+*** 54,59 ****
+--- 54,61 ----
+  	blowfish.obj \
+  	buffer.obj \
+  	charset.obj \
++ 	crypt.obj \
++ 	crypt_zip.obj \
+  	diff.obj \
+  	digraph.obj \
+  	edit.obj \
+*** ../vim-7.4.400/src/Make_bc5.mak	2014-01-10 18:16:00.000000000 +0100
+--- src/Make_bc5.mak	2014-08-10 16:20:39.684714012 +0200
+***************
+*** 580,585 ****
+--- 580,587 ----
+  	$(OBJDIR)\blowfish.obj \
+  	$(OBJDIR)\buffer.obj \
+  	$(OBJDIR)\charset.obj \
++ 	$(OBJDIR)\crypt.obj \
++ 	$(OBJDIR)\crypt_zip.obj \
+  	$(OBJDIR)\diff.obj \
+  	$(OBJDIR)\digraph.obj \
+  	$(OBJDIR)\edit.obj \
+*** ../vim-7.4.400/src/Make_cyg.mak	2014-08-06 14:52:05.039236174 +0200
+--- src/Make_cyg.mak	2014-08-10 16:30:48.656709635 +0200
+***************
+*** 1,6 ****
+  #
+  # Makefile for VIM on Win32, using Cygnus gcc
+! # Last updated by Dan Sharp.  Last Change: 2013 Dec 11
+  #
+  # Also read INSTALLpc.txt!
+  #
+--- 1,7 ----
+  #
+  # Makefile for VIM on Win32, using Cygnus gcc
+! # Updated by Dan Sharp.
+! # Last Change: 2014 Aug 10
+  #
+  # Also read INSTALLpc.txt!
+  #
+***************
+*** 546,551 ****
+--- 547,554 ----
+  	$(OUTDIR)/blowfish.o \
+  	$(OUTDIR)/buffer.o \
+  	$(OUTDIR)/charset.o \
++ 	$(OUTDIR)/crypt.o \
++ 	$(OUTDIR)/crypt_zip.o \
+  	$(OUTDIR)/diff.o \
+  	$(OUTDIR)/digraph.o \
+  	$(OUTDIR)/edit.o \
+*** ../vim-7.4.400/src/Make_dice.mak	2010-05-18 20:29:00.000000000 +0200
+--- src/Make_dice.mak	2014-08-10 16:21:53.740713479 +0200
+***************
+*** 29,34 ****
+--- 29,36 ----
+  	blowfish.c \
+  	buffer.c \
+  	charset.c \
++ 	crypt.c \
++ 	crypt_zip.c \
+  	diff.c \
+  	digraph.c \
+  	edit.c \
+***************
+*** 75,80 ****
+--- 77,84 ----
+  OBJ =	o/blowfish.o \
+  	o/buffer.o \
+  	o/charset.o \
++ 	o/crypt.o \
++ 	o/crypt_zip.o \
+  	o/diff.o \
+  	o/digraph.o \
+  	o/edit.o \
+***************
+*** 143,148 ****
+--- 147,156 ----
+  
+  o/charset.o:	charset.c  $(SYMS)
+  
++ o/crypt.o:	crypt.c  $(SYMS)
++ 
++ o/crypt_zip.o:	crypt_zip.c  $(SYMS)
++ 
+  o/diff.o:	diff.c	$(SYMS)
+  
+  o/digraph.o:	digraph.c  $(SYMS)
+*** ../vim-7.4.400/src/Make_djg.mak	2010-05-18 20:29:18.000000000 +0200
+--- src/Make_djg.mak	2014-08-10 16:22:13.084713340 +0200
+***************
+*** 22,27 ****
+--- 22,29 ----
+  	obj/blowfish.o \
+  	obj/buffer.o \
+  	obj/charset.o \
++ 	obj/crypt.o \
++ 	obj/crypt_zip.o \
+  	obj/diff.o \
+  	obj/digraph.o \
+  	obj/edit.o \
+*** ../vim-7.4.400/src/Make_ivc.mak	2013-02-26 14:18:19.000000000 +0100
+--- src/Make_ivc.mak	2014-08-10 16:22:46.268713102 +0200
+***************
+*** 213,218 ****
+--- 213,220 ----
+  	"$(INTDIR)/blowfish.obj" \
+  	"$(INTDIR)/buffer.obj" \
+  	"$(INTDIR)/charset.obj" \
++ 	"$(INTDIR)/crypt.obj" \
++ 	"$(INTDIR)/crypt_zip.obj" \
+  	"$(INTDIR)/diff.obj" \
+  	"$(INTDIR)/digraph.obj" \
+  	"$(INTDIR)/edit.obj" \
+***************
+*** 339,344 ****
+--- 341,354 ----
+  # End Source File
+  # Begin Source File
+  
++ SOURCE=.\crypt.c
++ # End Source File
++ # Begin Source File
++ 
++ SOURCE=.\crypt_zip.c
++ # End Source File
++ # Begin Source File
++ 
+  SOURCE=.\diff.c
+  # End Source File
+  # Begin Source File
+*** ../vim-7.4.400/src/Make_manx.mak	2010-05-18 20:30:54.000000000 +0200
+--- src/Make_manx.mak	2014-08-10 16:23:43.648712689 +0200
+***************
+*** 37,42 ****
+--- 37,44 ----
+  SRC =	blowfish.c \
+  	buffer.c \
+  	charset.c \
++ 	crypt.c \
++ 	crypt_zip.c \
+  	diff.c \
+  	digraph.c \
+  	edit.c \
+***************
+*** 85,90 ****
+--- 87,94 ----
+  OBJ =	obj/blowfish.o \
+  	obj/buffer.o \
+  	obj/charset.o \
++ 	obj/crypt.o \
++ 	obj/crypt_zip.o \
+  	obj/diff.o \
+  	obj/digraph.o \
+  	obj/edit.o \
+***************
+*** 131,136 ****
+--- 135,142 ----
+  PRO =	proto/blowfish.pro \
+  	proto/buffer.pro \
+  	proto/charset.pro \
++ 	proto/crypt.pro \
++ 	proto/crypt_zip.pro \
+  	proto/diff.pro \
+  	proto/digraph.pro \
+  	proto/edit.pro \
+***************
+*** 227,232 ****
+--- 233,244 ----
+  obj/charset.o:	charset.c
+  	$(CCSYM) $@ charset.c
+  
++ obj/crypt.o:	crypt.c
++ 	$(CCSYM) $@ crypt.c
++ 
++ obj/crypt_zip.o: crypt_zip.c
++ 	$(CCSYM) $@ crypt_zip.c
++ 
+  obj/diff.o:	diff.c
+  	$(CCSYM) $@ diff.c
+  
+*** ../vim-7.4.400/src/Make_ming.mak	2014-08-06 14:52:05.039236174 +0200
+--- src/Make_ming.mak	2014-08-10 16:24:07.064712521 +0200
+***************
+*** 517,522 ****
+--- 517,524 ----
+  	$(OUTDIR)/blowfish.o \
+  	$(OUTDIR)/buffer.o \
+  	$(OUTDIR)/charset.o \
++ 	$(OUTDIR)/crypt.o \
++ 	$(OUTDIR)/crypt_zip.o \
+  	$(OUTDIR)/diff.o \
+  	$(OUTDIR)/digraph.o \
+  	$(OUTDIR)/edit.o \
+*** ../vim-7.4.400/src/Make_morph.mak	2010-05-18 20:31:26.000000000 +0200
+--- src/Make_morph.mak	2014-08-10 16:24:39.900712285 +0200
+***************
+*** 27,32 ****
+--- 27,34 ----
+  SRC =	blowfish.c						\
+  	buffer.c						\
+  	charset.c						\
++ 	crypt.c							\
++ 	crypt_zip.c						\
+  	diff.c							\
+  	digraph.c						\
+  	edit.c							\
+*** ../vim-7.4.400/src/Make_mvc.mak	2014-08-06 14:52:05.039236174 +0200
+--- src/Make_mvc.mak	2014-08-10 16:25:19.752711999 +0200
+***************
+*** 547,552 ****
+--- 547,554 ----
+  	$(OUTDIR)\blowfish.obj \
+  	$(OUTDIR)\buffer.obj \
+  	$(OUTDIR)\charset.obj \
++ 	$(OUTDIR)\crypt.obj \
++ 	$(OUTDIR)\crypt_zip.obj \
+  	$(OUTDIR)\diff.obj \
+  	$(OUTDIR)\digraph.obj \
+  	$(OUTDIR)\edit.obj \
+***************
+*** 1092,1097 ****
+--- 1094,1103 ----
+  
+  $(OUTDIR)/charset.obj:	$(OUTDIR) charset.c  $(INCL)
+  
++ $(OUTDIR)/crypt.obj:	$(OUTDIR) crypt.c  $(INCL)
++ 
++ $(OUTDIR)/crypt_zip.obj: $(OUTDIR) crypt_zip.c  $(INCL)
++ 
+  $(OUTDIR)/diff.obj:	$(OUTDIR) diff.c  $(INCL)
+  
+  $(OUTDIR)/digraph.obj:	$(OUTDIR) digraph.c  $(INCL)
+***************
+*** 1278,1283 ****
+--- 1284,1291 ----
+  	proto/blowfish.pro \
+  	proto/buffer.pro \
+  	proto/charset.pro \
++ 	proto/crypt.pro \
++ 	proto/crypt_zip.pro \
+  	proto/diff.pro \
+  	proto/digraph.pro \
+  	proto/edit.pro \
+*** ../vim-7.4.400/src/Make_os2.mak	2010-05-18 20:32:32.000000000 +0200
+--- src/Make_os2.mak	2014-08-10 16:25:47.928711796 +0200
+***************
+*** 42,47 ****
+--- 42,49 ----
+  	blowfish.o \
+  	buffer.o \
+  	charset.o \
++ 	crypt.o \
++ 	crypt_zip.o \
+  	diff.o \
+  	digraph.o \
+  	edit.o \
+***************
+*** 117,122 ****
+--- 119,126 ----
+  blowfish.o:	blowfish.c  $(INCL)
+  buffer.o:	buffer.c  $(INCL)
+  charset.o:	charset.c  $(INCL)
++ crypt.o:	crypt.c  $(INCL)
++ crypt_zip.o:	crypt_zip.c  $(INCL)
+  diff.o:		diff.c  $(INCL)
+  digraph.o:	digraph.c  $(INCL)
+  edit.o:		edit.c  $(INCL)
+*** ../vim-7.4.400/src/Make_sas.mak	2013-05-06 04:06:04.000000000 +0200
+--- src/Make_sas.mak	2014-08-10 16:26:41.536711411 +0200
+***************
+*** 92,97 ****
+--- 92,99 ----
+  	blowfish.c \
+  	buffer.c \
+  	charset.c \
++ 	crypt.c \
++ 	crypt_zip.c \
+  	diff.c \
+  	digraph.c \
+  	edit.c \
+***************
+*** 139,144 ****
+--- 141,148 ----
+  	blowfish.o \
+  	buffer.o \
+  	charset.o \
++ 	crypt.o \
++ 	crypt_zip.o \
+  	diff.o \
+  	digraph.o \
+  	edit.o \
+***************
+*** 186,191 ****
+--- 190,197 ----
+  	proto/blowfish.pro \
+  	proto/buffer.pro \
+  	proto/charset.pro \
++ 	proto/crypt.pro \
++ 	proto/crypt_zip.pro \
+  	proto/diff.pro \
+  	proto/digraph.pro \
+  	proto/edit.pro \
+***************
+*** 290,295 ****
+--- 296,305 ----
+  proto/buffer.pro:	buffer.c
+  charset.o:		charset.c
+  proto/charset.pro:	charset.c
++ crypt.o:		crypt.c
++ proto/crypt.pro:	crypt.c
++ crypt_zip.o:		crypt_zip.c
++ proto/crypt_zip.pro:	crypt_zip.c
+  diff.o:			diff.c
+  proto/diff.pro:		diff.c
+  digraph.o:		digraph.c
+*** ../vim-7.4.400/src/version.c	2014-08-10 13:46:30.424780490 +0200
+--- src/version.c	2014-08-10 16:27:26.380711088 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     401,
+  /**/
+
+-- 
+When a fly lands on the ceiling, does it do a half roll or
+a half loop?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.402 b/SOURCES/7.4.402
new file mode 100644
index 0000000..6fa18af
--- /dev/null
+++ b/SOURCES/7.4.402
@@ -0,0 +1,103 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.402
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.402
+Problem:    Test 72 crashes under certain conditions. (Kazunobu Kuriyama)
+Solution:   Clear the whole bufinfo_T early.
+Files:	    src/undo.c
+
+
+*** ../vim-7.4.401/src/undo.c	2014-08-10 13:34:59.064785459 +0200
+--- src/undo.c	2014-08-12 20:08:23.915373819 +0200
+***************
+*** 929,935 ****
+  undo_flush(bi)
+      bufinfo_T	*bi;
+  {
+!     if (bi->bi_used > 0)
+      {
+  	crypt_encode_inplace(bi->bi_state, bi->bi_buffer, bi->bi_used);
+  	if (fwrite(bi->bi_buffer, bi->bi_used, (size_t)1, bi->bi_fp) != 1)
+--- 929,935 ----
+  undo_flush(bi)
+      bufinfo_T	*bi;
+  {
+!     if (bi->bi_buffer != NULL && bi->bi_used > 0)
+      {
+  	crypt_encode_inplace(bi->bi_state, bi->bi_buffer, bi->bi_used);
+  	if (fwrite(bi->bi_buffer, bi->bi_used, (size_t)1, bi->bi_fp) != 1)
+***************
+*** 1573,1582 ****
+  #endif
+      bufinfo_T	bi;
+  
+! #ifdef FEAT_CRYPT
+!     bi.bi_state = NULL;
+!     bi.bi_buffer = NULL;
+! #endif
+  
+      if (name == NULL)
+      {
+--- 1573,1579 ----
+  #endif
+      bufinfo_T	bi;
+  
+!     vim_memset(&bi, 0, sizeof(bi));
+  
+      if (name == NULL)
+      {
+***************
+*** 1861,1866 ****
+--- 1858,1864 ----
+  #endif
+      bufinfo_T	bi;
+  
++     vim_memset(&bi, 0, sizeof(bi));
+      if (name == NULL)
+      {
+  	file_name = u_get_undo_file_name(curbuf->b_ffname, TRUE);
+***************
+*** 1905,1914 ****
+      }
+      bi.bi_buf = curbuf;
+      bi.bi_fp = fp;
+- #ifdef FEAT_CRYPT
+-     bi.bi_state = NULL;
+-     bi.bi_buffer = NULL;
+- #endif
+  
+      /*
+       * Read the undo file header.
+--- 1903,1908 ----
+*** ../vim-7.4.401/src/version.c	2014-08-10 16:31:47.376709213 +0200
+--- src/version.c	2014-08-12 20:11:13.879372598 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     402,
+  /**/
+
+-- 
+Far back in the mists of ancient time, in the great and glorious days of the
+former Galactic Empire, life was wild, rich and largely tax free.
+Mighty starships plied their way between exotic suns, seeking adventure and
+reward among the furthest reaches of Galactic space.  In those days, spirits
+were brave, the stakes were high, men were real men, women were real women
+and small furry creatures from Alpha Centauri were real small furry creatures
+from Alpha Centauri.  And all dared to brave unknown terrors, to do mighty
+deeds, to boldly split infinitives that no man had split before -- and thus
+was the Empire forged.
+		-- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.403 b/SOURCES/7.4.403
new file mode 100644
index 0000000..426f56b
--- /dev/null
+++ b/SOURCES/7.4.403
@@ -0,0 +1,135 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.403
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.403
+Problem:    Valgrind reports errors when running test 72. (Dominique Pelle)
+Solution:   Reset the local 'cryptmethod' option before storing the seed.
+	    Set the seed in the memfile even when there is no block0 yet.
+Files:	    src/fileio.c, src/option.c, src/memline.c
+
+
+*** ../vim-7.4.402/src/fileio.c	2014-08-10 13:34:59.056785459 +0200
+--- src/fileio.c	2014-08-13 21:27:51.452857400 +0200
+***************
+*** 2944,2949 ****
+--- 2944,2950 ----
+  	 * Avoids accidentally overwriting the file with garbage. */
+  	curbuf->b_p_ro = TRUE;
+  
++ 	/* Set the cryptmethod local to the buffer. */
+  	crypt_set_cm_option(curbuf, method);
+  	if (cryptkey == NULL && !*did_ask)
+  	{
+*** ../vim-7.4.402/src/option.c	2014-08-10 13:34:59.060785459 +0200
+--- src/option.c	2014-08-13 21:48:49.924876683 +0200
+***************
+*** 6163,6168 ****
+--- 6163,6176 ----
+  		p_cm = vim_strsave((char_u *)"zip");
+  		new_value_alloced = TRUE;
+  	    }
++ 	    /* When using ":set cm=name" the local value is going to be empty.
++ 	     * Do that here, otherwise the crypt functions will still use the
++ 	     * local value. */
++ 	    if ((opt_flags & (OPT_LOCAL | OPT_GLOBAL)) == 0)
++ 	    {
++ 		free_string_option(curbuf->b_p_cm);
++ 		curbuf->b_p_cm = empty_option;
++ 	    }
+  
+  	    /* Need to update the swapfile when the effective method changed.
+  	     * Set "s" to the effective old value, "p" to the effective new
+*** ../vim-7.4.402/src/memline.c	2014-08-10 13:34:59.060785459 +0200
+--- src/memline.c	2014-08-13 21:52:40.076880210 +0200
+***************
+*** 235,240 ****
+--- 235,241 ----
+  } upd_block0_T;
+  
+  #ifdef FEAT_CRYPT
++ static void ml_set_mfp_crypt __ARGS((buf_T *buf));
+  static void ml_set_b0_crypt __ARGS((buf_T *buf, ZERO_BL *b0p));
+  #endif
+  static int ml_check_b0_id __ARGS((ZERO_BL *b0p));
+***************
+*** 433,438 ****
+--- 434,458 ----
+  
+  #if defined(FEAT_CRYPT) || defined(PROTO)
+  /*
++  * Prepare encryption for "buf" for the current key and method.
++  */
++     static void
++ ml_set_mfp_crypt(buf)
++     buf_T	*buf;
++ {
++     if (*buf->b_p_key != NUL)
++     {
++ 	int method_nr = crypt_get_method_nr(buf);
++ 
++ 	if (method_nr > CRYPT_M_ZIP)
++ 	{
++ 	    /* Generate a seed and store it in the memfile. */
++ 	    sha2_seed(buf->b_ml.ml_mfp->mf_seed, MF_SEED_LEN, NULL, 0);
++ 	}
++     }
++ }
++ 
++ /*
+   * Prepare encryption for "buf" with block 0 "b0p".
+   */
+      static void
+***************
+*** 915,922 ****
+      ZERO_BL	*b0p;
+  
+      mfp = buf->b_ml.ml_mfp;
+!     if (mfp == NULL || (hp = mf_get(mfp, (blocknr_T)0, 1)) == NULL)
+  	return;
+      b0p = (ZERO_BL *)(hp->bh_data);
+      if (ml_check_b0_id(b0p) == FAIL)
+  	EMSG(_("E304: ml_upd_block0(): Didn't get block 0??"));
+--- 935,953 ----
+      ZERO_BL	*b0p;
+  
+      mfp = buf->b_ml.ml_mfp;
+!     if (mfp == NULL)
+! 	return;
+!     hp = mf_get(mfp, (blocknr_T)0, 1);
+!     if (hp == NULL)
+!     {
+! #ifdef FEAT_CRYPT
+! 	/* Possibly update the seed in the memfile before there is a block0. */
+! 	if (what == UB_CRYPT)
+! 	    ml_set_mfp_crypt(buf);
+! #endif
+  	return;
++     }
++ 
+      b0p = (ZERO_BL *)(hp->bh_data);
+      if (ml_check_b0_id(b0p) == FAIL)
+  	EMSG(_("E304: ml_upd_block0(): Didn't get block 0??"));
+*** ../vim-7.4.402/src/version.c	2014-08-12 20:14:28.795371197 +0200
+--- src/version.c	2014-08-13 17:23:02.964632329 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     403,
+  /**/
+
+-- 
+How To Keep A Healthy Level Of Insanity:
+9. As often as possible, skip rather than walk.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.404 b/SOURCES/7.4.404
new file mode 100644
index 0000000..d10dfd3
--- /dev/null
+++ b/SOURCES/7.4.404
@@ -0,0 +1,117 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.404
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.404
+Problem:    Windows 64 bit compiler warnings.
+Solution:   Add type casts. (Mike Williams)
+Files:	    src/crypt.c, src/undo.c
+
+
+*** ../vim-7.4.403/src/crypt.c	2014-08-10 13:34:59.052785459 +0200
+--- src/crypt.c	2014-08-13 22:02:15.756889031 +0200
+***************
+*** 397,409 ****
+  	return method->encode_buffer_fn(state, from, len, newptr);
+      if (len == 0)
+  	/* Not buffering, just return EOF. */
+! 	return len;
+  
+!     *newptr = alloc(len);
+      if (*newptr == NULL)
+  	return -1;
+      method->encode_fn(state, from, len, *newptr);
+!     return len;
+  }
+  
+  /*
+--- 397,409 ----
+  	return method->encode_buffer_fn(state, from, len, newptr);
+      if (len == 0)
+  	/* Not buffering, just return EOF. */
+! 	return (long)len;
+  
+!     *newptr = alloc((long)len);
+      if (*newptr == NULL)
+  	return -1;
+      method->encode_fn(state, from, len, *newptr);
+!     return (long)len;
+  }
+  
+  /*
+*** ../vim-7.4.403/src/undo.c	2014-08-12 20:14:28.791371197 +0200
+--- src/undo.c	2014-08-13 22:02:15.760889031 +0200
+***************
+*** 992,998 ****
+      int	    bufi = 0;
+  
+      for (i = len - 1; i >= 0; --i)
+! 	buf[bufi++] = nr >> (i * 8);
+      return undo_write(bi, buf, (size_t)len);
+  }
+  
+--- 992,998 ----
+      int	    bufi = 0;
+  
+      for (i = len - 1; i >= 0; --i)
+! 	buf[bufi++] = (char_u)(nr >> (i * 8));
+      return undo_write(bi, buf, (size_t)len);
+  }
+  
+***************
+*** 1093,1099 ****
+  #ifdef FEAT_CRYPT
+      if (bi->bi_buffer != NULL)
+      {
+! 	int	size_todo = size;
+  	char_u	*p = buffer;
+  
+  	while (size_todo > 0)
+--- 1093,1099 ----
+  #ifdef FEAT_CRYPT
+      if (bi->bi_buffer != NULL)
+      {
+! 	int	size_todo = (int)size;
+  	char_u	*p = buffer;
+  
+  	while (size_todo > 0)
+***************
+*** 1119,1125 ****
+  		n = bi->bi_avail - bi->bi_used;
+  	    mch_memmove(p, bi->bi_buffer + bi->bi_used, n);
+  	    bi->bi_used += n;
+! 	    size_todo -= n;
+  	    p += n;
+  	}
+  	return OK;
+--- 1119,1125 ----
+  		n = bi->bi_avail - bi->bi_used;
+  	    mch_memmove(p, bi->bi_buffer + bi->bi_used, n);
+  	    bi->bi_used += n;
+! 	    size_todo -= (int)n;
+  	    p += n;
+  	}
+  	return OK;
+*** ../vim-7.4.403/src/version.c	2014-08-13 21:58:24.824885492 +0200
+--- src/version.c	2014-08-13 22:02:35.812889338 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     404,
+  /**/
+
+-- 
+How To Keep A Healthy Level Of Insanity:
+10. Ask people what sex they are. Laugh hysterically after they answer.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.405 b/SOURCES/7.4.405
new file mode 100644
index 0000000..6b39d14
--- /dev/null
+++ b/SOURCES/7.4.405
@@ -0,0 +1,116 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.405
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.405
+Problem:    Screen updating is slow when using matches.
+Solution:   Do not use the ">=" as in patch 7.4.362, check the lnum.
+Files:	    src/screen.c, src/testdir/test63.in, src/testdir/test63.ok
+
+
+*** ../vim-7.4.404/src/screen.c	2014-08-06 13:20:51.799275513 +0200
+--- src/screen.c	2014-08-16 16:23:31.486282950 +0200
+***************
+*** 3858,3864 ****
+  			{
+  			    shl->attr_cur = shl->attr;
+  			}
+! 			else if (v >= (long)shl->endcol)
+  			{
+  			    shl->attr_cur = 0;
+  			    next_search_hl(wp, shl, lnum, (colnr_T)v, cur);
+--- 3858,3864 ----
+  			{
+  			    shl->attr_cur = shl->attr;
+  			}
+! 			else if (v >= (long)shl->endcol && shl->lnum == lnum)
+  			{
+  			    shl->attr_cur = 0;
+  			    next_search_hl(wp, shl, lnum, (colnr_T)v, cur);
+*** ../vim-7.4.404/src/testdir/test63.in	2014-07-23 13:16:26.727971292 +0200
+--- src/testdir/test63.in	2014-08-16 16:00:58.618332015 +0200
+***************
+*** 3,8 ****
+--- 3,9 ----
+  
+  STARTTEST
+  :so small.vim
++ :set encoding=utf8
+  :" --- Check that "matcharg()" returns the correct group and pattern if a match
+  :" --- is defined.
+  :let @r = "*** Test 1: "
+***************
+*** 164,170 ****
+  :if v1 != v5 && v6 == v1 && v8 == v5 && v10 == v5 && v11 == v1
+  :  let @r .= "OK\n"
+  :else
+! :  let @r .= "FAILED\n"
+  :endif
+  :call clearmatches()
+  G"rp
+--- 165,191 ----
+  :if v1 != v5 && v6 == v1 && v8 == v5 && v10 == v5 && v11 == v1
+  :  let @r .= "OK\n"
+  :else
+! :  let @r .= "FAILED: " . v5 . "/" . v6 . "/" . v8 . "/" . v10 . "/" . v11 . "\n"
+! :endif
+! :call clearmatches()
+! :"
+! :call setline(1, 'abcdΣabcdef')
+! :call matchaddpos("MyGroup1", [[1, 4, 2], [1, 9, 2]])
+! :1
+! :redraw!
+! :let v1 = screenattr(1, 1)
+! :let v4 = screenattr(1, 4)
+! :let v5 = screenattr(1, 5)
+! :let v6 = screenattr(1, 6)
+! :let v7 = screenattr(1, 7)
+! :let v8 = screenattr(1, 8)
+! :let v9 = screenattr(1, 9)
+! :let v10 = screenattr(1, 10)
+! :let @r .= string(getmatches())."\n"
+! :if v1 != v4 && v5 == v4 && v6 == v1 && v7 == v1 && v8 == v4 && v9 == v4 && v10 == v1
+! :  let @r .= "OK\n"
+! :else
+! :  let @r .= "FAILED: " . v4 . "/" . v5 . "/" . v6 . "/" . v7 . "/" . v8 . "/" . v9 . "/" . v10 . "\n"
+  :endif
+  :call clearmatches()
+  G"rp
+*** ../vim-7.4.404/src/testdir/test63.ok	2014-06-17 17:48:21.784628008 +0200
+--- src/testdir/test63.ok	2014-08-16 16:00:19.602333430 +0200
+***************
+*** 12,14 ****
+--- 12,16 ----
+  *** Test 11:
+  [{'group': 'MyGroup1', 'id': 3, 'priority': 10, 'pos1': [1, 5, 1], 'pos2': [1, 8, 3]}]
+  OK
++ [{'group': 'MyGroup1', 'id': 11, 'priority': 10, 'pos1': [1, 4, 2], 'pos2': [1, 9, 2]}]
++ OK
+*** ../vim-7.4.404/src/version.c	2014-08-13 22:05:49.032892299 +0200
+--- src/version.c	2014-08-16 16:28:18.442272543 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     405,
+  /**/
+
+-- 
+This planet has -- or rather had -- a problem, which was this: most
+of the people living on it were unhappy for pretty much of the time.
+Many solutions were suggested for this problem, but most of these
+were largely concerned with the movements of small green pieces of
+paper, which is odd because on the whole it wasn't the small green
+pieces of paper that were unhappy.
+		-- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.406 b/SOURCES/7.4.406
new file mode 100644
index 0000000..875f7c6
--- /dev/null
+++ b/SOURCES/7.4.406
@@ -0,0 +1,78 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.406
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.406
+Problem:    Test 72 and 100 fail on MS-Windows.
+Solution:   Set fileformat to unix in the tests. (Taro Muraoka)
+Files:	    src/testdir/test72.in, src/testdir/test100.in
+
+
+*** ../vim-7.4.405/src/testdir/test72.in	2014-08-10 13:34:59.064785459 +0200
+--- src/testdir/test72.in	2014-08-16 17:31:40.426134656 +0200
+***************
+*** 8,13 ****
+--- 8,14 ----
+  :" Test 'undofile': first a simple one-line change.
+  :set nocompatible viminfo+=nviminfo visualbell
+  :set ul=100 undofile nomore
++ :set ff=unix
+  :e! Xtestfile
+  ggdGithis is one line:set ul=100
+  :s/one/ONE/
+*** ../vim-7.4.405/src/testdir/test100.in	2014-03-12 18:55:52.104906804 +0100
+--- src/testdir/test100.in	2014-08-16 17:32:17.642133306 +0200
+***************
+*** 18,23 ****
+--- 18,24 ----
+  :call FillBuffer()
+  :call feedkeys(":earlier 10\n", 't')
+  :call UndoLevel()
++ :set ff=unix
+  :%w! test.out
+  :new two
+  :0put ='TWO: expecting global undolevels: 5, local undolevels: 2 (first) then 10 (afterwards)'
+***************
+*** 27,32 ****
+--- 28,34 ----
+  :call UndoLevel()
+  :setlocal ul=10
+  :call UndoLevel()
++ :set ff=unix
+  :%w >> test.out
+  :wincmd p
+  :redir >>test.out | echo "global value shouldn't be changed and still be 5!" | echo 'ONE: expecting global undolevels: 5, local undolevels: -123456 (default)'|:setglobal undolevels? | echon ' global' | setlocal undolevels? | echon ' local' |echo "" |redir end
+***************
+*** 35,40 ****
+--- 37,43 ----
+  :1put ='global value should be changed to 50'
+  :2put ='THREE: expecting global undolevels: 50, local undolevels: -123456 (default)'
+  :call UndoLevel()
++ :set ff=unix
+  :%w >> test.out
+  :"sleep 10
+  :"
+*** ../vim-7.4.405/src/version.c	2014-08-16 16:28:31.886272055 +0200
+--- src/version.c	2014-08-16 17:32:10.130133579 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     406,
+  /**/
+
+-- 
+Time is an illusion.  Lunchtime doubly so.
+		-- Ford Prefect, in Douglas Adams'
+		   "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.407 b/SOURCES/7.4.407
new file mode 100644
index 0000000..a204e52
--- /dev/null
+++ b/SOURCES/7.4.407
@@ -0,0 +1,116 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.407
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.407
+Problem:    Inserting text for Visual block mode, with cursor movement,
+	    repeats the wrong text. (Aleksandar Ivanov)
+Solution:   Reset the update_Insstart_orig flag. (Christian Brabandt)
+Files:	    src/edit.c, src/testdir/test39.in, src/testdir/test39.ok
+
+
+*** ../vim-7.4.406/src/edit.c	2014-07-30 16:00:45.543553496 +0200
+--- src/edit.c	2014-08-16 18:10:10.914050861 +0200
+***************
+*** 6768,6780 ****
+  {
+      if (arrow_used)
+      {
+  	if (u_save_cursor() == OK)
+  	{
+  	    arrow_used = FALSE;
+  	    ins_need_undo = FALSE;
+  	}
+! 	Insstart = curwin->w_cursor;	/* new insertion starts here */
+! 	Insstart_textlen = (colnr_T)linetabsize(ml_get_curline());
+  	ai_col = 0;
+  #ifdef FEAT_VREPLACE
+  	if (State & VREPLACE_FLAG)
+--- 6768,6786 ----
+  {
+      if (arrow_used)
+      {
++ 	Insstart = curwin->w_cursor;	/* new insertion starts here */
++ 	if (Insstart.col > Insstart_orig.col && !ins_need_undo)
++ 	    /* Don't update the original insert position when moved to the
++ 	     * right, except when nothing was inserted yet. */
++ 	    update_Insstart_orig = FALSE;
++ 	Insstart_textlen = (colnr_T)linetabsize(ml_get_curline());
++ 
+  	if (u_save_cursor() == OK)
+  	{
+  	    arrow_used = FALSE;
+  	    ins_need_undo = FALSE;
+  	}
+! 
+  	ai_col = 0;
+  #ifdef FEAT_VREPLACE
+  	if (State & VREPLACE_FLAG)
+*** ../vim-7.4.406/src/testdir/test39.in	2014-03-19 18:57:27.730175565 +0100
+--- src/testdir/test39.in	2014-08-16 17:52:23.078089588 +0200
+***************
+*** 23,28 ****
+--- 23,31 ----
+  /^aaaa/
+  :exe ":norm! l\<C-V>jjjlllI\<Right>\<Right>  \<Esc>"
+  :/^aa/,/^$/w >> test.out
++ /xaaa$/
++ :exe ":norm! \<C-V>jjjI<>\<Left>p\<Esc>"
++ :/xaaa$/,/^$/w >> test.out
+  :" Test for Visual block was created with the last <C-v>$
+  /^A23$/
+  :exe ":norm! l\<C-V>j$Aab\<Esc>"
+***************
+*** 77,82 ****
+--- 80,90 ----
+  cccccc
+  dddddd
+  
++ xaaa
++ bbbb
++ cccc
++ dddd
++ 
+  A23
+  4567
+  
+*** ../vim-7.4.406/src/testdir/test39.ok	2014-03-19 18:57:27.730175565 +0100
+--- src/testdir/test39.ok	2014-08-16 17:50:57.330092698 +0200
+***************
+*** 8,13 ****
+--- 8,18 ----
+  ccc  ccc
+  ddd  ddd
+  
++ <p>xaaa
++ <p>bbbb
++ <p>cccc
++ <p>dddd
++ 
+  A23ab
+  4567ab
+  
+*** ../vim-7.4.406/src/version.c	2014-08-16 17:34:31.186128463 +0200
+--- src/version.c	2014-08-16 17:38:30.546119782 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     407,
+  /**/
+
+-- 
+'Well, here's something to occupy you and keep your mind off things.'
+'It won't work, I have an exceptionally large mind.'
+		-- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.408 b/SOURCES/7.4.408
new file mode 100644
index 0000000..6a5192c
--- /dev/null
+++ b/SOURCES/7.4.408
@@ -0,0 +1,334 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.408
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.408
+Problem:    Visual block insert breaks a multi-byte character.
+Solution:   Calculate the position properly. (Yasuhiro Matsumoto)
+Files:	    src/ops.c, src/testdir/test_utf8.in, src/testdir/test_utf8.ok,
+	    src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
+	    src/testdir/Make_ming.mak, src/testdir/Make_os2.mak,
+	    src/testdir/Make_vms.mms, src/testdir/Makefile
+
+
+*** ../vim-7.4.407/src/ops.c	2014-08-06 18:17:03.475147780 +0200
+--- src/ops.c	2014-08-16 18:33:34.625999952 +0200
+***************
+*** 609,614 ****
+--- 609,634 ----
+  	    }
+  	}
+  
++ #ifdef FEAT_MBYTE
++ 	if (has_mbyte && spaces > 0)
++ 	{
++ 	    /* Avoid starting halfway a multi-byte character. */
++ 	    if (b_insert)
++ 	    {
++ 		int off = (*mb_head_off)(oldp, oldp + offset + spaces);
++ 		spaces -= off;
++ 		count -= off;
++ 	    }
++ 	    else
++ 	    {
++ 		int off = (*mb_off_next)(oldp, oldp + offset);
++ 		offset += off;
++ 		spaces = 0;
++ 		count = 0;
++ 	    }
++ 	}
++ #endif
++ 
+  	newp = alloc_check((unsigned)(STRLEN(oldp)) + s_len + count + 1);
+  	if (newp == NULL)
+  	    continue;
+*** ../vim-7.4.407/src/testdir/test_utf8.in	2014-08-16 18:35:44.853995229 +0200
+--- src/testdir/test_utf8.in	2014-08-16 18:25:02.310018533 +0200
+***************
+*** 0 ****
+--- 1,18 ----
++ Tests for Unicode manipulations                vim: set ft=vim :
++  
++ STARTTEST
++ :so small.vim
++ :set encoding=utf-8
++ :" Visual block Insert adjusts for multi-byte char
++ :new
++ :call setline(1, ["aaa", "あああ", "bbb"])
++ :exe ":norm! gg0l\<C-V>jjIx\<Esc>"
++ :let r = getline(1, '$')
++ :
++ :bwipeout!
++ :$put=r
++ :call garbagecollect(1)
++ :/^start:/,$wq! test.out
++ ENDTEST
++  
++ start:
+*** ../vim-7.4.407/src/testdir/test_utf8.ok	2014-08-16 18:35:44.857995229 +0200
+--- src/testdir/test_utf8.ok	2014-08-16 18:25:35.354017334 +0200
+***************
+*** 0 ****
+--- 1,4 ----
++ start:
++ axaa
++ xあああ
++ bxbb
+*** ../vim-7.4.407/src/testdir/Make_amiga.mak	2014-07-30 16:00:45.547553496 +0200
+--- src/testdir/Make_amiga.mak	2014-08-16 18:28:17.694011447 +0200
+***************
+*** 38,50 ****
+  		test104.out test105.out test106.out test107.out \
+  		test_autoformat_join.out \
+  		test_breakindent.out \
+- 		test_listlbr.out \
+- 		test_listlbr_utf8.out \
+- 		test_qf_title.out \
+  		test_changelist.out \
+  		test_eval.out \
+  		test_insertcount.out \
+! 		test_options.out
+  
+  .SUFFIXES: .in .out
+  
+--- 38,51 ----
+  		test104.out test105.out test106.out test107.out \
+  		test_autoformat_join.out \
+  		test_breakindent.out \
+  		test_changelist.out \
+  		test_eval.out \
+  		test_insertcount.out \
+! 		test_listlbr.out \
+! 		test_listlbr_utf8.out \
+! 		test_options.out \
+! 		test_qf_title.out \
+! 		test_utf8.out
+  
+  .SUFFIXES: .in .out
+  
+***************
+*** 170,179 ****
+  test107.out: test107.in
+  test_autoformat_join.out: test_autoformat_join.in
+  test_breakindent.out: test_breakindent.in
+- test_listlbr.out: test_listlbr.in
+- test_listlbr_utf8.out: test_listlbr_utf8.in
+- test_qf_title.out: test_qf_title.in
+  test_changelist.out: test_changelist.in
+  test_eval.out: test_eval.in
+  test_insertcount.out: test_insertcount.in
+  test_options.out: test_options.in
+--- 171,181 ----
+  test107.out: test107.in
+  test_autoformat_join.out: test_autoformat_join.in
+  test_breakindent.out: test_breakindent.in
+  test_changelist.out: test_changelist.in
+  test_eval.out: test_eval.in
+  test_insertcount.out: test_insertcount.in
++ test_listlbr.out: test_listlbr.in
++ test_listlbr_utf8.out: test_listlbr_utf8.in
+  test_options.out: test_options.in
++ test_qf_title.out: test_qf_title.in
++ test_utf8.out: test_utf8.in
+*** ../vim-7.4.407/src/testdir/Make_dos.mak	2014-07-30 16:00:45.547553496 +0200
+--- src/testdir/Make_dos.mak	2014-08-16 18:28:37.122010742 +0200
+***************
+*** 37,49 ****
+  		test105.out test106.out  test107.out\
+  		test_autoformat_join.out \
+  		test_breakindent.out \
+- 		test_listlbr.out \
+- 		test_listlbr_utf8.out \
+- 		test_qf_title.out \
+  		test_changelist.out \
+  		test_eval.out \
+  		test_insertcount.out \
+! 		test_options.out
+  
+  SCRIPTS32 =	test50.out test70.out
+  
+--- 37,50 ----
+  		test105.out test106.out  test107.out\
+  		test_autoformat_join.out \
+  		test_breakindent.out \
+  		test_changelist.out \
+  		test_eval.out \
+  		test_insertcount.out \
+! 		test_listlbr.out \
+! 		test_listlbr_utf8.out \
+! 		test_options.out \
+! 		test_qf_title.out \
+! 		test_utf8.out
+  
+  SCRIPTS32 =	test50.out test70.out
+  
+*** ../vim-7.4.407/src/testdir/Make_ming.mak	2014-07-30 16:00:45.547553496 +0200
+--- src/testdir/Make_ming.mak	2014-08-16 18:28:56.438010041 +0200
+***************
+*** 57,69 ****
+  		test105.out test106.out test107.out \
+  		test_autoformat_join.out \
+  		test_breakindent.out \
+- 		test_listlbr.out \
+- 		test_listlbr_utf8.out \
+- 		test_qf_title.out \
+  		test_changelist.out \
+  		test_eval.out \
+  		test_insertcount.out \
+! 		test_options.out
+  
+  SCRIPTS32 =	test50.out test70.out
+  
+--- 57,70 ----
+  		test105.out test106.out test107.out \
+  		test_autoformat_join.out \
+  		test_breakindent.out \
+  		test_changelist.out \
+  		test_eval.out \
+  		test_insertcount.out \
+! 		test_listlbr.out \
+! 		test_listlbr_utf8.out \
+! 		test_options.out \
+! 		test_qf_title.out \
+! 		test_utf8.out
+  
+  SCRIPTS32 =	test50.out test70.out
+  
+*** ../vim-7.4.407/src/testdir/Make_os2.mak	2014-07-30 16:00:45.547553496 +0200
+--- src/testdir/Make_os2.mak	2014-08-16 18:29:26.962008934 +0200
+***************
+*** 38,51 ****
+  		test100.out test101.out test102.out test103.out test104.out \
+  		test105.out test106.out test107.out \
+  		test_autoformat_join.out \
+  		test_changelist.out \
+  		test_eval.out \
+  		test_insertcount.out \
+- 		test_breakindent.out \
+  		test_listlbr.out \
+  		test_listlbr_utf8.out \
+  		test_qf_title.out \
+! 		test_options.out
+  
+  .SUFFIXES: .in .out
+  
+--- 38,52 ----
+  		test100.out test101.out test102.out test103.out test104.out \
+  		test105.out test106.out test107.out \
+  		test_autoformat_join.out \
++ 		test_breakindent.out \
+  		test_changelist.out \
+  		test_eval.out \
+  		test_insertcount.out \
+  		test_listlbr.out \
+  		test_listlbr_utf8.out \
++ 		test_options.out \
+  		test_qf_title.out \
+! 		test_utf8.out
+  
+  .SUFFIXES: .in .out
+  
+*** ../vim-7.4.407/src/testdir/Make_vms.mms	2014-07-30 16:00:45.547553496 +0200
+--- src/testdir/Make_vms.mms	2014-08-16 18:29:42.702008364 +0200
+***************
+*** 4,10 ****
+  # Authors:	Zoltan Arpadffy, <arpadffy@polarhome.com>
+  #		Sandor Kopanyi,  <sandor.kopanyi@mailbox.hu>
+  #
+! # Last change:  2014 Jul 30
+  #
+  # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+  # Edit the lines in the Configuration section below to select.
+--- 4,10 ----
+  # Authors:	Zoltan Arpadffy, <arpadffy@polarhome.com>
+  #		Sandor Kopanyi,  <sandor.kopanyi@mailbox.hu>
+  #
+! # Last change:  2014 Aug 16
+  #
+  # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+  # Edit the lines in the Configuration section below to select.
+***************
+*** 98,110 ****
+  	 test105.out test106.out test107.out \
+  	 test_autoformat_join.out \
+  	 test_breakindent.out \
+- 	 test_listlbr.out \
+- 	 test_listlbr_utf8.out \
+- 	 test_qf_title.out \
+  	 test_changelist.out \
+  	 test_eval.out \
+  	 test_insertcount.out \
+! 	 test_options.out
+  
+  # Known problems:
+  # test17: ?
+--- 98,111 ----
+  	 test105.out test106.out test107.out \
+  	 test_autoformat_join.out \
+  	 test_breakindent.out \
+  	 test_changelist.out \
+  	 test_eval.out \
+  	 test_insertcount.out \
+! 	 test_listlbr.out \
+! 	 test_listlbr_utf8.out \
+! 	 test_options.out \
+! 	 test_qf_title.out \
+! 	 test_utf8.out
+  
+  # Known problems:
+  # test17: ?
+*** ../vim-7.4.407/src/testdir/Makefile	2014-07-30 16:00:45.547553496 +0200
+--- src/testdir/Makefile	2014-08-16 18:30:13.254007256 +0200
+***************
+*** 35,47 ****
+  		test104.out test105.out test106.out test107.out \
+  		test_autoformat_join.out \
+  		test_breakindent.out \
+- 		test_listlbr.out \
+- 		test_listlbr_utf8.out \
+- 		test_qf_title.out \
+  		test_changelist.out \
+  		test_eval.out \
+  		test_insertcount.out \
+! 		test_options.out
+  
+  SCRIPTS_GUI = test16.out
+  
+--- 35,48 ----
+  		test104.out test105.out test106.out test107.out \
+  		test_autoformat_join.out \
+  		test_breakindent.out \
+  		test_changelist.out \
+  		test_eval.out \
+  		test_insertcount.out \
+! 		test_listlbr.out \
+! 		test_listlbr_utf8.out \
+! 		test_options.out \
+! 		test_qf_title.out \
+! 		test_utf8.out
+  
+  SCRIPTS_GUI = test16.out
+  
+*** ../vim-7.4.407/src/version.c	2014-08-16 18:13:00.082044726 +0200
+--- src/version.c	2014-08-16 18:35:52.937994936 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     408,
+  /**/
+
+-- 
+What a wonderfully exciting cough!  Do you mind if I join you?
+		-- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.409 b/SOURCES/7.4.409
new file mode 100644
index 0000000..f75dcce
--- /dev/null
+++ b/SOURCES/7.4.409
@@ -0,0 +1,129 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.409
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.409
+Problem:    Can't build with Perl on Fedora 20.
+Solution:   Find xsubpp in another directory. (Michael Henry)
+Files:	    src/Makefile, src/config.mk.in, src/configure.in,
+	    src/auto/configure
+
+
+*** ../vim-7.4.408/src/Makefile	2014-08-10 13:34:59.052785459 +0200
+--- src/Makefile	2014-08-17 16:59:03.527072144 +0200
+***************
+*** 2477,2483 ****
+  
+  auto/if_perl.c: if_perl.xs
+  	$(PERL) -e 'unless ( $$] >= 5.005 ) { for (qw(na defgv errgv)) { print "#define PL_$$_ $$_\n" }}' > $@
+! 	$(PERL) $(PERLLIB)/ExtUtils/xsubpp -prototypes -typemap \
+  	    $(PERLLIB)/ExtUtils/typemap if_perl.xs >> $@
+  
+  auto/osdef.h: auto/config.h osdef.sh osdef1.h.in osdef2.h.in
+--- 2478,2484 ----
+  
+  auto/if_perl.c: if_perl.xs
+  	$(PERL) -e 'unless ( $$] >= 5.005 ) { for (qw(na defgv errgv)) { print "#define PL_$$_ $$_\n" }}' > $@
+! 	$(PERL) $(PERL_XSUBPP) -prototypes -typemap \
+  	    $(PERLLIB)/ExtUtils/typemap if_perl.xs >> $@
+  
+  auto/osdef.h: auto/config.h osdef.sh osdef1.h.in osdef2.h.in
+*** ../vim-7.4.408/src/config.mk.in	2014-06-12 18:03:24.936319000 +0200
+--- src/config.mk.in	2014-08-17 16:56:28.371077771 +0200
+***************
+*** 48,58 ****
+  MZSCHEME_OBJ	= @MZSCHEME_OBJ@
+  MZSCHEME_CFLAGS	= @MZSCHEME_CFLAGS@
+  MZSCHEME_PRO	= @MZSCHEME_PRO@
+! MZSCHEME_EXTRA  = @MZSCHEME_EXTRA@
+  MZSCHEME_MZC	= @MZSCHEME_MZC@
+  
+  PERL		= @vi_cv_path_perl@
+  PERLLIB		= @vi_cv_perllib@
+  PERL_LIBS	= @PERL_LIBS@
+  SHRPENV		= @shrpenv@
+  PERL_SRC	= @PERL_SRC@
+--- 48,59 ----
+  MZSCHEME_OBJ	= @MZSCHEME_OBJ@
+  MZSCHEME_CFLAGS	= @MZSCHEME_CFLAGS@
+  MZSCHEME_PRO	= @MZSCHEME_PRO@
+! MZSCHEME_EXTRA	= @MZSCHEME_EXTRA@
+  MZSCHEME_MZC	= @MZSCHEME_MZC@
+  
+  PERL		= @vi_cv_path_perl@
+  PERLLIB		= @vi_cv_perllib@
++ PERL_XSUBPP	= @vi_cv_perl_xsubpp@
+  PERL_LIBS	= @PERL_LIBS@
+  SHRPENV		= @shrpenv@
+  PERL_SRC	= @PERL_SRC@
+*** ../vim-7.4.408/src/configure.in	2014-07-30 13:22:48.263621613 +0200
+--- src/configure.in	2014-08-17 16:57:11.183076219 +0200
+***************
+*** 933,938 ****
+--- 933,946 ----
+        fi
+        vi_cv_perllib=`$vi_cv_path_perl -MConfig -e 'print $Config{privlibexp}'`
+        AC_SUBST(vi_cv_perllib)
++       vi_cv_perl_extutils=unknown_perl_extutils_path
++       for extutils_rel_path in ExtUtils vendor_perl/ExtUtils; do
++ 	xsubpp_path="$vi_cv_perllib/$extutils_rel_path/xsubpp"
++ 	if test -f "$xsubpp_path"; then
++ 	  vi_cv_perl_xsubpp="$xsubpp_path"
++ 	fi
++       done
++       AC_SUBST(vi_cv_perl_xsubpp)
+        dnl Remove "-fno-something", it breaks using cproto.
+        perlcppflags=`$vi_cv_path_perl -Mlib=$srcdir -MExtUtils::Embed \
+  	      -e 'ccflags;perl_inc;print"\n"' | sed -e 's/-fno[[^ ]]*//'`
+*** ../vim-7.4.408/src/auto/configure	2014-07-30 13:22:48.267621613 +0200
+--- src/auto/configure	2014-08-17 16:58:43.047072887 +0200
+***************
+*** 687,692 ****
+--- 687,693 ----
+  PERL_OBJ
+  PERL_SRC
+  shrpenv
++ vi_cv_perl_xsubpp
+  vi_cv_perllib
+  vi_cv_path_perl
+  MZSCHEME_MZC
+***************
+*** 5604,5609 ****
+--- 5605,5618 ----
+        fi
+        vi_cv_perllib=`$vi_cv_path_perl -MConfig -e 'print $Config{privlibexp}'`
+  
++       vi_cv_perl_extutils=unknown_perl_extutils_path
++       for extutils_rel_path in ExtUtils vendor_perl/ExtUtils; do
++ 	xsubpp_path="$vi_cv_perllib/$extutils_rel_path/xsubpp"
++ 	if test -f "$xsubpp_path"; then
++ 	  vi_cv_perl_xsubpp="$xsubpp_path"
++ 	fi
++       done
++ 
+              perlcppflags=`$vi_cv_path_perl -Mlib=$srcdir -MExtUtils::Embed \
+  	      -e 'ccflags;perl_inc;print"\n"' | sed -e 's/-fno[^ ]*//'`
+              perllibs=`cd $srcdir; $vi_cv_path_perl -MExtUtils::Embed -e 'ldopts' | \
+*** ../vim-7.4.408/src/version.c	2014-08-16 18:36:38.597993280 +0200
+--- src/version.c	2014-08-17 16:53:34.135084090 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     409,
+  /**/
+
+
+-- 
+To define recursion, we must first define recursion.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.410 b/SOURCES/7.4.410
new file mode 100644
index 0000000..885de34
--- /dev/null
+++ b/SOURCES/7.4.410
@@ -0,0 +1,70 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.410
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.410
+Problem:    Fold does not open after search when there is a CmdwinLeave
+	    autocommand.
+Solution:   Restore KeyTyped. (Jacob Niehus)
+Files:	    src/ex_getln.c
+
+
+*** ../vim-7.4.409/src/ex_getln.c	2014-06-25 14:39:35.102348584 +0200
+--- src/ex_getln.c	2014-08-17 17:21:38.811022992 +0200
+***************
+*** 6363,6368 ****
+--- 6363,6371 ----
+  #ifdef FEAT_RIGHTLEFT
+      int			save_cmdmsg_rl = cmdmsg_rl;
+  #endif
++ #ifdef FEAT_FOLDING
++     int			save_KeyTyped;
++ #endif
+  
+      /* Can't do this recursively.  Can't do it when typing a password. */
+      if (cmdwin_type != 0
+***************
+*** 6497,6504 ****
+--- 6500,6518 ----
+      RedrawingDisabled = i;
+  
+  # ifdef FEAT_AUTOCMD
++ 
++ #  ifdef FEAT_FOLDING
++     save_KeyTyped = KeyTyped;
++ #  endif
++ 
+      /* Trigger CmdwinLeave autocommands. */
+      apply_autocmds(EVENT_CMDWINLEAVE, typestr, typestr, FALSE, curbuf);
++ 
++ #  ifdef FEAT_FOLDING
++     /* Restore KeyTyped in case it is modified by autocommands */
++     KeyTyped = save_KeyTyped;
++ #  endif
++ 
+  # endif
+  
+      /* Restore the command line info. */
+*** ../vim-7.4.409/src/version.c	2014-08-17 17:05:39.163057796 +0200
+--- src/version.c	2014-08-17 17:19:33.011027554 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     410,
+  /**/
+
+-- 
+Have you heard about the new Beowulf cluster? It's so fast, it executes
+an infinite loop in 6 seconds.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.411 b/SOURCES/7.4.411
new file mode 100644
index 0000000..f8bff06
--- /dev/null
+++ b/SOURCES/7.4.411
@@ -0,0 +1,111 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.411
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.411
+Problem:    "foo bar" sorts before "foo" with sort(). (John Little)
+Solution:   Avoid putting quotes around strings before comparing them.
+Files:	    src/eval.c
+
+
+*** ../vim-7.4.410/src/eval.c	2014-08-06 14:52:05.043236174 +0200
+--- src/eval.c	2014-08-22 13:08:52.423905619 +0200
+***************
+*** 17382,17397 ****
+      const void	*s2;
+  {
+      sortItem_T  *si1, *si2;
+      char_u	*p1, *p2;
+!     char_u	*tofree1, *tofree2;
+      int		res;
+      char_u	numbuf1[NUMBUFLEN];
+      char_u	numbuf2[NUMBUFLEN];
+  
+      si1 = (sortItem_T *)s1;
+      si2 = (sortItem_T *)s2;
+!     p1 = tv2string(&si1->item->li_tv, &tofree1, numbuf1, 0);
+!     p2 = tv2string(&si2->item->li_tv, &tofree2, numbuf2, 0);
+      if (p1 == NULL)
+  	p1 = (char_u *)"";
+      if (p2 == NULL)
+--- 17382,17419 ----
+      const void	*s2;
+  {
+      sortItem_T  *si1, *si2;
++     typval_T	*tv1, *tv2;
+      char_u	*p1, *p2;
+!     char_u	*tofree1 = NULL, *tofree2 = NULL;
+      int		res;
+      char_u	numbuf1[NUMBUFLEN];
+      char_u	numbuf2[NUMBUFLEN];
+  
+      si1 = (sortItem_T *)s1;
+      si2 = (sortItem_T *)s2;
+!     tv1 = &si1->item->li_tv;
+!     tv2 = &si2->item->li_tv;
+!     /* tv2string() puts quotes around a string and allocates memory.  Don't do
+!      * that for string variables. Use a single quote when comparing with a
+!      * non-string to do what the docs promise. */
+!     if (tv1->v_type == VAR_STRING)
+!     {
+! 	if (tv2->v_type != VAR_STRING || item_compare_numeric)
+! 	    p1 = (char_u *)"'";
+! 	else
+! 	    p1 = tv1->vval.v_string;
+!     }
+!     else
+! 	p1 = tv2string(tv1, &tofree1, numbuf1, 0);
+!     if (tv2->v_type == VAR_STRING)
+!     {
+! 	if (tv1->v_type != VAR_STRING || item_compare_numeric)
+! 	    p2 = (char_u *)"'";
+! 	else
+! 	    p2 = tv2->vval.v_string;
+!     }
+!     else
+! 	p2 = tv2string(tv2, &tofree2, numbuf2, 0);
+      if (p1 == NULL)
+  	p1 = (char_u *)"";
+      if (p2 == NULL)
+***************
+*** 17411,17418 ****
+  	res = n1 == n2 ? 0 : n1 > n2 ? 1 : -1;
+      }
+  
+!     /* When the result would be zero, compare the pointers themselves.  Makes
+!      * the sort stable. */
+      if (res == 0 && !item_compare_keep_zero)
+  	res = si1->idx > si2->idx ? 1 : -1;
+  
+--- 17433,17440 ----
+  	res = n1 == n2 ? 0 : n1 > n2 ? 1 : -1;
+      }
+  
+!     /* When the result would be zero, compare the item indexes.  Makes the
+!      * sort stable. */
+      if (res == 0 && !item_compare_keep_zero)
+  	res = si1->idx > si2->idx ? 1 : -1;
+  
+*** ../vim-7.4.410/src/version.c	2014-08-17 17:24:03.967017727 +0200
+--- src/version.c	2014-08-22 12:51:35.011943243 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     411,
+  /**/
+
+-- 
+I started out with nothing, and I still have most of it.
+                                -- Michael Davis -- "Tonight Show"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.412 b/SOURCES/7.4.412
new file mode 100644
index 0000000..bd6a5fe
--- /dev/null
+++ b/SOURCES/7.4.412
@@ -0,0 +1,83 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.412
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.412
+Problem:    Can't build on Windows XP with MSVC.
+Solution:   Add SUBSYSTEM_VER to the Makefile. (Yongwei Wu)
+Files:	    src/Make_mvc.mak, src/INSTALLpc.txt
+
+
+*** ../vim-7.4.411/src/Make_mvc.mak	2014-08-10 16:31:47.376709213 +0200
+--- src/Make_mvc.mak	2014-08-22 18:09:56.711250479 +0200
+***************
+*** 657,662 ****
+--- 657,666 ----
+  SUBSYSTEM = console
+  !endif
+  
++ !if "$(SUBSYSTEM_VER)" != ""
++ SUBSYSTEM = $(SUBSYSTEM),$(SUBSYSTEM_VER)
++ !endif
++ 
+  !if "$(GUI)" == "yes" && "$(DIRECTX)" == "yes"
+  CFLAGS = $(CFLAGS) $(DIRECTX_DEFS)
+  GUI_INCL = $(GUI_INCL) $(DIRECTX_INCL)
+*** ../vim-7.4.411/src/INSTALLpc.txt	2012-08-29 17:29:09.000000000 +0200
+--- src/INSTALLpc.txt	2014-08-22 18:09:56.711250479 +0200
+***************
+*** 192,197 ****
+--- 192,221 ----
+  Vim with Make_mvc.mak.
+  
+  
++ Targeting Windows XP with new MSVC      *new-msvc-windows-xp*
++ ----------------------------------
++ 
++ Beginning with Visual C++ 2010, Microsoft changed the behavior of LINK.EXE
++ so that it targets Windows 6.0 (Vista) by default.  In order to override
++ this, the target Windows version number needs to be passed to LINK like
++ follows:
++     LINK ... /subsystem:console,5.01
++ 
++ Make_mvc.mak now supports a macro SUBSYSTEM_VER to pass the Windows version.
++ Use lines like follows to target Windows XP (assuming using Visual C++ 2012
++ under 64-bit Windows):
++     set WinSdk71=%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.1A
++     set SDK_INCLUDE_DIR=%WinSdk71%\Include
++     set INCLUDE=%WinSdk71%\Include;%INCLUDE%
++     set LIB=%WinSdk71%\Lib;%LIB%
++     set PATH=%WinSdk71%\Bin;%PATH%
++     set CL=/D_USING_V110_SDK71_
++     nmake -f Make_mvc.mak ... WINVER=0x0501 SUBSYSTEM_VER=5.01
++ 
++ The following Visual C++ team blog can serve as a reference page:
++     http://blogs.msdn.com/b/vcblog/archive/2012/10/08/windows-xp-targeting-with-c-in-visual-studio-2012.aspx
++ 
++ 
+  2. MinGW
+  ========
+  
+*** ../vim-7.4.411/src/version.c	2014-08-22 13:13:24.219895762 +0200
+--- src/version.c	2014-08-22 18:09:52.611250628 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     412,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+42. Your virtual girlfriend finds a new net sweetheart with a larger bandwidth.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.413 b/SOURCES/7.4.413
new file mode 100644
index 0000000..975477e
--- /dev/null
+++ b/SOURCES/7.4.413
@@ -0,0 +1,96 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.413
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.413
+Problem:    MS-Windows: Using US international keyboard layout, inserting dead
+	    key by pressing space does not always work.  Issue 250.
+Solution:   Let MS-Windows translate the message. (John Wellesz)
+Files:	    src/gui_w48.c
+
+
+*** ../vim-7.4.412/src/gui_w48.c	2014-08-06 14:52:05.043236174 +0200
+--- src/gui_w48.c	2014-08-22 18:41:09.151182571 +0200
+***************
+*** 614,619 ****
+--- 614,621 ----
+      char_u	string[40];
+      int		len = 0;
+  
++     dead_key = 0;
++ 
+      len = char_to_string(ch, string, 40, FALSE);
+      if (len == 1 && string[0] == Ctrl_C && ctrl_c_interrupts)
+      {
+***************
+*** 1788,1811 ****
+      if (msg.message == WM_KEYDOWN || msg.message == WM_SYSKEYDOWN)
+      {
+  	vk = (int) msg.wParam;
+! 	/* handle key after dead key, but ignore shift, alt and control */
+! 	if (dead_key && vk != VK_SHIFT && vk != VK_MENU && vk != VK_CONTROL)
+  	{
+  	    dead_key = 0;
+! 	    /* handle non-alphabetic keys (ones that hopefully cannot generate
+! 	     * umlaut-characters), unless when control is down */
+! 	    if (vk < 'A' || vk > 'Z' || (GetKeyState(VK_CONTROL) & 0x8000))
+! 	    {
+! 		MSG dm;
+! 
+! 		dm.message = msg.message;
+! 		dm.hwnd = msg.hwnd;
+! 		dm.wParam = VK_SPACE;
+! 		MyTranslateMessage(&dm);	/* generate dead character */
+! 		if (vk != VK_SPACE) /* and send current character once more */
+! 		    PostMessage(msg.hwnd, msg.message, msg.wParam, msg.lParam);
+! 		return;
+! 	    }
+  	}
+  
+  	/* Check for CTRL-BREAK */
+--- 1790,1810 ----
+      if (msg.message == WM_KEYDOWN || msg.message == WM_SYSKEYDOWN)
+      {
+  	vk = (int) msg.wParam;
+! 	/*
+! 	 * If a dead key was pressed and the user presses VK_SPACE, VK_BACK, or
+! 	 * VK_ESCAPE it means that he actually wants to deal with the dead char
+! 	 * now, so do nothing special and let Windows handle it.
+! 	 *
+! 	 * Note that VK_SPACE combines with the dead_key's character and only
+! 	 * one WM_CHAR will be generated by TranslateMessage(), in the two
+! 	 * other cases two WM_CHAR will be generated: the dead char and VK_BACK
+! 	 * or VK_ESCAPE.  That is most likely what the user expects.
+! 	 */
+! 	if (dead_key && (vk == VK_SPACE || vk == VK_BACK || vk == VK_ESCAPE))
+  	{
+  	    dead_key = 0;
+! 	    MyTranslateMessage(&msg);
+! 	    return;
+  	}
+  
+  	/* Check for CTRL-BREAK */
+*** ../vim-7.4.412/src/version.c	2014-08-22 18:12:53.999244049 +0200
+--- src/version.c	2014-08-22 18:39:03.915187113 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     413,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+43. You tell the kids they can't use the computer because "Daddy's got work to
+    do" and you don't even have a job.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.414 b/SOURCES/7.4.414
new file mode 100644
index 0000000..2617d93
--- /dev/null
+++ b/SOURCES/7.4.414
@@ -0,0 +1,161 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.414
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.414
+Problem:    Cannot define a command only when it's used.
+Solution:   Add the CmdUndefined autocommand event. (partly by Yasuhiro
+	    Matsumoto)
+Files:	    runtime/doc/autocmd.txt, src/ex_docmd.c, src/fileio.c,
+	    src/proto/fileio.pro
+
+
+*** ../vim-7.4.413/runtime/doc/autocmd.txt	2013-11-28 18:53:47.000000000 +0100
+--- runtime/doc/autocmd.txt	2014-08-22 20:10:24.026988365 +0200
+***************
+*** 278,283 ****
+--- 278,284 ----
+  |ShellCmdPost|		after executing a shell command
+  |ShellFilterPost|	after filtering with a shell command
+  
++ |CmdUndefined|		a user command is used but it isn't defined
+  |FuncUndefined|		a user function is used but it isn't defined
+  |SpellFileMissing|	a spell file is used but it can't be found
+  |SourcePre|		before sourcing a Vim script
+***************
+*** 462,467 ****
+--- 466,481 ----
+  							*BufWritePost*
+  BufWritePost			After writing the whole buffer to a file
+  				(should undo the commands for BufWritePre).
++ 							*CmdUndefined*
++ CmdUndefined			When a user command is used but it isn't
++ 				defined.  Useful for defining a command only
++ 				when it's used.  The pattern is matched
++ 				against the command name.  Both <amatch> and
++ 				<afile> are set to the name of the command.
++ 				NOTE: Autocompletion won't work until the
++ 				command is defined.  An alternative is to
++ 				always define the user command and have it
++ 				invoke an autoloaded function.  See |autoload|.
+  							*CmdwinEnter*
+  CmdwinEnter			After entering the command-line window.
+  				Useful for setting options specifically for
+***************
+*** 663,668 ****
+--- 681,688 ----
+  				when it's used.  The pattern is matched
+  				against the function name.  Both <amatch> and
+  				<afile> are set to the name of the function.
++ 				NOTE: When writing Vim scripts a better
++ 				alternative is to use an autoloaded function.
+  				See |autoload-functions|.
+  							*GUIEnter*
+  GUIEnter			After starting the GUI successfully, and after
+*** ../vim-7.4.413/src/ex_docmd.c	2014-08-10 13:34:59.056785459 +0200
+--- src/ex_docmd.c	2014-08-22 20:23:43.426959373 +0200
+***************
+*** 2143,2148 ****
+--- 2143,2168 ----
+      /* Find the command and let "p" point to after it. */
+      p = find_command(&ea, NULL);
+  
++ #ifdef FEAT_AUTOCMD
++     /* If this looks like an undefined user command and there are CmdUndefined
++      * autocommands defined, trigger the matching autocommands. */
++     if (p != NULL && ea.cmdidx == CMD_SIZE && !ea.skip
++ 	    && ASCII_ISUPPER(*ea.cmd)
++ 	    && has_cmdundefined())
++     {
++ 	char_u *p = ea.cmd;
++ 	int ret;
++ 
++ 	while (ASCII_ISALNUM(*p))
++ 	    ++p;
++ 	p = vim_strnsave(ea.cmd, p - ea.cmd);
++ 	ret = apply_autocmds(EVENT_CMDUNDEFINED, p, p, TRUE, NULL);
++ 	vim_free(p);
++ 	if (ret && !aborting())
++ 	    p = find_command(&ea, NULL);
++     }
++ #endif
++ 
+  #ifdef FEAT_USR_CMDS
+      if (p == NULL)
+      {
+*** ../vim-7.4.413/src/fileio.c	2014-08-13 21:58:24.820885492 +0200
+--- src/fileio.c	2014-08-22 20:25:26.826955623 +0200
+***************
+*** 7641,7646 ****
+--- 7641,7647 ----
+      {"BufWriteCmd",	EVENT_BUFWRITECMD},
+      {"CmdwinEnter",	EVENT_CMDWINENTER},
+      {"CmdwinLeave",	EVENT_CMDWINLEAVE},
++     {"CmdUndefined",	EVENT_CMDUNDEFINED},
+      {"ColorScheme",	EVENT_COLORSCHEME},
+      {"CompleteDone",	EVENT_COMPLETEDONE},
+      {"CursorHold",	EVENT_CURSORHOLD},
+***************
+*** 9159,9164 ****
+--- 9160,9183 ----
+      return (first_autopat[(int)EVENT_INSERTCHARPRE] != NULL);
+  }
+  
++ /*
++  * Return TRUE when there is an CmdUndefined autocommand defined.
++  */
++     int
++ has_cmdundefined()
++ {
++     return (first_autopat[(int)EVENT_CMDUNDEFINED] != NULL);
++ }
++ 
++ /*
++  * Return TRUE when there is an FuncUndefined autocommand defined.
++  */
++     int
++ has_funcundefined()
++ {
++     return (first_autopat[(int)EVENT_FUNCUNDEFINED] != NULL);
++ }
++ 
+      static int
+  apply_autocmds_group(event, fname, fname_io, force, group, buf, eap)
+      event_T	event;
+*** ../vim-7.4.413/src/proto/fileio.pro	2014-08-10 13:34:59.060785459 +0200
+--- src/proto/fileio.pro	2014-08-22 20:25:38.862955186 +0200
+***************
+*** 47,52 ****
+--- 47,54 ----
+  int has_textchanged __ARGS((void));
+  int has_textchangedI __ARGS((void));
+  int has_insertcharpre __ARGS((void));
++ int has_cmdundefined __ARGS((void));
++ int has_funcundefined __ARGS((void));
+  void block_autocmds __ARGS((void));
+  void unblock_autocmds __ARGS((void));
+  int is_autocmd_blocked __ARGS((void));
+*** ../vim-7.4.413/src/version.c	2014-08-22 18:44:30.307175276 +0200
+--- src/version.c	2014-08-22 20:55:31.406890176 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     414,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+44. Your friends no longer send you e-mail...they just log on to your IRC
+    channel.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.415 b/SOURCES/7.4.415
new file mode 100644
index 0000000..1dbc6c6
--- /dev/null
+++ b/SOURCES/7.4.415
@@ -0,0 +1,67 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.415
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.415 (after 7.4.414)
+Problem:    Cannot build.  Warning for shadowed variable. (John Little)
+Solution:   Add missing change.  Remove declaration.
+Files:	    src/vim.h, src/ex_docmd.c
+
+
+*** ../vim-7.4.414/src/vim.h	2014-08-06 14:52:05.047236174 +0200
+--- src/vim.h	2014-08-22 20:26:19.522953712 +0200
+***************
+*** 1326,1331 ****
+--- 1326,1332 ----
+      EVENT_SHELLFILTERPOST,	/* after ":1,2!cmd", ":w !cmd", ":r !cmd". */
+      EVENT_TEXTCHANGED,		/* text was modified */
+      EVENT_TEXTCHANGEDI,		/* text was modified in Insert mode*/
++     EVENT_CMDUNDEFINED,		/* command undefined */
+      NUM_EVENTS			/* MUST be the last one */
+  };
+  
+*** ../vim-7.4.414/src/ex_docmd.c	2014-08-22 23:05:50.102606614 +0200
+--- src/ex_docmd.c	2014-08-23 14:11:52.640635039 +0200
+***************
+*** 2150,2158 ****
+  	    && ASCII_ISUPPER(*ea.cmd)
+  	    && has_cmdundefined())
+      {
+- 	char_u *p = ea.cmd;
+  	int ret;
+  
+  	while (ASCII_ISALNUM(*p))
+  	    ++p;
+  	p = vim_strnsave(ea.cmd, p - ea.cmd);
+--- 2150,2158 ----
+  	    && ASCII_ISUPPER(*ea.cmd)
+  	    && has_cmdundefined())
+      {
+  	int ret;
+  
++ 	p = ea.cmd;
+  	while (ASCII_ISALNUM(*p))
+  	    ++p;
+  	p = vim_strnsave(ea.cmd, p - ea.cmd);
+*** ../vim-7.4.415/src/version.c	2014-08-22 23:05:50.106606614 +0200
+--- src/version.c	2014-08-23 14:15:50.620626408 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     415,
+  /**/
+
+-- 
+CVS sux, men don't like commitment
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.416 b/SOURCES/7.4.416
new file mode 100644
index 0000000..98762f4
--- /dev/null
+++ b/SOURCES/7.4.416
@@ -0,0 +1,96 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.416
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.416
+Problem:    Problem with breakindent/showbreak and tabs.
+Solution:   Handle tabs differently. (Christian Brabandt)
+Files:	    src/testdir/test_breakindent.in, src/testdir/test_breakindent.ok,
+	    src/charset.c
+
+
+*** ../vim-7.4.415/src/testdir/test_breakindent.in	2014-06-25 14:39:35.114348584 +0200
+--- src/testdir/test_breakindent.in	2014-08-24 21:13:12.188584738 +0200
+***************
+*** 73,78 ****
+--- 73,95 ----
+  :let width = strlen(text[1:])+indent(2)*4+strlen(&sbr)*3 " text wraps 3 times
+  :$put =g:test
+  :$put =printf(\"strdisplaywidth: %d == calculated: %d\", strdisplaywidth(text), width)
++ :"
++ :" Test, that the string "    a\tb\tc\td\te" is correctly
++ :" displayed in a 20 column wide window (see bug report
++ :" https://groups.google.com/d/msg/vim_dev/ZOdg2mc9c9Y/TT8EhFjEy0IJ
++ :only
++ :vert 20new
++ :set all& nocp breakindent briopt=min:10
++ :call setline(1, ["    a\tb\tc\td\te", "    z   y       x       w       v"])
++ :/^\s*a
++ fbgjyl:let line1 = @0
++ :?^\s*z
++ fygjyl:let line2 = @0
++ :quit!
++ :$put ='Test 12: breakindent with wrapping Tab'
++ :$put =line1
++ :$put =line2
++ :"
+  :%w! test.out
+  :qa!
+  ENDTEST
+*** ../vim-7.4.415/src/testdir/test_breakindent.ok	2014-06-25 14:39:35.114348584 +0200
+--- src/testdir/test_breakindent.ok	2014-08-24 21:13:36.228583867 +0200
+***************
+*** 53,55 ****
+--- 53,58 ----
+  
+   Test 11: strdisplaywidth when breakindent is on
+  strdisplaywidth: 46 == calculated: 64
++ Test 12: breakindent with wrapping Tab
++ d
++ w
+*** ../vim-7.4.415/src/charset.c	2014-07-16 23:39:50.247084976 +0200
+--- src/charset.c	2014-08-24 21:14:46.340581324 +0200
+***************
+*** 1195,1204 ****
+  	    if (wp->w_p_bri)
+  		added += get_breakindent_win(wp, line);
+  
+! 	    if (tab_corr)
+! 		size += (added / wp->w_buffer->b_p_ts) * wp->w_buffer->b_p_ts;
+! 	    else
+! 		size += added;
+  	    if (col != 0)
+  		added = 0;
+  	}
+--- 1195,1201 ----
+  	    if (wp->w_p_bri)
+  		added += get_breakindent_win(wp, line);
+  
+! 	    size += added;
+  	    if (col != 0)
+  		added = 0;
+  	}
+*** ../vim-7.4.415/src/version.c	2014-08-23 14:18:20.868620959 +0200
+--- src/version.c	2014-08-24 18:06:08.860991777 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     416,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+57. You begin to wonder how on earth your service provider is allowed to call
+    200 hours per month "unlimited."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.417 b/SOURCES/7.4.417
new file mode 100644
index 0000000..a67e75d
--- /dev/null
+++ b/SOURCES/7.4.417
@@ -0,0 +1,173 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.417
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.417
+Problem:    After splitting a window and setting 'breakindent' the default
+	    minimum with is not respected.
+Solution:   Call briopt_check() when copying options to a new window.
+Files:	    src/option.c, src/proto/option.pro,
+	    src/testdir/test_breakindent.in
+
+
+*** ../vim-7.4.416/src/option.c	2014-08-13 21:58:24.820885492 +0200
+--- src/option.c	2014-08-24 21:30:49.468546394 +0200
+***************
+*** 3097,3102 ****
+--- 3097,3105 ----
+  static int opt_strings_flags __ARGS((char_u *val, char **values, unsigned *flagp, int list));
+  static int check_opt_strings __ARGS((char_u *val, char **values, int));
+  static int check_opt_wim __ARGS((void));
++ #ifdef FEAT_LINEBREAK
++ static int briopt_check __ARGS((win_T *wp));
++ #endif
+  
+  /*
+   * Initialize the options, first part.
+***************
+*** 5289,5295 ****
+      (void)check_cedit();
+  #endif
+  #ifdef FEAT_LINEBREAK
+!     briopt_check();
+  #endif
+  }
+  
+--- 5292,5298 ----
+      (void)check_cedit();
+  #endif
+  #ifdef FEAT_LINEBREAK
+!     briopt_check(curwin);
+  #endif
+  }
+  
+***************
+*** 5748,5754 ****
+      /* 'breakindentopt' */
+      else if (varp == &curwin->w_p_briopt)
+      {
+! 	if (briopt_check() == FAIL)
+  	    errmsg = e_invarg;
+      }
+  #endif
+--- 5751,5757 ----
+      /* 'breakindentopt' */
+      else if (varp == &curwin->w_p_briopt)
+      {
+! 	if (briopt_check(curwin) == FAIL)
+  	    errmsg = e_invarg;
+      }
+  #endif
+***************
+*** 10232,10237 ****
+--- 10235,10243 ----
+      wp_to->w_farsi = wp_from->w_farsi;
+  #  endif
+  # endif
++ #if defined(FEAT_LINEBREAK)
++     briopt_check(wp_to);
++ #endif
+  }
+  #endif
+  
+***************
+*** 12002,12016 ****
+   * This is called when 'breakindentopt' is changed and when a window is
+   * initialized.
+   */
+!     int
+! briopt_check()
+  {
+      char_u	*p;
+      int		bri_shift = 0;
+      long	bri_min = 20;
+      int		bri_sbr = FALSE;
+  
+!     p = curwin->w_p_briopt;
+      while (*p != NUL)
+      {
+  	if (STRNCMP(p, "shift:", 6) == 0
+--- 12008,12023 ----
+   * This is called when 'breakindentopt' is changed and when a window is
+   * initialized.
+   */
+!     static int
+! briopt_check(wp)
+!     win_T *wp;
+  {
+      char_u	*p;
+      int		bri_shift = 0;
+      long	bri_min = 20;
+      int		bri_sbr = FALSE;
+  
+!     p = wp->w_p_briopt;
+      while (*p != NUL)
+      {
+  	if (STRNCMP(p, "shift:", 6) == 0
+***************
+*** 12035,12043 ****
+  	    ++p;
+      }
+  
+!     curwin->w_p_brishift = bri_shift;
+!     curwin->w_p_brimin   = bri_min;
+!     curwin->w_p_brisbr   = bri_sbr;
+  
+      return OK;
+  }
+--- 12042,12050 ----
+  	    ++p;
+      }
+  
+!     wp->w_p_brishift = bri_shift;
+!     wp->w_p_brimin   = bri_min;
+!     wp->w_p_brisbr   = bri_sbr;
+  
+      return OK;
+  }
+*** ../vim-7.4.416/src/proto/option.pro	2014-06-25 14:44:04.458358774 +0200
+--- src/proto/option.pro	2014-08-24 21:30:53.588546244 +0200
+***************
+*** 62,66 ****
+  long get_sw_value __ARGS((buf_T *buf));
+  long get_sts_value __ARGS((void));
+  void find_mps_values __ARGS((int *initc, int *findc, int *backwards, int switchit));
+- int briopt_check __ARGS((void));
+  /* vim: set ft=c : */
+--- 62,65 ----
+*** ../vim-7.4.416/src/testdir/test_breakindent.in	2014-08-24 21:19:22.220571318 +0200
+--- src/testdir/test_breakindent.in	2014-08-24 21:37:40.616531483 +0200
+***************
+*** 27,32 ****
+--- 27,33 ----
+  :	$put =g:line1
+  :	wincmd p
+  :endfu
++ :set briopt=min:0
+  :let g:test="Test 1: Simple breakindent"
+  :let line1=ScreenChar(8)
+  :call DoRecordScreen()
+*** ../vim-7.4.416/src/version.c	2014-08-24 21:19:22.224571318 +0200
+--- src/version.c	2014-08-24 21:29:09.156550032 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     417,
+  /**/
+
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+58. You turn on your computer and turn off your wife.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.418 b/SOURCES/7.4.418
new file mode 100644
index 0000000..15a83da
--- /dev/null
+++ b/SOURCES/7.4.418
@@ -0,0 +1,58 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.418
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.418
+Problem:    When leaving ":append" the cursor shape is like in Insert mode.
+	    (Jacob Niehus)
+Solution:   Do not have State set to INSERT when calling getline().
+Files:	    src/ex_cmds.c
+
+
+*** ../vim-7.4.417/src/ex_cmds.c	2014-08-06 18:17:03.471147780 +0200
+--- src/ex_cmds.c	2014-08-29 08:54:26.666398204 +0200
+***************
+*** 4011,4021 ****
+--- 4011,4029 ----
+  	    eap->nextcmd = p;
+  	}
+  	else
++ 	{
++ 	    int save_State = State;
++ 
++ 	    /* Set State to avoid the cursor shape to be set to INSERT mode
++ 	     * when getline() returns. */
++ 	    State = CMDLINE;
+  	    theline = eap->getline(
+  #ifdef FEAT_EVAL
+  		    eap->cstack->cs_looplevel > 0 ? -1 :
+  #endif
+  		    NUL, eap->cookie, indent);
++ 	    State = save_State;
++ 	}
+  	lines_left = Rows - 1;
+  	if (theline == NULL)
+  	    break;
+*** ../vim-7.4.417/src/version.c	2014-08-24 21:39:45.488526954 +0200
+--- src/version.c	2014-08-29 08:58:31.086398738 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     418,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+88. Every single time you press the 'Get mail' button...it does get new mail.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.419 b/SOURCES/7.4.419
new file mode 100644
index 0000000..f718713
--- /dev/null
+++ b/SOURCES/7.4.419
@@ -0,0 +1,124 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.419
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.419
+Problem:    When part of a list is locked it's possible to make changes.
+Solution:   Check if any of the list items is locked before make a change.
+	    (ZyX)
+Files:	    src/eval.c, src/testdir/test55.in, src/testdir/test55.ok
+
+
+*** ../vim-7.4.418/src/eval.c	2014-08-22 13:13:24.219895762 +0200
+--- src/eval.c	2014-08-29 09:37:56.930403905 +0200
+***************
+*** 2945,2950 ****
+--- 2945,2967 ----
+  	;
+      else if (lp->ll_range)
+      {
++ 	listitem_T *ll_li = lp->ll_li;
++ 	int ll_n1 = lp->ll_n1;
++ 
++ 	/*
++ 	 * Check whether any of the list items is locked
++ 	 */
++ 	for (ri = rettv->vval.v_list->lv_first; ri != NULL; )
++ 	{
++ 	    if (tv_check_lock(ll_li->li_tv.v_lock, lp->ll_name))
++ 		return;
++ 	    ri = ri->li_next;
++ 	    if (ri == NULL || (!lp->ll_empty2 && lp->ll_n2 == ll_n1))
++ 		break;
++ 	    ll_li = ll_li->li_next;
++ 	    ++ll_n1;
++ 	}
++ 
+  	/*
+  	 * Assign the List values to the list items.
+  	 */
+***************
+*** 3646,3651 ****
+--- 3663,3679 ----
+      else if (lp->ll_range)
+      {
+  	listitem_T    *li;
++ 	listitem_T    *ll_li = lp->ll_li;
++ 	int           ll_n1 = lp->ll_n1;
++ 
++ 	while (ll_li != NULL && (lp->ll_empty2 || lp->ll_n2 >= ll_n1))
++ 	{
++ 	    li = ll_li->li_next;
++ 	    if (tv_check_lock(ll_li->li_tv.v_lock, lp->ll_name))
++ 		return FAIL;
++ 	    ll_li = li;
++ 	    ++ll_n1;
++ 	}
+  
+  	/* Delete a range of List items. */
+  	while (lp->ll_li != NULL && (lp->ll_empty2 || lp->ll_n2 >= lp->ll_n1))
+*** ../vim-7.4.418/src/testdir/test55.in	2014-07-02 19:06:14.686326091 +0200
+--- src/testdir/test55.in	2014-08-29 09:37:23.474403832 +0200
+***************
+*** 282,287 ****
+--- 282,302 ----
+  :    $put =ps
+  :  endfor
+  :endfor
++ :unlet l
++ :let l = [1, 2, 3, 4]
++ :lockvar! l
++ :$put =string(l)
++ :unlockvar l[1]
++ :unlet l[0:1]
++ :$put =string(l)
++ :unlet l[1:2]
++ :$put =string(l)
++ :unlockvar l[1]
++ :let l[0:1] = [0, 1]
++ :$put =string(l)
++ :let l[1:2] = [0, 1]
++ :$put =string(l)
++ :unlet l
+  :" :lockvar/islocked() triggering script autoloading
+  :set rtp+=./sautest
+  :lockvar g:footest#x
+*** ../vim-7.4.418/src/testdir/test55.ok	2014-07-02 19:06:14.686326091 +0200
+--- src/testdir/test55.ok	2014-08-29 09:37:29.606403846 +0200
+***************
+*** 86,91 ****
+--- 86,96 ----
+  FFpFFpp
+  0000-000
+  ppppppp
++ [1, 2, 3, 4]
++ [1, 2, 3, 4]
++ [1, 2, 3, 4]
++ [1, 2, 3, 4]
++ [1, 2, 3, 4]
+  locked g:footest#x:-1
+  exists g:footest#x:0
+  g:footest#x: 1
+*** ../vim-7.4.418/src/version.c	2014-08-29 09:02:23.890399246 +0200
+--- src/version.c	2014-08-29 09:39:24.658404097 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     419,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+90. Instead of calling you to dinner, your spouse sends e-mail.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.420 b/SOURCES/7.4.420
new file mode 100644
index 0000000..71cdf96
--- /dev/null
+++ b/SOURCES/7.4.420
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.420
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.420
+Problem:    It's not obvious how to add a new test.
+Solution:   Add a README file. (Christian Brabandt)
+Files:	    src/testdir/README.txt
+
+
+*** ../vim-7.4.419/src/testdir/README.txt	2014-08-29 10:04:24.754407374 +0200
+--- src/testdir/README.txt	2014-08-29 10:01:08.294406945 +0200
+***************
+*** 0 ****
+--- 1,18 ----
++ This directory contains tests for various Vim features.
++ 
++ If it makes sense, try to add a new test to an already existing file.  You may
++ want to separate it from other tests in that file using :" (that's an Ex
++ command comment).
++ 
++ The numbered tests are older, we have switched to named tests.
++ 
++ To add a new test:
++ 1) Create test_<subject>.in and test_<subject>.ok files.
++ 2) Add them to all Makefiles (Make*) in alphabetical order (search for an
++    existing test_file.out to see where to add the new one).
++ 3) Use make test_<subject>.out to run a single test file in src/testdir/.
++ 4) Also add an entry in src/Makefile.
++ 
++ Keep in mind that the files are used as if everything was typed.
++ A line break is like pressing Enter.  If that happens on the last line you'll
++ hear a beep.
+*** ../vim-7.4.419/src/version.c	2014-08-29 09:46:04.266404970 +0200
+--- src/version.c	2014-08-29 10:01:21.242406973 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     420,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+91. It's Saturday afternoon in the middle of May and you
+    are on computer.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.421 b/SOURCES/7.4.421
new file mode 100644
index 0000000..35b00d0
--- /dev/null
+++ b/SOURCES/7.4.421
@@ -0,0 +1,132 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.421
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.421
+Problem:    Crash when searching for "\ze*". (Urtica Dioica)
+Solution:   Disallow a multi after \ze and \zs.
+Files:	    src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok
+
+
+*** ../vim-7.4.420/src/regexp_nfa.c	2014-05-13 19:37:19.489786520 +0200
+--- src/regexp_nfa.c	2014-08-29 11:14:12.030416520 +0200
+***************
+*** 291,296 ****
+--- 291,297 ----
+  static int nfa_regconcat __ARGS((void));
+  static int nfa_regbranch __ARGS((void));
+  static int nfa_reg __ARGS((int paren));
++ static int re_mult_next __ARGS((char *what));
+  #ifdef DEBUG
+  static void nfa_set_code __ARGS((int c));
+  static void nfa_postfix_dump __ARGS((char_u *expr, int retval));
+***************
+*** 1323,1332 ****
+--- 1324,1337 ----
+  	    {
+  		case 's':
+  		    EMIT(NFA_ZSTART);
++ 		    if (re_mult_next("\\zs") == FAIL)
++ 			return FAIL;
+  		    break;
+  		case 'e':
+  		    EMIT(NFA_ZEND);
+  		    nfa_has_zend = TRUE;
++ 		    if (re_mult_next("\\ze") == FAIL)
++ 			return FAIL;
+  		    break;
+  #ifdef FEAT_SYN_HL
+  		case '1':
+***************
+*** 2276,2281 ****
+--- 2281,2298 ----
+      return OK;
+  }
+  
++ /*
++  * Used in a place where no * or \+ can follow.
++  */
++     static int
++ re_mult_next(what)
++     char *what;
++ {
++     if (re_multi_type(peekchr()) == MULTI_MULT)
++ 	EMSG2_RET_FAIL(_("E888: (NFA regexp) cannot repeat %s"), what);
++     return OK;
++ }
++ 
+  #ifdef DEBUG
+  static char_u code[50];
+  
+*** ../vim-7.4.420/src/testdir/test64.in	2014-05-13 16:44:25.633695709 +0200
+--- src/testdir/test64.in	2014-08-29 11:33:12.330419011 +0200
+***************
+*** 459,465 ****
+  :  let text = t[2]
+  :  let matchidx = 3
+  :  for engine in [0, 1, 2]
+! :    if engine == 2 && re == 0 || engine == 1 && re ==1
+  :      continue
+  :    endif
+  :    let &regexpengine = engine
+--- 459,465 ----
+  :  let text = t[2]
+  :  let matchidx = 3
+  :  for engine in [0, 1, 2]
+! :    if engine == 2 && re == 0 || engine == 1 && re == 1
+  :      continue
+  :    endif
+  :    let &regexpengine = engine
+***************
+*** 608,613 ****
+--- 608,624 ----
+  "ayb20gg/..\%$
+  "bybGo"apo"bp:"
+  :"
++ :" Check for detecting error
++ :set regexpengine=2
++ :for pat in [' \ze*', ' \zs*']
++ :  try
++ :    let l = matchlist('x x', pat)
++ :    $put ='E888 NOT detected for ' . pat
++ :  catch
++ :    $put ='E888 detected for ' . pat
++ :  endtry
++ :endfor
++ :"
+  :""""" Write the results """""""""""""
+  :/\%#=1^Results/,$wq! test.out
+  ENDTEST
+*** ../vim-7.4.420/src/testdir/test64.ok	2014-05-13 16:44:25.633695709 +0200
+--- src/testdir/test64.ok	2014-08-29 11:36:05.782419390 +0200
+***************
+*** 1097,1099 ****
+--- 1097,1101 ----
+  Test END
+  EN
+  E
++ E888 detected for  \ze*
++ E888 detected for  \zs*
+*** ../vim-7.4.420/src/version.c	2014-08-29 10:04:32.226407390 +0200
+--- src/version.c	2014-08-29 11:37:15.794419543 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     421,
+  /**/
+
+-- 
+From "know your smileys":
+ :----}  You lie like Pinocchio
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.422 b/SOURCES/7.4.422
new file mode 100644
index 0000000..f8df16b
--- /dev/null
+++ b/SOURCES/7.4.422
@@ -0,0 +1,103 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.422
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.422
+Problem:    When using conceal with linebreak some text is not displayed
+	    correctly. (Grüner Gimpel)
+Solution:   Check for conceal mode when using linebreak. (Christian Brabandt)
+Files:	    src/screen.c, src/testdir/test_listlbr.in,
+	    src/testdir/test_listlbr.ok
+
+
+*** ../vim-7.4.421/src/screen.c	2014-08-16 16:28:31.882272056 +0200
+--- src/screen.c	2014-08-29 12:08:11.478423596 +0200
+***************
+*** 4514,4519 ****
+--- 4514,4524 ----
+  			int	i;
+  			int	saved_nextra = n_extra;
+  
++ #ifdef FEAT_CONCEAL
++ 			if (is_concealing && vcol_off > 0)
++ 			    /* there are characters to conceal */
++ 			    tab_len += vcol_off;
++ #endif
+  			/* if n_extra > 0, it gives the number of chars, to
+  			 * use for a tab, else we need to calculate the width
+  			 * for a tab */
+***************
+*** 4539,4544 ****
+--- 4544,4555 ----
+  #endif
+  			}
+  			p_extra = p_extra_free;
++ #ifdef FEAT_CONCEAL
++ 			/* n_extra will be increased by FIX_FOX_BOGUSCOLS
++ 			 * macro below, so need to adjust for that here */
++ 			if (is_concealing && vcol_off > 0)
++ 			    n_extra -= vcol_off;
++ #endif
+  		    }
+  #endif
+  #ifdef FEAT_CONCEAL
+*** ../vim-7.4.421/src/testdir/test_listlbr.in	2014-07-16 17:01:38.279570568 +0200
+--- src/testdir/test_listlbr.in	2014-08-29 12:03:48.126423021 +0200
+***************
+*** 46,51 ****
+--- 46,61 ----
+  :redraw!
+  :let line=ScreenChar(winwidth(0))
+  :call DoRecordScreen()
++ :let line="_S_\t bla"
++ :$put =line
++ :$
++ :norm! zt
++ :let g:test ="Test 5: set linebreak with conceal and set list and tab displayed by different char (line may not be truncated)"
++ :set cpo&vim list linebreak conceallevel=2 concealcursor=nv listchars=tab:ab
++ :syn match ConcealVar contained /_/ conceal
++ :syn match All /.*/ contains=ConcealVar
++ :let line=ScreenChar(winwidth(0))
++ :call DoRecordScreen()
+  :%w! test.out
+  :qa!
+  ENDTEST
+*** ../vim-7.4.421/src/testdir/test_listlbr.ok	2014-07-16 17:01:38.279570568 +0200
+--- src/testdir/test_listlbr.ok	2014-08-29 12:03:48.126423021 +0200
+***************
+*** 25,27 ****
+--- 25,34 ----
+  +aaaaaaaaaaaaaaaaaa 
+  ~                   
+  ~                   
++ _S_	 bla
++ 
++ Test 5: set linebreak with conceal and set list and tab displayed by different char (line may not be truncated)
++ Sabbbbbb bla        
++ ~                   
++ ~                   
++ ~                   
+*** ../vim-7.4.421/src/version.c	2014-08-29 11:56:21.350422045 +0200
+--- src/version.c	2014-08-29 12:04:26.658423105 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     422,
+  /**/
+
+-- 
+From "know your smileys":
+ ;-0	Can't find shift key
+ ,-9	Kann Umschalttaste nicht finden
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.423 b/SOURCES/7.4.423
new file mode 100644
index 0000000..fc04ae0
--- /dev/null
+++ b/SOURCES/7.4.423
@@ -0,0 +1,109 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.423
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.423
+Problem:    expand("$shell") does not work as documented.
+Solution:   Do not escape the $ when expanding environment variables.
+Files:	    src/os_unix.c, src/misc1.c, src/vim.h
+
+
+*** ../vim-7.4.422/src/os_unix.c	2014-07-30 17:21:53.815518506 +0200
+--- src/os_unix.c	2014-08-29 12:47:57.230428808 +0200
+***************
+*** 5939,5948 ****
+  			*p++ = '\\';
+  		    ++j;
+  		}
+! 		else if (!intick && vim_strchr(SHELL_SPECIAL,
+! 							   pat[i][j]) != NULL)
+  		    /* Put a backslash before a special character, but not
+! 		     * when inside ``. */
+  		    *p++ = '\\';
+  
+  		/* Copy one character. */
+--- 5939,5950 ----
+  			*p++ = '\\';
+  		    ++j;
+  		}
+! 		else if (!intick
+! 			 && ((flags & EW_KEEPDOLLAR) == 0 || pat[i][j] != '$')
+! 			      && vim_strchr(SHELL_SPECIAL, pat[i][j]) != NULL)
+  		    /* Put a backslash before a special character, but not
+! 		     * when inside ``. And not for $var when EW_KEEPDOLLAR is
+! 		     * set. */
+  		    *p++ = '\\';
+  
+  		/* Copy one character. */
+*** ../vim-7.4.422/src/misc1.c	2014-08-06 17:44:09.867161966 +0200
+--- src/misc1.c	2014-08-29 12:48:11.390428839 +0200
+***************
+*** 78,84 ****
+  	    if (!list || lcs_tab1)    /* count a tab for what it is worth */
+  		count += ts - (count % ts);
+  	    else
+! 	/* in list mode, when tab is not set, count screen char width for Tab: ^I */
+  		count += ptr2cells(ptr);
+  	}
+  	else if (*ptr == ' ')
+--- 78,85 ----
+  	    if (!list || lcs_tab1)    /* count a tab for what it is worth */
+  		count += ts - (count % ts);
+  	    else
+! 		/* In list mode, when tab is not set, count screen char width
+! 		 * for Tab, displays: ^I */
+  		count += ptr2cells(ptr);
+  	}
+  	else if (*ptr == ' ')
+***************
+*** 10767,10773 ****
+  		    vim_free(p);
+  		    ga_clear_strings(&ga);
+  		    i = mch_expand_wildcards(num_pat, pat, num_file, file,
+! 								       flags);
+  		    recursive = FALSE;
+  		    return i;
+  		}
+--- 10768,10774 ----
+  		    vim_free(p);
+  		    ga_clear_strings(&ga);
+  		    i = mch_expand_wildcards(num_pat, pat, num_file, file,
+! 							 flags|EW_KEEPDOLLAR);
+  		    recursive = FALSE;
+  		    return i;
+  		}
+*** ../vim-7.4.422/src/vim.h	2014-08-23 14:16:11.880625637 +0200
+--- src/vim.h	2014-08-29 12:46:47.370428655 +0200
+***************
+*** 835,840 ****
+--- 835,841 ----
+  #define EW_ICASE	0x100	/* ignore case */
+  #define EW_NOERROR	0x200	/* no error for bad regexp */
+  #define EW_NOTWILD	0x400	/* add match with literal name if exists */
++ #define EW_KEEPDOLLAR	0x800	/* do not escape $, $var is expanded */
+  /* Note: mostly EW_NOTFOUND and EW_SILENT are mutually exclusive: EW_NOTFOUND
+   * is used when executing commands and EW_SILENT for interactive expanding. */
+  
+*** ../vim-7.4.422/src/version.c	2014-08-29 12:08:39.686423658 +0200
+--- src/version.c	2014-08-29 12:48:54.138428932 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     423,
+  /**/
+
+-- 
+From "know your smileys":
+ :~)	A man with a tape recorder up his nose
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.424 b/SOURCES/7.4.424
new file mode 100644
index 0000000..955b4f6
--- /dev/null
+++ b/SOURCES/7.4.424
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.424
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.424
+Problem:    Get ml_get error when using Python to delete lines in a buffer
+	    that is not in a window.  issue 248.
+Solution:   Do not try adjusting the cursor for a different buffer.
+Files:	    src/if_py_both.h
+
+
+*** ../vim-7.4.423/src/if_py_both.h	2014-05-07 17:31:32.473182497 +0200
+--- src/if_py_both.h	2014-08-29 13:32:18.554434621 +0200
+***************
+*** 4196,4202 ****
+  		    break;
+  		}
+  	    }
+! 	    if (buf == curbuf)
+  		py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)-n);
+  	    if (save_curbuf == NULL)
+  		/* Only adjust marks if we managed to switch to a window that
+--- 4196,4204 ----
+  		    break;
+  		}
+  	    }
+! 	    if (buf == curbuf && (save_curwin != NULL || save_curbuf == NULL))
+! 		/* Using an existing window for the buffer, adjust the cursor
+! 		 * position. */
+  		py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)-n);
+  	    if (save_curbuf == NULL)
+  		/* Only adjust marks if we managed to switch to a window that
+*** ../vim-7.4.423/src/version.c	2014-08-29 12:58:38.246430208 +0200
+--- src/version.c	2014-08-29 13:36:13.642435134 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     424,
+  /**/
+
+-- 
+From "know your smileys":
+ :-H	Is missing teeth
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.425 b/SOURCES/7.4.425
new file mode 100644
index 0000000..fd1bad3
--- /dev/null
+++ b/SOURCES/7.4.425
@@ -0,0 +1,71 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.425
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.425
+Problem:    When 'showbreak' is used "gj" may move to the wrong position.
+	    (Nazri Ramliy)
+Solution:   Adjust virtcol when 'showbreak' is set. (Christian Brabandt)
+Files:	    src/normal.c
+
+
+*** ../vim-7.4.424/src/normal.c	2014-07-23 12:31:17.207990767 +0200
+--- src/normal.c	2014-08-29 14:15:14.158440247 +0200
+***************
+*** 4509,4521 ****
+  #if defined(FEAT_LINEBREAK) || defined(FEAT_MBYTE)
+      if (curwin->w_cursor.col > 0 && curwin->w_p_wrap)
+      {
+  	/*
+  	 * Check for landing on a character that got split at the end of the
+  	 * last line.  We want to advance a screenline, not end up in the same
+  	 * screenline or move two screenlines.
+  	 */
+  	validate_virtcol();
+! 	if (curwin->w_virtcol > curwin->w_curswant
+  		&& (curwin->w_curswant < (colnr_T)width1
+  		    ? (curwin->w_curswant > (colnr_T)width1 / 2)
+  		    : ((curwin->w_curswant - width1) % width2
+--- 4509,4527 ----
+  #if defined(FEAT_LINEBREAK) || defined(FEAT_MBYTE)
+      if (curwin->w_cursor.col > 0 && curwin->w_p_wrap)
+      {
++ 	colnr_T virtcol;
++ 
+  	/*
+  	 * Check for landing on a character that got split at the end of the
+  	 * last line.  We want to advance a screenline, not end up in the same
+  	 * screenline or move two screenlines.
+  	 */
+  	validate_virtcol();
+! 	virtcol = curwin->w_virtcol;
+! 	if (virtcol > (colnr_T)width1 && *p_sbr != NUL)
+! 	    virtcol -= vim_strsize(p_sbr);
+! 
+! 	if (virtcol > curwin->w_curswant
+  		&& (curwin->w_curswant < (colnr_T)width1
+  		    ? (curwin->w_curswant > (colnr_T)width1 / 2)
+  		    : ((curwin->w_curswant - width1) % width2
+*** ../vim-7.4.424/src/version.c	2014-08-29 13:49:48.678436915 +0200
+--- src/version.c	2014-08-29 14:17:26.938440537 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     425,
+  /**/
+
+-- 
+From "know your smileys":
+ !-|	I-am-a-Cylon-Centurian-with-one-red-eye-bouncing-back-and-forth
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.426 b/SOURCES/7.4.426
new file mode 100644
index 0000000..0022e9b
--- /dev/null
+++ b/SOURCES/7.4.426
@@ -0,0 +1,45 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.426
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.426
+Problem:    README File missing from list of files.
+Solution:   Update the list of files.
+Files:	    Filelist
+
+
+*** ../vim-7.4.425/Filelist	2014-08-10 13:46:30.424780490 +0200
+--- Filelist	2014-08-29 15:08:47.914447267 +0200
+***************
+*** 82,87 ****
+--- 82,88 ----
+  		src/xxd/xxd.c \
+  		src/main.aap \
+  		src/testdir/main.aap \
++ 		src/testdir/README.txt \
+  		src/testdir/*.in \
+  		src/testdir/sautest/autoload/*.vim \
+  		src/testdir/test[0-9]*.ok \
+*** ../vim-7.4.425/src/version.c	2014-08-29 14:20:47.418440975 +0200
+--- src/version.c	2014-08-29 15:09:33.234447366 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     426,
+  /**/
+
+-- 
+From "know your smileys":
+ :-O>-o   Smiley American tourist (note big mouth and camera)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.427 b/SOURCES/7.4.427
new file mode 100644
index 0000000..e59cd85
--- /dev/null
+++ b/SOURCES/7.4.427
@@ -0,0 +1,112 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.427
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.427
+Problem:    When an InsertCharPre autocommand executes system() typeahead may
+	    be echoed and messes up the display. (Jacob Niehus)
+Solution:   Do not set cooked mode when invoked from ":silent".
+Files:	    src/eval.c, runtime/doc/eval.txt
+
+
+*** ../vim-7.4.426/src/eval.c	2014-08-29 09:46:04.262404970 +0200
+--- src/eval.c	2014-08-29 15:37:57.034451088 +0200
+***************
+*** 18594,18599 ****
+--- 18594,18600 ----
+      int		err = FALSE;
+      FILE	*fd;
+      list_T	*list = NULL;
++     int		flags = SHELL_SILENT;
+  
+      rettv->v_type = VAR_STRING;
+      rettv->vval.v_string = NULL;
+***************
+*** 18643,18648 ****
+--- 18644,18654 ----
+  	}
+      }
+  
++     /* Omit SHELL_COOKED when invoked with ":silent".  Avoids that the shell
++      * echoes typeahead, that messes up the display. */
++     if (!msg_silent)
++ 	flags += SHELL_COOKED;
++ 
+      if (retlist)
+      {
+  	int		len;
+***************
+*** 18652,18659 ****
+  	char_u		*end;
+  	int		i;
+  
+! 	res = get_cmd_output(get_tv_string(&argvars[0]), infile,
+! 					   SHELL_SILENT | SHELL_COOKED, &len);
+  	if (res == NULL)
+  	    goto errret;
+  
+--- 18658,18664 ----
+  	char_u		*end;
+  	int		i;
+  
+! 	res = get_cmd_output(get_tv_string(&argvars[0]), infile, flags, &len);
+  	if (res == NULL)
+  	    goto errret;
+  
+***************
+*** 18694,18701 ****
+      }
+      else
+      {
+! 	res = get_cmd_output(get_tv_string(&argvars[0]), infile,
+! 					   SHELL_SILENT | SHELL_COOKED, NULL);
+  #ifdef USE_CR
+  	/* translate <CR> into <NL> */
+  	if (res != NULL)
+--- 18699,18705 ----
+      }
+      else
+      {
+! 	res = get_cmd_output(get_tv_string(&argvars[0]), infile, flags, NULL);
+  #ifdef USE_CR
+  	/* translate <CR> into <NL> */
+  	if (res != NULL)
+*** ../vim-7.4.426/runtime/doc/eval.txt	2014-08-06 14:52:05.035236174 +0200
+--- runtime/doc/eval.txt	2014-08-29 15:49:48.918452643 +0200
+***************
+*** 6071,6076 ****
+--- 6093,6104 ----
+  		list items converted to NULs).  
+  		Pipes are not used.
+  
++ 		When prepended by |:silent| the shell will not be set to
++ 		cooked mode.  This is meant to be used for commands that do
++ 		not need the user to type.  It avoids stray characters showing
++ 		up on the screen which require |CTRL-L| to remove. >
++ 			:silent let f = system('ls *.vim')
++ <
+  		Note: Use |shellescape()| or |::S| with |expand()| or 
+  		|fnamemodify()| to escape special characters in a command 
+  		argument.  Newlines in {expr} may cause the command to fail.  
+*** ../vim-7.4.426/src/version.c	2014-08-29 15:12:50.950447798 +0200
+--- src/version.c	2014-08-29 15:39:07.862451242 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     427,
+  /**/
+
+-- 
+How many light bulbs does it take to change a person?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.428 b/SOURCES/7.4.428
new file mode 100644
index 0000000..bb7d7e7
--- /dev/null
+++ b/SOURCES/7.4.428
@@ -0,0 +1,105 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.428
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.428
+Problem:    executable() may return a wrong result on MS-Windows.
+Solution:   Change the way SearchPath() is called. (Yasuhiro Matsumoto, Ken
+	    Takata)
+Files:	    src/os_win32.c
+
+
+*** ../vim-7.4.427/src/os_win32.c	2014-07-09 20:51:04.515583033 +0200
+--- src/os_win32.c	2014-08-29 17:44:01.782467612 +0200
+***************
+*** 1906,1911 ****
+--- 1906,1913 ----
+  {
+      char	*dum;
+      char	fname[_MAX_PATH];
++     char	*curpath, *newpath;
++     long	n;
+  
+  #ifdef FEAT_MBYTE
+      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+***************
+*** 1913,1923 ****
+  	WCHAR	*p = enc_to_utf16(name, NULL);
+  	WCHAR	fnamew[_MAX_PATH];
+  	WCHAR	*dumw;
+! 	long	n;
+  
+  	if (p != NULL)
+  	{
+! 	    n = (long)SearchPathW(NULL, p, NULL, _MAX_PATH, fnamew, &dumw);
+  	    vim_free(p);
+  	    if (n > 0 || GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
+  	    {
+--- 1915,1933 ----
+  	WCHAR	*p = enc_to_utf16(name, NULL);
+  	WCHAR	fnamew[_MAX_PATH];
+  	WCHAR	*dumw;
+! 	WCHAR	*wcurpath, *wnewpath;
+  
+  	if (p != NULL)
+  	{
+! 	    wcurpath = _wgetenv(L"PATH");
+! 	    wnewpath = (WCHAR*)alloc((unsigned)(wcslen(wcurpath) + 3)
+! 							    * sizeof(WCHAR));
+! 	    if (wnewpath == NULL)
+! 		return FALSE;
+! 	    wcscpy(wnewpath, L".;");
+! 	    wcscat(wnewpath, wcurpath);
+! 	    n = (long)SearchPathW(wnewpath, p, NULL, _MAX_PATH, fnamew, &dumw);
+! 	    vim_free(wnewpath);
+  	    vim_free(p);
+  	    if (n > 0 || GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
+  	    {
+***************
+*** 1933,1939 ****
+  	}
+      }
+  #endif
+!     if (SearchPath(NULL, name, NULL, _MAX_PATH, fname, &dum) == 0)
+  	return FALSE;
+      if (mch_isdir(fname))
+  	return FALSE;
+--- 1943,1958 ----
+  	}
+      }
+  #endif
+! 
+!     curpath = getenv("PATH");
+!     newpath = (char*)alloc((unsigned)(STRLEN(curpath) + 3));
+!     if (newpath == NULL)
+! 	return FALSE;
+!     STRCPY(newpath, ".;");
+!     STRCAT(newpath, curpath);
+!     n = (long)SearchPath(newpath, name, NULL, _MAX_PATH, fname, &dum);
+!     vim_free(newpath);
+!     if (n == 0)
+  	return FALSE;
+      if (mch_isdir(fname))
+  	return FALSE;
+*** ../vim-7.4.427/src/version.c	2014-08-29 15:53:43.714453155 +0200
+--- src/version.c	2014-08-29 17:44:50.598467718 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     428,
+  /**/
+
+-- 
+You are only young once, but you can stay immature indefinitely.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.429 b/SOURCES/7.4.429
new file mode 100644
index 0000000..3d7de57
--- /dev/null
+++ b/SOURCES/7.4.429
@@ -0,0 +1,47 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.429
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.429
+Problem:    Build fails with fewer features. (Elimar Riesebieter)
+Solution:   Add #ifdef.
+Files:	    src/normal.c
+
+
+*** ../vim-7.4.428/src/normal.c	2014-08-29 14:20:47.418440975 +0200
+--- src/normal.c	2014-08-30 13:29:17.342622953 +0200
+***************
+*** 4518,4525 ****
+--- 4518,4527 ----
+  	 */
+  	validate_virtcol();
+  	virtcol = curwin->w_virtcol;
++ # if defined(FEAT_LINEBREAK)
+  	if (virtcol > (colnr_T)width1 && *p_sbr != NUL)
+  	    virtcol -= vim_strsize(p_sbr);
++ # endif
+  
+  	if (virtcol > curwin->w_curswant
+  		&& (curwin->w_curswant < (colnr_T)width1
+*** ../vim-7.4.428/src/version.c	2014-08-29 17:45:28.066467800 +0200
+--- src/version.c	2014-08-30 13:29:57.646623041 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     429,
+  /**/
+
+-- 
+Where do you want to crash today?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.430 b/SOURCES/7.4.430
new file mode 100644
index 0000000..f6232b0
--- /dev/null
+++ b/SOURCES/7.4.430
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.430
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.430
+Problem:    test_listlbr fails when compiled with normal features.
+Solution:   Check for the +conceal feature.
+Files:	    src/testdir/test_listlbr.in
+
+
+*** ../vim-7.4.429/src/testdir/test_listlbr.in	2014-08-29 12:08:39.686423658 +0200
+--- src/testdir/test_listlbr.in	2014-08-30 17:07:04.930651497 +0200
+***************
+*** 2,8 ****
+  
+  STARTTEST
+  :so small.vim
+! :if !exists("+linebreak") | e! test.ok | w! test.out | qa! | endif
+  :10new|:vsp|:vert resize 20
+  :put =\"\tabcdef hijklmn\tpqrstuvwxyz_1060ABCDEFGHIJKLMNOP \"
+  :norm! zt
+--- 2,8 ----
+  
+  STARTTEST
+  :so small.vim
+! :if !exists("+linebreak") || !exists("+conceal") | e! test.ok | w! test.out | qa! | endif
+  :10new|:vsp|:vert resize 20
+  :put =\"\tabcdef hijklmn\tpqrstuvwxyz_1060ABCDEFGHIJKLMNOP \"
+  :norm! zt
+*** ../vim-7.4.429/src/version.c	2014-08-30 13:32:03.406623315 +0200
+--- src/version.c	2014-08-30 17:08:01.758651621 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     430,
+  /**/
+
+-- 
+You can't have everything.  Where would you put it?
+		-- Steven Wright
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.431 b/SOURCES/7.4.431
new file mode 100644
index 0000000..e1b0714
--- /dev/null
+++ b/SOURCES/7.4.431
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.431
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.431
+Problem:    Compiler warning.
+Solution:   Add type cast. (Mike Williams)
+Files:	    src/ex_docmd.c
+
+
+*** ../vim-7.4.430/src/ex_docmd.c	2014-08-23 14:16:11.884625637 +0200
+--- src/ex_docmd.c	2014-09-02 23:30:26.567267923 +0200
+***************
+*** 2155,2161 ****
+  	p = ea.cmd;
+  	while (ASCII_ISALNUM(*p))
+  	    ++p;
+! 	p = vim_strnsave(ea.cmd, p - ea.cmd);
+  	ret = apply_autocmds(EVENT_CMDUNDEFINED, p, p, TRUE, NULL);
+  	vim_free(p);
+  	if (ret && !aborting())
+--- 2155,2161 ----
+  	p = ea.cmd;
+  	while (ASCII_ISALNUM(*p))
+  	    ++p;
+! 	p = vim_strnsave(ea.cmd, (int)(p - ea.cmd));
+  	ret = apply_autocmds(EVENT_CMDUNDEFINED, p, p, TRUE, NULL);
+  	vim_free(p);
+  	if (ret && !aborting())
+*** ../vim-7.4.430/src/version.c	2014-08-30 18:10:15.106659776 +0200
+--- src/version.c	2014-09-09 12:21:42.312501370 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     431,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+105. When someone asks you for your address, you tell them your URL.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.432 b/SOURCES/7.4.432
new file mode 100644
index 0000000..f06cce1
--- /dev/null
+++ b/SOURCES/7.4.432
@@ -0,0 +1,107 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.432
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.432
+Problem:    When the startup code expands command line arguments, setting
+	    'encoding' will not properly convert the arguments.
+Solution:   Call get_cmd_argsW() early in main(). (Yasuhiro Matsumoto)
+Files:	    src/os_win32.c, src/main.c, src/os_mswin.c
+
+
+*** ../vim-7.4.431/src/os_win32.c	2014-08-29 17:45:28.066467800 +0200
+--- src/os_win32.c	2014-09-09 12:14:15.768500395 +0200
+***************
+*** 6461,6466 ****
+--- 6461,6467 ----
+      int		argc = 0;
+      int		i;
+  
++     free_cmd_argsW();
+      ArglistW = CommandLineToArgvW(GetCommandLineW(), &nArgsW);
+      if (ArglistW != NULL)
+      {
+***************
+*** 6493,6499 ****
+--- 6494,6504 ----
+      global_argc = argc;
+      global_argv = argv;
+      if (argc > 0)
++     {
++ 	if (used_file_indexes != NULL)
++ 	    free(used_file_indexes);
+  	used_file_indexes = malloc(argc * sizeof(int));
++     }
+  
+      if (argvp != NULL)
+  	*argvp = argv;
+*** ../vim-7.4.431/src/main.c	2014-08-10 13:34:59.056785459 +0200
+--- src/main.c	2014-09-09 12:16:09.016500642 +0200
+***************
+*** 178,183 ****
+--- 178,191 ----
+       */
+      mch_early_init();
+  
++ #if defined(WIN32) && defined(FEAT_MBYTE)
++     /*
++      * MingW expands command line arguments, which confuses our code to
++      * convert when 'encoding' changes.  Get the unexpanded arguments.
++      */
++     argc = get_cmd_argsW(&argv);
++ #endif
++ 
+      /* Many variables are in "params" so that we can pass them to invoked
+       * functions without a lot of arguments.  "argc" and "argv" are also
+       * copied, so that they can be changed. */
+***************
+*** 1496,1501 ****
+--- 1504,1512 ----
+      if (garbage_collect_at_exit)
+  	garbage_collect();
+  #endif
++ #if defined(WIN32) && defined(FEAT_MBYTE)
++     free_cmd_argsW();
++ #endif
+  
+      mch_exit(exitval);
+  }
+*** ../vim-7.4.431/src/os_mswin.c	2014-03-19 12:37:18.537826062 +0100
+--- src/os_mswin.c	2014-09-09 12:17:25.696500810 +0200
+***************
+*** 277,286 ****
+      AnsiUpperBuff(toupper_tab, 256);
+      AnsiLowerBuff(tolower_tab, 256);
+  #endif
+- 
+- #if defined(FEAT_MBYTE) && !defined(FEAT_GUI)
+-     (void)get_cmd_argsW(NULL);
+- #endif
+  }
+  
+  
+--- 277,282 ----
+*** ../vim-7.4.431/src/version.c	2014-09-09 12:21:57.716501404 +0200
+--- src/version.c	2014-09-09 12:24:38.440501755 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     432,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+106. When told to "go to your room" you inform your parents that you
+     can't...because you were kicked out and banned.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.433 b/SOURCES/7.4.433
new file mode 100644
index 0000000..7fdb85a
--- /dev/null
+++ b/SOURCES/7.4.433
@@ -0,0 +1,71 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.433
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.433
+Problem:    Test 75 fails on MS-Windows.
+Solution:   Use ":normal" instead of feedkeys(). (Michael Soyka)
+Files:	    src/testdir/test75.in
+
+
+*** ../vim-7.4.432/src/testdir/test75.in	2014-03-12 20:17:47.752982126 +0100
+--- src/testdir/test75.in	2014-09-09 13:48:54.332512799 +0200
+***************
+*** 23,38 ****
+  Go:"
+  :" Outside of the range, minimum
+  :inoremap <Char-0x1040> a
+! :call feedkeys("a\u1040\<Esc>")
+  :" Inside of the range, minimum
+  :inoremap <Char-0x103f> b
+! :call feedkeys("a\u103f\<Esc>")
+  :" Inside of the range, maximum
+  :inoremap <Char-0xf03f> c
+! :call feedkeys("a\uf03f\<Esc>")
+  :" Outside of the range, maximum
+  :inoremap <Char-0xf040> d
+! :call feedkeys("a\uf040\<Esc>")
+  :"
+  :/^eof/+1,$w! test.out
+  :qa!
+--- 23,38 ----
+  Go:"
+  :" Outside of the range, minimum
+  :inoremap <Char-0x1040> a
+! :execute "normal a\u1040\<Esc>"
+  :" Inside of the range, minimum
+  :inoremap <Char-0x103f> b
+! :execute "normal a\u103f\<Esc>"
+  :" Inside of the range, maximum
+  :inoremap <Char-0xf03f> c
+! :execute "normal a\uf03f\<Esc>"
+  :" Outside of the range, maximum
+  :inoremap <Char-0xf040> d
+! :execute "normal a\uf040\<Esc>"
+  :"
+  :/^eof/+1,$w! test.out
+  :qa!
+*** ../vim-7.4.432/src/version.c	2014-09-09 12:25:27.768501863 +0200
+--- src/version.c	2014-09-09 13:49:55.160512932 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     433,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+107. When using your phone you forget that you don't have to use your
+     keyboard.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.434 b/SOURCES/7.4.434
new file mode 100644
index 0000000..0a1fbe8
--- /dev/null
+++ b/SOURCES/7.4.434
@@ -0,0 +1,139 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.434
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.434
+Problem:    gettabvar() is not consistent with getwinvar() and getbufvar().
+Solution:   Return a dict with all variables when the varname is empty.
+	    (Yasuhiro Matsumoto)
+Files:	    src/eval.c, runtime/doc/eval.txt, src/testdir/test91.in,
+	    src/testdir/test91.ok
+
+
+*** ../vim-7.4.433/src/eval.c	2014-08-29 15:53:43.706453155 +0200
+--- src/eval.c	2014-09-09 16:03:34.372530448 +0200
+***************
+*** 12071,12077 ****
+      typval_T	*argvars;
+      typval_T	*rettv;
+  {
+!     tabpage_T	*tp;
+      dictitem_T	*v;
+      char_u	*varname;
+      int		done = FALSE;
+--- 12071,12078 ----
+      typval_T	*argvars;
+      typval_T	*rettv;
+  {
+!     win_T	*win, *oldcurwin;
+!     tabpage_T	*tp, *oldtabpage;
+      dictitem_T	*v;
+      char_u	*varname;
+      int		done = FALSE;
+***************
+*** 12083,12095 ****
+      tp = find_tabpage((int)get_tv_number_chk(&argvars[0], NULL));
+      if (tp != NULL && varname != NULL)
+      {
+  	/* look up the variable */
+! 	v = find_var_in_ht(&tp->tp_vars->dv_hashtab, 0, varname, FALSE);
+  	if (v != NULL)
+  	{
+  	    copy_tv(&v->di_tv, rettv);
+  	    done = TRUE;
+  	}
+      }
+  
+      if (!done && argvars[2].v_type != VAR_UNKNOWN)
+--- 12084,12104 ----
+      tp = find_tabpage((int)get_tv_number_chk(&argvars[0], NULL));
+      if (tp != NULL && varname != NULL)
+      {
++ 	/* Set curwin to be our win, temporarily.  Also set the tabpage,
++ 	 * otherwise the window is not valid. */
++ 	switch_win(&oldcurwin, &oldtabpage, win, tp, TRUE);
++ 
+  	/* look up the variable */
+! 	/* Let gettabvar({nr}, "") return the "t:" dictionary. */
+! 	v = find_var_in_ht(&tp->tp_vars->dv_hashtab, 't', varname, FALSE);
+  	if (v != NULL)
+  	{
+  	    copy_tv(&v->di_tv, rettv);
+  	    done = TRUE;
+  	}
++ 
++ 	/* restore previous notion of curwin */
++ 	restore_win(oldcurwin, oldtabpage, TRUE);
+      }
+  
+      if (!done && argvars[2].v_type != VAR_UNKNOWN)
+*** ../vim-7.4.433/runtime/doc/eval.txt	2014-08-29 15:53:43.714453155 +0200
+--- runtime/doc/eval.txt	2014-09-09 16:00:31.776530049 +0200
+***************
+*** 3535,3540 ****
+--- 3576,3583 ----
+  		Get the value of a tab-local variable {varname} in tab page
+  		{tabnr}. |t:var|
+  		Tabs are numbered starting with one.
++ 		When {varname} is empty a dictionary with all tab-local
++ 		variables is returned.
+  		Note that the name without "t:" must be used.
+  		When the tab or variable doesn't exist {def} or an empty
+  		string is returned, there is no error message.
+*** ../vim-7.4.433/src/testdir/test91.in	2013-07-24 14:53:47.000000000 +0200
+--- src/testdir/test91.in	2014-09-09 16:08:40.116531116 +0200
+***************
+*** 55,60 ****
+--- 55,61 ----
+  :tabnew
+  :tabnew
+  :let t:var_list = [1, 2, 3]
++ :let t:other = 777
+  :let def_list = [4, 5, 6, 7]
+  :tabrewind
+  :$put =string(gettabvar(3, 'var_list'))
+*** ../vim-7.4.433/src/testdir/test91.ok	2013-07-24 14:52:47.000000000 +0200
+--- src/testdir/test91.ok	2014-09-09 16:09:27.624531220 +0200
+***************
+*** 26,33 ****
+  0
+  [1, 2, 3]
+  [1, 2, 3]
+! ''
+! [4, 5, 6, 7]
+  [4, 5, 6, 7]
+  ''
+  [4, 5, 6, 7]
+--- 26,33 ----
+  0
+  [1, 2, 3]
+  [1, 2, 3]
+! {'var_list': [1, 2, 3], 'other': 777}
+! {'var_list': [1, 2, 3], 'other': 777}
+  [4, 5, 6, 7]
+  ''
+  [4, 5, 6, 7]
+*** ../vim-7.4.433/src/version.c	2014-09-09 13:52:55.028513324 +0200
+--- src/version.c	2014-09-09 16:09:17.824531199 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     434,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+108. While reading a magazine, you look for the Zoom icon for a better
+     look at a photograph.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.435 b/SOURCES/7.4.435
new file mode 100644
index 0000000..32ce2d3
--- /dev/null
+++ b/SOURCES/7.4.435
@@ -0,0 +1,63 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.435
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.435
+Problem:    Line formatting behaves differently when 'linebreak' is set.
+	    (mvxxc)
+Solution:   Disable 'linebreak' temporarily. (Christian Brabandt)
+Files:	    src/edit.c
+
+
+*** ../vim-7.4.434/src/edit.c	2014-08-16 18:13:00.082044726 +0200
+--- src/edit.c	2014-09-09 16:21:08.556532751 +0200
+***************
+*** 6131,6136 ****
+--- 6131,6142 ----
+      int		no_leader = FALSE;
+      int		do_comments = (flags & INSCHAR_DO_COM);
+  #endif
++ #ifdef FEAT_LINEBREAK
++     int		has_lbr = curwin->w_p_lbr;
++ 
++     /* make sure win_lbr_chartabsize() counts correctly */
++     curwin->w_p_lbr = FALSE;
++ #endif
+  
+      /*
+       * When 'ai' is off we don't want a space under the cursor to be
+***************
+*** 6483,6488 ****
+--- 6489,6497 ----
+      if (save_char != NUL)		/* put back space after cursor */
+  	pchar_cursor(save_char);
+  
++ #ifdef FEAT_LINEBREAK
++     curwin->w_p_lbr = has_lbr;
++ #endif
+      if (!format_only && haveto_redraw)
+      {
+  	update_topline();
+*** ../vim-7.4.434/src/version.c	2014-09-09 16:13:05.040531695 +0200
+--- src/version.c	2014-09-09 16:19:57.272532595 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     435,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+109. You actually read -- and enjoy -- lists like this.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.436 b/SOURCES/7.4.436
new file mode 100644
index 0000000..53b3207
--- /dev/null
+++ b/SOURCES/7.4.436
@@ -0,0 +1,48 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.436
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.436
+Problem:    ml_get error for autocommand that moves the cursor of the current
+	    window.
+Solution:   Check the cursor position after switching back to the current
+	    buffer.  (Christian Brabandt)
+Files:	    src/fileio.c
+
+
+*** ../vim-7.4.435/src/fileio.c	2014-08-22 23:05:50.106606614 +0200
+--- src/fileio.c	2014-09-09 16:46:29.224536073 +0200
+***************
+*** 9009,9014 ****
+--- 9009,9017 ----
+  
+  	    curwin = aco->save_curwin;
+  	    curbuf = curwin->w_buffer;
++ 	    /* In case the autocommand move the cursor to a position that that
++ 	     * not exist in curbuf. */
++ 	    check_cursor();
+  	}
+      }
+  }
+*** ../vim-7.4.435/src/version.c	2014-09-09 16:32:35.828534252 +0200
+--- src/version.c	2014-09-09 16:48:14.796536303 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     436,
+  /**/
+
+-- 
+In a world without walls and borders, who needs windows and gates?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.437 b/SOURCES/7.4.437
new file mode 100644
index 0000000..203b152
--- /dev/null
+++ b/SOURCES/7.4.437
@@ -0,0 +1,116 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.437
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.437
+Problem:    New and old regexp engine are not consistent.
+Solution:   Also give an error for "\ze*" for the old regexp engine.
+Files:	    src/regexp.c, src/regexp_nfa.c
+
+
+*** ../vim-7.4.436/src/regexp.c	2014-07-09 19:32:30.935678834 +0200
+--- src/regexp.c	2014-09-09 17:11:32.444539356 +0200
+***************
+*** 358,363 ****
+--- 358,365 ----
+  static char_u	*regprop __ARGS((char_u *));
+  #endif
+  
++ static int re_mult_next __ARGS((char *what));
++ 
+  static char_u e_missingbracket[] = N_("E769: Missing ] after %s[");
+  static char_u e_unmatchedpp[] = N_("E53: Unmatched %s%%(");
+  static char_u e_unmatchedp[] = N_("E54: Unmatched %s(");
+***************
+*** 2166,2174 ****
+--- 2168,2180 ----
+  #endif
+  
+  		case 's': ret = regnode(MOPEN + 0);
++ 			  if (re_mult_next("\\zs") == FAIL)
++ 			      return NULL;
+  			  break;
+  
+  		case 'e': ret = regnode(MCLOSE + 0);
++ 			  if (re_mult_next("\\ze") == FAIL)
++ 			      return NULL;
+  			  break;
+  
+  		default:  EMSG_RET_NULL(_("E68: Invalid character after \\z"));
+***************
+*** 7005,7010 ****
+--- 7011,7028 ----
+  }
+  #endif	    /* DEBUG */
+  
++ /*
++  * Used in a place where no * or \+ can follow.
++  */
++     static int
++ re_mult_next(what)
++     char *what;
++ {
++     if (re_multi_type(peekchr()) == MULTI_MULT)
++ 	EMSG2_RET_FAIL(_("E888: (NFA regexp) cannot repeat %s"), what);
++     return OK;
++ }
++ 
+  #ifdef FEAT_MBYTE
+  static void mb_decompose __ARGS((int c, int *c1, int *c2, int *c3));
+  
+*** ../vim-7.4.436/src/regexp_nfa.c	2014-08-29 11:56:21.350422045 +0200
+--- src/regexp_nfa.c	2014-09-09 17:10:17.572539193 +0200
+***************
+*** 291,297 ****
+  static int nfa_regconcat __ARGS((void));
+  static int nfa_regbranch __ARGS((void));
+  static int nfa_reg __ARGS((int paren));
+- static int re_mult_next __ARGS((char *what));
+  #ifdef DEBUG
+  static void nfa_set_code __ARGS((int c));
+  static void nfa_postfix_dump __ARGS((char_u *expr, int retval));
+--- 291,296 ----
+***************
+*** 2281,2298 ****
+      return OK;
+  }
+  
+- /*
+-  * Used in a place where no * or \+ can follow.
+-  */
+-     static int
+- re_mult_next(what)
+-     char *what;
+- {
+-     if (re_multi_type(peekchr()) == MULTI_MULT)
+- 	EMSG2_RET_FAIL(_("E888: (NFA regexp) cannot repeat %s"), what);
+-     return OK;
+- }
+- 
+  #ifdef DEBUG
+  static char_u code[50];
+  
+--- 2280,2285 ----
+*** ../vim-7.4.436/src/version.c	2014-09-09 16:59:34.792537789 +0200
+--- src/version.c	2014-09-09 17:12:34.352539491 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     437,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+110. You actually volunteer to become your employer's webmaster.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.438 b/SOURCES/7.4.438
new file mode 100644
index 0000000..7804f6d
--- /dev/null
+++ b/SOURCES/7.4.438
@@ -0,0 +1,48 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.438
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.438
+Problem:    Cached values for 'cino' not reset for ":set all&".
+Solution:   Call parse_cino(). (Yukihiro Nakadaira)
+Files:	    src/option.c
+
+
+*** ../vim-7.4.437/src/option.c	2014-08-24 21:39:45.488526954 +0200
+--- src/option.c	2014-09-09 17:29:43.216541739 +0200
+***************
+*** 3645,3650 ****
+--- 3645,3653 ----
+  #else
+  	win_comp_scroll(curwin);
+  #endif
++ #ifdef FEAT_CINDENT
++     parse_cino(curbuf);
++ #endif
+  }
+  
+  /*
+*** ../vim-7.4.437/src/version.c	2014-09-09 17:18:44.008540299 +0200
+--- src/version.c	2014-09-09 17:32:16.108542073 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     438,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+112. You are amazed that anyone uses a phone without a modem on it...let
+     alone hear actual voices.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.439 b/SOURCES/7.4.439
new file mode 100644
index 0000000..7d9ed9d
--- /dev/null
+++ b/SOURCES/7.4.439
@@ -0,0 +1,56 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.439
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.439
+Problem:    Duplicate message in message history.  Some quickfix messages
+	    appear twice. (Gary Johnson)
+Solution:   Do not reset keep_msg too early. (Hirohito Higashi)
+Files:	    src/main.c
+
+
+*** ../vim-7.4.438/src/main.c	2014-09-09 12:25:27.764501863 +0200
+--- src/main.c	2014-09-09 17:37:56.612542817 +0200
+***************
+*** 1249,1257 ****
+  		char_u *p;
+  
+  		/* msg_attr_keep() will set keep_msg to NULL, must free the
+! 		 * string here. */
+  		p = keep_msg;
+- 		keep_msg = NULL;
+  		msg_attr(p, keep_msg_attr);
+  		vim_free(p);
+  	    }
+--- 1249,1257 ----
+  		char_u *p;
+  
+  		/* msg_attr_keep() will set keep_msg to NULL, must free the
+! 		 * string here. Don't reset keep_msg, msg_attr_keep() uses it
+! 		 * to check for duplicates. */
+  		p = keep_msg;
+  		msg_attr(p, keep_msg_attr);
+  		vim_free(p);
+  	    }
+*** ../vim-7.4.438/src/version.c	2014-09-09 17:33:02.704542175 +0200
+--- src/version.c	2014-09-09 17:41:11.984543243 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     439,
+  /**/
+
+-- 
+Corduroy pillows: They're making headlines!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.440 b/SOURCES/7.4.440
new file mode 100644
index 0000000..24ee043
--- /dev/null
+++ b/SOURCES/7.4.440
@@ -0,0 +1,73 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.440
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.440
+Problem:    Omni complete popup drawn incorrectly.
+Solution:   Call validate_cursor() instead of check_cursor(). (Hirohito
+	    Higashi)
+Files:	    src/edit.c
+
+
+*** ../vim-7.4.439/src/edit.c	2014-09-09 16:32:35.828534252 +0200
+--- src/edit.c	2014-09-09 17:59:17.824545615 +0200
+***************
+*** 4035,4041 ****
+  	goto theend;
+      }
+      curwin->w_cursor = pos;	/* restore the cursor position */
+!     check_cursor();
+      if (!equalpos(curwin->w_cursor, pos))
+      {
+  	EMSG(_(e_compldel));
+--- 4035,4041 ----
+  	goto theend;
+      }
+      curwin->w_cursor = pos;	/* restore the cursor position */
+!     validate_cursor();
+      if (!equalpos(curwin->w_cursor, pos))
+      {
+  	EMSG(_(e_compldel));
+***************
+*** 5273,5279 ****
+  		return FAIL;
+  	    }
+  	    curwin->w_cursor = pos;	/* restore the cursor position */
+! 	    check_cursor();
+  	    if (!equalpos(curwin->w_cursor, pos))
+  	    {
+  		EMSG(_(e_compldel));
+--- 5273,5279 ----
+  		return FAIL;
+  	    }
+  	    curwin->w_cursor = pos;	/* restore the cursor position */
+! 	    validate_cursor();
+  	    if (!equalpos(curwin->w_cursor, pos))
+  	    {
+  		EMSG(_(e_compldel));
+*** ../vim-7.4.439/src/version.c	2014-09-09 17:47:34.584544079 +0200
+--- src/version.c	2014-09-09 17:57:33.232545387 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     440,
+  /**/
+
+-- 
+Nobody will ever need more than 640 kB RAM.
+		-- Bill Gates, 1983
+Windows 98 requires 16 MB RAM.
+		-- Bill Gates, 1999
+Logical conclusion: Nobody will ever need Windows 98.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.441 b/SOURCES/7.4.441
new file mode 100644
index 0000000..83647c8
--- /dev/null
+++ b/SOURCES/7.4.441
@@ -0,0 +1,64 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.441
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.441
+Problem:    Endless loop and other problems when 'cedit' is set to CTRL-C.
+Solution:   Do not call ex_window() when ex_normal_busy or got_int was set.
+	    (Yasuhiro Matsumoto)
+Files:	    src/ex_getln.c
+
+
+*** ../vim-7.4.440/src/ex_getln.c	2014-08-17 17:24:03.967017727 +0200
+--- src/ex_getln.c	2014-09-09 18:41:19.304551123 +0200
+***************
+*** 759,769 ****
+  #ifdef FEAT_CMDWIN
+  	if (c == cedit_key || c == K_CMDWIN)
+  	{
+! 	    /*
+! 	     * Open a window to edit the command line (and history).
+! 	     */
+! 	    c = ex_window();
+! 	    some_key_typed = TRUE;
+  	}
+  # ifdef FEAT_DIGRAPHS
+  	else
+--- 759,772 ----
+  #ifdef FEAT_CMDWIN
+  	if (c == cedit_key || c == K_CMDWIN)
+  	{
+! 	    if (ex_normal_busy == 0 && got_int == FALSE)
+! 	    {
+! 		/*
+! 		 * Open a window to edit the command line (and history).
+! 		 */
+! 		c = ex_window();
+! 		some_key_typed = TRUE;
+! 	    }
+  	}
+  # ifdef FEAT_DIGRAPHS
+  	else
+*** ../vim-7.4.440/src/version.c	2014-09-09 18:29:24.328549561 +0200
+--- src/version.c	2014-09-09 18:40:16.680550986 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     441,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+114. You are counting items, you go "0,1,2,3,4,5,6,7,8,9,A,B,C,D...".
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.442 b/SOURCES/7.4.442
new file mode 100644
index 0000000..0a18849
--- /dev/null
+++ b/SOURCES/7.4.442
@@ -0,0 +1,72 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.442
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.442 (after 7.4.434)
+Problem:    Using unitinialized variable.
+Solution:   Pass the first window of the tabpage.
+Files:	    src/eval.c
+
+
+*** ../vim-7.4.441/src/eval.c	2014-09-09 16:13:05.040531695 +0200
+--- src/eval.c	2014-09-09 22:52:50.916584088 +0200
+***************
+*** 12071,12077 ****
+      typval_T	*argvars;
+      typval_T	*rettv;
+  {
+!     win_T	*win, *oldcurwin;
+      tabpage_T	*tp, *oldtabpage;
+      dictitem_T	*v;
+      char_u	*varname;
+--- 12071,12077 ----
+      typval_T	*argvars;
+      typval_T	*rettv;
+  {
+!     win_T	*oldcurwin;
+      tabpage_T	*tp, *oldtabpage;
+      dictitem_T	*v;
+      char_u	*varname;
+***************
+*** 12084,12092 ****
+      tp = find_tabpage((int)get_tv_number_chk(&argvars[0], NULL));
+      if (tp != NULL && varname != NULL)
+      {
+! 	/* Set curwin to be our win, temporarily.  Also set the tabpage,
+! 	 * otherwise the window is not valid. */
+! 	switch_win(&oldcurwin, &oldtabpage, win, tp, TRUE);
+  
+  	/* look up the variable */
+  	/* Let gettabvar({nr}, "") return the "t:" dictionary. */
+--- 12084,12092 ----
+      tp = find_tabpage((int)get_tv_number_chk(&argvars[0], NULL));
+      if (tp != NULL && varname != NULL)
+      {
+! 	/* Set tp to be our tabpage, temporarily.  Also set the window to the
+! 	 * first window in the tabpage, otherwise the window is not valid. */
+! 	switch_win(&oldcurwin, &oldtabpage, tp->tp_firstwin, tp, TRUE);
+  
+  	/* look up the variable */
+  	/* Let gettabvar({nr}, "") return the "t:" dictionary. */
+*** ../vim-7.4.441/src/version.c	2014-09-09 18:45:45.888551705 +0200
+--- src/version.c	2014-09-09 23:10:27.544586396 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     442,
+  /**/
+
+-- 
+Two percent of zero is almost nothing.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.443 b/SOURCES/7.4.443
new file mode 100644
index 0000000..f9e7111
--- /dev/null
+++ b/SOURCES/7.4.443
@@ -0,0 +1,54 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.443
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.443
+Problem:    Error reported by ubsan when running test 72.
+Solution:   Add type cast to unsigned. (Dominique Pelle)
+Files:	    src/undo.c
+
+
+
+*** ../vim-7.4.442/src/undo.c	2014-08-13 22:05:49.032892299 +0200
+--- src/undo.c	2014-09-11 22:19:35.936957186 +0200
+***************
+*** 1019,1025 ****
+  	int	n;
+  
+  	undo_read(bi, buf, (size_t)4);
+! 	n = (buf[0] << 24) + (buf[1] << 16) + (buf[2] << 8) + buf[3];
+  	return n;
+      }
+  #endif
+--- 1019,1025 ----
+  	int	n;
+  
+  	undo_read(bi, buf, (size_t)4);
+! 	n = ((unsigned)buf[0] << 24) + (buf[1] << 16) + (buf[2] << 8) + buf[3];
+  	return n;
+      }
+  #endif
+*** ../vim-7.4.442/src/version.c	2014-09-09 23:11:46.368586569 +0200
+--- src/version.c	2014-09-11 22:20:31.740957308 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     443,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+122. You ask if the Netaholics Anonymous t-shirt you ordered can be
+     sent to you via e-mail.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.444 b/SOURCES/7.4.444
new file mode 100644
index 0000000..b089a00
--- /dev/null
+++ b/SOURCES/7.4.444
@@ -0,0 +1,46 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.444
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.444
+Problem:    Reversed question mark not recognized as punctuation. (Issue 258)
+Solution:   Add the Supplemental Punctuation range.
+Files:	    src/mbyte.c
+
+
+*** ../vim-7.4.443/src/mbyte.c	2014-03-12 14:54:29.920684895 +0100
+--- src/mbyte.c	2014-09-15 14:24:06.389649777 +0200
+***************
+*** 2537,2542 ****
+--- 2537,2543 ----
+  	{0x2900, 0x2998, 1},		/* arrows, brackets, etc. */
+  	{0x29d8, 0x29db, 1},
+  	{0x29fc, 0x29fd, 1},
++ 	{0x2e00, 0x2e7f, 1},		/* supplemental punctuation */
+  	{0x3000, 0x3000, 0},		/* ideographic space */
+  	{0x3001, 0x3020, 1},		/* ideographic punctuation */
+  	{0x3030, 0x3030, 1},
+*** ../vim-7.4.443/src/version.c	2014-09-11 22:49:42.212961131 +0200
+--- src/version.c	2014-09-15 14:25:14.761649927 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     444,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+136. You decide to stay in a low-paying job teaching just for the
+     free Internet access.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.445 b/SOURCES/7.4.445
new file mode 100644
index 0000000..35ee45f
--- /dev/null
+++ b/SOURCES/7.4.445
@@ -0,0 +1,92 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.445
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.445
+Problem:    Clipboard may be cleared on startup.
+Solution:   Set clip_did_set_selection to -1 during startup. (Christian
+	    Brabandt)
+Files:	    src/main.c, src/ui.c
+
+
+*** ../vim-7.4.444/src/main.c	2014-09-09 17:47:34.584544079 +0200
+--- src/main.c	2014-09-19 13:38:29.802398710 +0200
+***************
+*** 958,965 ****
+--- 958,974 ----
+      if (p_im)
+  	need_start_insertmode = TRUE;
+  
++ #ifdef FEAT_CLIPBOARD
++     if (clip_unnamed)
++        /* do not overwrite system clipboard while starting up */
++        clip_did_set_selection = -1;
++ #endif
+  #ifdef FEAT_AUTOCMD
+      apply_autocmds(EVENT_VIMENTER, NULL, NULL, FALSE, curbuf);
++ # ifdef FEAT_CLIPBOARD
++     if (clip_did_set_selection < 0)
++        clip_did_set_selection = TRUE;
++ # endif
+      TIME_MSG("VimEnter autocommands");
+  #endif
+  
+*** ../vim-7.4.444/src/ui.c	2014-08-06 18:17:03.475147780 +0200
+--- src/ui.c	2014-09-19 13:39:48.442398882 +0200
+***************
+*** 571,577 ****
+  {
+      clip_unnamed_saved = clip_unnamed;
+  
+!     if (clip_did_set_selection)
+      {
+  	clip_unnamed = FALSE;
+  	clip_did_set_selection = FALSE;
+--- 571,577 ----
+  {
+      clip_unnamed_saved = clip_unnamed;
+  
+!     if (clip_did_set_selection > 0)
+      {
+  	clip_unnamed = FALSE;
+  	clip_did_set_selection = FALSE;
+***************
+*** 584,590 ****
+      void
+  end_global_changes()
+  {
+!     if (!clip_did_set_selection)
+      {
+  	clip_did_set_selection = TRUE;
+  	clip_unnamed = clip_unnamed_saved;
+--- 584,590 ----
+      void
+  end_global_changes()
+  {
+!     if (clip_did_set_selection == FALSE)  /* not when -1 */
+      {
+  	clip_did_set_selection = TRUE;
+  	clip_unnamed = clip_unnamed_saved;
+*** ../vim-7.4.444/src/version.c	2014-09-15 14:25:51.309650006 +0200
+--- src/version.c	2014-09-19 13:35:30.618398318 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     445,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+159. You get excited whenever discussing your hard drive.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.446 b/SOURCES/7.4.446
new file mode 100644
index 0000000..e180a72
--- /dev/null
+++ b/SOURCES/7.4.446
@@ -0,0 +1,265 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.446
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.446
+Problem:    In some situations, when setting up an environment to trigger an
+	    autocommand, the environment is not properly restored.
+Solution:   Check the return value of switch_win() and call restore_win()
+	    always.  (Daniel Hahler)
+Files:	    src/eval.c, src/misc2.c, src/window.c
+
+
+*** ../vim-7.4.445/src/eval.c	2014-09-09 23:11:46.368586569 +0200
+--- src/eval.c	2014-09-19 14:09:27.238402767 +0200
+***************
+*** 12086,12100 ****
+      {
+  	/* Set tp to be our tabpage, temporarily.  Also set the window to the
+  	 * first window in the tabpage, otherwise the window is not valid. */
+! 	switch_win(&oldcurwin, &oldtabpage, tp->tp_firstwin, tp, TRUE);
+! 
+! 	/* look up the variable */
+! 	/* Let gettabvar({nr}, "") return the "t:" dictionary. */
+! 	v = find_var_in_ht(&tp->tp_vars->dv_hashtab, 't', varname, FALSE);
+! 	if (v != NULL)
+  	{
+! 	    copy_tv(&v->di_tv, rettv);
+! 	    done = TRUE;
+  	}
+  
+  	/* restore previous notion of curwin */
+--- 12086,12102 ----
+      {
+  	/* Set tp to be our tabpage, temporarily.  Also set the window to the
+  	 * first window in the tabpage, otherwise the window is not valid. */
+! 	if (switch_win(&oldcurwin, &oldtabpage, tp->tp_firstwin, tp, TRUE)
+! 									== OK)
+  	{
+! 	    /* look up the variable */
+! 	    /* Let gettabvar({nr}, "") return the "t:" dictionary. */
+! 	    v = find_var_in_ht(&tp->tp_vars->dv_hashtab, 't', varname, FALSE);
+! 	    if (v != NULL)
+! 	    {
+! 		copy_tv(&v->di_tv, rettv);
+! 		done = TRUE;
+! 	    }
+  	}
+  
+  	/* restore previous notion of curwin */
+***************
+*** 12233,12254 ****
+      {
+  	/* Set curwin to be our win, temporarily.  Also set the tabpage,
+  	 * otherwise the window is not valid. */
+! 	switch_win(&oldcurwin, &oldtabpage, win, tp, TRUE);
+! 
+! 	if (*varname == '&')	/* window-local-option */
+! 	{
+! 	    if (get_option_tv(&varname, rettv, 1) == OK)
+! 		done = TRUE;
+! 	}
+! 	else
+  	{
+! 	    /* Look up the variable. */
+! 	    /* Let getwinvar({nr}, "") return the "w:" dictionary. */
+! 	    v = find_var_in_ht(&win->w_vars->dv_hashtab, 'w', varname, FALSE);
+! 	    if (v != NULL)
+  	    {
+! 		copy_tv(&v->di_tv, rettv);
+! 		done = TRUE;
+  	    }
+  	}
+  
+--- 12235,12258 ----
+      {
+  	/* Set curwin to be our win, temporarily.  Also set the tabpage,
+  	 * otherwise the window is not valid. */
+! 	if (switch_win(&oldcurwin, &oldtabpage, win, tp, TRUE) == OK)
+  	{
+! 	    if (*varname == '&')	/* window-local-option */
+  	    {
+! 		if (get_option_tv(&varname, rettv, 1) == OK)
+! 		    done = TRUE;
+! 	    }
+! 	    else
+! 	    {
+! 		/* Look up the variable. */
+! 		/* Let getwinvar({nr}, "") return the "w:" dictionary. */
+! 		v = find_var_in_ht(&win->w_vars->dv_hashtab, 'w',
+! 							      varname, FALSE);
+! 		if (v != NULL)
+! 		{
+! 		    copy_tv(&v->di_tv, rettv);
+! 		    done = TRUE;
+! 		}
+  	    }
+  	}
+  
+***************
+*** 17252,17285 ****
+      if (win != NULL && varname != NULL && varp != NULL)
+      {
+  #ifdef FEAT_WINDOWS
+! 	if (switch_win(&save_curwin, &save_curtab, win, tp, TRUE) == FAIL)
+! 	    return;
+  #endif
+- 
+- 	if (*varname == '&')
+  	{
+! 	    long	numval;
+! 	    char_u	*strval;
+! 	    int		error = FALSE;
+  
+! 	    ++varname;
+! 	    numval = get_tv_number_chk(varp, &error);
+! 	    strval = get_tv_string_buf_chk(varp, nbuf);
+! 	    if (!error && strval != NULL)
+! 		set_option_value(varname, numval, strval, OPT_LOCAL);
+! 	}
+! 	else
+! 	{
+! 	    winvarname = alloc((unsigned)STRLEN(varname) + 3);
+! 	    if (winvarname != NULL)
+  	    {
+! 		STRCPY(winvarname, "w:");
+! 		STRCPY(winvarname + 2, varname);
+! 		set_var(winvarname, varp, TRUE);
+! 		vim_free(winvarname);
+  	    }
+  	}
+- 
+  #ifdef FEAT_WINDOWS
+  	restore_win(save_curwin, save_curtab, TRUE);
+  #endif
+--- 17256,17288 ----
+      if (win != NULL && varname != NULL && varp != NULL)
+      {
+  #ifdef FEAT_WINDOWS
+! 	if (switch_win(&save_curwin, &save_curtab, win, tp, TRUE) == OK)
+  #endif
+  	{
+! 	    if (*varname == '&')
+! 	    {
+! 		long	numval;
+! 		char_u	*strval;
+! 		int		error = FALSE;
+  
+! 		++varname;
+! 		numval = get_tv_number_chk(varp, &error);
+! 		strval = get_tv_string_buf_chk(varp, nbuf);
+! 		if (!error && strval != NULL)
+! 		    set_option_value(varname, numval, strval, OPT_LOCAL);
+! 	    }
+! 	    else
+  	    {
+! 		winvarname = alloc((unsigned)STRLEN(varname) + 3);
+! 		if (winvarname != NULL)
+! 		{
+! 		    STRCPY(winvarname, "w:");
+! 		    STRCPY(winvarname + 2, varname);
+! 		    set_var(winvarname, varp, TRUE);
+! 		    vim_free(winvarname);
+! 		}
+  	    }
+  	}
+  #ifdef FEAT_WINDOWS
+  	restore_win(save_curwin, save_curtab, TRUE);
+  #endif
+*** ../vim-7.4.445/src/misc2.c	2014-08-10 13:34:59.060785459 +0200
+--- src/misc2.c	2014-09-19 14:03:24.314401974 +0200
+***************
+*** 1040,1046 ****
+      entered = TRUE;
+  
+  # ifdef FEAT_AUTOCMD
+!     block_autocmds();	    /* don't want to trigger autocommands here */
+  # endif
+  
+  # ifdef FEAT_WINDOWS
+--- 1040,1047 ----
+      entered = TRUE;
+  
+  # ifdef FEAT_AUTOCMD
+!     /* Don't want to trigger autocommands from here on. */
+!     block_autocmds();
+  # endif
+  
+  # ifdef FEAT_WINDOWS
+*** ../vim-7.4.445/src/window.c	2014-07-30 14:04:49.131603494 +0200
+--- src/window.c	2014-09-19 14:06:52.538402429 +0200
+***************
+*** 1271,1277 ****
+  }
+  
+  /*
+!  * Initialize window "newp" from window"old".
+   * Only the essential things are copied.
+   */
+      static void
+--- 1271,1277 ----
+  }
+  
+  /*
+!  * Initialize window "newp" from window "old".
+   * Only the essential things are copied.
+   */
+      static void
+***************
+*** 6662,6669 ****
+  	|| defined(PROTO)
+  /*
+   * Set "win" to be the curwin and "tp" to be the current tab page.
+!  * restore_win() MUST be called to undo.
+!  * No autocommands will be executed.
+   * When "no_display" is TRUE the display won't be affected, no redraw is
+   * triggered, another tabpage access is limited.
+   * Returns FAIL if switching to "win" failed.
+--- 6662,6669 ----
+  	|| defined(PROTO)
+  /*
+   * Set "win" to be the curwin and "tp" to be the current tab page.
+!  * restore_win() MUST be called to undo, also when FAIL is returned.
+!  * No autocommands will be executed until restore_win() is called.
+   * When "no_display" is TRUE the display won't be affected, no redraw is
+   * triggered, another tabpage access is limited.
+   * Returns FAIL if switching to "win" failed.
+***************
+*** 6696,6707 ****
+  	    goto_tabpage_tp(tp, FALSE, FALSE);
+      }
+      if (!win_valid(win))
+-     {
+- # ifdef FEAT_AUTOCMD
+- 	unblock_autocmds();
+- # endif
+  	return FAIL;
+-     }
+      curwin = win;
+      curbuf = curwin->w_buffer;
+  # endif
+--- 6696,6702 ----
+*** ../vim-7.4.445/src/version.c	2014-09-19 13:46:49.550399801 +0200
+--- src/version.c	2014-09-19 14:25:34.674404880 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     446,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+160. You get in the elevator and double-click the button for the floor
+     you want.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.447 b/SOURCES/7.4.447
new file mode 100644
index 0000000..0a14393
--- /dev/null
+++ b/SOURCES/7.4.447
@@ -0,0 +1,113 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.447
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.447
+Problem:    Spell files from Hunspell may generate a lot of errors.
+Solution:   Add the IGNOREEXTRA flag.
+Files:	    src/spell.c, runtime/doc/spell.txt
+
+
+*** ../vim-7.4.446/src/spell.c	2014-05-13 14:03:36.425611242 +0200
+--- src/spell.c	2014-09-19 15:24:19.582412580 +0200
+***************
+*** 4841,4846 ****
+--- 4841,4847 ----
+      unsigned	af_nosuggest;	/* NOSUGGEST ID */
+      int		af_pfxpostpone;	/* postpone prefixes without chop string and
+  				   without flags */
++     int		af_ignoreextra;	/* IGNOREEXTRA present */
+      hashtab_T	af_pref;	/* hashtable for prefixes, affheader_T */
+      hashtab_T	af_suff;	/* hashtable for suffixes, affheader_T */
+      hashtab_T	af_comp;	/* hashtable for compound flags, compitem_T */
+***************
+*** 5605,5610 ****
+--- 5606,5615 ----
+  	    {
+  		aff->af_pfxpostpone = TRUE;
+  	    }
++ 	    else if (is_aff_rule(items, itemcnt, "IGNOREEXTRA", 1))
++ 	    {
++ 		aff->af_ignoreextra = TRUE;
++ 	    }
+  	    else if ((STRCMP(items[0], "PFX") == 0
+  					      || STRCMP(items[0], "SFX") == 0)
+  		    && aff_todo == 0
+***************
+*** 5712,5720 ****
+  		int		lasti = 5;
+  
+  		/* Myspell allows extra text after the item, but that might
+! 		 * mean mistakes go unnoticed.  Require a comment-starter.
+! 		 * Hunspell uses a "-" item. */
+! 		if (itemcnt > lasti && *items[lasti] != '#'
+  			&& (STRCMP(items[lasti], "-") != 0
+  						     || itemcnt != lasti + 1))
+  		    smsg((char_u *)_(e_afftrailing), fname, lnum, items[lasti]);
+--- 5717,5727 ----
+  		int		lasti = 5;
+  
+  		/* Myspell allows extra text after the item, but that might
+! 		 * mean mistakes go unnoticed.  Require a comment-starter,
+! 		 * unless IGNOREEXTRA is used.  Hunspell uses a "-" item. */
+! 		if (itemcnt > lasti
+! 			&& !aff->af_ignoreextra
+! 			&& *items[lasti] != '#'
+  			&& (STRCMP(items[lasti], "-") != 0
+  						     || itemcnt != lasti + 1))
+  		    smsg((char_u *)_(e_afftrailing), fname, lnum, items[lasti]);
+*** ../vim-7.4.446/runtime/doc/spell.txt	2013-11-12 04:43:57.000000000 +0100
+--- runtime/doc/spell.txt	2014-09-19 15:18:00.318411751 +0200
+***************
+*** 1057,1062 ****
+--- 1058,1066 ----
+  	SFX F 0 in   [^i]n      # Spion > Spionin  ~
+  	SFX F 0 nen  in		# Bauerin > Bauerinnen ~
+  
++ However, to avoid lots of errors in affix files written for Myspell, you can
++ add the IGNOREEXTRA flag.
++ 
+  Apparently Myspell allows an affix name to appear more than once.  Since this
+  might also be a mistake, Vim checks for an extra "S".  The affix files for
+  Myspell that use this feature apparently have this flag.  Example:
+***************
+*** 1110,1115 ****
+--- 1114,1127 ----
+  - CIRCUMFIX, as explained just below.
+  
+  
++ IGNOREEXTRA						*spell-IGNOREEXTRA*
++ 
++ Normally Vim gives an error for an extra field that does not start with '#'.
++ This avoids errors going unnoticed.  However, some files created for Myspell
++ or Hunspell may contain many entries with an extra field.  Use the IGNOREEXTRA
++ flag to avoid lots of errors.
++ 
++ 
+  CIRCUMFIX						*spell-CIRCUMFIX*
+  
+  The CIRCUMFIX flag means a prefix and suffix must be added at the same time.
+*** ../vim-7.4.446/src/version.c	2014-09-19 14:26:29.658405000 +0200
+--- src/version.c	2014-09-19 15:18:41.774411842 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     447,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+161. You get up before the sun rises to check your e-mail, and you
+     find yourself in the very same chair long after the sun has set.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.448 b/SOURCES/7.4.448
new file mode 100644
index 0000000..5a5dd09
--- /dev/null
+++ b/SOURCES/7.4.448
@@ -0,0 +1,84 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.448
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.448
+Problem:    Using ETO_IGNORELANGUAGE causes problems.
+Solution:   Remove this flag. (Paul Moore)
+Files:	    src/gui_w32.c
+
+
+*** ../vim-7.4.447/src/gui_w32.c	2014-08-06 16:49:51.199185387 +0200
+--- src/gui_w32.c	2014-09-19 16:12:40.266418916 +0200
+***************
+*** 535,544 ****
+  # define pImmSetConversionStatus  ImmSetConversionStatus
+  #endif
+  
+- #ifndef ETO_IGNORELANGUAGE
+- # define ETO_IGNORELANGUAGE  0x1000
+- #endif
+- 
+  /* multi monitor support */
+  typedef struct _MONITORINFOstruct
+  {
+--- 535,540 ----
+***************
+*** 2500,2511 ****
+  		padding[i] = gui.char_width;
+      }
+  
+-     /* On NT, tell the font renderer not to "help" us with Hebrew and Arabic
+-      * text.  This doesn't work in 9x, so we have to deal with it manually on
+-      * those systems. */
+-     if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT)
+- 	foptions |= ETO_IGNORELANGUAGE;
+- 
+      /*
+       * We have to provide the padding argument because italic and bold versions
+       * of fixed-width fonts are often one pixel or so wider than their normal
+--- 2496,2501 ----
+***************
+*** 2641,2650 ****
+  #endif
+      {
+  #ifdef FEAT_RIGHTLEFT
+! 	/* If we can't use ETO_IGNORELANGUAGE, we can't tell Windows not to
+! 	 * mess up RL text, so we have to draw it character-by-character.
+! 	 * Only do this if RL is on, since it's slow. */
+! 	if (curwin->w_p_rl && !(foptions & ETO_IGNORELANGUAGE))
+  	    RevOut(s_hdc, TEXT_X(col), TEXT_Y(row),
+  			 foptions, pcliprect, (char *)text, len, padding);
+  	else
+--- 2631,2639 ----
+  #endif
+      {
+  #ifdef FEAT_RIGHTLEFT
+! 	/* Windows will mess up RL text, so we have to draw it character by
+! 	 * character.  Only do this if RL is on, since it's slow. */
+! 	if (curwin->w_p_rl)
+  	    RevOut(s_hdc, TEXT_X(col), TEXT_Y(row),
+  			 foptions, pcliprect, (char *)text, len, padding);
+  	else
+*** ../vim-7.4.447/src/version.c	2014-09-19 16:04:08.050417797 +0200
+--- src/version.c	2014-09-19 16:13:14.102418990 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     448,
+  /**/
+
+-- 
+Send $25.00 for handy leaflet on how to make money by selling leaflets
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.449 b/SOURCES/7.4.449
new file mode 100644
index 0000000..c3befb1
--- /dev/null
+++ b/SOURCES/7.4.449
@@ -0,0 +1,114 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.449
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.449
+Problem:    Can't easily close the help window. (Chris Gaal)
+Solution:   Add ":helpclose". (Christian Brabandt)
+Files:	    runtime/doc/helphelp.txt, runtime/doc/index.txt, src/ex_cmds.c,
+	    src/ex_cmds.h, src/proto/ex_cmds.pro
+
+
+*** ../vim-7.4.448/runtime/doc/helphelp.txt	2013-08-10 13:24:54.000000000 +0200
+--- runtime/doc/helphelp.txt	2014-09-19 19:38:11.110445851 +0200
+***************
+*** 96,101 ****
+--- 96,104 ----
+  			find a tag in a file with the same language as the
+  			current file.  See |help-translated|.
+  
++ 						 	*:helpc* *:helpclose*
++ :helpc[lose]            Close one help window.
++ 
+  							*:helpg* *:helpgrep*
+  :helpg[rep] {pattern}[@xx]
+  			Search all help text files and make a list of lines
+*** ../vim-7.4.448/runtime/doc/index.txt	2013-08-10 13:24:56.000000000 +0200
+--- runtime/doc/index.txt	2014-09-19 19:38:23.694445878 +0200
+***************
+*** 1244,1249 ****
+--- 1244,1250 ----
+  |:gvim|		:gv[im]		start the GUI
+  |:hardcopy|	:ha[rdcopy]	send text to the printer
+  |:help|		:h[elp]		open a help window
++ |:helpclose|	:helpc[lose]	close one help window
+  |:helpfind|	:helpf[ind]	dialog to open a help window
+  |:helpgrep|	:helpg[rep]	like ":grep" but searches help files
+  |:helptags|	:helpt[ags]	generate help tags for a directory
+*** ../vim-7.4.448/src/ex_cmds.c	2014-08-29 09:02:23.886399246 +0200
+--- src/ex_cmds.c	2014-09-19 19:33:43.350445266 +0200
+***************
+*** 5899,5904 ****
+--- 5899,5922 ----
+      vim_free(tag);
+  }
+  
++ /*
++  * ":helpclose": Close the help window
++  */
++     void
++ ex_helpclose(eap)
++     exarg_T	*eap UNUSED;
++ {
++     win_T *win;
++ 
++     FOR_ALL_WINDOWS(win)
++     {
++ 	if (win->w_buffer->b_help)
++ 	{
++ 	    win_close(win, FALSE);
++ 	    break;
++ 	}
++     }
++ }
+  
+  #if defined(FEAT_MULTI_LANG) || defined(PROTO)
+  /*
+*** ../vim-7.4.448/src/ex_cmds.h	2014-03-23 16:03:56.163311626 +0100
+--- src/ex_cmds.h	2014-09-19 19:21:09.134443618 +0200
+***************
+*** 417,422 ****
+--- 417,424 ----
+  			BANG|FILES|EDITCMD|ARGOPT|TRLBAR|CMDWIN),
+  EX(CMD_help,		"help",		ex_help,
+  			BANG|EXTRA|NOTRLCOM),
++ EX(CMD_helpclose,	"helpclose",	ex_helpclose,
++ 			RANGE|NOTADR|COUNT|TRLBAR),
+  EX(CMD_helpfind,	"helpfind",	ex_helpfind,
+  			EXTRA|NOTRLCOM),
+  EX(CMD_helpgrep,	"helpgrep",	ex_helpgrep,
+*** ../vim-7.4.448/src/proto/ex_cmds.pro	2013-08-10 13:37:09.000000000 +0200
+--- src/proto/ex_cmds.pro	2014-09-19 19:21:09.134443618 +0200
+***************
+*** 44,49 ****
+--- 44,50 ----
+  void free_old_sub __ARGS((void));
+  int prepare_tagpreview __ARGS((int undo_sync));
+  void ex_help __ARGS((exarg_T *eap));
++ void ex_helpclose __ARGS((exarg_T *eap));
+  char_u *check_help_lang __ARGS((char_u *arg));
+  int help_heuristic __ARGS((char_u *matched_string, int offset, int wrong_case));
+  int find_help_tags __ARGS((char_u *arg, int *num_matches, char_u ***matches, int keep_lang));
+*** ../vim-7.4.448/src/version.c	2014-09-19 16:13:48.358419065 +0200
+--- src/version.c	2014-09-19 18:06:13.718433799 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     449,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+165. You have a web page burned into your glasses
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.450 b/SOURCES/7.4.450
new file mode 100644
index 0000000..bd94cf2
--- /dev/null
+++ b/SOURCES/7.4.450
@@ -0,0 +1,417 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.450
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.450
+Problem:    Not all commands that edit another buffer support the +cmd
+	    argument.
+Solution:   Add the +cmd argument to relevant commands. (Marcin Szamotulski)
+Files:	    runtime/doc/windows.txt, src/ex_cmds.h, src/ex_docmd.c
+
+
+*** ../vim-7.4.449/runtime/doc/windows.txt	2014-03-25 13:03:44.929793765 +0100
+--- runtime/doc/windows.txt	2014-09-19 19:53:55.618447914 +0200
+***************
+*** 1042,1077 ****
+  		a number).  Insert a backslash before a space in a buffer
+  		name.
+  
+! :[N]b[uffer][!] [N]			*:b* *:bu* *:buf* *:buffer* *E86*
+  		Edit buffer [N] from the buffer list.  If [N] is not given,
+  		the current buffer remains being edited.  See |:buffer-!| for
+  		[!].  This will also edit a buffer that is not in the buffer
+  		list, without setting the 'buflisted' flag.
+  
+! :[N]b[uffer][!] {bufname}
+  		Edit buffer for {bufname} from the buffer list.  See
+  		|:buffer-!| for [!].  This will also edit a buffer that is not
+  		in the buffer list, without setting the 'buflisted' flag.
+  
+! :[N]sb[uffer] [N]					*:sb* *:sbuffer*
+  		Split window and edit buffer [N] from the buffer list.  If [N]
+  		is not given, the current buffer is edited.  Respects the
+  		"useopen" setting of 'switchbuf' when splitting.  This will
+  		also edit a buffer that is not in the buffer list, without
+  		setting the 'buflisted' flag.
+  
+! :[N]sb[uffer] {bufname}
+  		Split window and edit buffer for {bufname} from the buffer
+  		list.  This will also edit a buffer that is not in the buffer
+  		list, without setting the 'buflisted' flag.
+  		Note: If what you want to do is split the buffer, make a copy
+  		under another name, you can do it this way: >
+  			:w foobar | sp #
+  
+! :[N]bn[ext][!] [N]					*:bn* *:bnext* *E87*
+  		Go to [N]th next buffer in buffer list.  [N] defaults to one.
+  		Wraps around the end of the buffer list.
+  		See |:buffer-!| for [!].
+  		If you are in a help buffer, this takes you to the next help
+  		buffer (if there is one).  Similarly, if you are in a normal
+  		(non-help) buffer, this takes you to the next normal buffer.
+--- 1042,1082 ----
+  		a number).  Insert a backslash before a space in a buffer
+  		name.
+  
+! :[N]b[uffer][!] [+cmd] [N]		*:b* *:bu* *:buf* *:buffer* *E86*
+  		Edit buffer [N] from the buffer list.  If [N] is not given,
+  		the current buffer remains being edited.  See |:buffer-!| for
+  		[!].  This will also edit a buffer that is not in the buffer
+  		list, without setting the 'buflisted' flag.
++ 		Also see ||+cmd|.
+  
+! :[N]b[uffer][!] [+cmd] {bufname}
+  		Edit buffer for {bufname} from the buffer list.  See
+  		|:buffer-!| for [!].  This will also edit a buffer that is not
+  		in the buffer list, without setting the 'buflisted' flag.
++ 		Also see ||+cmd|.
+  
+! :[N]sb[uffer] [+cmd] [N]				*:sb* *:sbuffer*
+  		Split window and edit buffer [N] from the buffer list.  If [N]
+  		is not given, the current buffer is edited.  Respects the
+  		"useopen" setting of 'switchbuf' when splitting.  This will
+  		also edit a buffer that is not in the buffer list, without
+  		setting the 'buflisted' flag.
++ 		Also see ||+cmd|.
+  
+! :[N]sb[uffer] [+cmd] {bufname}
+  		Split window and edit buffer for {bufname} from the buffer
+  		list.  This will also edit a buffer that is not in the buffer
+  		list, without setting the 'buflisted' flag.
+  		Note: If what you want to do is split the buffer, make a copy
+  		under another name, you can do it this way: >
+  			:w foobar | sp #
++ <		Also see ||+cmd|.
+  
+! :[N]bn[ext][!] [+cmd] [N]				*:bn* *:bnext* *E87*
+  		Go to [N]th next buffer in buffer list.  [N] defaults to one.
+  		Wraps around the end of the buffer list.
+  		See |:buffer-!| for [!].
++ 		Also see ||+cmd|.
+  		If you are in a help buffer, this takes you to the next help
+  		buffer (if there is one).  Similarly, if you are in a normal
+  		(non-help) buffer, this takes you to the next normal buffer.
+***************
+*** 1079,1133 ****
+  		the way when you're browsing code/text buffers.  The next three
+  		commands also work like this.
+  
+  							*:sbn* *:sbnext*
+! :[N]sbn[ext] [N]
+  		Split window and go to [N]th next buffer in buffer list.
+  		Wraps around the end of the buffer list.  Uses 'switchbuf'
+  
+! :[N]bN[ext][!] [N]			*:bN* *:bNext* *:bp* *:bprevious* *E88*
+! :[N]bp[revious][!] [N]
+  		Go to [N]th previous buffer in buffer list.  [N] defaults to
+  		one.  Wraps around the start of the buffer list.
+  		See |:buffer-!| for [!] and 'switchbuf'.
+  
+! :[N]sbN[ext] [N]			*:sbN* *:sbNext* *:sbp* *:sbprevious*
+! :[N]sbp[revious] [N]
+  		Split window and go to [N]th previous buffer in buffer list.
+  		Wraps around the start of the buffer list.
+  		Uses 'switchbuf'.
+  
+! 							*:br* *:brewind*
+! :br[ewind][!]	Go to first buffer in buffer list.  If the buffer list is
+  		empty, go to the first unlisted buffer.
+  		See |:buffer-!| for [!].
+  
+! 							*:bf* *:bfirst*
+! :bf[irst]	Same as ":brewind".
+  
+! 							*:sbr* *:sbrewind*
+! :sbr[ewind]	Split window and go to first buffer in buffer list.  If the
+  		buffer list is empty, go to the first unlisted buffer.
+  		Respects the 'switchbuf' option.
+  
+! 							*:sbf* *:sbfirst*
+! :sbf[irst]	Same as ":sbrewind".
+  
+! 							*:bl* *:blast*
+! :bl[ast][!]	Go to last buffer in buffer list.  If the buffer list is
+  		empty, go to the last unlisted buffer.
+  		See |:buffer-!| for [!].
+  
+! 							*:sbl* *:sblast*
+! :sbl[ast]	Split window and go to last buffer in buffer list.  If the
+  		buffer list is empty, go to the last unlisted buffer.
+  		Respects 'switchbuf' option.
+  
+! :[N]bm[odified][!] [N]				*:bm* *:bmodified* *E84*
+  		Go to [N]th next modified buffer.  Note: this command also
+  		finds unlisted buffers.  If there is no modified buffer the
+  		command fails.
+  
+! :[N]sbm[odified] [N]					*:sbm* *:sbmodified*
+  		Split window and go to [N]th next modified buffer.
+  		Respects 'switchbuf' option.
+  		Note: this command also finds buffers not in the buffer list.
+--- 1084,1144 ----
+  		the way when you're browsing code/text buffers.  The next three
+  		commands also work like this.
+  
++ 
+  							*:sbn* *:sbnext*
+! :[N]sbn[ext] [+cmd] [N]
+  		Split window and go to [N]th next buffer in buffer list.
+  		Wraps around the end of the buffer list.  Uses 'switchbuf'
++ 		Also see ||+cmd|.
+  
+! :[N]bN[ext][!] [+cmd] [N]		*:bN* *:bNext* *:bp* *:bprevious* *E88*
+! :[N]bp[revious][!] [+cmd] [N]
+  		Go to [N]th previous buffer in buffer list.  [N] defaults to
+  		one.  Wraps around the start of the buffer list.
+  		See |:buffer-!| for [!] and 'switchbuf'.
++ 		Also see ||+cmd|.
+  
+! :[N]sbN[ext] [+cmd] [N]			*:sbN* *:sbNext* *:sbp* *:sbprevious*
+! :[N]sbp[revious] [+cmd] [N]
+  		Split window and go to [N]th previous buffer in buffer list.
+  		Wraps around the start of the buffer list.
+  		Uses 'switchbuf'.
++ 		Also see ||+cmd|.
+  
+! :br[ewind][!] [+cmd]					*:br* *:brewind*
+! 		Go to first buffer in buffer list.  If the buffer list is
+  		empty, go to the first unlisted buffer.
+  		See |:buffer-!| for [!].
+  
+! :bf[irst] [+cmd]					*:bf* *:bfirst*
+! 		Same as |:brewind|.
+! 		Also see |+cmd|.
+  
+! :sbr[ewind] [+cmd]					*:sbr* *:sbrewind*
+! 		Split window and go to first buffer in buffer list.  If the
+  		buffer list is empty, go to the first unlisted buffer.
+  		Respects the 'switchbuf' option.
++ 		Also see |+cmd|.
+  
+! :sbf[irst] [+cmd]					*:sbf* *:sbfirst*
+! 		Same as ":sbrewind".
+  
+! :bl[ast][!] [+cmd]					*:bl* *:blast*
+! 		Go to last buffer in buffer list.  If the buffer list is
+  		empty, go to the last unlisted buffer.
+  		See |:buffer-!| for [!].
+  
+! :sbl[ast] [+cmd]					*:sbl* *:sblast*
+! 		Split window and go to last buffer in buffer list.  If the
+  		buffer list is empty, go to the last unlisted buffer.
+  		Respects 'switchbuf' option.
+  
+! :[N]bm[odified][!] [+cmd] [N]			*:bm* *:bmodified* *E84*
+  		Go to [N]th next modified buffer.  Note: this command also
+  		finds unlisted buffers.  If there is no modified buffer the
+  		command fails.
+  
+! :[N]sbm[odified] [+cmd] [N]				*:sbm* *:sbmodified*
+  		Split window and go to [N]th next modified buffer.
+  		Respects 'switchbuf' option.
+  		Note: this command also finds buffers not in the buffer list.
+*** ../vim-7.4.449/src/ex_cmds.h	2014-09-19 19:39:30.766446025 +0200
+--- src/ex_cmds.h	2014-09-19 19:53:55.618447914 +0200
+***************
+*** 132,140 ****
+  EX(CMD_aunmenu,		"aunmenu",	ex_menu,
+  			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
+  EX(CMD_buffer,		"buffer",	ex_buffer,
+! 			BANG|RANGE|NOTADR|BUFNAME|BUFUNL|COUNT|EXTRA|TRLBAR),
+  EX(CMD_bNext,		"bNext",	ex_bprevious,
+! 			BANG|RANGE|NOTADR|COUNT|TRLBAR),
+  EX(CMD_ball,		"ball",		ex_buffer_all,
+  			RANGE|NOTADR|COUNT|TRLBAR),
+  EX(CMD_badd,		"badd",		ex_edit,
+--- 132,140 ----
+  EX(CMD_aunmenu,		"aunmenu",	ex_menu,
+  			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
+  EX(CMD_buffer,		"buffer",	ex_buffer,
+! 			BANG|RANGE|NOTADR|BUFNAME|BUFUNL|COUNT|EXTRA|EDITCMD|TRLBAR),
+  EX(CMD_bNext,		"bNext",	ex_bprevious,
+! 			BANG|RANGE|NOTADR|COUNT|EDITCMD|TRLBAR),
+  EX(CMD_ball,		"ball",		ex_buffer_all,
+  			RANGE|NOTADR|COUNT|TRLBAR),
+  EX(CMD_badd,		"badd",		ex_edit,
+***************
+*** 146,164 ****
+  EX(CMD_belowright,	"belowright",	ex_wrongmodifier,
+  			NEEDARG|EXTRA|NOTRLCOM),
+  EX(CMD_bfirst,		"bfirst",	ex_brewind,
+! 			BANG|RANGE|NOTADR|TRLBAR),
+  EX(CMD_blast,		"blast",	ex_blast,
+! 			BANG|RANGE|NOTADR|TRLBAR),
+  EX(CMD_bmodified,	"bmodified",	ex_bmodified,
+! 			BANG|RANGE|NOTADR|COUNT|TRLBAR),
+  EX(CMD_bnext,		"bnext",	ex_bnext,
+! 			BANG|RANGE|NOTADR|COUNT|TRLBAR),
+  EX(CMD_botright,	"botright",	ex_wrongmodifier,
+  			NEEDARG|EXTRA|NOTRLCOM),
+  EX(CMD_bprevious,	"bprevious",	ex_bprevious,
+! 			BANG|RANGE|NOTADR|COUNT|TRLBAR),
+  EX(CMD_brewind,		"brewind",	ex_brewind,
+! 			BANG|RANGE|NOTADR|TRLBAR),
+  EX(CMD_break,		"break",	ex_break,
+  			TRLBAR|SBOXOK|CMDWIN),
+  EX(CMD_breakadd,	"breakadd",	ex_breakadd,
+--- 146,164 ----
+  EX(CMD_belowright,	"belowright",	ex_wrongmodifier,
+  			NEEDARG|EXTRA|NOTRLCOM),
+  EX(CMD_bfirst,		"bfirst",	ex_brewind,
+! 			BANG|RANGE|NOTADR|EDITCMD|TRLBAR),
+  EX(CMD_blast,		"blast",	ex_blast,
+! 			BANG|RANGE|NOTADR|EDITCMD|TRLBAR),
+  EX(CMD_bmodified,	"bmodified",	ex_bmodified,
+! 			BANG|RANGE|NOTADR|COUNT|EDITCMD|TRLBAR),
+  EX(CMD_bnext,		"bnext",	ex_bnext,
+! 			BANG|RANGE|NOTADR|COUNT|EDITCMD|TRLBAR),
+  EX(CMD_botright,	"botright",	ex_wrongmodifier,
+  			NEEDARG|EXTRA|NOTRLCOM),
+  EX(CMD_bprevious,	"bprevious",	ex_bprevious,
+! 			BANG|RANGE|NOTADR|COUNT|EDITCMD|TRLBAR),
+  EX(CMD_brewind,		"brewind",	ex_brewind,
+! 			BANG|RANGE|NOTADR|EDITCMD|TRLBAR),
+  EX(CMD_break,		"break",	ex_break,
+  			TRLBAR|SBOXOK|CMDWIN),
+  EX(CMD_breakadd,	"breakadd",	ex_breakadd,
+***************
+*** 814,836 ****
+  EX(CMD_saveas,		"saveas",	ex_write,
+  			BANG|DFLALL|FILE1|ARGOPT|CMDWIN|TRLBAR),
+  EX(CMD_sbuffer,		"sbuffer",	ex_buffer,
+! 			BANG|RANGE|NOTADR|BUFNAME|BUFUNL|COUNT|EXTRA|TRLBAR),
+  EX(CMD_sbNext,		"sbNext",	ex_bprevious,
+! 			RANGE|NOTADR|COUNT|TRLBAR),
+  EX(CMD_sball,		"sball",	ex_buffer_all,
+! 			RANGE|NOTADR|COUNT|TRLBAR),
+  EX(CMD_sbfirst,		"sbfirst",	ex_brewind,
+! 			TRLBAR),
+  EX(CMD_sblast,		"sblast",	ex_blast,
+! 			TRLBAR),
+  EX(CMD_sbmodified,	"sbmodified",	ex_bmodified,
+! 			RANGE|NOTADR|COUNT|TRLBAR),
+  EX(CMD_sbnext,		"sbnext",	ex_bnext,
+! 			RANGE|NOTADR|COUNT|TRLBAR),
+  EX(CMD_sbprevious,	"sbprevious",	ex_bprevious,
+! 			RANGE|NOTADR|COUNT|TRLBAR),
+  EX(CMD_sbrewind,	"sbrewind",	ex_brewind,
+! 			TRLBAR),
+  EX(CMD_scriptnames,	"scriptnames",	ex_scriptnames,
+  			TRLBAR|CMDWIN),
+  EX(CMD_scriptencoding,	"scriptencoding", ex_scriptencoding,
+--- 814,836 ----
+  EX(CMD_saveas,		"saveas",	ex_write,
+  			BANG|DFLALL|FILE1|ARGOPT|CMDWIN|TRLBAR),
+  EX(CMD_sbuffer,		"sbuffer",	ex_buffer,
+! 			BANG|RANGE|NOTADR|BUFNAME|BUFUNL|COUNT|EXTRA|EDITCMD|TRLBAR),
+  EX(CMD_sbNext,		"sbNext",	ex_bprevious,
+! 			RANGE|NOTADR|COUNT|EDITCMD|TRLBAR),
+  EX(CMD_sball,		"sball",	ex_buffer_all,
+! 			RANGE|NOTADR|COUNT|EDITCMD|TRLBAR),
+  EX(CMD_sbfirst,		"sbfirst",	ex_brewind,
+! 			EDITCMD|TRLBAR),
+  EX(CMD_sblast,		"sblast",	ex_blast,
+! 			EDITCMD|TRLBAR),
+  EX(CMD_sbmodified,	"sbmodified",	ex_bmodified,
+! 			RANGE|NOTADR|COUNT|EDITCMD|TRLBAR),
+  EX(CMD_sbnext,		"sbnext",	ex_bnext,
+! 			RANGE|NOTADR|COUNT|EDITCMD|TRLBAR),
+  EX(CMD_sbprevious,	"sbprevious",	ex_bprevious,
+! 			RANGE|NOTADR|COUNT|EDITCMD|TRLBAR),
+  EX(CMD_sbrewind,	"sbrewind",	ex_brewind,
+! 			EDITCMD|TRLBAR),
+  EX(CMD_scriptnames,	"scriptnames",	ex_scriptnames,
+  			TRLBAR|CMDWIN),
+  EX(CMD_scriptencoding,	"scriptencoding", ex_scriptencoding,
+*** ../vim-7.4.449/src/ex_docmd.c	2014-09-09 12:21:57.716501404 +0200
+--- src/ex_docmd.c	2014-09-19 19:53:55.622447914 +0200
+***************
+*** 5135,5140 ****
+--- 5135,5142 ----
+  	    goto_buffer(eap, DOBUF_CURRENT, FORWARD, 0);
+  	else
+  	    goto_buffer(eap, DOBUF_FIRST, FORWARD, (int)eap->line2);
++ 	if (eap->do_ecmd_cmd != NULL)
++ 	    do_cmdline_cmd(eap->do_ecmd_cmd);
+      }
+  }
+  
+***************
+*** 5147,5152 ****
+--- 5149,5156 ----
+      exarg_T	*eap;
+  {
+      goto_buffer(eap, DOBUF_MOD, FORWARD, (int)eap->line2);
++     if (eap->do_ecmd_cmd != NULL)
++ 	do_cmdline_cmd(eap->do_ecmd_cmd);
+  }
+  
+  /*
+***************
+*** 5158,5163 ****
+--- 5162,5169 ----
+      exarg_T	*eap;
+  {
+      goto_buffer(eap, DOBUF_CURRENT, FORWARD, (int)eap->line2);
++     if (eap->do_ecmd_cmd != NULL)
++ 	do_cmdline_cmd(eap->do_ecmd_cmd);
+  }
+  
+  /*
+***************
+*** 5171,5176 ****
+--- 5177,5184 ----
+      exarg_T	*eap;
+  {
+      goto_buffer(eap, DOBUF_CURRENT, BACKWARD, (int)eap->line2);
++     if (eap->do_ecmd_cmd != NULL)
++ 	do_cmdline_cmd(eap->do_ecmd_cmd);
+  }
+  
+  /*
+***************
+*** 5184,5189 ****
+--- 5192,5199 ----
+      exarg_T	*eap;
+  {
+      goto_buffer(eap, DOBUF_FIRST, FORWARD, 0);
++     if (eap->do_ecmd_cmd != NULL)
++ 	do_cmdline_cmd(eap->do_ecmd_cmd);
+  }
+  
+  /*
+***************
+*** 5195,5200 ****
+--- 5205,5212 ----
+      exarg_T	*eap;
+  {
+      goto_buffer(eap, DOBUF_LAST, BACKWARD, 0);
++     if (eap->do_ecmd_cmd != NULL)
++ 	do_cmdline_cmd(eap->do_ecmd_cmd);
+  }
+  #endif
+  
+*** ../vim-7.4.449/src/version.c	2014-09-19 19:39:30.766446025 +0200
+--- src/version.c	2014-09-19 19:54:39.442448010 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     450,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+166. You have been on your computer soo long that you didn't realize
+     you had grandchildren.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.451 b/SOURCES/7.4.451
new file mode 100644
index 0000000..3b2110e
--- /dev/null
+++ b/SOURCES/7.4.451
@@ -0,0 +1,68 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.451
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.451
+Problem:    Calling system() with empty input gives an error for writing the
+	    temp file.
+Solution:   Do not try writing if the string length is zero. (Olaf Dabrunz)
+Files:	    src/eval.c
+
+
+*** ../vim-7.4.450/src/eval.c	2014-09-19 14:26:29.654405000 +0200
+--- src/eval.c	2014-09-19 20:23:57.354451850 +0200
+***************
+*** 18638,18650 ****
+  	}
+  	else
+  	{
+  	    p = get_tv_string_buf_chk(&argvars[1], buf);
+  	    if (p == NULL)
+  	    {
+  		fclose(fd);
+  		goto errret;		/* type error; errmsg already given */
+  	    }
+! 	    if (fwrite(p, STRLEN(p), 1, fd) != 1)
+  		err = TRUE;
+  	}
+  	if (fclose(fd) != 0)
+--- 18638,18653 ----
+  	}
+  	else
+  	{
++ 	    size_t len;
++ 
+  	    p = get_tv_string_buf_chk(&argvars[1], buf);
+  	    if (p == NULL)
+  	    {
+  		fclose(fd);
+  		goto errret;		/* type error; errmsg already given */
+  	    }
+! 	    len = STRLEN(p);
+! 	    if (len > 0 && fwrite(p, len, 1, fd) != 1)
+  		err = TRUE;
+  	}
+  	if (fclose(fd) != 0)
+*** ../vim-7.4.450/src/version.c	2014-09-19 20:07:22.550449677 +0200
+--- src/version.c	2014-09-19 20:19:22.390451249 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     451,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+167. You have more than 200 websites bookmarked.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.452 b/SOURCES/7.4.452
new file mode 100644
index 0000000..b317ae7
--- /dev/null
+++ b/SOURCES/7.4.452
@@ -0,0 +1,69 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.452
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.452
+Problem:    Can't build with tiny features. (Tony Mechelynck)
+Solution:   Use "return" instead of "break".
+Files:	    src/ex_cmds.c
+
+
+*** ../vim-7.4.451/src/ex_cmds.c	2014-09-19 19:39:30.766446025 +0200
+--- src/ex_cmds.c	2014-09-19 22:03:13.506464860 +0200
+***************
+*** 5900,5906 ****
+  }
+  
+  /*
+!  * ":helpclose": Close the help window
+   */
+      void
+  ex_helpclose(eap)
+--- 5900,5906 ----
+  }
+  
+  /*
+!  * ":helpclose": Close one help window
+   */
+      void
+  ex_helpclose(eap)
+***************
+*** 5913,5919 ****
+  	if (win->w_buffer->b_help)
+  	{
+  	    win_close(win, FALSE);
+! 	    break;
+  	}
+      }
+  }
+--- 5913,5919 ----
+  	if (win->w_buffer->b_help)
+  	{
+  	    win_close(win, FALSE);
+! 	    return;
+  	}
+      }
+  }
+*** ../vim-7.4.451/src/version.c	2014-09-19 20:45:19.266454650 +0200
+--- src/version.c	2014-09-19 22:05:30.178465158 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     452,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+168. You have your own domain name.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.453 b/SOURCES/7.4.453
new file mode 100644
index 0000000..2afec9d
--- /dev/null
+++ b/SOURCES/7.4.453
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.453
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.453
+Problem:    Still can't build with tiny features.
+Solution:   Add #ifdef.
+Files:	    src/ex_cmds.c
+
+
+*** ../vim-7.4.452/src/ex_cmds.c	2014-09-19 22:05:48.606465199 +0200
+--- src/ex_cmds.c	2014-09-19 22:08:31.850465555 +0200
+***************
+*** 5906,5911 ****
+--- 5906,5912 ----
+  ex_helpclose(eap)
+      exarg_T	*eap UNUSED;
+  {
++ #if defined(FEAT_WINDOWS)
+      win_T *win;
+  
+      FOR_ALL_WINDOWS(win)
+***************
+*** 5916,5921 ****
+--- 5917,5923 ----
+  	    return;
+  	}
+      }
++ #endif
+  }
+  
+  #if defined(FEAT_MULTI_LANG) || defined(PROTO)
+*** ../vim-7.4.452/src/version.c	2014-09-19 22:05:48.610465199 +0200
+--- src/version.c	2014-09-19 22:19:43.058467021 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     453,
+  /**/
+
+
+-- 
+"Hit any key to continue" does _not_ mean you can hit the on/off button!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.454 b/SOURCES/7.4.454
new file mode 100644
index 0000000..ee45fb6
--- /dev/null
+++ b/SOURCES/7.4.454
@@ -0,0 +1,87 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.454
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.454
+Problem:    When using a Visual selection of multiple words and doing CTRL-W_]
+	    it jumps to the tag matching the word under the cursor, not the
+	    selected text.  (Patrick hemmer)
+Solution:   Do not reset Visual mode. (idea by Christian Brabandt)
+Files:	    src/window.c
+
+
+*** ../vim-7.4.453/src/window.c	2014-09-19 14:26:29.658405000 +0200
+--- src/window.c	2014-09-23 13:34:12.722783903 +0200
+***************
+*** 479,492 ****
+      case ']':
+      case Ctrl_RSB:
+  		CHECK_CMDWIN
+! 		reset_VIsual_and_resel();	/* stop Visual mode */
+  		if (Prenum)
+  		    postponed_split = Prenum;
+  		else
+  		    postponed_split = -1;
+  
+! 		/* Execute the command right here, required when
+! 		 * "wincmd ]" was used in a function. */
+  		do_nv_ident(Ctrl_RSB, NUL);
+  		break;
+  
+--- 479,493 ----
+      case ']':
+      case Ctrl_RSB:
+  		CHECK_CMDWIN
+! 		/* keep Visual mode, can select words to use as a tag */
+  		if (Prenum)
+  		    postponed_split = Prenum;
+  		else
+  		    postponed_split = -1;
++ 		g_do_tagpreview = 0;
+  
+! 		/* Execute the command right here, required when "wincmd ]"
+! 		 * was used in a function. */
+  		do_nv_ident(Ctrl_RSB, NUL);
+  		break;
+  
+***************
+*** 590,596 ****
+  #endif
+  		    case ']':
+  		    case Ctrl_RSB:
+! 			reset_VIsual_and_resel();	/* stop Visual mode */
+  			if (Prenum)
+  			    postponed_split = Prenum;
+  			else
+--- 591,597 ----
+  #endif
+  		    case ']':
+  		    case Ctrl_RSB:
+! 			/* keep Visual mode, can select words to use as a tag */
+  			if (Prenum)
+  			    postponed_split = Prenum;
+  			else
+*** ../vim-7.4.453/src/version.c	2014-09-19 22:23:22.398467500 +0200
+--- src/version.c	2014-09-23 13:36:18.550784178 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     454,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+175. You send yourself e-mail before you go to bed to remind you
+     what to do when you wake up.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.455 b/SOURCES/7.4.455
new file mode 100644
index 0000000..7020b28
--- /dev/null
+++ b/SOURCES/7.4.455
@@ -0,0 +1,167 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.455
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.455
+Problem:    Completion for :buf does not use 'wildignorecase'. (Akshay H)
+Solution:   Pass the 'wildignorecase' flag around.
+Files:	    src/buffer.c
+
+
+*** ../vim-7.4.454/src/buffer.c	2014-07-16 16:30:21.647608710 +0200
+--- src/buffer.c	2014-09-23 14:18:24.470789696 +0200
+***************
+*** 28,36 ****
+  #include "vim.h"
+  
+  #if defined(FEAT_CMDL_COMPL) || defined(FEAT_LISTCMDS) || defined(FEAT_EVAL) || defined(FEAT_PERL)
+! static char_u	*buflist_match __ARGS((regprog_T *prog, buf_T *buf));
+  # define HAVE_BUFLIST_MATCH
+! static char_u	*fname_match __ARGS((regprog_T *prog, char_u *name));
+  #endif
+  static void	buflist_setfpos __ARGS((buf_T *buf, win_T *win, linenr_T lnum, colnr_T col, int copy_options));
+  static wininfo_T *find_wininfo __ARGS((buf_T *buf, int skip_diff_buffer));
+--- 28,36 ----
+  #include "vim.h"
+  
+  #if defined(FEAT_CMDL_COMPL) || defined(FEAT_LISTCMDS) || defined(FEAT_EVAL) || defined(FEAT_PERL)
+! static char_u	*buflist_match __ARGS((regprog_T *prog, buf_T *buf, int ignore_case));
+  # define HAVE_BUFLIST_MATCH
+! static char_u	*fname_match __ARGS((regprog_T *prog, char_u *name, int ignore_case));
+  #endif
+  static void	buflist_setfpos __ARGS((buf_T *buf, win_T *win, linenr_T lnum, colnr_T col, int copy_options));
+  static wininfo_T *find_wininfo __ARGS((buf_T *buf, int skip_diff_buffer));
+***************
+*** 2282,2288 ****
+  #ifdef FEAT_DIFF
+  			    && (!diffmode || diff_mode_buf(buf))
+  #endif
+! 			    && buflist_match(prog, buf) != NULL)
+  		    {
+  			if (curtab_only)
+  			{
+--- 2282,2288 ----
+  #ifdef FEAT_DIFF
+  			    && (!diffmode || diff_mode_buf(buf))
+  #endif
+! 			    && buflist_match(prog, buf, FALSE) != NULL)
+  		    {
+  			if (curtab_only)
+  			{
+***************
+*** 2396,2402 ****
+  	    {
+  		if (!buf->b_p_bl)	/* skip unlisted buffers */
+  		    continue;
+! 		p = buflist_match(prog, buf);
+  		if (p != NULL)
+  		{
+  		    if (round == 1)
+--- 2396,2402 ----
+  	    {
+  		if (!buf->b_p_bl)	/* skip unlisted buffers */
+  		    continue;
+! 		p = buflist_match(prog, buf, p_wic);
+  		if (p != NULL)
+  		{
+  		    if (round == 1)
+***************
+*** 2444,2459 ****
+   * Check for a match on the file name for buffer "buf" with regprog "prog".
+   */
+      static char_u *
+! buflist_match(prog, buf)
+      regprog_T	*prog;
+      buf_T	*buf;
+  {
+      char_u	*match;
+  
+      /* First try the short file name, then the long file name. */
+!     match = fname_match(prog, buf->b_sfname);
+      if (match == NULL)
+! 	match = fname_match(prog, buf->b_ffname);
+  
+      return match;
+  }
+--- 2444,2460 ----
+   * Check for a match on the file name for buffer "buf" with regprog "prog".
+   */
+      static char_u *
+! buflist_match(prog, buf, ignore_case)
+      regprog_T	*prog;
+      buf_T	*buf;
++     int		ignore_case;  /* when TRUE ignore case, when FALSE use 'fic' */
+  {
+      char_u	*match;
+  
+      /* First try the short file name, then the long file name. */
+!     match = fname_match(prog, buf->b_sfname, ignore_case);
+      if (match == NULL)
+! 	match = fname_match(prog, buf->b_ffname, ignore_case);
+  
+      return match;
+  }
+***************
+*** 2463,2471 ****
+   * Return "name" when there is a match, NULL when not.
+   */
+      static char_u *
+! fname_match(prog, name)
+      regprog_T	*prog;
+      char_u	*name;
+  {
+      char_u	*match = NULL;
+      char_u	*p;
+--- 2464,2473 ----
+   * Return "name" when there is a match, NULL when not.
+   */
+      static char_u *
+! fname_match(prog, name, ignore_case)
+      regprog_T	*prog;
+      char_u	*name;
++     int		ignore_case;  /* when TRUE ignore case, when FALSE use 'fic' */
+  {
+      char_u	*match = NULL;
+      char_u	*p;
+***************
+*** 2474,2480 ****
+      if (name != NULL)
+      {
+  	regmatch.regprog = prog;
+! 	regmatch.rm_ic = p_fic;	/* ignore case when 'fileignorecase' is set */
+  	if (vim_regexec(&regmatch, name, (colnr_T)0))
+  	    match = name;
+  	else
+--- 2476,2483 ----
+      if (name != NULL)
+      {
+  	regmatch.regprog = prog;
+! 	/* Ignore case when 'fileignorecase' or the argument is set. */
+! 	regmatch.rm_ic = p_fic || ignore_case;
+  	if (vim_regexec(&regmatch, name, (colnr_T)0))
+  	    match = name;
+  	else
+*** ../vim-7.4.454/src/version.c	2014-09-23 13:48:40.054785798 +0200
+--- src/version.c	2014-09-23 14:19:13.114789802 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     455,
+  /**/
+
+-- 
+If Microsoft would build a car...
+... the oil, water temperature, and alternator warning lights would
+all be replaced by a single "General Protection Fault" warning light.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.456 b/SOURCES/7.4.456
new file mode 100644
index 0000000..d696a9d
--- /dev/null
+++ b/SOURCES/7.4.456
@@ -0,0 +1,414 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.456
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.456
+Problem:    'backupcopy' is global, cannot write only some files in a
+	    different way.
+Solution:   Make 'backupcopy' global-local. (Christian Brabandt)
+Files:	    runtime/doc/options.txt, src/buffer.c, src/fileio.c, src/option.c,
+	    src/option.h, src/proto/option.pro, src/structs.h
+
+
+*** ../vim-7.4.455/runtime/doc/options.txt	2014-08-10 13:34:59.052785459 +0200
+--- runtime/doc/options.txt	2014-09-23 14:28:40.530791041 +0200
+***************
+*** 921,927 ****
+  
+  						*'backupcopy'* *'bkc'*
+  'backupcopy' 'bkc'	string	(Vi default for Unix: "yes", otherwise: "auto")
+! 			global
+  			{not in Vi}
+  	When writing a file and a backup is made, this option tells how it's
+  	done.  This is a comma separated list of words.
+--- 921,927 ----
+  
+  						*'backupcopy'* *'bkc'*
+  'backupcopy' 'bkc'	string	(Vi default for Unix: "yes", otherwise: "auto")
+! 			global or local to buffer |global-local|
+  			{not in Vi}
+  	When writing a file and a backup is made, this option tells how it's
+  	done.  This is a comma separated list of words.
+*** ../vim-7.4.455/src/buffer.c	2014-09-23 14:24:36.406790508 +0200
+--- src/buffer.c	2014-09-23 14:28:40.530791041 +0200
+***************
+*** 2001,2006 ****
+--- 2001,2007 ----
+  #ifdef FEAT_LISP
+      clear_string_option(&buf->b_p_lw);
+  #endif
++     clear_string_option(&buf->b_p_bkc);
+  }
+  
+  /*
+*** ../vim-7.4.455/src/fileio.c	2014-09-09 16:59:34.792537789 +0200
+--- src/fileio.c	2014-09-23 14:28:40.530791041 +0200
+***************
+*** 3149,3154 ****
+--- 3149,3155 ----
+      int		    write_undo_file = FALSE;
+      context_sha256_T sha_ctx;
+  #endif
++     unsigned int    bkc = get_bkc_value(buf);
+  
+      if (fname == NULL || *fname == NUL)	/* safety check */
+  	return FAIL;
+***************
+*** 3647,3656 ****
+  	struct stat st;
+  #endif
+  
+! 	if ((bkc_flags & BKC_YES) || append)	/* "yes" */
+  	    backup_copy = TRUE;
+  #if defined(UNIX) || defined(WIN32)
+! 	else if ((bkc_flags & BKC_AUTO))	/* "auto" */
+  	{
+  	    int		i;
+  
+--- 3648,3657 ----
+  	struct stat st;
+  #endif
+  
+! 	if ((bkc & BKC_YES) || append)	/* "yes" */
+  	    backup_copy = TRUE;
+  #if defined(UNIX) || defined(WIN32)
+! 	else if ((bkc & BKC_AUTO))	/* "auto" */
+  	{
+  	    int		i;
+  
+***************
+*** 3738,3744 ****
+  	/*
+  	 * Break symlinks and/or hardlinks if we've been asked to.
+  	 */
+! 	if ((bkc_flags & BKC_BREAKSYMLINK) || (bkc_flags & BKC_BREAKHARDLINK))
+  	{
+  # ifdef UNIX
+  	    int	lstat_res;
+--- 3739,3745 ----
+  	/*
+  	 * Break symlinks and/or hardlinks if we've been asked to.
+  	 */
+! 	if ((bkc & BKC_BREAKSYMLINK) || (bkc & BKC_BREAKHARDLINK))
+  	{
+  # ifdef UNIX
+  	    int	lstat_res;
+***************
+*** 3746,3769 ****
+  	    lstat_res = mch_lstat((char *)fname, &st);
+  
+  	    /* Symlinks. */
+! 	    if ((bkc_flags & BKC_BREAKSYMLINK)
+  		    && lstat_res == 0
+  		    && st.st_ino != st_old.st_ino)
+  		backup_copy = FALSE;
+  
+  	    /* Hardlinks. */
+! 	    if ((bkc_flags & BKC_BREAKHARDLINK)
+  		    && st_old.st_nlink > 1
+  		    && (lstat_res != 0 || st.st_ino == st_old.st_ino))
+  		backup_copy = FALSE;
+  # else
+  #  if defined(WIN32)
+  	    /* Symlinks. */
+! 	    if ((bkc_flags & BKC_BREAKSYMLINK) && mch_is_symbolic_link(fname))
+  		backup_copy = FALSE;
+  
+  	    /* Hardlinks. */
+! 	    if ((bkc_flags & BKC_BREAKHARDLINK) && mch_is_hard_link(fname))
+  		backup_copy = FALSE;
+  #  endif
+  # endif
+--- 3747,3770 ----
+  	    lstat_res = mch_lstat((char *)fname, &st);
+  
+  	    /* Symlinks. */
+! 	    if ((bkc & BKC_BREAKSYMLINK)
+  		    && lstat_res == 0
+  		    && st.st_ino != st_old.st_ino)
+  		backup_copy = FALSE;
+  
+  	    /* Hardlinks. */
+! 	    if ((bkc & BKC_BREAKHARDLINK)
+  		    && st_old.st_nlink > 1
+  		    && (lstat_res != 0 || st.st_ino == st_old.st_ino))
+  		backup_copy = FALSE;
+  # else
+  #  if defined(WIN32)
+  	    /* Symlinks. */
+! 	    if ((bkc & BKC_BREAKSYMLINK) && mch_is_symbolic_link(fname))
+  		backup_copy = FALSE;
+  
+  	    /* Hardlinks. */
+! 	    if ((bkc & BKC_BREAKHARDLINK) && mch_is_hard_link(fname))
+  		backup_copy = FALSE;
+  #  endif
+  # endif
+*** ../vim-7.4.455/src/option.c	2014-09-09 17:33:02.700542175 +0200
+--- src/option.c	2014-09-23 14:41:25.890792713 +0200
+***************
+*** 56,61 ****
+--- 56,62 ----
+   */
+  #define PV_AI		OPT_BUF(BV_AI)
+  #define PV_AR		OPT_BOTH(OPT_BUF(BV_AR))
++ #define PV_BKC		OPT_BOTH(OPT_BUF(BV_BKC))
+  #ifdef FEAT_QUICKFIX
+  # define PV_BH		OPT_BUF(BV_BH)
+  # define PV_BT		OPT_BUF(BV_BT)
+***************
+*** 582,588 ****
+  			    (char_u *)&p_bk, PV_NONE,
+  			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+      {"backupcopy",  "bkc",  P_STRING|P_VIM|P_COMMA|P_NODUP,
+! 			    (char_u *)&p_bkc, PV_NONE,
+  #ifdef UNIX
+  			    {(char_u *)"yes", (char_u *)"auto"}
+  #else
+--- 583,589 ----
+  			    (char_u *)&p_bk, PV_NONE,
+  			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+      {"backupcopy",  "bkc",  P_STRING|P_VIM|P_COMMA|P_NODUP,
+! 			    (char_u *)&p_bkc, PV_BKC,
+  #ifdef UNIX
+  			    {(char_u *)"yes", (char_u *)"auto"}
+  #else
+***************
+*** 5412,5417 ****
+--- 5413,5419 ----
+  #ifdef FEAT_LISP
+      check_string_option(&buf->b_p_lw);
+  #endif
++     check_string_option(&buf->b_p_bkc);
+  }
+  
+  /*
+***************
+*** 5729,5744 ****
+      }
+  
+      /* 'backupcopy' */
+!     else if (varp == &p_bkc)
+      {
+! 	if (opt_strings_flags(p_bkc, p_bkc_values, &bkc_flags, TRUE) != OK)
+  	    errmsg = e_invarg;
+! 	if (((bkc_flags & BKC_AUTO) != 0)
+! 		+ ((bkc_flags & BKC_YES) != 0)
+! 		+ ((bkc_flags & BKC_NO) != 0) != 1)
+  	{
+  	    /* Must have exactly one of "auto", "yes"  and "no". */
+! 	    (void)opt_strings_flags(oldval, p_bkc_values, &bkc_flags, TRUE);
+  	    errmsg = e_invarg;
+  	}
+      }
+--- 5731,5755 ----
+      }
+  
+      /* 'backupcopy' */
+!     else if (gvarp == &p_bkc)
+      {
+! 	char_u		*bkc = p_bkc;
+! 	unsigned int	*flags = &bkc_flags;
+! 
+! 	if (opt_flags & OPT_LOCAL)
+! 	{
+! 	    bkc = curbuf->b_p_bkc;
+! 	    flags = &curbuf->b_bkc_flags;
+! 	}
+! 
+! 	if (opt_strings_flags(bkc, p_bkc_values, flags, TRUE) != OK)
+  	    errmsg = e_invarg;
+! 	if ((((int)*flags & BKC_AUTO) != 0)
+! 		+ (((int)*flags & BKC_YES) != 0)
+! 		+ (((int)*flags & BKC_NO) != 0) != 1)
+  	{
+  	    /* Must have exactly one of "auto", "yes"  and "no". */
+! 	    (void)opt_strings_flags(oldval, p_bkc_values, flags, TRUE);
+  	    errmsg = e_invarg;
+  	}
+      }
+***************
+*** 9025,9036 ****
+  }
+  
+  /*
+!  * Iterate over options. First argument is a pointer to a pointer to a structure 
+!  * inside options[] array, second is option type like in the above function.
+   *
+!  * If first argument points to NULL it is assumed that iteration just started 
+   * and caller needs the very first value.
+!  * If first argument points to the end marker function returns NULL and sets 
+   * first argument to NULL.
+   *
+   * Returns full option name for current option on each call.
+--- 9036,9048 ----
+  }
+  
+  /*
+!  * Iterate over options. First argument is a pointer to a pointer to a
+!  * structure inside options[] array, second is option type like in the above
+!  * function.
+   *
+!  * If first argument points to NULL it is assumed that iteration just started
+   * and caller needs the very first value.
+!  * If first argument points to the end marker function returns NULL and sets
+   * first argument to NULL.
+   *
+   * Returns full option name for current option on each call.
+***************
+*** 9856,9861 ****
+--- 9868,9877 ----
+  	case PV_AR:
+  	    buf->b_p_ar = -1;
+  	    break;
++ 	case PV_BKC:
++ 	    clear_string_option(&buf->b_p_bkc);
++ 	    buf->b_bkc_flags = 0;
++ 	    break;
+  	case PV_TAGS:
+  	    clear_string_option(&buf->b_p_tags);
+  	    break;
+***************
+*** 9961,9966 ****
+--- 9977,9983 ----
+  #ifdef FEAT_LISP
+  	    case PV_LW:   return (char_u *)&(curbuf->b_p_lw);
+  #endif
++ 	    case PV_BKC:  return (char_u *)&(curbuf->b_p_bkc);
+  	}
+  	return NULL; /* "cannot happen" */
+      }
+***************
+*** 9993,9998 ****
+--- 10010,10017 ----
+  				    ? (char_u *)&(curbuf->b_p_ar) : p->var;
+  	case PV_TAGS:	return *curbuf->b_p_tags != NUL
+  				    ? (char_u *)&(curbuf->b_p_tags) : p->var;
++ 	case PV_BKC:	return *curbuf->b_p_bkc != NUL
++ 				    ? (char_u *)&(curbuf->b_p_bkc) : p->var;
+  #ifdef FEAT_FIND_ID
+  	case PV_DEF:	return *curbuf->b_p_def != NUL
+  				    ? (char_u *)&(curbuf->b_p_def) : p->var;
+***************
+*** 10585,10590 ****
+--- 10604,10611 ----
+  	     * are not copied, start using the global value */
+  	    buf->b_p_ar = -1;
+  	    buf->b_p_ul = NO_LOCAL_UNDOLEVEL;
++ 	    buf->b_p_bkc = empty_option;
++ 	    buf->b_bkc_flags = 0;
+  #ifdef FEAT_QUICKFIX
+  	    buf->b_p_gp = empty_option;
+  	    buf->b_p_mp = empty_option;
+***************
+*** 12052,12054 ****
+--- 12073,12085 ----
+      return OK;
+  }
+  #endif
++ 
++ /*
++  * Get the local or global value of 'backupcopy'.
++  */
++     unsigned int
++ get_bkc_value(buf)
++     buf_T *buf;
++ {
++     return buf->b_bkc_flags ? buf->b_bkc_flags : bkc_flags;
++ }
+*** ../vim-7.4.455/src/option.h	2014-08-06 14:52:05.047236174 +0200
+--- src/option.h	2014-09-23 14:41:45.614792756 +0200
+***************
+*** 327,333 ****
+  EXTERN char_u	*p_bg;		/* 'background' */
+  EXTERN int	p_bk;		/* 'backup' */
+  EXTERN char_u	*p_bkc;		/* 'backupcopy' */
+! EXTERN unsigned	bkc_flags;
+  #ifdef IN_OPTION_C
+  static char *(p_bkc_values[]) = {"yes", "auto", "no", "breaksymlink", "breakhardlink", NULL};
+  #endif
+--- 327,333 ----
+  EXTERN char_u	*p_bg;		/* 'background' */
+  EXTERN int	p_bk;		/* 'backup' */
+  EXTERN char_u	*p_bkc;		/* 'backupcopy' */
+! EXTERN unsigned	bkc_flags;	/* flags from 'backupcopy' */
+  #ifdef IN_OPTION_C
+  static char *(p_bkc_values[]) = {"yes", "auto", "no", "breaksymlink", "breakhardlink", NULL};
+  #endif
+***************
+*** 918,923 ****
+--- 918,926 ----
+      , BV_AR
+  #ifdef FEAT_QUICKFIX
+      , BV_BH
++ #endif
++     , BV_BKC
++ #ifdef FEAT_QUICKFIX
+      , BV_BT
+      , BV_EFM
+      , BV_GP
+*** ../vim-7.4.455/src/proto/option.pro	2014-08-24 21:39:45.488526954 +0200
+--- src/proto/option.pro	2014-09-23 14:28:40.534791041 +0200
+***************
+*** 62,65 ****
+--- 62,66 ----
+  long get_sw_value __ARGS((buf_T *buf));
+  long get_sts_value __ARGS((void));
+  void find_mps_values __ARGS((int *initc, int *findc, int *backwards, int switchit));
++ unsigned int get_bkc_value __ARGS((buf_T *buf));
+  /* vim: set ft=c : */
+*** ../vim-7.4.455/src/structs.h	2014-08-10 13:34:59.064785459 +0200
+--- src/structs.h	2014-09-23 14:41:56.218792779 +0200
+***************
+*** 137,143 ****
+  #ifdef FEAT_LINEBREAK
+      int		wo_bri;
+  # define w_p_bri w_onebuf_opt.wo_bri	/* 'breakindent' */
+!     char_u		*wo_briopt;
+  # define w_p_briopt w_onebuf_opt.wo_briopt /* 'breakindentopt' */
+  #endif
+  #ifdef FEAT_DIFF
+--- 137,143 ----
+  #ifdef FEAT_LINEBREAK
+      int		wo_bri;
+  # define w_p_bri w_onebuf_opt.wo_bri	/* 'breakindent' */
+!     char_u	*wo_briopt;
+  # define w_p_briopt w_onebuf_opt.wo_briopt /* 'breakindentopt' */
+  #endif
+  #ifdef FEAT_DIFF
+***************
+*** 1537,1542 ****
+--- 1537,1544 ----
+  
+      int		b_p_ai;		/* 'autoindent' */
+      int		b_p_ai_nopaste;	/* b_p_ai saved for paste mode */
++     char_u	*b_p_bkc;	/* 'backupcopy' */
++     unsigned	b_bkc_flags;    /* flags for 'backupcopy' */
+      int		b_p_ci;		/* 'copyindent' */
+      int		b_p_bin;	/* 'binary' */
+  #ifdef FEAT_MBYTE
+*** ../vim-7.4.455/src/version.c	2014-09-23 14:24:36.410790508 +0200
+--- src/version.c	2014-09-23 14:29:15.706791118 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     456,
+  /**/
+
+-- 
+If Apple would build a car...
+... it would be powered by the sun, be reliable, five times
+as fast and twice as easy to drive; but would only run on
+five percent of the roads.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.457 b/SOURCES/7.4.457
new file mode 100644
index 0000000..8ffe27c
--- /dev/null
+++ b/SOURCES/7.4.457
@@ -0,0 +1,48 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.457
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.457
+Problem:    Using getchar() in an expression mapping may result in
+            K_CURSORHOLD, which can't be recognized.
+Solution:   Add the <CursorHold> key.  (Hirohito Higashi)
+Files:      src/misc2.c
+
+
+*** ../vim-7.4.456/src/misc2.c	2014-09-19 14:26:29.654405000 +0200
+--- src/misc2.c	2014-09-23 16:25:18.726806328 +0200
+***************
+*** 2471,2476 ****
+--- 2471,2477 ----
+      {K_SNR,		(char_u *)"SNR"},
+  #endif
+      {K_PLUG,		(char_u *)"Plug"},
++     {K_CURSORHOLD,	(char_u *)"CursorHold"},
+      {0,			NULL}
+  };
+  
+*** ../vim-7.4.456/src/version.c	2014-09-23 15:45:04.874801055 +0200
+--- src/version.c	2014-09-23 16:47:43.738809266 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     457,
+  /**/
+
+-- 
+If Microsoft would build a car...
+... Occasionally, executing a maneuver such as a left turn
+would cause your car to shut down and refuse to restart, in
+which case you would have to reinstall the engine.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.458 b/SOURCES/7.4.458
new file mode 100644
index 0000000..35948d7
--- /dev/null
+++ b/SOURCES/7.4.458
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.458
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.458
+Problem:    Issue 252: Cursor moves in a zero-height window.
+Solution:   Check for zero height. (idea by Christian Brabandt)
+Files:	    src/move.c
+
+
+*** ../vim-7.4.457/src/move.c	2014-03-28 21:49:26.854248777 +0100
+--- src/move.c	2014-09-23 18:27:33.138822349 +0200
+***************
+*** 183,188 ****
+--- 183,200 ----
+      if (!screen_valid(TRUE))
+  	return;
+  
++     /* If the window height is zero just use the cursor line. */
++     if (curwin->w_height == 0)
++     {
++ 	curwin->w_topline = curwin->w_cursor.lnum;
++ 	curwin->w_botline = curwin->w_topline;
++ 	curwin->w_valid |= VALID_BOTLINE|VALID_BOTLINE_AP;
++ #ifdef FEAT_SCROLLBIND
++ 	curwin->w_scbind_pos = 1;
++ #endif
++ 	return;
++     }
++ 
+      check_cursor_moved(curwin);
+      if (curwin->w_valid & VALID_TOPLINE)
+  	return;
+*** ../vim-7.4.457/src/version.c	2014-09-23 16:49:38.798809517 +0200
+--- src/version.c	2014-09-23 17:50:55.642817549 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     458,
+  /**/
+
+-- 
+I'm so disorganized my keyboard isn't even in alphabetical order!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.459 b/SOURCES/7.4.459
new file mode 100644
index 0000000..fce17c2
--- /dev/null
+++ b/SOURCES/7.4.459
@@ -0,0 +1,123 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.459
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.459
+Problem:    Can't change the icon after building Vim.
+Solution:   Load the icon from a file on startup. (Yasuhiro Matsumoto)
+Files:      src/gui_w32.c, src/os_mswin.c, src/os_win32.c, 
+            src/proto/os_mswin.pro
+
+
+*** ../vim-7.4.458/src/gui_w32.c	2014-09-19 16:13:48.358419065 +0200
+--- src/gui_w32.c	2014-09-23 21:53:17.382849313 +0200
+***************
+*** 1662,1667 ****
+--- 1662,1675 ----
+      if (s_textArea == NULL)
+  	return FAIL;
+  
++     /* Try loading an icon from $RUNTIMEPATH/bitmaps/vim.ico. */
++     {
++ 	HANDLE	hIcon = NULL;
++ 
++ 	if (mch_icon_load(&hIcon) == OK && hIcon != NULL)
++ 	    SendMessage(s_hwnd, WM_SETICON, ICON_SMALL, hIcon);
++     }
++ 
+  #ifdef FEAT_MENU
+      s_menuBar = CreateMenu();
+  #endif
+*** ../vim-7.4.458/src/os_mswin.c	2014-09-09 12:25:27.768501863 +0200
+--- src/os_mswin.c	2014-09-23 21:52:50.582849254 +0200
+***************
+*** 928,933 ****
+--- 928,960 ----
+  }
+  # endif
+  
++ /*
++  * Passed to do_in_runtimepath() to load a vim.ico file.
++  */
++     static void
++ mch_icon_load_cb(char_u *fname, void *cookie)
++ {
++     HANDLE *h = (HANDLE *)cookie;
++ 
++     *h = LoadImage(NULL,
++ 		   fname,
++ 		   IMAGE_ICON,
++ 		   64,
++ 		   64,
++ 		   LR_LOADFROMFILE | LR_LOADMAP3DCOLORS);
++ }
++ 
++ /*
++  * Try loading an icon file from 'runtimepath'.
++  */
++     int
++ mch_icon_load(iconp)
++     HANDLE *iconp;
++ {
++     return do_in_runtimepath((char_u *)"bitmaps/vim.ico",
++ 					      FALSE, mch_icon_load_cb, iconp);
++ }
++ 
+      int
+  mch_libcall(
+      char_u	*libname,
+*** ../vim-7.4.458/src/os_win32.c	2014-09-09 12:25:27.764501863 +0200
+--- src/os_win32.c	2014-09-23 21:47:03.318848496 +0200
+***************
+*** 2446,2452 ****
+  	return;
+  
+      /* Extract the first icon contained in the Vim executable. */
+!     g_hVimIcon = ExtractIcon(NULL, exe_name, 0);
+      if (g_hVimIcon != NULL)
+  	g_fCanChangeIcon = TRUE;
+  }
+--- 2446,2453 ----
+  	return;
+  
+      /* Extract the first icon contained in the Vim executable. */
+!     if (mch_icon_load((HANDLE *)&g_hVimIcon) == FAIL || g_hVimIcon == NULL)
+! 	g_hVimIcon = ExtractIcon(NULL, exe_name, 0);
+      if (g_hVimIcon != NULL)
+  	g_fCanChangeIcon = TRUE;
+  }
+*** ../vim-7.4.458/src/proto/os_mswin.pro	2013-08-10 13:37:39.000000000 +0200
+--- src/proto/os_mswin.pro	2014-09-23 21:49:29.746848816 +0200
+***************
+*** 21,26 ****
+--- 21,27 ----
+  int mch_chdir __ARGS((char *path));
+  int can_end_termcap_mode __ARGS((int give_msg));
+  int mch_screenmode __ARGS((char_u *arg));
++ int mch_icon_load __ARGS((HANDLE *iconp));
+  int mch_libcall __ARGS((char_u *libname, char_u *funcname, char_u *argstring, int argint, char_u **string_result, int *number_result));
+  void DumpPutS __ARGS((const char *psz));
+  int mch_get_winpos __ARGS((int *x, int *y));
+*** ../vim-7.4.458/src/version.c	2014-09-23 18:37:52.426823701 +0200
+--- src/version.c	2014-09-23 21:36:07.806847064 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     459,
+  /**/
+
+-- 
+If Microsoft would build a car...
+... You'd have to press the "Start" button to turn the engine off.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.460 b/SOURCES/7.4.460
new file mode 100644
index 0000000..ce6908f
--- /dev/null
+++ b/SOURCES/7.4.460
@@ -0,0 +1,48 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.460
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.460 (after 7.4.454)
+Problem:    Can't build without the quickfix feature. (Erik Falor)
+Solution:   Add a #ifdef.
+Files:	    src/window.c
+
+
+*** ../vim-7.4.459/src/window.c	2014-09-23 13:48:40.054785798 +0200
+--- src/window.c	2014-09-24 13:24:27.318971352 +0200
+***************
+*** 484,490 ****
+--- 484,492 ----
+  		    postponed_split = Prenum;
+  		else
+  		    postponed_split = -1;
++ #ifdef FEAT_QUICKFIX
+  		g_do_tagpreview = 0;
++ #endif
+  
+  		/* Execute the command right here, required when "wincmd ]"
+  		 * was used in a function. */
+*** ../vim-7.4.459/src/version.c	2014-09-23 21:53:35.310849352 +0200
+--- src/version.c	2014-09-24 13:24:44.450971389 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     460,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+179. You wonder why your household garbage can doesn't have an
+     "empty recycle bin" button.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.461 b/SOURCES/7.4.461
new file mode 100644
index 0000000..e100c7a
--- /dev/null
+++ b/SOURCES/7.4.461
@@ -0,0 +1,77 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.461
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.461
+Problem:    MS-Windows: When collate is on the number of copies is too high.
+Solution:   Only set the collated/uncollated count when collate is on.
+	    (Yasuhiro Matsumoto)
+Files:	    src/os_mswin.c
+
+
+*** ../vim-7.4.460/src/os_mswin.c	2014-09-23 21:53:35.306849352 +0200
+--- src/os_mswin.c	2014-09-27 11:14:27.287520497 +0200
+***************
+*** 1673,1688 ****
+       */
+      psettings->chars_per_line = prt_get_cpl();
+      psettings->lines_per_page = prt_get_lpp();
+!     psettings->n_collated_copies = (prt_dlg.Flags & PD_COLLATE)
+! 							? prt_dlg.nCopies : 1;
+!     psettings->n_uncollated_copies = (prt_dlg.Flags & PD_COLLATE)
+! 							? 1 : prt_dlg.nCopies;
+  
+!     if (psettings->n_collated_copies == 0)
+! 	psettings->n_collated_copies = 1;
+  
+!     if (psettings->n_uncollated_copies == 0)
+  	psettings->n_uncollated_copies = 1;
+  
+      psettings->jobname = jobname;
+  
+--- 1673,1694 ----
+       */
+      psettings->chars_per_line = prt_get_cpl();
+      psettings->lines_per_page = prt_get_lpp();
+!     if (prt_dlg.Flags & PD_USEDEVMODECOPIESANDCOLLATE)
+!     {
+! 	psettings->n_collated_copies = (prt_dlg.Flags & PD_COLLATE)
+! 						    ? prt_dlg.nCopies : 1;
+! 	psettings->n_uncollated_copies = (prt_dlg.Flags & PD_COLLATE)
+! 						    ? 1 : prt_dlg.nCopies;
+  
+! 	if (psettings->n_collated_copies == 0)
+! 	    psettings->n_collated_copies = 1;
+  
+! 	if (psettings->n_uncollated_copies == 0)
+! 	    psettings->n_uncollated_copies = 1;
+!     } else {
+! 	psettings->n_collated_copies = 1;
+  	psettings->n_uncollated_copies = 1;
++     }
+  
+      psettings->jobname = jobname;
+  
+*** ../vim-7.4.460/src/version.c	2014-09-24 13:26:39.954971642 +0200
+--- src/version.c	2014-09-27 11:16:48.883520806 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     461,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+188. You purchase a laptop so you can surf while sitting on the can.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.462 b/SOURCES/7.4.462
new file mode 100644
index 0000000..b5c3d49
--- /dev/null
+++ b/SOURCES/7.4.462
@@ -0,0 +1,80 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.462
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.462
+Problem:    Setting the local value of 'backupcopy' empty gives an error.
+	    (Peter Mattern)
+Solution:   When using an empty value set the flags to zero. (Hirohito
+	    Higashi)
+Files:	    src/option.c
+
+
+*** ../vim-7.4.461/src/option.c	2014-09-23 15:45:04.870801055 +0200
+--- src/option.c	2014-09-29 17:03:06.963943648 +0200
+***************
+*** 5742,5756 ****
+  	    flags = &curbuf->b_bkc_flags;
+  	}
+  
+! 	if (opt_strings_flags(bkc, p_bkc_values, flags, TRUE) != OK)
+! 	    errmsg = e_invarg;
+! 	if ((((int)*flags & BKC_AUTO) != 0)
+! 		+ (((int)*flags & BKC_YES) != 0)
+! 		+ (((int)*flags & BKC_NO) != 0) != 1)
+  	{
+! 	    /* Must have exactly one of "auto", "yes"  and "no". */
+! 	    (void)opt_strings_flags(oldval, p_bkc_values, flags, TRUE);
+! 	    errmsg = e_invarg;
+  	}
+      }
+  
+--- 5742,5762 ----
+  	    flags = &curbuf->b_bkc_flags;
+  	}
+  
+! 	if ((opt_flags & OPT_LOCAL) && *bkc == NUL)
+! 	    /* make the local value empty: use the global value */
+! 	    *flags = 0;
+! 	else
+  	{
+! 	    if (opt_strings_flags(bkc, p_bkc_values, flags, TRUE) != OK)
+! 		errmsg = e_invarg;
+! 	    if ((((int)*flags & BKC_AUTO) != 0)
+! 		    + (((int)*flags & BKC_YES) != 0)
+! 		    + (((int)*flags & BKC_NO) != 0) != 1)
+! 	    {
+! 		/* Must have exactly one of "auto", "yes"  and "no". */
+! 		(void)opt_strings_flags(oldval, p_bkc_values, flags, TRUE);
+! 		errmsg = e_invarg;
+! 	    }
+  	}
+      }
+  
+*** ../vim-7.4.461/src/version.c	2014-09-27 11:18:08.179520979 +0200
+--- src/version.c	2014-09-29 17:13:50.235945053 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     462,
+  /**/
+
+-- 
+Some of the well known MS-Windows errors:
+	EMEMORY		Memory error caused by..., eh...
+	ELICENSE	Your license has expired, give us more money!
+	EMOUSE		Mouse moved, reinstall Windows
+	EILLEGAL	Illegal error, you are not allowed to see this
+	EVIRUS		Undetectable virus found
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.463 b/SOURCES/7.4.463
new file mode 100644
index 0000000..efd8375
--- /dev/null
+++ b/SOURCES/7.4.463
@@ -0,0 +1,58 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.463
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.463
+Problem:    Test 86 and 87 may hang on MS-Windows.
+Solution:   Call inputrestore() after inputsave(). (Ken Takata)
+Files:	    src/testdir/test86.in, src/testdir/test87.in
+
+
+*** ../vim-7.4.462/src/testdir/test86.in	2014-03-12 15:26:36.428714415 +0100
+--- src/testdir/test86.in	2014-09-29 18:03:03.539951504 +0200
+***************
+*** 1384,1389 ****
+--- 1384,1390 ----
+  :debug silent! py test_keyboard_interrupt()
+  :redir END
+  :0 debuggreedy
++ :call inputrestore()
+  :silent $put =output
+  :unlet output
+  :py del test_keyboard_interrupt
+*** ../vim-7.4.462/src/testdir/test87.in	2014-03-12 15:26:36.432714415 +0100
+--- src/testdir/test87.in	2014-09-29 18:03:23.719951548 +0200
+***************
+*** 1361,1366 ****
+--- 1361,1367 ----
+  :debug silent! py3 test_keyboard_interrupt()
+  :redir END
+  :0 debuggreedy
++ :call inputrestore()
+  :silent $put =output
+  :unlet output
+  :py3 del test_keyboard_interrupt
+*** ../vim-7.4.462/src/version.c	2014-09-29 17:15:09.963945227 +0200
+--- src/version.c	2014-09-29 18:06:08.299951907 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     463,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+198. You read all the quotes at Netaholics Anonymous and keep thinking
+     "What's wrong with that?"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.464 b/SOURCES/7.4.464
new file mode 100644
index 0000000..c72aa6b
--- /dev/null
+++ b/SOURCES/7.4.464
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.464
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.464 (after 7.4.459)
+Problem:    Compiler warning.
+Solution:   Add type cast. (Ken Takata)
+Files:	    src/gui_w32.c
+
+
+*** ../vim-7.4.463/src/gui_w32.c	2014-09-23 21:53:35.306849352 +0200
+--- src/gui_w32.c	2014-10-06 18:05:22.109272899 +0200
+***************
+*** 1667,1673 ****
+  	HANDLE	hIcon = NULL;
+  
+  	if (mch_icon_load(&hIcon) == OK && hIcon != NULL)
+! 	    SendMessage(s_hwnd, WM_SETICON, ICON_SMALL, hIcon);
+      }
+  
+  #ifdef FEAT_MENU
+--- 1667,1673 ----
+  	HANDLE	hIcon = NULL;
+  
+  	if (mch_icon_load(&hIcon) == OK && hIcon != NULL)
+! 	    SendMessage(s_hwnd, WM_SETICON, ICON_SMALL, (LPARAM)hIcon);
+      }
+  
+  #ifdef FEAT_MENU
+*** ../vim-7.4.463/src/version.c	2014-09-29 18:08:54.591952271 +0200
+--- src/version.c	2014-10-06 18:08:26.921273303 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     464,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+230. You spend your Friday nights typing away at your keyboard
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.465 b/SOURCES/7.4.465
new file mode 100644
index 0000000..44b690d
--- /dev/null
+++ b/SOURCES/7.4.465
@@ -0,0 +1,56 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.465
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.465 (after 7.4.016)
+Problem:    Crash when expanding a very long string.
+Solution:   Use wsncpy() instead of wcscpy(). (Ken Takata)
+Files:	    src/os_win32.c
+
+
+*** ../vim-7.4.464/src/os_win32.c	2014-09-23 21:53:35.310849352 +0200
+--- src/os_win32.c	2014-10-06 18:37:27.437277105 +0200
+***************
+*** 2775,2783 ****
+  	if (p != NULL)
+  	{
+  	    char_u	*q;
+! 	    WCHAR	buf[_MAX_PATH + 2];
+  
+! 	    wcscpy(buf, p);
+  	    vim_free(p);
+  
+  	    if (fname_casew(buf, (len > 0) ? _MAX_PATH : 0) == OK)
+--- 2775,2784 ----
+  	if (p != NULL)
+  	{
+  	    char_u	*q;
+! 	    WCHAR	buf[_MAX_PATH + 1];
+  
+! 	    wcsncpy(buf, p, _MAX_PATH);
+! 	    buf[_MAX_PATH] = L'\0';
+  	    vim_free(p);
+  
+  	    if (fname_casew(buf, (len > 0) ? _MAX_PATH : 0) == OK)
+*** ../vim-7.4.464/src/version.c	2014-10-06 18:10:04.521273516 +0200
+--- src/version.c	2014-10-06 18:40:47.361277541 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     465,
+  /**/
+
+-- 
+Get a life?  What is the URL where it can be downloaded?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.466 b/SOURCES/7.4.466
new file mode 100644
index 0000000..79c463d
--- /dev/null
+++ b/SOURCES/7.4.466
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.466
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.466 (after 7.4.460)
+Problem:    CTRL-W } does not open preview window. (Erik Falor)
+Solution:   Don't set g_do_tagpreview for CTRL-W }.
+Files:	    src/window.c
+
+
+*** ../vim-7.4.465/src/window.c	2014-09-24 13:26:39.954971642 +0200
+--- src/window.c	2014-10-09 10:30:37.712864442 +0200
+***************
+*** 485,491 ****
+  		else
+  		    postponed_split = -1;
+  #ifdef FEAT_QUICKFIX
+! 		g_do_tagpreview = 0;
+  #endif
+  
+  		/* Execute the command right here, required when "wincmd ]"
+--- 485,492 ----
+  		else
+  		    postponed_split = -1;
+  #ifdef FEAT_QUICKFIX
+! 		if (nchar != '}')
+! 		    g_do_tagpreview = 0;
+  #endif
+  
+  		/* Execute the command right here, required when "wincmd ]"
+*** ../vim-7.4.465/src/version.c	2014-10-07 10:38:34.737403070 +0200
+--- src/version.c	2014-10-09 10:44:22.848866244 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     466,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+239. You think "surfing" is something you do on dry land.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.468 b/SOURCES/7.4.468
new file mode 100644
index 0000000..d075186
--- /dev/null
+++ b/SOURCES/7.4.468
@@ -0,0 +1,64 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.468
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.468
+Problem:    Issue 26: CTRL-C does not interrupt after it was mapped and then
+	    unmapped.
+Solution:   Reset mapped_ctrl_c. (Christian Brabandt)
+Files:	    src/getchar.c
+
+
+*** ../vim-7.4.467/src/getchar.c	2014-07-30 16:00:45.539553496 +0200
+--- src/getchar.c	2014-10-09 13:34:09.988888496 +0200
+***************
+*** 3707,3712 ****
+--- 3707,3715 ----
+      {
+  	if (!did_it)
+  	    retval = 2;			    /* no match */
++ 	else if (*keys == Ctrl_C)
++ 	    /* If CTRL-C has been unmapped, reuse it for Interrupting. */
++ 	    mapped_ctrl_c = FALSE;
+  	goto theend;
+      }
+  
+***************
+*** 3739,3745 ****
+  	goto theend;
+      }
+  
+!     /* If CTRL-C has been mapped, don't always use it for Interrupting */
+      if (*keys == Ctrl_C)
+  	mapped_ctrl_c = TRUE;
+  
+--- 3742,3748 ----
+  	goto theend;
+      }
+  
+!     /* If CTRL-C has been mapped, don't always use it for Interrupting. */
+      if (*keys == Ctrl_C)
+  	mapped_ctrl_c = TRUE;
+  
+*** ../vim-7.4.467/src/version.c	2014-10-09 13:22:41.808886993 +0200
+--- src/version.c	2014-10-09 13:29:56.252887942 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     468,
+  /**/
+
+-- 
+Marriage isn't a word.  It's a sentence.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.469 b/SOURCES/7.4.469
new file mode 100644
index 0000000..f6843d2
--- /dev/null
+++ b/SOURCES/7.4.469
@@ -0,0 +1,62 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.469
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.469 (after 7.4.467)
+Problem:    Can't build with MSVC. (Ken Takata)
+Solution:   Move the assignment after the declarations.
+Files:	    src/normal.c
+
+
+*** ../vim-7.4.468/src/normal.c	2014-10-09 13:22:41.804886993 +0200
+--- src/normal.c	2014-10-09 14:46:05.728897923 +0200
+***************
+*** 1382,1390 ****
+      int		restart_edit_save;
+  #ifdef FEAT_LINEBREAK
+      int		lbr_saved = curwin->w_p_lbr;
+- 
+-     curwin->w_p_lbr = FALSE;	/* avoid a problem with unwanted linebreaks in
+- 				 * block mode */
+  #endif
+  
+      /* The visual area is remembered for redo */
+--- 1382,1387 ----
+***************
+*** 1396,1401 ****
+--- 1393,1402 ----
+      int		    include_line_break = FALSE;
+  #endif
+  
++ #ifdef FEAT_LINEBREAK
++     curwin->w_p_lbr = FALSE;	/* Avoid a problem with unwanted linebreaks in
++ 				 * block mode. */
++ #endif
+  #if defined(FEAT_CLIPBOARD)
+      /*
+       * Yank the visual area into the GUI selection register before we operate
+*** ../vim-7.4.468/src/version.c	2014-10-09 13:36:12.736888764 +0200
+--- src/version.c	2014-10-09 14:46:58.760898039 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     469,
+  /**/
+
+-- 
+"After a few years of marriage a man can look right at a woman
+without seeing her and a woman can see right through a man
+without looking at him."
+ - Helen Rowland
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.470 b/SOURCES/7.4.470
new file mode 100644
index 0000000..2066df6
--- /dev/null
+++ b/SOURCES/7.4.470
@@ -0,0 +1,120 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.470
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.470
+Problem:    Test 11 and 100 do not work properly on Windows.
+Solution:   Avoid using feedkeys(). (Ken Takata)
+Files:	    src/testdir/Make_dos.mak, src/testdir/test11.in,
+	    src/testdir/test100.in
+
+
+*** ../vim-7.4.469/src/testdir/Make_dos.mak	2014-08-16 18:36:38.593993280 +0200
+--- src/testdir/Make_dos.mak	2014-10-09 15:26:56.720903277 +0200
+***************
+*** 63,69 ****
+  fixff:
+  	-$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=dos|upd" +q *.in *.ok
+  	-$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=unix|upd" +q \
+! 		dotest.in test60.ok test71.ok test74.ok
+  
+  report:
+  	@echo ""
+--- 63,69 ----
+  fixff:
+  	-$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=dos|upd" +q *.in *.ok
+  	-$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=unix|upd" +q \
+! 		dotest.in test60.ok test71.ok test74.ok test100.ok
+  
+  report:
+  	@echo ""
+*** ../vim-7.4.469/src/testdir/test11.in	2010-08-08 13:16:36.000000000 +0200
+--- src/testdir/test11.in	2014-10-09 15:34:19.588904244 +0200
+***************
+*** 46,58 ****
+  :w>>test.out                    " Append it to the output file
+  :set shelltemp                  " need temp files here
+  :au FilterReadPre   *.out  call rename(expand("<afile>"), expand("<afile>") . ".t")
+! :au FilterReadPre   *.out  exe '!sed s/e/E/ ' . shellescape(expand("<afile>")) . ".t >" . shellescape(expand("<afile>"))
+! :au FilterReadPre   *.out  exe '!rm ' . shellescape(expand("<afile>")) . '.t'
+  :au FilterReadPost  *.out  '[,']s/x/X/g
+  :e! test.out                    " Edit the output file
+  :23,$!cat
+  :23,$s/\r$//                 " remove CR for when sed adds them
+! :au! FileReadPre    *.gz   exe '!gzip -d ' . shellescape(expand("<afile>"))
+  :au  FileReadPre    *.gz   call rename(expand("<afile>:r"), expand("<afile>"))
+  :au! FileReadPost   *.gz   '[,']s/l/L/
+  :$r Xtestfile.gz             " Read compressed file
+--- 46,58 ----
+  :w>>test.out                    " Append it to the output file
+  :set shelltemp                  " need temp files here
+  :au FilterReadPre   *.out  call rename(expand("<afile>"), expand("<afile>") . ".t")
+! :au FilterReadPre   *.out  exe 'silent !sed s/e/E/ ' . shellescape(expand("<afile>")) . ".t >" . shellescape(expand("<afile>"))
+! :au FilterReadPre   *.out  exe 'silent !rm ' . shellescape(expand("<afile>")) . '.t'
+  :au FilterReadPost  *.out  '[,']s/x/X/g
+  :e! test.out                    " Edit the output file
+  :23,$!cat
+  :23,$s/\r$//                 " remove CR for when sed adds them
+! :au! FileReadPre    *.gz   exe 'silent !gzip -d ' . shellescape(expand("<afile>"))
+  :au  FileReadPre    *.gz   call rename(expand("<afile>:r"), expand("<afile>"))
+  :au! FileReadPost   *.gz   '[,']s/l/L/
+  :$r Xtestfile.gz             " Read compressed file
+*** ../vim-7.4.469/src/testdir/test100.in	2014-08-16 17:34:31.186128463 +0200
+--- src/testdir/test100.in	2014-10-09 15:27:44.404903381 +0200
+***************
+*** 16,22 ****
+  :new one
+  :0put ='ONE: expecting global undolevels: 5, local undolevels: -123456 (default)'
+  :call FillBuffer()
+! :call feedkeys(":earlier 10\n", 't')
+  :call UndoLevel()
+  :set ff=unix
+  :%w! test.out
+--- 16,22 ----
+  :new one
+  :0put ='ONE: expecting global undolevels: 5, local undolevels: -123456 (default)'
+  :call FillBuffer()
+! :earlier 10
+  :call UndoLevel()
+  :set ff=unix
+  :%w! test.out
+***************
+*** 24,30 ****
+  :0put ='TWO: expecting global undolevels: 5, local undolevels: 2 (first) then 10 (afterwards)'
+  :setlocal ul=2
+  :call FillBuffer()
+! :call feedkeys(":earlier 10\n", 't')
+  :call UndoLevel()
+  :setlocal ul=10
+  :call UndoLevel()
+--- 24,30 ----
+  :0put ='TWO: expecting global undolevels: 5, local undolevels: 2 (first) then 10 (afterwards)'
+  :setlocal ul=2
+  :call FillBuffer()
+! :earlier 10
+  :call UndoLevel()
+  :setlocal ul=10
+  :call UndoLevel()
+*** ../vim-7.4.469/src/version.c	2014-10-09 14:48:26.284898230 +0200
+--- src/version.c	2014-10-09 15:34:43.088904296 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     470,
+  /**/
+
+-- 
+"Marriage is when a man and woman become as one; the trouble starts
+when they try to decide which one"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.471 b/SOURCES/7.4.471
new file mode 100644
index 0000000..37cbb27
--- /dev/null
+++ b/SOURCES/7.4.471
@@ -0,0 +1,73 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.471
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.471
+Problem:    MS-Windows: When printer name contains multi-byte, the name is
+	    displayed as ???.
+Solution:   Convert the printer name from the active codepage to 'encoding'.
+	    (Yasuhiro Matsumoto)
+Files:	    src/os_mswin.c
+
+
+*** ../vim-7.4.470/src/os_mswin.c	2014-09-27 11:18:08.179520979 +0200
+--- src/os_mswin.c	2014-10-09 17:03:20.500915911 +0200
+***************
+*** 1635,1645 ****
+--- 1635,1667 ----
+  	char_u	*printer_name = (char_u *)devname + devname->wDeviceOffset;
+  	char_u	*port_name = (char_u *)devname +devname->wOutputOffset;
+  	char_u	*text = _("to %s on %s");
++ #ifdef FEAT_MBYTE
++ 	char_u  *printer_name_orig = printer_name;
++ 	char_u	*port_name_orig = port_name;
+  
++ 	if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
++ 	{
++ 	    char_u  *to_free = NULL;
++ 	    int     maxlen;
++ 
++ 	    acp_to_enc(printer_name, STRLEN(printer_name), &to_free, &maxlen);
++ 	    if (to_free != NULL)
++ 		printer_name = to_free;
++ 	    acp_to_enc(port_name, STRLEN(port_name), &to_free, &maxlen);
++ 	    if (to_free != NULL)
++ 		port_name = to_free;
++ 	}
++ #endif
+  	prt_name = alloc((unsigned)(STRLEN(printer_name) + STRLEN(port_name)
+  							     + STRLEN(text)));
+  	if (prt_name != NULL)
+  	    wsprintf(prt_name, text, printer_name, port_name);
++ #ifdef FEAT_MBYTE
++ 	if (printer_name != printer_name_orig)
++ 	    vim_free(printer_name);
++ 	if (port_name != port_name_orig)
++ 	    vim_free(port_name);
++ #endif
+      }
+      GlobalUnlock(prt_dlg.hDevNames);
+  
+*** ../vim-7.4.470/src/version.c	2014-10-09 15:37:02.492904600 +0200
+--- src/version.c	2014-10-09 17:00:58.632915601 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     471,
+  /**/
+
+-- 
+"Marriage is the process of finding out what kind of man your wife
+would have preferred"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.472 b/SOURCES/7.4.472
new file mode 100644
index 0000000..93cabea
--- /dev/null
+++ b/SOURCES/7.4.472
@@ -0,0 +1,46 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.472
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.472
+Problem:    The "precedes" entry in 'listchar' will be drawn when 'showbreak
+	    is set and list is not.
+Solution:   Only draw this character when 'list' is on. (Christian Brabandt)
+Files:	    src/screen.c
+
+
+*** ../vim-7.4.471/src/screen.c	2014-10-09 13:22:41.804886993 +0200
+--- src/screen.c	2014-10-10 15:22:41.589091447 +0200
+***************
+*** 4901,4906 ****
+--- 4901,4907 ----
+  	 * special character (via 'listchars' option "precedes:<char>".
+  	 */
+  	if (lcs_prec_todo != NUL
++ 		&& wp->w_p_list
+  		&& (wp->w_p_wrap ? wp->w_skipcol > 0 : wp->w_leftcol > 0)
+  #ifdef FEAT_DIFF
+  		&& filler_todo <= 0
+*** ../vim-7.4.471/src/version.c	2014-10-09 17:05:51.948916242 +0200
+--- src/version.c	2014-10-10 15:22:06.405091370 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     472,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+251. You've never seen your closest friends who usually live WAY too far away.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.473 b/SOURCES/7.4.473
new file mode 100644
index 0000000..f9b9a7a
--- /dev/null
+++ b/SOURCES/7.4.473
@@ -0,0 +1,47 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.473
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.473
+Problem:    Cursor movement is incorrect when there is a number
+	    column/sign/fold column and 'sbr' is displayed.
+Solution:   Adjust the column for 'sbr'. (Christian Brabandt)
+Files:	    src/charset.c
+
+
+*** ../vim-7.4.472/src/charset.c	2014-08-24 21:19:22.224571318 +0200
+--- src/charset.c	2014-10-10 15:24:26.257091676 +0200
+***************
+*** 1184,1189 ****
+--- 1184,1191 ----
+  	{
+  	    col -= W_WIDTH(wp);
+  	    numberextra = W_WIDTH(wp) - (numberextra - win_col_off2(wp));
++ 	    if (*p_sbr != NUL && col >= (colnr_T)STRLEN(p_sbr))
++ 		col -= (colnr_T)STRLEN(p_sbr);
+  	    if (numberextra > 0)
+  		col = col % numberextra;
+  	}
+*** ../vim-7.4.472/src/version.c	2014-10-10 15:28:41.985092234 +0200
+--- src/version.c	2014-10-10 15:32:19.029092709 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     473,
+  /**/
+
+-- 
+Vi is clearly superior to emacs, since "vi" has only two characters
+(and two keystrokes), while "emacs" has five.  (Randy C. Ford)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.474 b/SOURCES/7.4.474
new file mode 100644
index 0000000..829622e
--- /dev/null
+++ b/SOURCES/7.4.474
@@ -0,0 +1,45 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.474
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.474
+Problem:    AIX compiler can't handle // comment.  Issue 265.
+Solution:   Remove that line.
+Files:	    src/regexp_nfa.c
+
+
+*** ../vim-7.4.473/src/regexp_nfa.c	2014-09-09 17:18:44.008540299 +0200
+--- src/regexp_nfa.c	2014-10-11 12:44:38.033259459 +0200
+***************
+*** 4407,4413 ****
+      switch (state->c)
+      {
+  	case NFA_MATCH:
+- //	    nfa_match = TRUE;
+  	    break;
+  
+  	case NFA_SPLIT:
+--- 4407,4412 ----
+*** ../vim-7.4.473/src/version.c	2014-10-10 15:34:29.657092994 +0200
+--- src/version.c	2014-10-11 12:45:43.393259602 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     474,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+252. You vote for foreign officials.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.475 b/SOURCES/7.4.475
new file mode 100644
index 0000000..d201c09
--- /dev/null
+++ b/SOURCES/7.4.475
@@ -0,0 +1,228 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.475
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.475
+Problem:    Can't compile on a system where Xutf8SetWMProperties() is not in
+	    the X11 library.  Issue 265.
+Solution:   Add a configure check.
+Files:	    src/configure.in, src/auto/configure, src/config.h.in,
+	    src/os_unix.c
+
+
+*** ../vim-7.4.474/src/configure.in	2014-08-17 17:05:39.159057796 +0200
+--- src/configure.in	2014-10-11 14:40:18.557274620 +0200
+***************
+*** 3730,3750 ****
+  dnl Check for multibyte locale functions
+  dnl Find out if _Xsetlocale() is supported by libX11.
+  dnl Check if X_LOCALE should be defined.
+! 
+! if test "$enable_multibyte" = "yes"; then
+    cflags_save=$CFLAGS
+!   ldflags_save=$LDFLAGS
+!   if test "x$x_includes" != "xNONE" ; then
+!     CFLAGS="$CFLAGS -I$x_includes"
+!     LDFLAGS="$X_LIBS $LDFLAGS -lX11"
+!     AC_MSG_CHECKING(whether X_LOCALE needed)
+!     AC_TRY_COMPILE([#include <X11/Xlocale.h>],,
+! 	AC_TRY_LINK_FUNC([_Xsetlocale], [AC_MSG_RESULT(yes)
+! 		AC_DEFINE(X_LOCALE)], AC_MSG_RESULT(no)),
+! 	AC_MSG_RESULT(no))
+!   fi
+    CFLAGS=$cflags_save
+!   LDFLAGS=$ldflags_save
+  fi
+  
+  dnl Link with xpg4, it is said to make Korean locale working
+--- 3730,3753 ----
+  dnl Check for multibyte locale functions
+  dnl Find out if _Xsetlocale() is supported by libX11.
+  dnl Check if X_LOCALE should be defined.
+! if test "x$with_x" = "xyes"; then
+    cflags_save=$CFLAGS
+!   libs_save=$LIBS
+!   LIBS="$LIBS $X_LIBS $GUI_LIB_LOC $GUI_X_LIBS $X_PRE_LIBS $X_LIB $X_EXTRA_LIBS"
+!   CFLAGS="$CFLAGS $X_CFLAGS"
+! 
+!   AC_MSG_CHECKING(whether X_LOCALE needed)
+!   AC_TRY_COMPILE([#include <X11/Xlocale.h>],,
+!       AC_TRY_LINK_FUNC([_Xsetlocale], [AC_MSG_RESULT(yes)
+! 	      AC_DEFINE(X_LOCALE)], AC_MSG_RESULT(no)),
+!       AC_MSG_RESULT(no))
+! 
+!   AC_MSG_CHECKING(whether Xutf8SetWMProperties() can be used)
+!   AC_TRY_LINK_FUNC([Xutf8SetWMProperties], [AC_MSG_RESULT(yes)
+! 	      AC_DEFINE(HAVE_XUTF8SETWMPROPERTIES)], AC_MSG_RESULT(no))
+! 
+    CFLAGS=$cflags_save
+!   LIBS=$libs_save
+  fi
+  
+  dnl Link with xpg4, it is said to make Korean locale working
+*** ../vim-7.4.474/src/auto/configure	2014-08-17 17:05:39.163057796 +0200
+--- src/auto/configure	2014-10-11 14:40:51.421274692 +0200
+***************
+*** 12732,12747 ****
+  fi
+  
+  
+! 
+! if test "$enable_multibyte" = "yes"; then
+    cflags_save=$CFLAGS
+!   ldflags_save=$LDFLAGS
+!   if test "x$x_includes" != "xNONE" ; then
+!     CFLAGS="$CFLAGS -I$x_includes"
+!     LDFLAGS="$X_LIBS $LDFLAGS -lX11"
+!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether X_LOCALE needed" >&5
+  $as_echo_n "checking whether X_LOCALE needed... " >&6; }
+!     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  /* end confdefs.h.  */
+  #include <X11/Xlocale.h>
+  int
+--- 12732,12746 ----
+  fi
+  
+  
+! if test "x$with_x" = "xyes"; then
+    cflags_save=$CFLAGS
+!   libs_save=$LIBS
+!   LIBS="$LIBS $X_LIBS $GUI_LIB_LOC $GUI_X_LIBS $X_PRE_LIBS $X_LIB $X_EXTRA_LIBS"
+!   CFLAGS="$CFLAGS $X_CFLAGS"
+! 
+!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether X_LOCALE needed" >&5
+  $as_echo_n "checking whether X_LOCALE needed... " >&6; }
+!   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  /* end confdefs.h.  */
+  #include <X11/Xlocale.h>
+  int
+***************
+*** 12774,12780 ****
+  if ac_fn_c_try_link "$LINENO"; then :
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+  $as_echo "yes" >&6; }
+! 		$as_echo "#define X_LOCALE 1" >>confdefs.h
+  
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+--- 12773,12779 ----
+  if ac_fn_c_try_link "$LINENO"; then :
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+  $as_echo "yes" >&6; }
+! 	      $as_echo "#define X_LOCALE 1" >>confdefs.h
+  
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+***************
+*** 12787,12795 ****
+  $as_echo "no" >&6; }
+  fi
+  rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+!   fi
+    CFLAGS=$cflags_save
+!   LDFLAGS=$ldflags_save
+  fi
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _xpg4_setrunelocale in -lxpg4" >&5
+--- 12786,12826 ----
+  $as_echo "no" >&6; }
+  fi
+  rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+! 
+!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Xutf8SetWMProperties() can be used" >&5
+! $as_echo_n "checking whether Xutf8SetWMProperties() can be used... " >&6; }
+!   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+! /* end confdefs.h.  */
+! 
+! /* Override any GCC internal prototype to avoid an error.
+!    Use char because int might match the return type of a GCC
+!    builtin and then its argument prototype would still apply.  */
+! #ifdef __cplusplus
+! extern "C"
+! #endif
+! char Xutf8SetWMProperties ();
+! int
+! main ()
+! {
+! return Xutf8SetWMProperties ();
+!   ;
+!   return 0;
+! }
+! _ACEOF
+! if ac_fn_c_try_link "$LINENO"; then :
+!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+! $as_echo "yes" >&6; }
+! 	      $as_echo "#define HAVE_XUTF8SETWMPROPERTIES 1" >>confdefs.h
+! 
+! else
+!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+! $as_echo "no" >&6; }
+! fi
+! rm -f core conftest.err conftest.$ac_objext \
+!     conftest$ac_exeext conftest.$ac_ext
+! 
+    CFLAGS=$cflags_save
+!   LIBS=$libs_save
+  fi
+  
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _xpg4_setrunelocale in -lxpg4" >&5
+*** ../vim-7.4.474/src/config.h.in	2014-04-02 14:05:33.995887839 +0200
+--- src/config.h.in	2014-10-11 14:40:03.841274588 +0200
+***************
+*** 446,448 ****
+--- 446,451 ----
+  
+  /* Define if we have AvailabilityMacros.h on Mac OS X */
+  #undef HAVE_AVAILABILITYMACROS_H
++ 
++ /* Define if Xutf8SetWMProperties() is in an X library. */
++ #undef HAVE_XUTF8SETWMPROPERTIES
+*** ../vim-7.4.474/src/os_unix.c	2014-08-29 12:58:38.242430208 +0200
+--- src/os_unix.c	2014-10-11 14:47:04.601275507 +0200
+***************
+*** 1960,1968 ****
+      return retval;
+  }
+  
+! /* Are Xutf8 functions available?  Avoid error from old compilers. */
+  #if defined(X_HAVE_UTF8_STRING) && defined(FEAT_MBYTE)
+! # if X_HAVE_UTF8_STRING
+  #  define USE_UTF8_STRING
+  # endif
+  #endif
+--- 1960,1971 ----
+      return retval;
+  }
+  
+! /* Xutf8 functions are not avaialble on older systems. Note that on some
+!  * systems X_HAVE_UTF8_STRING may be defined in a header file but
+!  * Xutf8SetWMProperties() is not in the X11 library.  Configure checks for
+!  * that and defines HAVE_XUTF8SETWMPROPERTIES. */
+  #if defined(X_HAVE_UTF8_STRING) && defined(FEAT_MBYTE)
+! # if X_HAVE_UTF8_STRING && HAVE_XUTF8SETWMPROPERTIES
+  #  define USE_UTF8_STRING
+  # endif
+  #endif
+*** ../vim-7.4.474/src/version.c	2014-10-11 12:48:22.541259950 +0200
+--- src/version.c	2014-10-11 14:42:47.821274946 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     475,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+253. You wait for a slow loading web page before going to the toilet.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.476 b/SOURCES/7.4.476
new file mode 100644
index 0000000..6824595
--- /dev/null
+++ b/SOURCES/7.4.476
@@ -0,0 +1,88 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.476
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.476
+Problem:    MingW: compiling with "XPM=no" doesn't work.
+Solution:   Check for the "no" value. (KF Leong)  Also for Cygwin. (Ken
+	    Takata)
+Files:	    src/Make_ming.mak, src/Make_cyg.mak
+
+
+*** ../vim-7.4.475/src/Make_ming.mak	2014-08-10 16:31:47.376709213 +0200
+--- src/Make_ming.mak	2014-10-15 12:00:35.986008598 +0200
+***************
+*** 22,28 ****
+  #     http://www.matcode.com/mpress.htm
+  #
+  # Maintained by Ron Aaron <ronaharon@yahoo.com> et al.
+! # Updated 2012 Sep 5.
+  
+  #>>>>> choose options:
+  # set to yes for a debug build
+--- 22,28 ----
+  #     http://www.matcode.com/mpress.htm
+  #
+  # Maintained by Ron Aaron <ronaharon@yahoo.com> et al.
+! # Updated 2014 Oct 13.
+  
+  #>>>>> choose options:
+  # set to yes for a debug build
+***************
+*** 613,619 ****
+  USE_STDCPLUS = yes
+  endif
+  endif
+! ifdef XPM
+  # Only allow XPM for a GUI build.
+  ifeq (yes, $(GUI))
+  OBJ += $(OUTDIR)/xpm_w32.o
+--- 613,619 ----
+  USE_STDCPLUS = yes
+  endif
+  endif
+! ifneq ($(XPM),no)
+  # Only allow XPM for a GUI build.
+  ifeq (yes, $(GUI))
+  OBJ += $(OUTDIR)/xpm_w32.o
+*** ../vim-7.4.475/src/Make_cyg.mak	2014-08-10 16:31:47.372709213 +0200
+--- src/Make_cyg.mak	2014-10-15 12:06:01.170009309 +0200
+***************
+*** 485,491 ****
+  endif
+  
+  ##############################
+! ifdef XPM
+  # Only allow XPM for a GUI build.
+  DEFINES += -DFEAT_XPM_W32
+  INCLUDES += -I$(XPM)/include
+--- 485,491 ----
+  endif
+  
+  ##############################
+! ifneq ($(XPM),no)
+  # Only allow XPM for a GUI build.
+  DEFINES += -DFEAT_XPM_W32
+  INCLUDES += -I$(XPM)/include
+*** ../vim-7.4.475/src/version.c	2014-10-11 14:47:22.833275547 +0200
+--- src/version.c	2014-10-15 12:03:39.186008999 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     476,
+  /**/
+
+-- 
+Women are probably the main cause of free software starvation.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.477 b/SOURCES/7.4.477
new file mode 100644
index 0000000..0fe507a
--- /dev/null
+++ b/SOURCES/7.4.477
@@ -0,0 +1,58 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.477
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.477
+Problem:    When using ":%diffput" and the other file is empty an extra empty
+	    line remains.
+Solution:   Set the buf_empty flag.
+Files:	    src/diff.c
+
+
+*** ../vim-7.4.476/src/diff.c	2014-05-28 11:35:33.424011248 +0200
+--- src/diff.c	2014-10-15 12:54:45.778015697 +0200
+***************
+*** 2325,2331 ****
+  		    end_skip = 0;
+  	    }
+  
+! 	    buf_empty = FALSE;
+  	    added = 0;
+  	    for (i = 0; i < count; ++i)
+  	    {
+--- 2325,2331 ----
+  		    end_skip = 0;
+  	    }
+  
+! 	    buf_empty = bufempty();
+  	    added = 0;
+  	    for (i = 0; i < count; ++i)
+  	    {
+*** ../vim-7.4.476/src/version.c	2014-10-15 12:07:07.610009454 +0200
+--- src/version.c	2014-10-15 12:37:54.338013488 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     477,
+  /**/
+
+-- 
+       We're knights of the round table
+       We dance whene'er we're able
+       We do routines and chorus scenes
+       With footwork impeccable.
+       We dine well here in Camelot
+       We eat ham and jam and spam a lot.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.478 b/SOURCES/7.4.478
new file mode 100644
index 0000000..edb9663
--- /dev/null
+++ b/SOURCES/7.4.478
@@ -0,0 +1,58 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.478
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.478
+Problem:    Using byte length instead of character length for 'showbreak'.
+Solution:   Compute the character length. (Marco Hinz)
+Files:	    src/charset.c
+
+
+*** ../vim-7.4.477/src/charset.c	2014-10-10 15:34:29.657092994 +0200
+--- src/charset.c	2014-10-15 21:24:05.578082450 +0200
+***************
+*** 1184,1191 ****
+  	{
+  	    col -= W_WIDTH(wp);
+  	    numberextra = W_WIDTH(wp) - (numberextra - win_col_off2(wp));
+! 	    if (*p_sbr != NUL && col >= (colnr_T)STRLEN(p_sbr))
+! 		col -= (colnr_T)STRLEN(p_sbr);
+  	    if (numberextra > 0)
+  		col = col % numberextra;
+  	}
+--- 1184,1195 ----
+  	{
+  	    col -= W_WIDTH(wp);
+  	    numberextra = W_WIDTH(wp) - (numberextra - win_col_off2(wp));
+! 	    if (*p_sbr != NUL)
+! 	    {
+! 		colnr_T sbrlen = (colnr_T)MB_CHARLEN(p_sbr);
+! 		if (col >= sbrlen)
+! 		    col -= sbrlen;
+! 	    }
+  	    if (numberextra > 0)
+  		col = col % numberextra;
+  	}
+*** ../vim-7.4.477/src/version.c	2014-10-15 12:56:44.006015955 +0200
+--- src/version.c	2014-10-15 21:19:10.414081805 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     478,
+  /**/
+
+-- 
+There is a fine line between courage and foolishness.
+Unfortunately, it's not a fence.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.479 b/SOURCES/7.4.479
new file mode 100644
index 0000000..807daa6
--- /dev/null
+++ b/SOURCES/7.4.479
@@ -0,0 +1,112 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.479
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.479
+Problem:    MS-Windows: The console title can be wrong.
+Solution:   Take the encoding into account. When restoring the title use the
+	    right function. (Yasuhiro Matsumoto)
+Files:	    src/os_mswin.c, src/os_win32.c
+
+
+*** ../vim-7.4.478/src/os_mswin.c	2014-10-09 17:05:51.944916242 +0200
+--- src/os_mswin.c	2014-10-15 22:46:06.922093200 +0200
+***************
+*** 344,350 ****
+      int which)
+  {
+  #ifndef FEAT_GUI_MSWIN
+!     mch_settitle((which & 1) ? g_szOrigTitle : NULL, NULL);
+  #endif
+  }
+  
+--- 344,350 ----
+      int which)
+  {
+  #ifndef FEAT_GUI_MSWIN
+!     SetConsoleTitle(g_szOrigTitle);
+  #endif
+  }
+  
+*** ../vim-7.4.478/src/os_win32.c	2014-10-07 10:38:34.737403070 +0200
+--- src/os_win32.c	2014-10-15 22:49:22.358093627 +0200
+***************
+*** 4648,4653 ****
+--- 4648,4682 ----
+  #ifdef FEAT_TITLE
+      char szShellTitle[512];
+  
++ # ifdef FEAT_MBYTE
++     /* Change the title to reflect that we are in a subshell. */
++     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
++     {
++ 	WCHAR szShellTitle[512];
++ 
++ 	if (GetConsoleTitleW(szShellTitle,
++ 				  sizeof(szShellTitle)/sizeof(WCHAR) - 4) > 0)
++ 	{
++ 	    if (cmd == NULL)
++ 		wcscat(szShellTitle, L" :sh");
++ 	    else
++ 	    {
++ 		WCHAR *wn = enc_to_utf16(cmd, NULL);
++ 
++ 		if (wn != NULL)
++ 		{
++ 		    wcscat(szShellTitle, L" - !");
++ 		    if ((wcslen(szShellTitle) + wcslen(wn) <
++ 					  sizeof(szShellTitle)/sizeof(WCHAR)))
++ 			wcscat(szShellTitle, wn);
++ 		    SetConsoleTitleW(szShellTitle);
++ 		    vim_free(wn);
++ 		    goto didset;
++ 		}
++ 	    }
++ 	}
++     }
++ #endif
+      /* Change the title to reflect that we are in a subshell. */
+      if (GetConsoleTitle(szShellTitle, sizeof(szShellTitle) - 4) > 0)
+      {
+***************
+*** 4659,4665 ****
+  	    if ((strlen(szShellTitle) + strlen(cmd) < sizeof(szShellTitle)))
+  		strcat(szShellTitle, cmd);
+  	}
+! 	mch_settitle(szShellTitle, NULL);
+      }
+  #endif
+  
+--- 4688,4694 ----
+  	    if ((strlen(szShellTitle) + strlen(cmd) < sizeof(szShellTitle)))
+  		strcat(szShellTitle, cmd);
+  	}
+! 	SetConsoleTitle(szShellTitle);
+      }
+  #endif
+  
+*** ../vim-7.4.478/src/version.c	2014-10-15 21:26:35.566082778 +0200
+--- src/version.c	2014-10-15 22:45:44.810093152 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     479,
+  /**/
+
+-- 
+MAN:    Fetchez la vache!
+GUARD:  Quoi?
+MAN:    Fetchez la vache!
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.480 b/SOURCES/7.4.480
new file mode 100644
index 0000000..4aee459
--- /dev/null
+++ b/SOURCES/7.4.480
@@ -0,0 +1,110 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.480
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.480 (after 7.4.479)
+Problem:    MS-Windows: Can't build.
+Solution:   Remove goto, use a flag instead.
+Files:	    src/os_win32.c
+
+
+*** ../vim-7.4.479/src/os_win32.c	2014-10-15 22:50:06.946093724 +0200
+--- src/os_win32.c	2014-10-16 16:09:57.182230006 +0200
+***************
+*** 4646,4654 ****
+      int		x = 0;
+      int		tmode = cur_tmode;
+  #ifdef FEAT_TITLE
+!     char szShellTitle[512];
+! 
+  # ifdef FEAT_MBYTE
+      /* Change the title to reflect that we are in a subshell. */
+      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+      {
+--- 4646,4655 ----
+      int		x = 0;
+      int		tmode = cur_tmode;
+  #ifdef FEAT_TITLE
+!     char	szShellTitle[512];
+  # ifdef FEAT_MBYTE
++     int		did_set_title = FALSE;
++ 
+      /* Change the title to reflect that we are in a subshell. */
+      if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+      {
+***************
+*** 4671,4695 ****
+  			wcscat(szShellTitle, wn);
+  		    SetConsoleTitleW(szShellTitle);
+  		    vim_free(wn);
+! 		    goto didset;
+  		}
+  	    }
+  	}
+      }
+! #endif
+!     /* Change the title to reflect that we are in a subshell. */
+!     if (GetConsoleTitle(szShellTitle, sizeof(szShellTitle) - 4) > 0)
+!     {
+! 	if (cmd == NULL)
+! 	    strcat(szShellTitle, " :sh");
+! 	else
+  	{
+! 	    strcat(szShellTitle, " - !");
+! 	    if ((strlen(szShellTitle) + strlen(cmd) < sizeof(szShellTitle)))
+! 		strcat(szShellTitle, cmd);
+  	}
+- 	SetConsoleTitle(szShellTitle);
+-     }
+  #endif
+  
+      out_flush();
+--- 4672,4697 ----
+  			wcscat(szShellTitle, wn);
+  		    SetConsoleTitleW(szShellTitle);
+  		    vim_free(wn);
+! 		    did_set_title = TRUE;
+  		}
+  	    }
+  	}
+      }
+!     if (!did_set_title)
+! # endif
+! 	/* Change the title to reflect that we are in a subshell. */
+! 	if (GetConsoleTitle(szShellTitle, sizeof(szShellTitle) - 4) > 0)
+  	{
+! 	    if (cmd == NULL)
+! 		strcat(szShellTitle, " :sh");
+! 	    else
+! 	    {
+! 		strcat(szShellTitle, " - !");
+! 		if ((strlen(szShellTitle) + strlen(cmd) < sizeof(szShellTitle)))
+! 		    strcat(szShellTitle, cmd);
+! 	    }
+! 	    SetConsoleTitle(szShellTitle);
+  	}
+  #endif
+  
+      out_flush();
+*** ../vim-7.4.479/src/version.c	2014-10-15 22:50:06.950093724 +0200
+--- src/version.c	2014-10-16 16:11:34.278230218 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     480,
+  /**/
+
+-- 
+Ten bugs in the hand is better than one as yet undetected.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.481 b/SOURCES/7.4.481
new file mode 100644
index 0000000..798f4eb
--- /dev/null
+++ b/SOURCES/7.4.481
@@ -0,0 +1,62 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.481
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.481 (after 7.4.471)
+Problem:    Compiler warning on MS-Windows.
+Solution:   Add type casts. (Ken Takata)
+Files:	    src/os_mswin.c
+
+
+*** ../vim-7.4.480/src/os_mswin.c	2014-10-15 22:50:06.946093724 +0200
+--- src/os_mswin.c	2014-10-16 20:33:05.874264494 +0200
+***************
+*** 1644,1653 ****
+  	    char_u  *to_free = NULL;
+  	    int     maxlen;
+  
+! 	    acp_to_enc(printer_name, STRLEN(printer_name), &to_free, &maxlen);
+  	    if (to_free != NULL)
+  		printer_name = to_free;
+! 	    acp_to_enc(port_name, STRLEN(port_name), &to_free, &maxlen);
+  	    if (to_free != NULL)
+  		port_name = to_free;
+  	}
+--- 1644,1654 ----
+  	    char_u  *to_free = NULL;
+  	    int     maxlen;
+  
+! 	    acp_to_enc(printer_name, (int)STRLEN(printer_name), &to_free,
+! 								    &maxlen);
+  	    if (to_free != NULL)
+  		printer_name = to_free;
+! 	    acp_to_enc(port_name, (int)STRLEN(port_name), &to_free, &maxlen);
+  	    if (to_free != NULL)
+  		port_name = to_free;
+  	}
+*** ../vim-7.4.480/src/version.c	2014-10-16 16:16:33.970230873 +0200
+--- src/version.c	2014-10-16 20:34:30.882264680 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     481,
+  /**/
+
+-- 
+       Bravely bold Sir Robin, rode forth from Camelot,
+       He was not afraid to die, Oh Brave Sir Robin,
+       He was not at all afraid to be killed in nasty ways
+       Brave, brave, brave, brave Sir Robin.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.482 b/SOURCES/7.4.482
new file mode 100644
index 0000000..46dcb20
--- /dev/null
+++ b/SOURCES/7.4.482
@@ -0,0 +1,64 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.482
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.482
+Problem:    When 'balloonexpr' results in a list, the text has a trailing
+	    newline. (Lcd)
+Solution:   Remove one trailing newline.
+Files:	    src/gui_beval.c
+
+
+*** ../vim-7.4.481/src/gui_beval.c	2014-06-25 17:44:45.850768919 +0200
+--- src/gui_beval.c	2014-10-21 14:12:13.915158215 +0200
+***************
+*** 30,35 ****
+--- 30,36 ----
+      long	winnr = 0;
+      char_u	*bexpr;
+      buf_T	*save_curbuf;
++     size_t	len;
+  # ifdef FEAT_WINDOWS
+      win_T	*cw;
+  # endif
+***************
+*** 83,88 ****
+--- 84,99 ----
+  	    vim_free(result);
+  	    result = eval_to_string(bexpr, NULL, TRUE);
+  
++ 	    /* Remove one trailing newline, it is added when the result was a
++ 	     * list and it's hardly every useful.  If the user really wants a
++ 	     * trailing newline he can add two and one remains. */
++ 	    if (result != NULL)
++ 	    {
++ 		len = STRLEN(result);
++ 		if (len > 0 && result[len - 1] == NL)
++ 		    result[len - 1] = NUL;
++ 	    }
++ 
+  	    if (use_sandbox)
+  		--sandbox;
+  	    --textlock;
+*** ../vim-7.4.481/src/version.c	2014-10-16 20:35:32.146264814 +0200
+--- src/version.c	2014-10-21 14:13:19.571158359 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     482,
+  /**/
+
+-- 
+You cannot propel yourself forward by patting yourself on the back.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.483 b/SOURCES/7.4.483
new file mode 100644
index 0000000..625e3cf
--- /dev/null
+++ b/SOURCES/7.4.483
@@ -0,0 +1,192 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.483
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.483
+Problem:    A 0x80 byte is not handled correctly in abbreviations.
+Solution:   Unescape special characters. Add a test. (Christian Brabandt)
+Files:	    src/getchar.c, src/testdir/Make_amiga.mak,
+	    src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+	    src/testdir/Make_os2.mak, src/testdir/Make_vms.mms,
+	    src/testdir/Makefile, src/testdir/test_mapping.in,
+	    src/testdir/test_mapping.ok
+
+
+*** ../vim-7.4.482/src/getchar.c	2014-10-09 13:36:12.736888764 +0200
+--- src/getchar.c	2014-10-21 16:19:23.907174882 +0200
+***************
+*** 4443,4448 ****
+--- 4443,4449 ----
+  #endif
+      int		is_id = TRUE;
+      int		vim_abbr;
++     int		qlen;		/* length of q, CSI/K_SPECIAL unescaped */
+  
+      if (typebuf.tb_no_abbr_cnt)	/* abbrev. are not recursive */
+  	return FALSE;
+***************
+*** 4520,4525 ****
+--- 4521,4539 ----
+  #else
+  	mp = first_abbr;
+  #endif
++ 	qlen = mp->m_keylen;
++ 	if (vim_strbyte(mp->m_keys, K_SPECIAL) != NULL)
++ 	{
++ 	    char_u	*q = vim_strsave(mp->m_keys);
++ 
++ 	    /* might have CSI escaped mp->m_keys */
++ 	    if (q != NULL)
++ 	    {
++ 		vim_unescape_csi(q);
++ 		qlen = STRLEN(q);
++ 		vim_free(q);
++ 	    }
++ 	}
+  	for ( ; mp;
+  #ifdef FEAT_LOCALMAP
+  		mp->m_next == NULL ? (mp = mp2, mp2 = NULL) :
+***************
+*** 4528,4534 ****
+  	{
+  	    /* find entries with right mode and keys */
+  	    if (       (mp->m_mode & State)
+! 		    && mp->m_keylen == len
+  		    && !STRNCMP(mp->m_keys, ptr, (size_t)len))
+  		break;
+  	}
+--- 4542,4548 ----
+  	{
+  	    /* find entries with right mode and keys */
+  	    if (       (mp->m_mode & State)
+! 		    && qlen == len
+  		    && !STRNCMP(mp->m_keys, ptr, (size_t)len))
+  		break;
+  	}
+*** ../vim-7.4.482/src/testdir/Make_amiga.mak	2014-08-16 18:36:38.593993280 +0200
+--- src/testdir/Make_amiga.mak	2014-10-21 16:12:45.523174012 +0200
+***************
+*** 43,48 ****
+--- 43,49 ----
+  		test_insertcount.out \
+  		test_listlbr.out \
+  		test_listlbr_utf8.out \
++ 		test_mapping.out \
+  		test_options.out \
+  		test_qf_title.out \
+  		test_utf8.out
+*** ../vim-7.4.482/src/testdir/Make_dos.mak	2014-10-09 15:37:02.492904600 +0200
+--- src/testdir/Make_dos.mak	2014-10-21 16:12:45.523174012 +0200
+***************
+*** 42,47 ****
+--- 42,48 ----
+  		test_insertcount.out \
+  		test_listlbr.out \
+  		test_listlbr_utf8.out \
++ 		test_mapping.out \
+  		test_options.out \
+  		test_qf_title.out \
+  		test_utf8.out
+*** ../vim-7.4.482/src/testdir/Make_ming.mak	2014-08-16 18:36:38.593993280 +0200
+--- src/testdir/Make_ming.mak	2014-10-21 16:12:45.527174012 +0200
+***************
+*** 62,67 ****
+--- 62,68 ----
+  		test_insertcount.out \
+  		test_listlbr.out \
+  		test_listlbr_utf8.out \
++ 		test_mapping.out \
+  		test_options.out \
+  		test_qf_title.out \
+  		test_utf8.out
+*** ../vim-7.4.482/src/testdir/Make_os2.mak	2014-08-16 18:36:38.593993280 +0200
+--- src/testdir/Make_os2.mak	2014-10-21 16:15:40.139174393 +0200
+***************
+*** 44,49 ****
+--- 44,50 ----
+  		test_insertcount.out \
+  		test_listlbr.out \
+  		test_listlbr_utf8.out \
++ 		test_mapping.out \
+  		test_options.out \
+  		test_qf_title.out \
+  		test_utf8.out
+*** ../vim-7.4.482/src/testdir/Make_vms.mms	2014-08-16 18:36:38.597993280 +0200
+--- src/testdir/Make_vms.mms	2014-10-21 16:12:45.527174012 +0200
+***************
+*** 103,108 ****
+--- 103,109 ----
+  	 test_insertcount.out \
+  	 test_listlbr.out \
+  	 test_listlbr_utf8.out \
++ 	 test_mapping.out \
+  	 test_options.out \
+  	 test_qf_title.out \
+  	 test_utf8.out
+*** ../vim-7.4.482/src/testdir/Makefile	2014-08-16 18:36:38.597993280 +0200
+--- src/testdir/Makefile	2014-10-21 16:16:05.771174449 +0200
+***************
+*** 40,45 ****
+--- 40,46 ----
+  		test_insertcount.out \
+  		test_listlbr.out \
+  		test_listlbr_utf8.out \
++ 		test_mapping.out \
+  		test_options.out \
+  		test_qf_title.out \
+  		test_utf8.out
+*** ../vim-7.4.482/src/testdir/test_mapping.in	2014-10-21 16:21:48.163175197 +0200
+--- src/testdir/test_mapping.in	2014-10-21 16:12:45.527174012 +0200
+***************
+*** 0 ****
+--- 1,15 ----
++ Test for mappings and abbreviations
++ 
++ STARTTEST
++ :so small.vim
++ :so mbyte.vim
++ : " abbreviations with р (0x80) should work
++ :inoreab чкпр   vim
++ GAчкпр 
++ 
++ :/^test/,$w! test.out
++ :qa!
++ ENDTEST
++ 
++ test starts here:
++ 
+*** ../vim-7.4.482/src/testdir/test_mapping.ok	2014-10-21 16:21:48.167175197 +0200
+--- src/testdir/test_mapping.ok	2014-10-21 16:12:45.527174012 +0200
+***************
+*** 0 ****
+--- 1,2 ----
++ test starts here:
++ vim
+*** ../vim-7.4.482/src/version.c	2014-10-21 14:15:13.419158607 +0200
+--- src/version.c	2014-10-21 16:17:25.139174622 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     483,
+  /**/
+
+-- 
+E  M  A  C  S
+s  e  l  o  h
+c  t  t  n  i
+a  a     t  f
+p        r  t
+e        o
+         l
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.484 b/SOURCES/7.4.484
new file mode 100644
index 0000000..c914d0a
--- /dev/null
+++ b/SOURCES/7.4.484
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.484
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.484 (after 7.4.483)
+Problem:    Compiler warning on MS-Windows. (Ken Takata)
+Solution:   Add type cast.
+Files:	    src/getchar.c
+
+
+*** ../vim-7.4.483/src/getchar.c	2014-10-21 16:22:01.403175226 +0200
+--- src/getchar.c	2014-10-21 18:12:33.170273428 +0200
+***************
+*** 4530,4536 ****
+  	    if (q != NULL)
+  	    {
+  		vim_unescape_csi(q);
+! 		qlen = STRLEN(q);
+  		vim_free(q);
+  	    }
+  	}
+--- 4530,4536 ----
+  	    if (q != NULL)
+  	    {
+  		vim_unescape_csi(q);
+! 		qlen = (int)STRLEN(q);
+  		vim_free(q);
+  	    }
+  	}
+*** ../vim-7.4.483/src/version.c	2014-10-21 16:22:01.407175226 +0200
+--- src/version.c	2014-10-21 18:14:13.410273647 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     484,
+  /**/
+
+-- 
+"My particular problem is with registry entries, which seem to just
+accumulate like plastic coffee cups..."           -- Paul Moore
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.485 b/SOURCES/7.4.485
new file mode 100644
index 0000000..15486dc
--- /dev/null
+++ b/SOURCES/7.4.485
@@ -0,0 +1,114 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.485
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.485 (after 7.4.484)
+Problem:    Abbreviations don't work. (Toothpik)
+Solution:   Move the length computation inside the for loop.  Compare against
+	    the unescaped key.
+Files:	    src/getchar.c
+
+
+*** ../vim-7.4.484/src/getchar.c	2014-10-21 18:17:05.638274024 +0200
+--- src/getchar.c	2014-10-21 19:30:46.262283680 +0200
+***************
+*** 4443,4449 ****
+  #endif
+      int		is_id = TRUE;
+      int		vim_abbr;
+-     int		qlen;		/* length of q, CSI/K_SPECIAL unescaped */
+  
+      if (typebuf.tb_no_abbr_cnt)	/* abbrev. are not recursive */
+  	return FALSE;
+--- 4443,4448 ----
+***************
+*** 4521,4549 ****
+  #else
+  	mp = first_abbr;
+  #endif
+- 	qlen = mp->m_keylen;
+- 	if (vim_strbyte(mp->m_keys, K_SPECIAL) != NULL)
+- 	{
+- 	    char_u	*q = vim_strsave(mp->m_keys);
+- 
+- 	    /* might have CSI escaped mp->m_keys */
+- 	    if (q != NULL)
+- 	    {
+- 		vim_unescape_csi(q);
+- 		qlen = (int)STRLEN(q);
+- 		vim_free(q);
+- 	    }
+- 	}
+  	for ( ; mp;
+  #ifdef FEAT_LOCALMAP
+  		mp->m_next == NULL ? (mp = mp2, mp2 = NULL) :
+  #endif
+  		(mp = mp->m_next))
+  	{
+  	    /* find entries with right mode and keys */
+! 	    if (       (mp->m_mode & State)
+  		    && qlen == len
+! 		    && !STRNCMP(mp->m_keys, ptr, (size_t)len))
+  		break;
+  	}
+  	if (mp != NULL)
+--- 4520,4553 ----
+  #else
+  	mp = first_abbr;
+  #endif
+  	for ( ; mp;
+  #ifdef FEAT_LOCALMAP
+  		mp->m_next == NULL ? (mp = mp2, mp2 = NULL) :
+  #endif
+  		(mp = mp->m_next))
+  	{
++ 	    int		qlen = mp->m_keylen;
++ 	    char_u	*q = mp->m_keys;
++ 	    int		match;
++ 
++ 	    if (vim_strbyte(mp->m_keys, K_SPECIAL) != NULL)
++ 	    {
++ 		/* might have CSI escaped mp->m_keys */
++ 		q = vim_strsave(mp->m_keys);
++ 		if (q != NULL)
++ 		{
++ 		    vim_unescape_csi(q);
++ 		    qlen = (int)STRLEN(q);
++ 		}
++ 	    }
++ 
+  	    /* find entries with right mode and keys */
+! 	    match =    (mp->m_mode & State)
+  		    && qlen == len
+! 		    && !STRNCMP(q, ptr, (size_t)len);
+! 	    if (q != mp->m_keys)
+! 		vim_free(q);
+! 	    if (match)
+  		break;
+  	}
+  	if (mp != NULL)
+*** ../vim-7.4.484/src/version.c	2014-10-21 18:17:05.638274024 +0200
+--- src/version.c	2014-10-21 19:34:55.338284224 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     485,
+  /**/
+
+-- 
+TALL KNIGHT: We shall say Ni! again to you if you do not appease us.
+ARTHUR:      All right!  What do you want?
+TALL KNIGHT: We want ... a shrubbery!
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.486 b/SOURCES/7.4.486
new file mode 100644
index 0000000..11af1cb
--- /dev/null
+++ b/SOURCES/7.4.486
@@ -0,0 +1,271 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.486
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.486
+Problem:    Check for writing to a yank register is wrong.
+Solution:   Negate the check. (Zyx).  Also clean up the #ifdefs.
+Files:	    src/ex_docmd.c, src/ex_cmds.h
+
+
+*** ../vim-7.4.485/src/ex_docmd.c	2014-09-19 20:07:22.546449677 +0200
+--- src/ex_docmd.c	2014-10-21 19:56:31.290287055 +0200
+***************
+*** 49,58 ****
+--- 49,63 ----
+  static char_u *get_user_command_name __ARGS((int idx));
+  # endif
+  
++ /* Wether a command index indicates a user command. */
++ # define IS_USER_CMDIDX(idx) ((int)(idx) < 0)
++ 
+  #else
+  # define ex_command	ex_ni
+  # define ex_comclear	ex_ni
+  # define ex_delcommand	ex_ni
++ /* Wether a command index indicates a user command. */
++ # define IS_USER_CMDIDX(idx) (FALSE)
+  #endif
+  
+  #ifdef FEAT_EVAL
+***************
+*** 2190,2200 ****
+  	goto doend;
+      }
+  
+!     ni = (
+! #ifdef FEAT_USR_CMDS
+! 	    !USER_CMDIDX(ea.cmdidx) &&
+! #endif
+! 	    (cmdnames[ea.cmdidx].cmd_func == ex_ni
+  #ifdef HAVE_EX_SCRIPT_NI
+  	     || cmdnames[ea.cmdidx].cmd_func == ex_script_ni
+  #endif
+--- 2195,2202 ----
+  	goto doend;
+      }
+  
+!     ni = (!IS_USER_CMDIDX(ea.cmdidx)
+! 	    && (cmdnames[ea.cmdidx].cmd_func == ex_ni
+  #ifdef HAVE_EX_SCRIPT_NI
+  	     || cmdnames[ea.cmdidx].cmd_func == ex_script_ni
+  #endif
+***************
+*** 2229,2237 ****
+  /*
+   * 5. parse arguments
+   */
+! #ifdef FEAT_USR_CMDS
+!     if (!USER_CMDIDX(ea.cmdidx))
+! #endif
+  	ea.argt = (long)cmdnames[(int)ea.cmdidx].cmd_argt;
+  
+      if (!ea.skip)
+--- 2231,2237 ----
+  /*
+   * 5. parse arguments
+   */
+!     if (!IS_USER_CMDIDX(ea.cmdidx))
+  	ea.argt = (long)cmdnames[(int)ea.cmdidx].cmd_argt;
+  
+      if (!ea.skip)
+***************
+*** 2252,2261 ****
+  	}
+  
+  	if (text_locked() && !(ea.argt & CMDWIN)
+! # ifdef FEAT_USR_CMDS
+! 		&& !USER_CMDIDX(ea.cmdidx)
+! # endif
+! 	   )
+  	{
+  	    /* Command not allowed when editing the command line. */
+  #ifdef FEAT_CMDWIN
+--- 2252,2258 ----
+  	}
+  
+  	if (text_locked() && !(ea.argt & CMDWIN)
+! 		&& !IS_USER_CMDIDX(ea.cmdidx))
+  	{
+  	    /* Command not allowed when editing the command line. */
+  #ifdef FEAT_CMDWIN
+***************
+*** 2273,2281 ****
+  	if (!(ea.argt & CMDWIN)
+  		&& ea.cmdidx != CMD_edit
+  		&& ea.cmdidx != CMD_checktime
+! # ifdef FEAT_USR_CMDS
+! 		&& !USER_CMDIDX(ea.cmdidx)
+! # endif
+  		&& curbuf_locked())
+  	    goto doend;
+  #endif
+--- 2270,2276 ----
+  	if (!(ea.argt & CMDWIN)
+  		&& ea.cmdidx != CMD_edit
+  		&& ea.cmdidx != CMD_checktime
+! 		&& !IS_USER_CMDIDX(ea.cmdidx)
+  		&& curbuf_locked())
+  	    goto doend;
+  #endif
+***************
+*** 2468,2477 ****
+      /* accept numbered register only when no count allowed (:put) */
+      if (       (ea.argt & REGSTR)
+  	    && *ea.arg != NUL
+! #ifdef FEAT_USR_CMDS
+! 	    /* Do not allow register = for user commands */
+! 	    && (!USER_CMDIDX(ea.cmdidx) || *ea.arg != '=')
+! #endif
+  	    && !((ea.argt & COUNT) && VIM_ISDIGIT(*ea.arg)))
+      {
+  #ifndef FEAT_CLIPBOARD
+--- 2463,2470 ----
+      /* accept numbered register only when no count allowed (:put) */
+      if (       (ea.argt & REGSTR)
+  	    && *ea.arg != NUL
+! 	       /* Do not allow register = for user commands */
+! 	    && (!IS_USER_CMDIDX(ea.cmdidx) || *ea.arg != '=')
+  	    && !((ea.argt & COUNT) && VIM_ISDIGIT(*ea.arg)))
+      {
+  #ifndef FEAT_CLIPBOARD
+***************
+*** 2482,2495 ****
+  	    goto doend;
+  	}
+  #endif
+! 	if (
+! #ifdef FEAT_USR_CMDS
+! 	    valid_yank_reg(*ea.arg, (ea.cmdidx != CMD_put
+! 						   && USER_CMDIDX(ea.cmdidx)))
+! #else
+! 	    valid_yank_reg(*ea.arg, ea.cmdidx != CMD_put)
+! #endif
+! 	   )
+  	{
+  	    ea.regname = *ea.arg++;
+  #ifdef FEAT_EVAL
+--- 2475,2482 ----
+  	    goto doend;
+  	}
+  #endif
+! 	if (valid_yank_reg(*ea.arg, (ea.cmdidx != CMD_put
+! 					      && !IS_USER_CMDIDX(ea.cmdidx))))
+  	{
+  	    ea.regname = *ea.arg++;
+  #ifdef FEAT_EVAL
+***************
+*** 2663,2672 ****
+       * number.  Don't do this for a user command.
+       */
+      if ((ea.argt & BUFNAME) && *ea.arg != NUL && ea.addr_count == 0
+! # ifdef FEAT_USR_CMDS
+! 	    && !USER_CMDIDX(ea.cmdidx)
+! # endif
+! 	    )
+      {
+  	/*
+  	 * :bdelete, :bwipeout and :bunload take several arguments, separated
+--- 2650,2656 ----
+       * number.  Don't do this for a user command.
+       */
+      if ((ea.argt & BUFNAME) && *ea.arg != NUL && ea.addr_count == 0
+! 	    && !IS_USER_CMDIDX(ea.cmdidx))
+      {
+  	/*
+  	 * :bdelete, :bwipeout and :bunload take several arguments, separated
+***************
+*** 2704,2710 ****
+  #endif
+  
+  #ifdef FEAT_USR_CMDS
+!     if (USER_CMDIDX(ea.cmdidx))
+      {
+  	/*
+  	 * Execute a user-defined command.
+--- 2688,2694 ----
+  #endif
+  
+  #ifdef FEAT_USR_CMDS
+!     if (IS_USER_CMDIDX(ea.cmdidx))
+      {
+  	/*
+  	 * Execute a user-defined command.
+***************
+*** 2763,2773 ****
+      }
+  #ifdef FEAT_EVAL
+      do_errthrow(cstack,
+! 	    (ea.cmdidx != CMD_SIZE
+! # ifdef FEAT_USR_CMDS
+! 	     && !USER_CMDIDX(ea.cmdidx)
+! # endif
+! 	    ) ? cmdnames[(int)ea.cmdidx].cmd_name : (char_u *)NULL);
+  #endif
+  
+      if (verbose_save >= 0)
+--- 2747,2754 ----
+      }
+  #ifdef FEAT_EVAL
+      do_errthrow(cstack,
+! 	    (ea.cmdidx != CMD_SIZE && !IS_USER_CMDIDX(ea.cmdidx))
+! 			? cmdnames[(int)ea.cmdidx].cmd_name : (char_u *)NULL);
+  #endif
+  
+      if (verbose_save >= 0)
+***************
+*** 3361,3369 ****
+  /*
+   * 5. parse arguments
+   */
+! #ifdef FEAT_USR_CMDS
+!     if (!USER_CMDIDX(ea.cmdidx))
+! #endif
+  	ea.argt = (long)cmdnames[(int)ea.cmdidx].cmd_argt;
+  
+      arg = skipwhite(p);
+--- 3342,3348 ----
+  /*
+   * 5. parse arguments
+   */
+!     if (!IS_USER_CMDIDX(ea.cmdidx))
+  	ea.argt = (long)cmdnames[(int)ea.cmdidx].cmd_argt;
+  
+      arg = skipwhite(p);
+*** ../vim-7.4.485/src/ex_cmds.h	2014-09-19 20:07:22.546449677 +0200
+--- src/ex_cmds.h	2014-10-21 19:52:45.926286562 +0200
+***************
+*** 1153,1160 ****
+  #endif
+  };
+  
+- #define USER_CMDIDX(idx) ((int)(idx) < 0)
+- 
+  #ifndef DO_DECLARE_EXCMD
+  typedef enum CMD_index cmdidx_T;
+  
+--- 1153,1158 ----
+*** ../vim-7.4.485/src/version.c	2014-10-21 19:35:28.406284296 +0200
+--- src/version.c	2014-10-21 20:00:44.350287607 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     486,
+  /**/
+
+-- 
+FATHER: One day, lad, all this will be yours ...
+PRINCE: What - the curtains?
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.487 b/SOURCES/7.4.487
new file mode 100644
index 0000000..7595f6c
--- /dev/null
+++ b/SOURCES/7.4.487
@@ -0,0 +1,244 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.487
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.487
+Problem:    ":sign jump" may use another window even though the file is
+	    already edited in the current window.
+Solution:   First check if the file is in the current window. (James McCoy)
+Files:	    src/window.c, src/testdir/Make_amiga.mak,
+	    src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+	    src/testdir/Make_os2.mak, src/testdir/Make_vms.mms,
+	    src/testdir/Makefile, src/testdir/test_signs.in,
+	    src/testdir/test_signs.ok
+
+
+*** ../vim-7.4.486/src/window.c	2014-10-09 10:44:33.196866267 +0200
+--- src/window.c	2014-10-21 20:50:13.018294092 +0200
+***************
+*** 4407,4426 ****
+  buf_jump_open_win(buf)
+      buf_T	*buf;
+  {
+! # ifdef FEAT_WINDOWS
+!     win_T	*wp;
+  
+!     for (wp = firstwin; wp != NULL; wp = wp->w_next)
+! 	if (wp->w_buffer == buf)
+! 	    break;
+      if (wp != NULL)
+  	win_enter(wp, FALSE);
+-     return wp;
+- # else
+-     if (curwin->w_buffer == buf)
+- 	return curwin;
+-     return NULL;
+  # endif
+  }
+  
+  /*
+--- 4407,4425 ----
+  buf_jump_open_win(buf)
+      buf_T	*buf;
+  {
+!     win_T	*wp = NULL;
+  
+!     if (curwin->w_buffer == buf)
+! 	wp = curwin;
+! # ifdef FEAT_WINDOWS
+!     else
+! 	for (wp = firstwin; wp != NULL; wp = wp->w_next)
+! 	    if (wp->w_buffer == buf)
+! 		break;
+      if (wp != NULL)
+  	win_enter(wp, FALSE);
+  # endif
++     return wp;
+  }
+  
+  /*
+***************
+*** 4432,4443 ****
+  buf_jump_open_tab(buf)
+      buf_T	*buf;
+  {
+  # ifdef FEAT_WINDOWS
+-     win_T	*wp;
+      tabpage_T	*tp;
+  
+-     /* First try the current tab page. */
+-     wp = buf_jump_open_win(buf);
+      if (wp != NULL)
+  	return wp;
+  
+--- 4431,4440 ----
+  buf_jump_open_tab(buf)
+      buf_T	*buf;
+  {
++     win_T	*wp = buf_jump_open_win(buf);
+  # ifdef FEAT_WINDOWS
+      tabpage_T	*tp;
+  
+      if (wp != NULL)
+  	return wp;
+  
+***************
+*** 4455,4467 ****
+  		break;
+  	    }
+  	}
+- 
+-     return wp;
+- # else
+-     if (curwin->w_buffer == buf)
+- 	return curwin;
+-     return NULL;
+  # endif
+  }
+  #endif
+  
+--- 4452,4459 ----
+  		break;
+  	    }
+  	}
+  # endif
++     return wp;
+  }
+  #endif
+  
+*** ../vim-7.4.486/src/testdir/Make_amiga.mak	2014-10-21 16:22:01.403175226 +0200
+--- src/testdir/Make_amiga.mak	2014-10-21 20:46:30.866293607 +0200
+***************
+*** 46,51 ****
+--- 46,52 ----
+  		test_mapping.out \
+  		test_options.out \
+  		test_qf_title.out \
++ 		test_signs.out \
+  		test_utf8.out
+  
+  .SUFFIXES: .in .out
+***************
+*** 179,182 ****
+--- 180,184 ----
+  test_listlbr_utf8.out: test_listlbr_utf8.in
+  test_options.out: test_options.in
+  test_qf_title.out: test_qf_title.in
++ test_signs.out: test_signs.in
+  test_utf8.out: test_utf8.in
+*** ../vim-7.4.486/src/testdir/Make_dos.mak	2014-10-21 16:22:01.407175226 +0200
+--- src/testdir/Make_dos.mak	2014-10-21 20:46:30.866293607 +0200
+***************
+*** 45,50 ****
+--- 45,51 ----
+  		test_mapping.out \
+  		test_options.out \
+  		test_qf_title.out \
++ 		test_signs.out \
+  		test_utf8.out
+  
+  SCRIPTS32 =	test50.out test70.out
+*** ../vim-7.4.486/src/testdir/Make_ming.mak	2014-10-21 16:22:01.407175226 +0200
+--- src/testdir/Make_ming.mak	2014-10-21 20:46:30.866293607 +0200
+***************
+*** 65,70 ****
+--- 65,71 ----
+  		test_mapping.out \
+  		test_options.out \
+  		test_qf_title.out \
++ 		test_signs.out \
+  		test_utf8.out
+  
+  SCRIPTS32 =	test50.out test70.out
+*** ../vim-7.4.486/src/testdir/Make_os2.mak	2014-10-21 16:22:01.407175226 +0200
+--- src/testdir/Make_os2.mak	2014-10-21 20:46:30.866293607 +0200
+***************
+*** 47,52 ****
+--- 47,53 ----
+  		test_mapping.out \
+  		test_options.out \
+  		test_qf_title.out \
++ 		test_signs.out \
+  		test_utf8.out
+  
+  .SUFFIXES: .in .out
+*** ../vim-7.4.486/src/testdir/Make_vms.mms	2014-10-21 16:22:01.407175226 +0200
+--- src/testdir/Make_vms.mms	2014-10-21 20:46:30.866293607 +0200
+***************
+*** 106,111 ****
+--- 106,112 ----
+  	 test_mapping.out \
+  	 test_options.out \
+  	 test_qf_title.out \
++ 	 test_signs.out \
+  	 test_utf8.out
+  
+  # Known problems:
+*** ../vim-7.4.486/src/testdir/Makefile	2014-10-21 16:22:01.407175226 +0200
+--- src/testdir/Makefile	2014-10-21 20:46:30.866293607 +0200
+***************
+*** 43,48 ****
+--- 43,49 ----
+  		test_mapping.out \
+  		test_options.out \
+  		test_qf_title.out \
++ 		test_signs.out \
+  		test_utf8.out
+  
+  SCRIPTS_GUI = test16.out
+*** ../vim-7.4.486/src/testdir/test_signs.in	2014-10-21 20:56:35.838294928 +0200
+--- src/testdir/test_signs.in	2014-10-21 20:46:30.866293607 +0200
+***************
+*** 0 ****
+--- 1,22 ----
++ Tests for signs
++ STARTTEST
++ :so small.vim
++ :if !has("signs")
++ :  e! test.ok
++ :  wq! test.out
++ :endif
++ :"
++ :sign define JumpSign text=x
++ :exe 'sign place 42 line=2 name=JumpSign buffer=' . bufnr('')
++ :" Split the window to the bottom to verify :sign-jump will stay in the current
++ :" window if the buffer is displayed there
++ :bot split
++ :exe 'sign jump 42 buffer=' . bufnr('')
++ :call append(line('$'), winnr())
++ :$-1,$w! test.out
++ ENDTEST
++ 
++ STARTTEST
++ :qa!
++ ENDTEST
++ 
+*** ../vim-7.4.486/src/testdir/test_signs.ok	2014-10-21 20:56:35.842294928 +0200
+--- src/testdir/test_signs.ok	2014-10-21 20:46:30.866293607 +0200
+***************
+*** 0 ****
+--- 1,2 ----
++ 
++ 2
+*** ../vim-7.4.486/src/version.c	2014-10-21 20:01:54.986287762 +0200
+--- src/version.c	2014-10-21 20:50:02.642294069 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     487,
+  /**/
+
+-- 
+I'd like to meet the man who invented sex and see what he's working on now.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.488 b/SOURCES/7.4.488
new file mode 100644
index 0000000..9abdf42
--- /dev/null
+++ b/SOURCES/7.4.488
@@ -0,0 +1,45 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.488
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.488
+Problem:    test_mapping fails for some people.
+Solution:   Set the 'encoding' option. (Ken Takata)
+Files:	    src/testdir/test_mapping.in
+
+
+*** ../vim-7.4.487/src/testdir/test_mapping.in	2014-10-21 16:22:01.407175226 +0200
+--- src/testdir/test_mapping.in	2014-10-22 22:04:48.422492595 +0200
+***************
+*** 3,8 ****
+--- 3,9 ----
+  STARTTEST
+  :so small.vim
+  :so mbyte.vim
++ :set encoding=utf-8
+  : " abbreviations with р (0x80) should work
+  :inoreab чкпр   vim
+  GAчкпр 
+*** ../vim-7.4.487/src/version.c	2014-10-21 20:57:11.538295006 +0200
+--- src/version.c	2014-10-22 22:05:33.758492694 +0200
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     488,
+  /**/
+
+-- 
+You had connectors?  Eeee, when I were a lad we 'ad to carry the
+bits between the computer and the terminal with a spoon...
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.489 b/SOURCES/7.4.489
new file mode 100644
index 0000000..3713fc4
--- /dev/null
+++ b/SOURCES/7.4.489
@@ -0,0 +1,49 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.489
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.489
+Problem:    Cursor movement still wrong when 'lbr' is set and there is a
+	    number column. (Hirohito Higashi)
+Solution:   Add correction for number column. (Hiroyuki Takagi)
+Files:	    src/charset.c
+
+
+*** ../vim-7.4.488/src/charset.c	2014-10-15 21:26:35.566082778 +0200
+--- src/charset.c	2014-10-31 12:39:41.815322421 +0100
+***************
+*** 1184,1189 ****
+--- 1184,1191 ----
+  	{
+  	    col -= W_WIDTH(wp);
+  	    numberextra = W_WIDTH(wp) - (numberextra - win_col_off2(wp));
++ 	    if (numberextra > 0)
++ 		col %= numberextra;
+  	    if (*p_sbr != NUL)
+  	    {
+  		colnr_T sbrlen = (colnr_T)MB_CHARLEN(p_sbr);
+*** ../vim-7.4.488/src/version.c	2014-10-22 22:08:58.386493141 +0200
+--- src/version.c	2014-10-31 12:37:38.439325394 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     489,
+  /**/
+
+-- 
+This is the polymorph virus!  Follow these instructions carefully:
+1. Send this message to everybody you know.
+2. Format your harddisk.
+Thank you for your cooperation in spreading the most powerful virus ever!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.490 b/SOURCES/7.4.490
new file mode 100644
index 0000000..5485833
--- /dev/null
+++ b/SOURCES/7.4.490
@@ -0,0 +1,208 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.490
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.490
+Problem:    Cannot specify the buffer to use for "do" and "dp", making them
+	    useless for three-way diff.
+Solution:   Use the count as the buffer number. (James McCoy)
+Files:	    runtime/doc/diff.txt, src/diff.c, src/normal.c, src/proto/diff.pro
+
+
+*** ../vim-7.4.489/runtime/doc/diff.txt	2013-08-10 13:24:52.000000000 +0200
+--- runtime/doc/diff.txt	2014-10-31 13:39:22.443236141 +0100
+***************
+*** 95,101 ****
+  :difft[his]	Make the current window part of the diff windows.  This sets
+  		the options like for "vimdiff".
+  
+! :diffp[atch] {patchfile}				 *E816* *:diffp* *:diffpatch*
+  		Use the current buffer, patch it with the diff found in
+  		{patchfile} and open a buffer on the result.  The options are
+  		set as for "vimdiff".
+--- 95,101 ----
+  :difft[his]	Make the current window part of the diff windows.  This sets
+  		the options like for "vimdiff".
+  
+! :diffp[atch] {patchfile}			 *E816* *:diffp* *:diffpatch*
+  		Use the current buffer, patch it with the diff found in
+  		{patchfile} and open a buffer on the result.  The options are
+  		set as for "vimdiff".
+***************
+*** 123,132 ****
+  file for a moment and come back to the same file and be in diff mode again.
+  
+  							*:diffo* *:diffoff*
+! :diffo[ff]	Switch off diff mode for the current window.
+  
+  :diffo[ff]!	Switch off diff mode for the current window and in all windows
+! 		in the current tab page where 'diff' is set.
+  
+  The ":diffoff" command resets the relevant options to the values they had when
+  using |:diffsplit|, |:diffpatch| , |:diffthis|. or starting Vim in diff mode.
+--- 123,136 ----
+  file for a moment and come back to the same file and be in diff mode again.
+  
+  							*:diffo* *:diffoff*
+! :diffo[ff]	Switch off diff mode for the current window.  Resets related
+! 		options also when 'diff' was not set.
+  
+  :diffo[ff]!	Switch off diff mode for the current window and in all windows
+! 		in the current tab page where 'diff' is set.  Resetting
+! 		related options only happens in a window that has 'diff' set,
+! 		if the current window does not have 'diff' set then no options
+! 		in it are changed.
+  
+  The ":diffoff" command resets the relevant options to the values they had when
+  using |:diffsplit|, |:diffpatch| , |:diffthis|. or starting Vim in diff mode.
+***************
+*** 262,274 ****
+  		See below for [range].
+  
+  							*do*
+! do		Same as ":diffget" without argument or range.  The "o" stands
+! 		for "obtain" ("dg" can't be used, it could be the start of
+! 		"dgg"!). Note: this doesn't work in Visual mode.
+  
+  							*dp*
+! dp		Same as ":diffput" without argument or range.
+! 		Note: this doesn't work in Visual mode.
+  
+  
+  When no [range] is given, the diff at the cursor position or just above it is
+--- 266,282 ----
+  		See below for [range].
+  
+  							*do*
+! [count]do	Same as ":diffget" without range.  The "o" stands for "obtain"
+! 		("dg" can't be used, it could be the start of "dgg"!). Note:
+! 		this doesn't work in Visual mode.
+! 		If you give a [count], it is used as the [bufspec] argument
+! 		for ":diffget".
+  
+  							*dp*
+! [count]dp	Same as ":diffput" without range.  Note: this doesn't work in
+! 		Visual mode.
+! 		If you give a [count], it is used as the [bufspec] argument
+! 		for ":diffput".
+  
+  
+  When no [range] is given, the diff at the cursor position or just above it is
+*** ../vim-7.4.489/src/diff.c	2014-10-15 12:56:44.006015955 +0200
+--- src/diff.c	2014-10-31 13:44:20.739228953 +0100
+***************
+*** 2107,2118 ****
+   * "dp" and "do" commands.
+   */
+      void
+! nv_diffgetput(put)
+      int		put;
+  {
+      exarg_T	ea;
+  
+!     ea.arg = (char_u *)"";
+      if (put)
+  	ea.cmdidx = CMD_diffput;
+      else
+--- 2107,2126 ----
+   * "dp" and "do" commands.
+   */
+      void
+! nv_diffgetput(put, count)
+      int		put;
++     long	count;
+  {
+      exarg_T	ea;
++     char_u	buf[30];
+  
+!     if (count == 0)
+! 	ea.arg = (char_u *)"";
+!     else
+!     {
+! 	vim_snprintf((char *)buf, 30, "%ld", count);
+! 	ea.arg = buf;
+!     }
+      if (put)
+  	ea.cmdidx = CMD_diffput;
+      else
+*** ../vim-7.4.489/src/normal.c	2014-10-09 14:48:26.284898230 +0200
+--- src/normal.c	2014-10-31 13:36:32.671240232 +0100
+***************
+*** 9284,9290 ****
+  	if (cap->oap->op_type == OP_DELETE && cap->cmdchar == 'p')
+  	{
+  	    clearop(cap->oap);
+! 	    nv_diffgetput(TRUE);
+  	}
+  	else
+  #endif
+--- 9284,9290 ----
+  	if (cap->oap->op_type == OP_DELETE && cap->cmdchar == 'p')
+  	{
+  	    clearop(cap->oap);
+! 	    nv_diffgetput(TRUE, cap->opcount);
+  	}
+  	else
+  #endif
+***************
+*** 9407,9413 ****
+      if (cap->oap->op_type == OP_DELETE && cap->cmdchar == 'o')
+      {
+  	clearop(cap->oap);
+! 	nv_diffgetput(FALSE);
+      }
+      else
+  #endif
+--- 9407,9413 ----
+      if (cap->oap->op_type == OP_DELETE && cap->cmdchar == 'o')
+      {
+  	clearop(cap->oap);
+! 	nv_diffgetput(FALSE, cap->opcount);
+      }
+      else
+  #endif
+*** ../vim-7.4.489/src/proto/diff.pro	2013-08-10 13:37:07.000000000 +0200
+--- src/proto/diff.pro	2014-10-31 13:36:32.671240232 +0100
+***************
+*** 18,24 ****
+  int diffopt_horizontal __ARGS((void));
+  int diff_find_change __ARGS((win_T *wp, linenr_T lnum, int *startp, int *endp));
+  int diff_infold __ARGS((win_T *wp, linenr_T lnum));
+! void nv_diffgetput __ARGS((int put));
+  void ex_diffgetput __ARGS((exarg_T *eap));
+  int diff_mode_buf __ARGS((buf_T *buf));
+  int diff_move_to __ARGS((int dir, long count));
+--- 18,24 ----
+  int diffopt_horizontal __ARGS((void));
+  int diff_find_change __ARGS((win_T *wp, linenr_T lnum, int *startp, int *endp));
+  int diff_infold __ARGS((win_T *wp, linenr_T lnum));
+! void nv_diffgetput __ARGS((int put, long count));
+  void ex_diffgetput __ARGS((exarg_T *eap));
+  int diff_mode_buf __ARGS((buf_T *buf));
+  int diff_move_to __ARGS((int dir, long count));
+*** ../vim-7.4.489/src/version.c	2014-10-31 12:41:57.427319153 +0100
+--- src/version.c	2014-10-31 13:37:54.511238260 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     490,
+  /**/
+
+-- 
+GUARD #2:  It could be carried by an African swallow!
+GUARD #1:  Oh, yeah, an African swallow maybe, but not a European swallow,
+           that's my point.
+GUARD #2:  Oh, yeah, I agree with that...
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.491 b/SOURCES/7.4.491
new file mode 100644
index 0000000..32bc583
--- /dev/null
+++ b/SOURCES/7.4.491
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.491
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.491
+Problem:    When winrestview() has a negative "topline" value there are
+	    display errors.
+Solution:   Correct a negative value to 1. (Hirohito Higashi)
+Files:	    src/eval.c
+
+
+*** ../vim-7.4.490/src/eval.c	2014-09-19 20:45:19.266454650 +0200
+--- src/eval.c	2014-10-31 15:43:55.811056060 +0100
+***************
+*** 19576,19582 ****
+  # endif
+  	changed_window_setting();
+  
+! 	if (curwin->w_topline == 0)
+  	    curwin->w_topline = 1;
+  	if (curwin->w_topline > curbuf->b_ml.ml_line_count)
+  	    curwin->w_topline = curbuf->b_ml.ml_line_count;
+--- 19576,19582 ----
+  # endif
+  	changed_window_setting();
+  
+! 	if (curwin->w_topline <= 0)
+  	    curwin->w_topline = 1;
+  	if (curwin->w_topline > curbuf->b_ml.ml_line_count)
+  	    curwin->w_topline = curbuf->b_ml.ml_line_count;
+*** ../vim-7.4.490/src/version.c	2014-10-31 13:54:21.843214469 +0100
+--- src/version.c	2014-10-31 15:44:59.555054524 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     491,
+  /**/
+
+-- 
+GUARD #2:  Wait a minute -- supposing two swallows carried it together?
+GUARD #1:  No, they'd have to have it on a line.
+GUARD #2:  Well, simple!  They'd just use a standard creeper!
+GUARD #1:  What, held under the dorsal guiding feathers?
+GUARD #2:  Well, why not?
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.493 b/SOURCES/7.4.493
new file mode 100644
index 0000000..84dc2f6
--- /dev/null
+++ b/SOURCES/7.4.493
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.493
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.493
+Problem:    A TextChanged autocommand is triggered when saving a file.
+	    (William Gardner)
+Solution:   Update last_changedtick after calling unchanged(). (Christian
+	    Brabandt)
+Files:	    src/fileio.c
+
+
+*** ../vim-7.4.492/src/fileio.c	2014-09-23 15:45:04.870801055 +0200
+--- src/fileio.c	2014-10-31 19:48:35.030702344 +0100
+***************
+*** 4877,4882 ****
+--- 4877,4889 ----
+  	    )
+      {
+  	unchanged(buf, TRUE);
++ #ifdef FEAT_AUTOCMD
++ 	/* buf->b_changedtick is always incremented in unchanged() but that
++ 	 * should not trigger a TextChanged event. */
++ 	if (last_changedtick + 1 == buf->b_changedtick
++ 					       && last_changedtick_buf == buf)
++ 	    last_changedtick = buf->b_changedtick;
++ #endif
+  	u_unchanged(buf);
+  	u_update_save_nr(buf);
+      }
+*** ../vim-7.4.492/src/version.c	2014-10-31 19:20:30.782742928 +0100
+--- src/version.c	2014-10-31 19:48:53.590701897 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     493,
+  /**/
+
+-- 
+You know you use Vim too much when you have this alias in your
+~/.bashrc file: alias :e=/bin/vim             (Eljay Love-Jensen)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.494 b/SOURCES/7.4.494
new file mode 100644
index 0000000..079c8ab
--- /dev/null
+++ b/SOURCES/7.4.494
@@ -0,0 +1,62 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.494
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.494
+Problem:    Cursor shape is wrong after a CompleteDone autocommand.
+Solution:   Update the cursor and mouse shape after ":normal" restores the
+	    state. (Jacob Niehus)
+Files:	    src/ex_docmd.c
+
+
+*** ../vim-7.4.493/src/ex_docmd.c	2014-10-21 20:01:54.986287762 +0200
+--- src/ex_docmd.c	2014-11-05 09:37:05.829176795 +0100
+***************
+*** 9526,9533 ****
+      msg_didout |= save_msg_didout;	/* don't reset msg_didout now */
+  
+      /* Restore the state (needed when called from a function executed for
+!      * 'indentexpr'). */
+      State = save_State;
+  #ifdef FEAT_MBYTE
+      vim_free(arg);
+  #endif
+--- 9526,9540 ----
+      msg_didout |= save_msg_didout;	/* don't reset msg_didout now */
+  
+      /* Restore the state (needed when called from a function executed for
+!      * 'indentexpr'). Update the mouse and cursor, they may have changed. */
+      State = save_State;
++ #ifdef FEAT_MOUSE
++     setmouse();
++ #endif
++ #ifdef CURSOR_SHAPE
++     ui_cursor_shape();		/* may show different cursor shape */
++ #endif
++ 
+  #ifdef FEAT_MBYTE
+      vim_free(arg);
+  #endif
+*** ../vim-7.4.493/src/version.c	2014-10-31 19:51:33.014698055 +0100
+--- src/version.c	2014-11-05 09:51:06.261156543 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     494,
+  /**/
+
+-- 
+Q:   How many hardware engineers does it take to change a lightbulb?
+A:   None.  We'll fix it in software.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.495 b/SOURCES/7.4.495
new file mode 100644
index 0000000..20926d9
--- /dev/null
+++ b/SOURCES/7.4.495
@@ -0,0 +1,89 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.495
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.495
+Problem:    XPM isn't used correctly in the Cygwin Makefile.
+Solution:   Include the rules like in Make_ming.mak. (Ken Takata)
+Files:	    src/Make_cyg.mak
+
+
+*** ../vim-7.4.494/src/Make_cyg.mak	2014-10-15 12:07:07.610009454 +0200
+--- src/Make_cyg.mak	2014-11-05 13:38:03.688828413 +0100
+***************
+*** 485,497 ****
+  endif
+  
+  ##############################
+  ifneq ($(XPM),no)
+  # Only allow XPM for a GUI build.
+  DEFINES += -DFEAT_XPM_W32
+! INCLUDES += -I$(XPM)/include
+  EXTRA_OBJS += $(OUTDIR)/xpm_w32.o
+  EXTRA_LIBS += -L$(XPM)/lib -lXpm
+  endif
+  
+  ##############################
+  EXE = gvim$(DEBUG_SUFFIX).exe
+--- 485,516 ----
+  endif
+  
+  ##############################
++ ifndef XPM
++ ifeq ($(ARCH),i386)
++ XPM = xpm/x86
++ endif
++ ifeq ($(ARCH),i486)
++ XPM = xpm/x86
++ endif
++ ifeq ($(ARCH),i586)
++ XPM = xpm/x86
++ endif
++ ifeq ($(ARCH),i686)
++ XPM = xpm/x86
++ endif
++ ifeq ($(ARCH),x86-64)
++ XPM = xpm/x64
++ endif
++ endif
++ ifdef XPM
+  ifneq ($(XPM),no)
+  # Only allow XPM for a GUI build.
+  DEFINES += -DFEAT_XPM_W32
+! INCLUDES += -I$(XPM)/include -I$(XPM)/../include
+  EXTRA_OBJS += $(OUTDIR)/xpm_w32.o
+  EXTRA_LIBS += -L$(XPM)/lib -lXpm
+  endif
++ endif
+  
+  ##############################
+  EXE = gvim$(DEBUG_SUFFIX).exe
+*** ../vim-7.4.494/src/version.c	2014-11-05 09:53:19.989153321 +0100
+--- src/version.c	2014-11-05 13:39:27.516826393 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     495,
+  /**/
+
+-- 
+ARTHUR:  You fight with the strength of many men, Sir knight.
+         I am Arthur, King of the Britons.  [pause]
+         I seek the finest and the bravest knights in the land to join me
+         in my Court of Camelot.  [pause]
+         You have proved yourself worthy; will you join me?  [pause]
+         You make me sad.  So be it.  Come, Patsy.
+BLACK KNIGHT:  None shall pass.
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.496 b/SOURCES/7.4.496
new file mode 100644
index 0000000..0eaf1ff
--- /dev/null
+++ b/SOURCES/7.4.496
@@ -0,0 +1,2774 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.496
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.496
+Problem:    Many lines are both in Make_cyg.mak and Make_ming.mak
+Solution:   Move the common parts to one file. (Ken Takata)
+Files:	    src/INSTALLpc.txt, src/Make_cyg.mak, src/Make_cyg_ming.mak,
+	    src/Make_ming.mak, src/Make_mvc.mak, Filelist
+
+
+*** ../vim-7.4.495/src/INSTALLpc.txt	2014-08-22 18:12:53.995244049 +0200
+--- src/INSTALLpc.txt	2014-11-05 13:49:27.076811946 +0100
+***************
+*** 228,238 ****
+  
+      http://www.mingw.org/
+  
+  Once you have downloaded the compiler binaries, unpack them on your hard disk
+  somewhere, and put them on your PATH.  If you are on Win95/98 you can edit
+  your AUTOEXEC.BAT file with a line like:
+  
+!     set PATH=C:\GCC-2.95.2\BIN;%PATH%
+  
+  or on NT/2000/XP, go to the Control Panel, (Performance and Maintenance),
+  System, Advanced, and edit the environment from there.
+--- 228,242 ----
+  
+      http://www.mingw.org/
+  
++ or you can use 'MinGW-w64' compiler.
++ 
++     http://mingw-w64.sourceforge.net/
++ 
+  Once you have downloaded the compiler binaries, unpack them on your hard disk
+  somewhere, and put them on your PATH.  If you are on Win95/98 you can edit
+  your AUTOEXEC.BAT file with a line like:
+  
+!     set PATH=C:\MinGW\bin;%PATH%
+  
+  or on NT/2000/XP, go to the Control Panel, (Performance and Maintenance),
+  System, Advanced, and edit the environment from there.
+***************
+*** 240,249 ****
+  Test if gcc is on your path.  From a CMD (or COMMAND on '95/98) window:
+  
+      C:\> gcc --version
+!     2.95.2
+  
+!     C:\> make --version
+!     GNU Make version 3.77 (...etc...)
+  
+  Now you are ready to rock 'n' roll.  Unpack the vim sources (look on
+  www.vim.org for exactly which version of the vim files you need).
+--- 244,253 ----
+  Test if gcc is on your path.  From a CMD (or COMMAND on '95/98) window:
+  
+      C:\> gcc --version
+!     gcc (GCC) 4.8.1
+  
+!     C:\> mingw32-make --version
+!     GNU Make 3.82.90 (...etc...)
+  
+  Now you are ready to rock 'n' roll.  Unpack the vim sources (look on
+  www.vim.org for exactly which version of the vim files you need).
+***************
+*** 255,261 ****
+  
+  and you type:
+  
+!     make -f Make_ming.mak gvim.exe
+  
+  After churning for a while, you will end up with 'gvim.exe' in the 'vim\src'
+  directory.
+--- 259,265 ----
+  
+  and you type:
+  
+!     mingw32-make -f Make_ming.mak gvim.exe
+  
+  After churning for a while, you will end up with 'gvim.exe' in the 'vim\src'
+  directory.
+***************
+*** 264,270 ****
+  way.  If, for some reason, you want the console-mode-only version of vim (this
+  is NOT recommended on Win32, especially on '95/'98!!!), you can use:
+  
+!     make -f Make_ming.mak GUI=no vim.exe
+  
+  If you are dismayed by how big the EXE is, I strongly recommend you get 'UPX'
+  (also free!) and compress the file (typical compression is 50%). UPX can be
+--- 268,274 ----
+  way.  If, for some reason, you want the console-mode-only version of vim (this
+  is NOT recommended on Win32, especially on '95/'98!!!), you can use:
+  
+!     mingw32-make -f Make_ming.mak GUI=no vim.exe
+  
+  If you are dismayed by how big the EXE is, I strongly recommend you get 'UPX'
+  (also free!) and compress the file (typical compression is 50%). UPX can be
+***************
+*** 291,298 ****
+  Use Make_cyg.mak with Cygwin's GCC. See
+      http://users.skynet.be/antoine.mechelynck/vim/compile.htm
+  
+! The Cygnus one many not fully work yet.
+! With Cygnus gcc you can use the Unix Makefile instead (you need to get the
+  Unix archive then).  Then you get a Cygwin application (feels like Vim is
+  running on Unix), while with Make_cyg.mak you get a Windows application (like
+  with the other makefiles).
+--- 295,301 ----
+  Use Make_cyg.mak with Cygwin's GCC. See
+      http://users.skynet.be/antoine.mechelynck/vim/compile.htm
+  
+! With Cygnus gcc you should use the Unix Makefile instead (you need to get the
+  Unix archive then).  Then you get a Cygwin application (feels like Vim is
+  running on Unix), while with Make_cyg.mak you get a Windows application (like
+  with the other makefiles).
+***************
+*** 316,324 ****
+  	http://www.mingw.org/wiki/LinuxCrossMinGW
+  	http://www.libsdl.org/extras/win32/cross/README.txt
+      2) Get and unpack both the Unix sources and the extra archive
+!     3) in 'Make_ming.mak', set 'CROSS' to 'yes' instead of 'no'.
+!        Make further changes to 'Make_ming.mak' as you wish.
+!        If your cross-compiler prefix differs from the predefined value,
+         set 'CROSS_COMPILE' corresponding.
+      4) make -f Make_ming.mak gvim.exe
+  
+--- 319,327 ----
+  	http://www.mingw.org/wiki/LinuxCrossMinGW
+  	http://www.libsdl.org/extras/win32/cross/README.txt
+      2) Get and unpack both the Unix sources and the extra archive
+!     3) in 'Make_cyg_ming.mak', set 'CROSS' to 'yes' instead of 'no'.
+!        Make further changes to 'Make_cyg_ming.mak' and 'Make_ming.mak' as you
+!        wish.  If your cross-compiler prefix differs from the predefined value,
+         set 'CROSS_COMPILE' corresponding.
+      4) make -f Make_ming.mak gvim.exe
+  
+*** ../vim-7.4.495/src/Make_cyg.mak	2014-11-05 13:43:18.352820831 +0100
+--- src/Make_cyg.mak	2014-11-05 13:49:27.076811946 +0100
+***************
+*** 1,754 ****
+  #
+! # Makefile for VIM on Win32, using Cygnus gcc
+! # Updated by Dan Sharp.
+! # Last Change: 2014 Aug 10
+  #
+  # Also read INSTALLpc.txt!
+  #
+  # This compiles Vim as a Windows application.  If you want Vim to run as a
+  # Cygwin application use the Makefile (just like on Unix).
+  #
+! # GUI		no or yes: set to yes if you want the GUI version (yes)
+! # DIRECTX	no or yes: set to yes if you want use DirectWrite (no)
+! # PERL		define to path to Perl dir to get Perl support (not defined)
+! #   PERL_VER	  define to version of Perl being used (56)
+! #   DYNAMIC_PERL  no or yes: set to yes to load the Perl DLL dynamically (yes)
+! # PYTHON	define to path to Python dir to get PYTHON support (not defined)
+! #   PYTHON_VER	    define to version of Python being used (22)
+! #   DYNAMIC_PYTHON  no or yes: use yes to load the Python DLL dynamically (yes)
+! # PYTHON3	define to path to Python3 dir to get PYTHON3 support (not defined)
+! #   PYTHON3_VER	    define to version of Python3 being used (22)
+! #   DYNAMIC_PYTHON3  no or yes: use yes to load the Python3 DLL dynamically (yes)
+! # TCL		define to path to TCL dir to get TCL support (not defined)
+! #   TCL_VER	define to version of TCL being used (83)
+! #   DYNAMIC_TCL no or yes: use yes to load the TCL DLL dynamically (yes)
+! # RUBY		define to path to Ruby dir to get Ruby support (not defined)
+! #   RUBY_VER		define to version of Ruby being used (16)
+! #   RUBY_VER_LONG	same, but in format with dot. (1.6)
+! #	    You must set RUBY_VER_LONG when changing RUBY_VER.
+! #	    You must set RUBY_API_VER version to RUBY_VER_LONG.
+! #	    Don't set ruby API version to RUBY_VER like 191.
+! #   DYNAMIC_RUBY no or yes: use yes to load the Ruby DLL dynamically (yes)
+! # MZSCHEME	define to path to MzScheme dir to get MZSCHEME support (not defined)
+! #   MZSCHEME_VER      define to version of MzScheme being used (209_000)
+! #   DYNAMIC_MZSCHEME  no or yes: use yes to load the MzScheme DLLs dynamically (yes)
+! #   MZSCHEME_DLLS     path to MzScheme DLLs (libmzgc and libmzsch), for "static" build.
+! #   MZSCHEME_USE_RACKET  define to use "racket" instead of "mzsch".
+! # LUA	define to path to Lua dir to get Lua support (not defined)
+! #   LUA_VER	    define to version of Lua being used (51)
+! #   DYNAMIC_LUA  no or yes: use yes to load the Lua DLL dynamically (yes)
+! # GETTEXT	no or yes: set to yes for dynamic gettext support (yes)
+! # ICONV		no or yes: set to yes for dynamic iconv support (yes)
+! # MBYTE		no or yes: set to yes to include multibyte support (yes)
+! # IME		no or yes: set to yes to include IME support (yes)
+! #   DYNAMIC_IME no or yes: set to yes to load imm32.dll dynamically (yes)
+! # OLE		no or yes: set to yes to make OLE gvim (no)
+! # DEBUG		no or yes: set to yes if you wish a DEBUGging build (no)
+! # CPUNR		No longer supported, use ARCH.
+! # ARCH		i386 through pentium4: select -march argument to compile with
+! #               (i386)
+! # USEDLL	no or yes: set to yes to use the Runtime library DLL (no)
+! #		For USEDLL=yes the cygwin1.dll is required to run Vim.
+! #		For "no" the mingw-gcc-g++ package or the mingw64-i686-gcc-g++
+! #		package is required to compile Vim.  Or set CC to gcc-3 and add
+! #		-L/lib/w32api to EXTRA_LIBS.
+! # POSTSCRIPT	no or yes: set to yes for PostScript printing (no)
+! # FEATURES	TINY, SMALL, NORMAL, BIG or HUGE (BIG)
+! # WINVER	Lowest Win32 version to support.  (0x0500)
+! # CSCOPE	no or yes: to include cscope interface support (yes)
+! # OPTIMIZE	SPACE, SPEED, or MAXSPEED: set optimization level (MAXSPEED)
+! # NETBEANS	no or yes: to include netbeans interface support (yes when GUI
+! #		is yes)
+! # NBDEBUG	no or yes: to include netbeans interface debugging support (no)
+! # XPM		define to path to XPM dir to get XPM image support (not defined)
+! #>>>>> choose options:
+! ifndef GUI
+! GUI=yes
+! endif
+! 
+! ifndef FEATURES
+! FEATURES = BIG
+! endif
+! 
+! ifndef GETTEXT
+! GETTEXT = yes
+! endif
+! 
+! ifndef ICONV
+! ICONV = yes
+! endif
+! 
+! ifndef MBYTE
+! MBYTE = yes
+! endif
+! 
+! ifndef IME
+! IME = yes
+! endif
+! 
+! ifndef ARCH
+! ARCH = i386
+! endif
+! 
+! ifndef DIRECTX
+! DIRECTX = no
+! endif
+! 
+! ifndef WINVER
+! WINVER = 0x0500
+! endif
+! 
+! ifndef CSCOPE
+! CSCOPE = yes
+! endif
+! 
+! ifndef NETBEANS
+! ifeq ($(GUI),yes)
+! NETBEANS = yes
+! endif
+! endif
+! 
+! ifndef OPTIMIZE
+! OPTIMIZE = MAXSPEED
+! endif
+! 
+! 
+! # Link against the shared version of libstdc++ by default.  Set
+! # STATIC_STDCPLUS to "yes" to link against static version instead.
+! ifndef STATIC_STDCPLUS
+! STATIC_STDCPLUS=no
+! endif
+! 
+! ### See feature.h for a list of optionals.
+! ### Any other defines can be included here.
+! 
+! DEFINES = -DWIN32 -DHAVE_PATHDEF -DFEAT_$(FEATURES) \
+! 	  -DWINVER=$(WINVER) -D_WIN32_WINNT=$(WINVER)
+! ifeq ($(ARCH),x86-64)
+! DEFINES+=-DMS_WIN64
+! endif
+! INCLUDES = -march=$(ARCH) -Iproto
+! 
+! #>>>>> name of the compiler and linker, name of lib directory
+! ifeq (yes, $(USEDLL))
+! # CROSS_COMPILE is used for the gvimext DLL.
+! CROSS_COMPILE = i686-pc-mingw32-
+! CC = gcc
+! RC = windres
+! else
+! # i686-pc-mingw32-gcc, i686-w64-mingw32-gcc or gcc-3 can be used.
+  CROSS_COMPILE = i686-pc-mingw32-
+! CC = $(CROSS_COMPILE)gcc
+! RC = $(CROSS_COMPILE)windres
+! endif
+! 
+! ##############################
+! # DYNAMIC_PERL=yes and no both work
+! ##############################
+! ifdef PERL
+! DEFINES += -DFEAT_PERL
+! INCLUDES += -I$(PERL)/lib/CORE
+! EXTRA_OBJS += $(OUTDIR)/if_perl.o
+! 
+! ifndef DYNAMIC_PERL
+! DYNAMIC_PERL = yes
+! endif
+! 
+! ifndef PERL_VER
+! PERL_VER = 56
+! endif
+! 
+! ifeq (yes, $(DYNAMIC_PERL))
+! DEFINES += -DDYNAMIC_PERL -DDYNAMIC_PERL_DLL=\"perl$(PERL_VER).dll\"
+! else
+! EXTRA_LIBS += -L$(PERL)/lib/CORE -lperl$(PERL_VER)
+! endif
+! endif
+! 
+! ##############################
+! # DYNAMIC_PYTHON=yes works.
+! # DYNAMIC_PYTHON=no does not (unresolved externals on link).
+! ##############################
+! ifdef PYTHON
+! DEFINES += -DFEAT_PYTHON
+! EXTRA_OBJS += $(OUTDIR)/if_python.o
+! 
+! ifndef DYNAMIC_PYTHON
+! DYNAMIC_PYTHON = yes
+! endif
+! 
+! ifndef PYTHON_VER
+! PYTHON_VER = 22
+! endif
+! 
+! ifeq (yes, $(DYNAMIC_PYTHON))
+! DEFINES += -DDYNAMIC_PYTHON -DDYNAMIC_PYTHON_DLL=\"python$(PYTHON_VER).dll\"
+! else
+! EXTRA_LIBS += $(PYTHON)/libs/python$(PYTHON_VER).lib
+! endif
+! endif
+! 
+! ##############################
+! # DYNAMIC_PYTHON3=yes works.
+! # DYNAMIC_PYTHON3=no does not (unresolved externals on link).
+! ##############################
+! ifdef PYTHON3
+! DEFINES += -DFEAT_PYTHON3
+! EXTRA_OBJS += $(OUTDIR)/if_python3.o
+! 
+! ifndef DYNAMIC_PYTHON3
+! DYNAMIC_PYTHON3 = yes
+! endif
+! 
+! ifndef PYTHON3_VER
+! PYTHON3_VER = 31
+! endif
+! 
+! ifeq (yes, $(DYNAMIC_PYTHON3))
+! DEFINES += -DDYNAMIC_PYTHON3 -DDYNAMIC_PYTHON3_DLL=\"python$(PYTHON3_VER).dll\"
+! else
+! EXTRA_LIBS += $(PYTHON3)/libs/python$(PYTHON3_VER).lib
+! endif
+! endif
+! 
+! ##############################
+! # DYNAMIC_RUBY=yes works.
+! # DYNAMIC_RUBY=no does not (process exits).
+! ##############################
+! ifdef RUBY
+! 
+! ifndef DYNAMIC_RUBY
+! DYNAMIC_RUBY=yes
+! endif
+! #  Set default value
+! ifndef RUBY_VER
+! RUBY_VER = 16
+! endif
+! ifndef RUBY_VER_LONG
+! RUBY_VER_LONG = 1.6
+! endif
+! ifndef RUBY_API_VER
+! RUBY_API_VER = $(subst .,,$(RUBY_VER_LONG))
+! endif
+! 
+! ifndef RUBY_PLATFORM
+! ifeq ($(RUBY_VER), 16)
+! RUBY_PLATFORM = i586-mswin32
+! else
+! ifneq ($(wildcard $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/i386-mingw32),)
+! RUBY_PLATFORM = i386-mingw32
+! else
+! ifneq ($(wildcard $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/x64-mingw32),)
+! RUBY_PLATFORM = x64-mingw32
+! else
+! RUBY_PLATFORM = i386-mswin32
+! endif
+! endif
+! endif
+! endif
+! 
+! ifndef RUBY_INSTALL_NAME
+! ifeq ($(RUBY_VER), 16)
+! RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_API_VER)
+! else
+! ifeq ($(ARCH),x86-64)
+! RUBY_INSTALL_NAME = x64-msvcrt-ruby$(RUBY_API_VER)
+! else
+! RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_API_VER)
+! endif
+! endif
+! endif
+! 
+! ifeq (19, $(word 1,$(sort 19 $(RUBY_VER))))
+! RUBY_19_OR_LATER = 1
+! endif
+! 
+! DEFINES += -DFEAT_RUBY
+! ifneq ($(findstring w64-mingw32,$(CC)),)
+! # A workaround for mingw-w64
+! DEFINES += -DHAVE_STRUCT_TIMESPEC -DHAVE_STRUCT_TIMEZONE
+! endif
+! INCLUDES += -I$(RUBY)/lib/ruby/$(RUBY_VER_LONG)/$(RUBY_PLATFORM)
+! ifdef RUBY_19_OR_LATER
+! INCLUDES += -I$(RUBY)/include/ruby-$(RUBY_VER_LONG) -I$(RUBY)/include/ruby-$(RUBY_VER_LONG)/$(RUBY_PLATFORM)
+! endif
+! EXTRA_OBJS += $(OUTDIR)/if_ruby.o
+! 
+! ifeq (yes, $(DYNAMIC_RUBY))
+! DEFINES += -DDYNAMIC_RUBY -DDYNAMIC_RUBY_DLL=\"$(RUBY_INSTALL_NAME).dll\"
+! DEFINES += -DDYNAMIC_RUBY_VER=$(RUBY_VER)
+! else
+! EXTRA_LIBS += $(RUBY)/lib/$(RUBY_INSTALL_NAME)
+! endif
+! endif
+! 
+! ##############################
+! # DYNAMIC_MZSCHEME=yes works
+! # DYNAMIC_MZSCHEME=no works too
+! ##############################
+! ifdef MZSCHEME
+! DEFINES += -DFEAT_MZSCHEME
+! INCLUDES += -I$(MZSCHEME)/include
+! EXTRA_OBJS += $(OUTDIR)/if_mzsch.o
+! 
+! ifndef DYNAMIC_MZSCHEME
+! DYNAMIC_MZSCHEME = yes
+! endif
+! 
+! ifndef MZSCHEME_VER
+! MZSCHEME_VER = 209_000
+! endif
+! 
+! ifndef MZSCHEME_PRECISE_GC
+! MZSCHEME_PRECISE_GC=no
+! endif
+! 
+! # for version 4.x we need to generate byte-code for Scheme base
+! ifndef MZSCHEME_GENERATE_BASE
+! MZSCHEME_GENERATE_BASE=no
+! endif
+! 
+! ifndef MZSCHEME_USE_RACKET
+! MZSCHEME_MAIN_LIB=mzsch
+! else
+! MZSCHEME_MAIN_LIB=racket
+! endif
+! 
+! ifeq (yes, $(DYNAMIC_MZSCHEME))
+! DEFINES += -DDYNAMIC_MZSCHEME -DDYNAMIC_MZSCH_DLL=\"lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).dll\" -DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
+! else
+! ifndef MZSCHEME_DLLS
+! MZSCHEME_DLLS = $(MZSCHEME)
+! endif
+! ifeq (yes,$(MZSCHEME_PRECISE_GC))
+! MZSCHEME_LIB=-l$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER)
+! else
+! MZSCHEME_LIB = -l$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER) -lmzgc$(MZSCHEME_VER)
+! endif
+! EXTRA_LIBS += -L$(MZSCHEME_DLLS) -L$(MZSCHEME_DLLS)/lib $(MZSCHEME_LIB)
+! endif
+! ifeq (yes,$(MZSCHEME_GENERATE_BASE))
+! DEFINES += -DINCLUDE_MZSCHEME_BASE
+! MZ_EXTRA_DEP += mzscheme_base.c
+! endif
+! ifeq (yes,$(MZSCHEME_PRECISE_GC))
+! DEFINES += -DMZ_PRECISE_GC
+! endif
+! endif
+! 
+! ##############################
+! # DYNAMIC_TCL=yes and no both work.
+! ##############################
+! ifdef TCL
+! DEFINES += -DFEAT_TCL
+! INCLUDES += -I$(TCL)/include
+! EXTRA_OBJS += $(OUTDIR)/if_tcl.o
+! 
+! ifndef DYNAMIC_TCL
+! DYNAMIC_TCL = yes
+! endif
+! 
+! ifndef TCL_VER
+! TCL_VER = 83
+! endif
+! 
+! ifeq (yes, $(DYNAMIC_TCL))
+! DEFINES += -DDYNAMIC_TCL -DDYNAMIC_TCL_DLL=\"tcl$(TCL_VER).dll\"
+! EXTRA_LIBS += $(TCL)/lib/tclstub$(TCL_VER).lib
+! else
+! EXTRA_LIBS += $(TCL)/lib/tcl$(TCL_VER).lib
+! endif
+! endif
+! 
+! ##############################
+! # DYNAMIC_LUA=yes works.
+! # DYNAMIC_LUA=no does not (unresolved externals on link).
+! ##############################
+! ifdef LUA
+! DEFINES += -DFEAT_LUA
+! INCLUDES += -I$(LUA)/include
+! EXTRA_OBJS += $(OUTDIR)/if_lua.o
+! 
+! ifndef DYNAMIC_LUA
+! DYNAMIC_LUA = yes
+! endif
+! 
+! ifndef LUA_VER
+! LUA_VER = 51
+! endif
+! 
+! ifeq (yes, $(DYNAMIC_LUA))
+! DEFINES += -DDYNAMIC_LUA -DDYNAMIC_LUA_DLL=\"lua$(LUA_VER).dll\"
+! else
+! EXTRA_LIBS += $(LUA)/lib/lua$(LUA_VER).lib
+! endif
+! endif
+! 
+! ##############################
+! ifeq (yes, $(GETTEXT))
+! DEFINES += -DDYNAMIC_GETTEXT
+! endif
+! 
+! ##############################
+! ifeq (yes, $(ICONV))
+! DEFINES += -DDYNAMIC_ICONV
+! endif
+! 
+! ##############################
+! ifeq (yes, $(MBYTE))
+! DEFINES += -DFEAT_MBYTE
+! endif
+! 
+! ##############################
+! ifeq (yes, $(IME))
+! DEFINES += -DFEAT_MBYTE_IME
+! 
+! ifndef DYNAMIC_IME
+! DYNAMIC_IME = yes
+! endif
+! 
+! ifeq (yes, $(DYNAMIC_IME))
+! DEFINES += -DDYNAMIC_IME
+! else
+! EXTRA_LIBS += -limm32
+! endif
+! endif
+! 
+! ##############################
+! ifeq (yes, $(DEBUG))
+! DEFINES += -DDEBUG
+! INCLUDES += -g -fstack-check
+! DEBUG_SUFFIX = d
+! else
+! 
+! ifeq ($(OPTIMIZE), SIZE)
+! OPTFLAG = -Os
+! else
+! ifeq ($(OPTIMIZE), MAXSPEED)
+! OPTFLAG = -O3 -fomit-frame-pointer -freg-struct-return
+! else
+! OPTFLAG = -O2
+! endif
+! endif
+! 
+! # A bug in the GCC <= 3.2 optimizer can cause a crash.  The
+! # following option removes the problem optimization.
+! OPTFLAG += -fno-strength-reduce
+! 
+! INCLUDES += -s
+! 
+! endif
+! 
+! ##############################
+! # USEDLL=yes will build a Cygwin32 executable that relies on cygwin1.dll.
+! # USEDLL=no will build a Mingw32 executable with no extra dll dependencies.
+! ##############################
+! ifeq (yes, $(USEDLL))
+! DEFINES += -D_MAX_PATH=256 -D__CYGWIN__
+! endif
+! 
+! ##############################
+! ifeq (yes, $(POSTSCRIPT))
+! DEFINES += -DMSWINPS
+! endif
+! 
+! ##############################
+! ifeq (yes, $(CSCOPE))
+! DEFINES += -DFEAT_CSCOPE
+! EXTRA_OBJS += $(OUTDIR)/if_cscope.o
+! endif
+! 
+! ##############################
+! ifeq ($(GUI),yes)
+! 
+! ##############################
+! ifeq (yes, $(NETBEANS))
+! # Only allow NETBEANS for a GUI build.
+! DEFINES += -DFEAT_NETBEANS_INTG
+! EXTRA_OBJS += $(OUTDIR)/netbeans.o
+! EXTRA_LIBS += -lwsock32
+! 
+! ifeq (yes, $(NBDEBUG))
+! DEFINES += -DNBDEBUG
+! NBDEBUG_DEP = nbdebug.h nbdebug.c
+! endif
+! 
+! endif
+! 
+! ##############################
+! ifeq (yes, $(DIRECTX))
+! # Only allow DIRECTX for a GUI build.
+! DEFINES += -DFEAT_DIRECTX -DDYNAMIC_DIRECTX
+! EXTRA_OBJS += $(OUTDIR)/gui_dwrite.o
+! EXTRA_LIBS += -ld2d1 -ldwrite
+! USE_STDCPLUS = yes
+! endif
+! 
+! ##############################
+! ifndef XPM
+! ifeq ($(ARCH),i386)
+! XPM = xpm/x86
+! endif
+! ifeq ($(ARCH),i486)
+! XPM = xpm/x86
+! endif
+! ifeq ($(ARCH),i586)
+! XPM = xpm/x86
+! endif
+! ifeq ($(ARCH),i686)
+! XPM = xpm/x86
+! endif
+! ifeq ($(ARCH),x86-64)
+! XPM = xpm/x64
+! endif
+! endif
+! ifdef XPM
+! ifneq ($(XPM),no)
+! # Only allow XPM for a GUI build.
+! DEFINES += -DFEAT_XPM_W32
+! INCLUDES += -I$(XPM)/include -I$(XPM)/../include
+! EXTRA_OBJS += $(OUTDIR)/xpm_w32.o
+! EXTRA_LIBS += -L$(XPM)/lib -lXpm
+! endif
+! endif
+! 
+! ##############################
+! EXE = gvim$(DEBUG_SUFFIX).exe
+! OUTDIR = gobj$(DEBUG_SUFFIX)
+! DEFINES += -DFEAT_GUI_W32 -DFEAT_CLIPBOARD
+! EXTRA_OBJS += $(OUTDIR)/gui.o $(OUTDIR)/gui_w32.o $(OUTDIR)/gui_beval.o $(OUTDIR)/os_w32exe.o
+! EXTRA_LIBS += -mwindows -lcomctl32 -lversion
+! else
+! EXE = vim$(DEBUG_SUFFIX).exe
+! OUTDIR = obj$(DEBUG_SUFFIX)
+! LIBS += -luser32 -lgdi32 -lcomdlg32
+! endif
+! 
+! ##############################
+! ifeq (yes, $(OLE))
+! DEFINES += -DFEAT_OLE
+! EXTRA_OBJS += $(OUTDIR)/if_ole.o
+! EXTRA_LIBS += -loleaut32
+! USE_STDCPLUS = yes
+! endif
+! 
+! ##############################
+! ifneq (sh.exe, $(SHELL))
+! DEL = rm
+! MKDIR = mkdir -p
+! DIRSLASH = /
+! else
+! DEL = del
+! MKDIR = mkdir
+! DIRSLASH = \\
+! endif
+! 
+! ##############################
+! ifeq (yes, $(USE_STDCPLUS))
+! ifeq (yes, $(STATIC_STDCPLUS))
+! EXTRA_LIBS += -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
+! else
+! EXTRA_LIBS += -lstdc++
+! endif
+! endif
+! 
+! #>>>>> end of choices
+! ###########################################################################
+! 
+! INCL = vim.h globals.h option.h keymap.h macros.h ascii.h term.h os_win32.h \
+!        structs.h version.h
+! 
+! CFLAGS = $(OPTFLAG) $(DEFINES) $(INCLUDES)
+! 
+! RCFLAGS = -O coff $(DEFINES)
+! 
+! OBJ = \
+! 	$(OUTDIR)/blowfish.o \
+! 	$(OUTDIR)/buffer.o \
+! 	$(OUTDIR)/charset.o \
+! 	$(OUTDIR)/crypt.o \
+! 	$(OUTDIR)/crypt_zip.o \
+! 	$(OUTDIR)/diff.o \
+! 	$(OUTDIR)/digraph.o \
+! 	$(OUTDIR)/edit.o \
+! 	$(OUTDIR)/eval.o \
+! 	$(OUTDIR)/ex_cmds.o \
+! 	$(OUTDIR)/ex_cmds2.o \
+! 	$(OUTDIR)/ex_docmd.o \
+! 	$(OUTDIR)/ex_eval.o \
+! 	$(OUTDIR)/ex_getln.o \
+! 	$(OUTDIR)/fileio.o \
+! 	$(OUTDIR)/fold.o \
+! 	$(OUTDIR)/getchar.o \
+! 	$(OUTDIR)/hardcopy.o \
+! 	$(OUTDIR)/hashtab.o \
+! 	$(OUTDIR)/main.o \
+! 	$(OUTDIR)/mark.o \
+! 	$(OUTDIR)/memfile.o \
+! 	$(OUTDIR)/memline.o \
+! 	$(OUTDIR)/menu.o \
+! 	$(OUTDIR)/message.o \
+! 	$(OUTDIR)/misc1.o \
+! 	$(OUTDIR)/misc2.o \
+! 	$(OUTDIR)/move.o \
+! 	$(OUTDIR)/mbyte.o \
+! 	$(OUTDIR)/normal.o \
+! 	$(OUTDIR)/ops.o \
+! 	$(OUTDIR)/option.o \
+! 	$(OUTDIR)/os_win32.o \
+! 	$(OUTDIR)/os_mswin.o \
+! 	$(OUTDIR)/winclip.o \
+! 	$(OUTDIR)/pathdef.o \
+! 	$(OUTDIR)/popupmnu.o \
+! 	$(OUTDIR)/quickfix.o \
+! 	$(OUTDIR)/regexp.o \
+! 	$(OUTDIR)/screen.o \
+! 	$(OUTDIR)/search.o \
+! 	$(OUTDIR)/sha256.o \
+! 	$(OUTDIR)/spell.o \
+! 	$(OUTDIR)/syntax.o \
+! 	$(OUTDIR)/tag.o \
+! 	$(OUTDIR)/term.o \
+! 	$(OUTDIR)/ui.o \
+! 	$(OUTDIR)/undo.o \
+! 	$(OUTDIR)/version.o \
+! 	$(OUTDIR)/vimrc.o \
+! 	$(OUTDIR)/window.o \
+! 	$(EXTRA_OBJS)
+! 
+! all: $(EXE) xxd/xxd.exe vimrun.exe install.exe uninstal.exe GvimExt/gvimext.dll
+! 
+! # According to the Cygwin doc 1.2 FAQ, kernel32 should not be specified for
+! # linking unless calling ld directly.
+! # See /usr/doc/cygwin-doc-1.2/html/faq_toc.html#TOC93 for more information.
+! $(EXE): $(OUTDIR) $(OBJ)
+! 	$(CC) $(CFLAGS) -o $(EXE) $(OBJ) $(LIBS) -luuid -lole32 $(EXTRA_LIBS)
+! 
+! xxd/xxd.exe: xxd/xxd.c
+! 	$(MAKE) -C xxd -f Make_cyg.mak CC=$(CC) USEDLL=$(USEDLL)
+! 
+! GvimExt/gvimext.dll: GvimExt/gvimext.cpp GvimExt/gvimext.rc GvimExt/gvimext.h
+! 	$(MAKE) -C GvimExt -f Make_cyg.mak CROSS_COMPILE=$(CROSS_COMPILE)
+! 
+! vimrun.exe: vimrun.c
+! 	$(CC) $(CFLAGS) -o vimrun.exe vimrun.c  $(LIBS)
+! 
+! install.exe: dosinst.c
+! 	$(CC) $(CFLAGS) -o install.exe dosinst.c  $(LIBS) -luuid -lole32
+! 
+! uninstal.exe: uninstal.c
+! 	$(CC) $(CFLAGS) -o uninstal.exe uninstal.c $(LIBS)
+! 
+! $(OUTDIR):
+! 	$(MKDIR) $(OUTDIR)
+! 
+! tags:
+! 	command /c ctags *.c $(INCL)
+! 
+! clean:
+! 	-$(DEL) $(OUTDIR)$(DIRSLASH)*.o
+! 	-rmdir $(OUTDIR)
+! 	-$(DEL) $(EXE) vimrun.exe install.exe uninstal.exe
+! ifdef PERL
+! 	-$(DEL) if_perl.c
+! endif
+! ifdef MZSCHEME
+! 	-$(DEL) mzscheme_base.c
+! endif
+! 	-$(DEL) pathdef.c
+! 	$(MAKE) -C xxd -f Make_cyg.mak clean
+! 	$(MAKE) -C GvimExt -f Make_cyg.mak clean
+! 
+! distclean: clean
+! 	-$(DEL) obj$(DIRSLASH)*.o
+! 	-rmdir obj
+! 	-$(DEL) gobj$(DIRSLASH)*.o
+! 	-rmdir gobj
+! 	-$(DEL) objd$(DIRSLASH)*.o
+! 	-rmdir objd
+! 	-$(DEL) gobjd$(DIRSLASH)*.o
+! 	-rmdir gobjd
+! 	-$(DEL) *.exe
+! 
+! ###########################################################################
+! 
+! $(OUTDIR)/%.o : %.c $(INCL)
+! 	$(CC) -c $(CFLAGS) $< -o $@
+! 
+! $(OUTDIR)/ex_docmd.o:	ex_docmd.c $(INCL) ex_cmds.h
+! 	$(CC) -c $(CFLAGS) ex_docmd.c -o $(OUTDIR)/ex_docmd.o
+! 
+! $(OUTDIR)/ex_eval.o:	ex_eval.c $(INCL) ex_cmds.h
+! 	$(CC) -c $(CFLAGS) ex_eval.c -o $(OUTDIR)/ex_eval.o
+! 
+! $(OUTDIR)/gui_w32.o:	gui_w32.c gui_w48.c $(INCL)
+! 	$(CC) -c $(CFLAGS) gui_w32.c -o $(OUTDIR)/gui_w32.o
+! 
+! $(OUTDIR)/gui_dwrite.o:	gui_dwrite.cpp $(INCL) gui_dwrite.h
+! 	$(CC) -c $(CFLAGS) gui_dwrite.cpp -o $(OUTDIR)/gui_dwrite.o
+! 
+! $(OUTDIR)/if_cscope.o:	if_cscope.c $(INCL) if_cscope.h
+! 	$(CC) -c $(CFLAGS) if_cscope.c -o $(OUTDIR)/if_cscope.o
+! 
+! $(OUTDIR)/if_ole.o:	if_ole.cpp $(INCL)
+! 	$(CC) -c $(CFLAGS) if_ole.cpp -o $(OUTDIR)/if_ole.o
+! 
+! $(OUTDIR)/if_python.o : if_python.c if_py_both.h $(INCL)
+! 	$(CC) -c $(CFLAGS) -I$(PYTHON)/include $< -o $@
+! 
+! $(OUTDIR)/if_python3.o : if_python3.c if_py_both.h $(INCL)
+! 	$(CC) -c $(CFLAGS) -I$(PYTHON3)/include $< -o $@
+! 
+! if_perl.c: if_perl.xs typemap
+! 	$(PERL)/bin/perl `cygpath -d $(PERL)/lib/ExtUtils/xsubpp` \
+! 		-prototypes -typemap \
+! 		`cygpath -d $(PERL)/lib/ExtUtils/typemap` if_perl.xs > $@
+! 
+! $(OUTDIR)/if_perl.o:	if_perl.c $(INCL)
+! ifeq (yes, $(USEDLL))
+! 	$(CC) -c $(CFLAGS) -I/usr/include/mingw -D__MINGW32__ if_perl.c -o $(OUTDIR)/if_perl.o
+! endif
+! 
+! $(OUTDIR)/if_ruby.o:	if_ruby.c $(INCL)
+! ifeq (16, $(RUBY_VER))
+! 	$(CC) -c $(CFLAGS) -U_WIN32 if_ruby.c -o $(OUTDIR)/if_ruby.o
+! endif
+! 
+! $(OUTDIR)/netbeans.o:	netbeans.c $(INCL) $(NBDEBUG_DEP)
+! 	$(CC) -c $(CFLAGS) netbeans.c -o $(OUTDIR)/netbeans.o
+! 
+! $(OUTDIR)/regexp.o:		regexp.c regexp_nfa.c $(INCL)
+! 	$(CC) -c $(CFLAGS) regexp.c -o $(OUTDIR)/regexp.o
+! 
+! $(OUTDIR)/if_mzsch.o:	if_mzsch.c $(INCL) if_mzsch.h $(MZ_EXTRA_DEP)
+! 	$(CC) -c $(CFLAGS) if_mzsch.c -o $(OUTDIR)/if_mzsch.o
+! 
+! $(OUTDIR)/vimrc.o:	vim.rc version.h gui_w32_rc.h
+! 	$(RC) $(RCFLAGS) vim.rc -o $(OUTDIR)/vimrc.o
+! 
+! mzscheme_base.c:
+! 	$(MZSCHEME)/mzc --c-mods mzscheme_base.c ++lib scheme/base
+! 
+! pathdef.c: $(INCL)
+! ifneq (sh.exe, $(SHELL))
+! 	@echo creating pathdef.c
+! 	@echo '/* pathdef.c */' > pathdef.c
+! 	@echo '#include "vim.h"' >> pathdef.c
+! 	@echo 'char_u *default_vim_dir = (char_u *)"$(VIMRCLOC)";' >> pathdef.c
+! 	@echo 'char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR)";' >> pathdef.c
+! 	@echo 'char_u *all_cflags = (char_u *)"$(CC) $(CFLAGS)";' >> pathdef.c
+! 	@echo 'char_u *all_lflags = (char_u *)"$(CC) -s -o $(EXE) $(LIBS) -luuid -lole32 $(EXTRA_LIBS)";' >> pathdef.c
+! 	@echo 'char_u *compiled_user = (char_u *)"$(USERNAME)";' >> pathdef.c
+! 	@echo 'char_u *compiled_sys = (char_u *)"$(USERDOMAIN)";' >> pathdef.c
+! else
+! 	@echo creating pathdef.c
+! 	@echo /* pathdef.c */ > pathdef.c
+! 	@echo #include "vim.h" >> pathdef.c
+! 	@echo char_u *default_vim_dir = (char_u *)"$(VIMRCLOC)"; >> pathdef.c
+! 	@echo char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR)"; >> pathdef.c
+! 	@echo char_u *all_cflags = (char_u *)"$(CC) $(CFLAGS)"; >> pathdef.c
+! 	@echo char_u *all_lflags = (char_u *)"$(CC) -s -o $(EXE) $(LIBS) -luuid -lole32 $(EXTRA_LIBS)"; >> pathdef.c
+! 	@echo char_u *compiled_user = (char_u *)"$(USERNAME)"; >> pathdef.c
+! 	@echo char_u *compiled_sys = (char_u *)"$(USERDOMAIN)"; >> pathdef.c
+! endif
+  
+--- 1,52 ----
+  #
+! # Makefile for VIM on Win32, using MinGW cross compiler on Cygwin
+  #
+  # Also read INSTALLpc.txt!
+  #
+  # This compiles Vim as a Windows application.  If you want Vim to run as a
+  # Cygwin application use the Makefile (just like on Unix).
+  #
+! # The old Make_cyg.mak (maintained by Dan Sharp et al.) was merged into
+! # Make_cyg_ming.mak.  Note: USEDLL option was removed.
+! # This file contains Cygwin specific settings. Common settings are contained
+! # in Make_cyg_ming.mak.
+! #
+! # Last updated by Ken Takata.
+! # Last Change: 2014 Oct 21
+! 
+! 
+! # uncomment 'PERL' if you want a perl-enabled version
+! #PERL=/cygdrive/c/perl
+! 
+! # uncomment 'LUA' if you want a Lua-enabled version
+! #LUA=/cygdrive/c/lua
+! 
+! # uncomment 'MZSCHEME' if you want a MzScheme-enabled version
+! #MZSCHEME=/cygdrive/d/plt
+! 
+! # uncomment 'PYTHON' if you want a python-enabled version
+! #PYTHON=/cygdrive/c/python20
+! 
+! # uncomment 'PYTHON3' if you want a python3-enabled version
+! #PYTHON3=/cygdrive/c/python31
+! 
+! # uncomment 'TCL' if you want a Tcl-enabled version
+! #TCL=/cygdrive/c/tcl
+! 
+! # uncomment 'RUBY' if you want a Ruby-enabled version
+! #RUBY=/cygdribe/c/ruby
+! 
+! 
+! # Use MinGW(-w64) cross compiler.
+! # There are three MinGW packages in Cygwin:
+! #   32-bit: mingw-gcc-g++ and mingw64-i686-gcc-g++
+! #   64-bit: mingw64-x86_64-gcc-g++
+! # You may also need to set 'ARCH' in Make_cyg_ming.mak.
+  CROSS_COMPILE = i686-pc-mingw32-
+! #CROSS_COMPILE = i686-w64-mingw32-
+! #CROSS_COMPILE = x86_64-w64-mingw32-
+! 
+  
++ # Do not change this.
++ UNDER_CYGWIN = yes
++ include Make_cyg_ming.mak
+*** ../vim-7.4.495/src/Make_cyg_ming.mak	2014-11-05 13:51:13.916809371 +0100
+--- src/Make_cyg_ming.mak	2014-11-05 13:49:27.076811946 +0100
+***************
+*** 0 ****
+--- 1,847 ----
++ # Makefile for VIM on Win32 (Cygwin and MinGW)
++ #
++ # This file contains common part for Cygwin and MinGW and it is included
++ # from Make_cyg.mak and Make_ming.mak.
++ #
++ # Info at http://www.mingw.org
++ # Alternative x86 and 64-builds: http://mingw-w64.sourceforge.net
++ # Also requires GNU make, which you can download from the same sites.
++ # Get missing libraries from http://gnuwin32.sf.net.
++ #
++ # Tested on Win32 NT 4 and Win95.
++ #
++ # To make everything, just 'make -f Make_ming.mak'.
++ # To make just e.g. gvim.exe, 'make -f Make_ming.mak gvim.exe'.
++ # After a run, you can 'make -f Make_ming.mak clean' to clean up.
++ #
++ # NOTE: Sometimes 'GNU Make' will stop after building vimrun.exe -- I think
++ # it's just run out of memory or something.  Run again, and it will continue
++ # with 'xxd'.
++ #
++ # "make upx" makes *compressed* versions of the 32 bit GUI and console EXEs,
++ # using the excellent UPX compressor:
++ #     http://upx.sourceforge.net/
++ # "make mpress" uses the MPRESS compressor for 32- and 64-bit EXEs:
++ #     http://www.matcode.com/mpress.htm
++ #
++ # Maintained by Ron Aaron <ronaharon@yahoo.com> et al.
++ # Updated 2014 Oct 13.
++ 
++ #>>>>> choose options:
++ # set to yes for a debug build
++ DEBUG=no
++ # set to SIZE for size, SPEED for speed, MAXSPEED for maximum optimization
++ OPTIMIZE=MAXSPEED
++ # set to yes to make gvim, no for vim
++ GUI=yes
++ # set to yes if you want to use DirectWrite (DirectX)
++ # MinGW-w64 is needed, and ARCH should be set to i686 or x86-64.
++ DIRECTX=no
++ # FEATURES=[TINY | SMALL | NORMAL | BIG | HUGE]
++ # Set to TINY to make minimal version (few features).
++ FEATURES=BIG
++ # Set to one of i386, i486, i586, i686 as the minimum target processor.
++ # For amd64/x64 architecture set ARCH=x86-64 .
++ ARCH=i386
++ # Set to yes to cross-compile from unix; no=native Windows (and Cygwin).
++ CROSS=no
++ # Set to path to iconv.h and libiconv.a to enable using 'iconv.dll'.
++ #ICONV="."
++ ICONV=yes
++ GETTEXT=yes
++ # Set to yes to include multibyte support.
++ MBYTE=yes
++ # Set to yes to include IME support.
++ IME=yes
++ DYNAMIC_IME=yes
++ # Set to yes to enable writing a postscript file with :hardcopy.
++ POSTSCRIPT=no
++ # Set to yes to enable OLE support.
++ OLE=no
++ # Set the default $(WINVER) to make it work with pre-Win2k.
++ ifndef WINVER
++ WINVER = 0x0500
++ endif
++ # Set to yes to enable Cscope support.
++ CSCOPE=yes
++ # Set to yes to enable Netbeans support.
++ NETBEANS=$(GUI)
++ 
++ 
++ # Link against the shared version of libstdc++ by default.  Set
++ # STATIC_STDCPLUS to "yes" to link against static version instead.
++ ifndef STATIC_STDCPLUS
++ STATIC_STDCPLUS=no
++ endif
++ 
++ # If the user doesn't want gettext, undefine it.
++ ifeq (no, $(GETTEXT))
++ GETTEXT=
++ endif
++ # Added by E.F. Amatria <eferna1@platea.ptic.mec.es> 2001 Feb 23
++ # Uncomment the first line and one of the following three if you want Native Language
++ # Support.  You'll need gnu_gettext.win32, a MINGW32 Windows PORT of gettext by
++ # Franco Bez <franco.bez@gmx.de>.  It may be found at
++ # http://home.a-city.de/franco.bez/gettext/gettext_win32_en.html
++ # Tested with mingw32 with GCC-2.95.2 on Win98
++ # Updated 2001 Jun 9
++ #GETTEXT=c:/gettext.win32.msvcrt
++ #STATIC_GETTEXT=USE_STATIC_GETTEXT
++ #DYNAMIC_GETTEXT=USE_GETTEXT_DLL
++ #DYNAMIC_GETTEXT=USE_SAFE_GETTEXT_DLL
++ SAFE_GETTEXT_DLL_OBJ = $(GETTEXT)/src/safe_gettext_dll/safe_gettext_dll.o
++ # Alternatively, if you uncomment the two following lines, you get a "safe" version
++ # without linking the safe_gettext_dll.o object file.
++ #DYNAMIC_GETTEXT=DYNAMIC_GETTEXT
++ #GETTEXT_DYNAMIC=gnu_gettext.dll
++ INTLPATH=$(GETTEXT)/lib/mingw32
++ INTLLIB=gnu_gettext
++ 
++ # If you are using gettext-0.10.35 from http://sourceforge.net/projects/gettext
++ # or gettext-0.10.37 from http://sourceforge.net/projects/mingwrep/
++ # uncomment the following, but I can't build a static version with them, ?-(|
++ #GETTEXT=c:/gettext-0.10.37-20010430
++ #STATIC_GETTEXT=USE_STATIC_GETTEXT
++ #DYNAMIC_GETTEXT=DYNAMIC_GETTEXT
++ #INTLPATH=$(GETTEXT)/lib
++ #INTLLIB=intl
++ 
++ #	Perl interface:
++ #	  PERL=[Path to Perl directory] (Set inside Make_cyg.mak or Make_ming.mak)
++ #	  DYNAMIC_PERL=yes (to load the Perl DLL dynamically)
++ #	  PERL_VER=[Perl version, eg 56, 58, 510] (default is 56)
++ ifdef PERL
++ ifndef PERL_VER
++ PERL_VER=56
++ endif
++ ifndef DYNAMIC_PERL
++ DYNAMIC_PERL=yes
++ endif
++ # on Linux, for cross-compile, it's here:
++ #PERLLIB=/home/ron/ActivePerl/lib
++ # on NT, it's here:
++ PERLEXE=$(PERL)/bin/perl
++ PERLLIB=$(PERL)/lib
++ PERLLIBS=$(PERLLIB)/Core
++ ifeq ($(UNDER_CYGWIN),yes)
++ PERLTYPEMAP:=$(shell cygpath -m $(PERLLIB)/ExtUtils/typemap)
++ XSUBPPTRY:=$(shell cygpath -m $(PERLLIB)/ExtUtils/xsubpp)
++ else
++ PERLTYPEMAP=$(PERLLIB)/ExtUtils/typemap
++ XSUBPPTRY=$(PERLLIB)/ExtUtils/xsubpp
++ endif
++ XSUBPP_EXISTS=$(shell $(PERLEXE) -e "print 1 unless -e '$(XSUBPPTRY)'")
++ ifeq "$(XSUBPP_EXISTS)" ""
++ XSUBPP=$(PERLEXE) "$(XSUBPPTRY)"
++ else
++ XSUBPP=xsubpp
++ endif
++ endif
++ 
++ #	Lua interface:
++ #	  LUA=[Path to Lua directory] (Set inside Make_cyg.mak or Make_ming.mak)
++ #	  DYNAMIC_LUA=yes (to load the Lua DLL dynamically)
++ #	  LUA_VER=[Lua version, eg 51, 52] (default is 51)
++ ifdef LUA
++ ifndef DYNAMIC_LUA
++ DYNAMIC_LUA=yes
++ endif
++ 
++ ifndef LUA_VER
++ LUA_VER=51
++ endif
++ 
++ ifeq (no,$(DYNAMIC_LUA))
++ LUA_LIB = -L$(LUA)/lib -llua
++ endif
++ 
++ endif
++ 
++ #	MzScheme interface:
++ #	  MZSCHEME=[Path to MzScheme directory] (Set inside Make_cyg.mak or Make_ming.mak)
++ #	  DYNAMIC_MZSCHEME=yes (to load the MzScheme DLL dynamically)
++ #	  MZSCHEME_VER=[MzScheme version] (default is 205_000)
++ #	  MZSCHEME_DEBUG=no
++ ifdef MZSCHEME
++ ifndef DYNAMIC_MZSCHEME
++ DYNAMIC_MZSCHEME=yes
++ endif
++ 
++ ifndef MZSCHEME_VER
++ MZSCHEME_VER=205_000
++ endif
++ 
++ ifndef MZSCHEME_PRECISE_GC
++ MZSCHEME_PRECISE_GC=no
++ endif
++ 
++ # for version 4.x we need to generate byte-code for Scheme base
++ ifndef MZSCHEME_GENERATE_BASE
++ MZSCHEME_GENERATE_BASE=no
++ endif
++ 
++ ifndef MZSCHEME_USE_RACKET
++ MZSCHEME_MAIN_LIB=mzsch
++ else
++ MZSCHEME_MAIN_LIB=racket
++ endif
++ 
++ ifeq (no,$(DYNAMIC_MZSCHEME))
++ ifeq (yes,$(MZSCHEME_PRECISE_GC))
++ MZSCHEME_LIB=-l$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER)
++ else
++ MZSCHEME_LIB = -l$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER) -lmzgc$(MZSCHEME_VER)
++ endif
++ # the modern MinGW can dynamically link to dlls directly.
++ # point MZSCHEME_DLLS to where you put libmzschXXXXXXX.dll and libgcXXXXXXX.dll
++ ifndef MZSCHEME_DLLS
++ MZSCHEME_DLLS=$(MZSCHEME)
++ endif
++ MZSCHEME_LIBDIR=-L$(MZSCHEME_DLLS) -L$(MZSCHEME_DLLS)\lib
++ endif
++ 
++ endif
++ 
++ #	Python interface:
++ #	  PYTHON=[Path to Python directory] (Set inside Make_cyg.mak or Make_ming.mak)
++ #	  DYNAMIC_PYTHON=yes (to load the Python DLL dynamically)
++ #	  PYTHON_VER=[Python version, eg 22, 23, ..., 27] (default is 22)
++ ifdef PYTHON
++ ifndef DYNAMIC_PYTHON
++ DYNAMIC_PYTHON=yes
++ endif
++ 
++ ifndef PYTHON_VER
++ PYTHON_VER=22
++ endif
++ 
++ ifeq (no,$(DYNAMIC_PYTHON))
++ PYTHONLIB=-L$(PYTHON)/libs -lpython$(PYTHON_VER)
++ endif
++ # my include files are in 'win32inc' on Linux, and 'include' in the standard
++ # NT distro (ActiveState)
++ ifeq ($(CROSS),no)
++ PYTHONINC=-I $(PYTHON)/include
++ else
++ PYTHONINC=-I $(PYTHON)/win32inc
++ endif
++ endif
++ 
++ #	Python3 interface:
++ #	  PYTHON3=[Path to Python3 directory] (Set inside Make_cyg.mak or Make_ming.mak)
++ #	  DYNAMIC_PYTHON3=yes (to load the Python3 DLL dynamically)
++ #	  PYTHON3_VER=[Python3 version, eg 31, 32] (default is 31)
++ ifdef PYTHON3
++ ifndef DYNAMIC_PYTHON3
++ DYNAMIC_PYTHON3=yes
++ endif
++ 
++ ifndef PYTHON3_VER
++ PYTHON3_VER=31
++ endif
++ 
++ ifeq (no,$(DYNAMIC_PYTHON3))
++ PYTHON3LIB=-L$(PYTHON3)/libs -lPYTHON$(PYTHON3_VER)
++ endif
++ 
++ ifeq ($(CROSS),no)
++ PYTHON3INC=-I $(PYTHON3)/include
++ else
++ PYTHON3INC=-I $(PYTHON3)/win32inc
++ endif
++ endif
++ 
++ #	TCL interface:
++ #	  TCL=[Path to TCL directory] (Set inside Make_cyg.mak or Make_ming.mak)
++ #	  DYNAMIC_TCL=yes (to load the TCL DLL dynamically)
++ #	  TCL_VER=[TCL version, eg 83, 84] (default is 83)
++ ifdef TCL
++ ifndef DYNAMIC_TCL
++ DYNAMIC_TCL=yes
++ endif
++ ifndef TCL_VER
++ TCL_VER = 83
++ endif
++ TCLINC += -I$(TCL)/include
++ endif
++ 
++ 
++ #	Ruby interface:
++ #	  RUBY=[Path to Ruby directory] (Set inside Make_cyg.mak or Make_ming.mak)
++ #	  DYNAMIC_RUBY=yes (to load the Ruby DLL dynamically)
++ #	  RUBY_VER=[Ruby version, eg 18, 19, 20] (default is 18)
++ #	  RUBY_VER_LONG=[Ruby version, eg 1.8, 1.9.1, 2.0.0] (default is 1.8)
++ #	    You must set RUBY_VER_LONG when changing RUBY_VER.
++ #	    RUBY_API_VER is derived from RUBY_VER_LONG.
++ #	    Note: If you use Ruby 1.9.3, set as follows:
++ #	      RUBY_VER=19
++ #	      RUBY_VER_LONG=1.9.1 (not 1.9.3, because the API version is 1.9.1.)
++ ifdef RUBY
++ ifndef DYNAMIC_RUBY
++ DYNAMIC_RUBY=yes
++ endif
++ #  Set default value
++ ifndef RUBY_VER
++ RUBY_VER = 18
++ endif
++ ifndef RUBY_VER_LONG
++ RUBY_VER_LONG = 1.8
++ endif
++ ifndef RUBY_API_VER
++ RUBY_API_VER = $(subst .,,$(RUBY_VER_LONG))
++ endif
++ 
++ ifndef RUBY_PLATFORM
++ ifeq ($(RUBY_VER), 16)
++ RUBY_PLATFORM = i586-mswin32
++ else
++ ifneq ($(wildcard $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/i386-mingw32),)
++ RUBY_PLATFORM = i386-mingw32
++ else
++ ifneq ($(wildcard $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/x64-mingw32),)
++ RUBY_PLATFORM = x64-mingw32
++ else
++ RUBY_PLATFORM = i386-mswin32
++ endif
++ endif
++ endif
++ endif
++ 
++ ifndef RUBY_INSTALL_NAME
++ ifeq ($(RUBY_VER), 16)
++ RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_API_VER)
++ else
++ ifeq ($(ARCH),x86-64)
++ RUBY_INSTALL_NAME = x64-msvcrt-ruby$(RUBY_API_VER)
++ else
++ RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_API_VER)
++ endif
++ endif
++ endif
++ 
++ ifeq (19, $(word 1,$(sort 19 $(RUBY_VER))))
++ RUBY_19_OR_LATER = 1
++ endif
++ 
++ RUBYINC = -I $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/$(RUBY_PLATFORM)
++ ifdef RUBY_19_OR_LATER
++ RUBYINC += -I $(RUBY)/include/ruby-$(RUBY_VER_LONG) -I $(RUBY)/include/ruby-$(RUBY_VER_LONG)/$(RUBY_PLATFORM)
++ endif
++ ifeq (no, $(DYNAMIC_RUBY))
++ RUBYLIB = -L$(RUBY)/lib -l$(RUBY_INSTALL_NAME)
++ endif
++ 
++ endif # RUBY
++ 
++ # See feature.h for a list of options.
++ # Any other defines can be included here.
++ DEF_GUI=-DFEAT_GUI_W32 -DFEAT_CLIPBOARD
++ DEFINES=-DWIN32 -DWINVER=$(WINVER) -D_WIN32_WINNT=$(WINVER) \
++ 	-DHAVE_PATHDEF -DFEAT_$(FEATURES)
++ ifeq ($(ARCH),x86-64)
++ DEFINES+=-DMS_WIN64
++ endif
++ ifeq ($(CROSS),yes)
++ # cross-compiler prefix:
++ ifndef CROSS_COMPILE
++ CROSS_COMPILE = i586-pc-mingw32msvc-
++ endif
++ DEL = rm
++ MKDIR = mkdir -p
++ DIRSLASH = /
++ else
++ # normal (Windows) compilation:
++ ifndef CROSS_COMPILE
++ CROSS_COMPILE =
++ endif
++ ifneq (sh.exe, $(SHELL))
++ DEL = rm
++ MKDIR = mkdir -p
++ DIRSLASH = /
++ else
++ DEL = del
++ MKDIR = mkdir
++ DIRSLASH = \\
++ endif
++ endif
++ CC := $(CROSS_COMPILE)gcc
++ CXX := $(CROSS_COMPILE)g++
++ WINDRES := $(CROSS_COMPILE)windres
++ WINDRES_CC = $(CC)
++ 
++ #>>>>> end of choices
++ ###########################################################################
++ 
++ CFLAGS = -Iproto $(DEFINES) -pipe -w -march=$(ARCH) -Wall
++ WINDRES_FLAGS = --preprocessor="$(WINDRES_CC) -E -xc" -DRC_INVOKED
++ EXTRA_LIBS =
++ 
++ ifdef GETTEXT
++ DEFINES += -DHAVE_GETTEXT -DHAVE_LOCALE_H
++ GETTEXTINCLUDE = $(GETTEXT)/include
++ GETTEXTLIB = $(INTLPATH)
++ ifeq (yes, $(GETTEXT))
++ DEFINES += -DDYNAMIC_GETTEXT
++ else
++ ifdef DYNAMIC_GETTEXT
++ DEFINES += -D$(DYNAMIC_GETTEXT)
++ ifdef GETTEXT_DYNAMIC
++ DEFINES += -DGETTEXT_DYNAMIC -DGETTEXT_DLL=\"$(GETTEXT_DYNAMIC)\"
++ endif
++ endif
++ endif
++ endif
++ 
++ ifdef PERL
++ CFLAGS += -I$(PERLLIBS) -DFEAT_PERL
++ ifeq (yes, $(DYNAMIC_PERL))
++ CFLAGS += -DDYNAMIC_PERL -DDYNAMIC_PERL_DLL=\"perl$(PERL_VER).dll\"
++ EXTRA_LIBS += -L$(PERLLIBS) -lperl$(PERL_VER)
++ endif
++ endif
++ 
++ ifdef LUA
++ CFLAGS += -I$(LUA)/include -I$(LUA) -DFEAT_LUA
++ ifeq (yes, $(DYNAMIC_LUA))
++ CFLAGS += -DDYNAMIC_LUA -DDYNAMIC_LUA_DLL=\"lua$(LUA_VER).dll\"
++ endif
++ endif
++ 
++ ifdef MZSCHEME
++ CFLAGS += -I$(MZSCHEME)/include -DFEAT_MZSCHEME -DMZSCHEME_COLLECTS=\"$(MZSCHEME)/collects\"
++ ifeq (yes, $(DYNAMIC_MZSCHEME))
++ CFLAGS += -DDYNAMIC_MZSCHEME -DDYNAMIC_MZSCH_DLL=\"lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).dll\" -DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
++ endif
++ ifeq (yes, "$(MZSCHEME_DEBUG)")
++ CFLAGS += -DMZSCHEME_FORCE_GC
++ endif
++ endif
++ 
++ ifdef RUBY
++ CFLAGS += -DFEAT_RUBY $(RUBYINC)
++ ifeq (yes, $(DYNAMIC_RUBY))
++ CFLAGS += -DDYNAMIC_RUBY -DDYNAMIC_RUBY_DLL=\"$(RUBY_INSTALL_NAME).dll\"
++ CFLAGS += -DDYNAMIC_RUBY_VER=$(RUBY_VER)
++ endif
++ ifneq ($(findstring w64-mingw32,$(CC)),)
++ # A workaround for MinGW-w64
++ CFLAGS += -DHAVE_STRUCT_TIMESPEC -DHAVE_STRUCT_TIMEZONE
++ endif
++ endif
++ 
++ ifdef PYTHON
++ CFLAGS += -DFEAT_PYTHON 
++ ifeq (yes, $(DYNAMIC_PYTHON))
++ CFLAGS += -DDYNAMIC_PYTHON
++ endif
++ endif
++ 
++ ifdef PYTHON3 
++ CFLAGS += -DFEAT_PYTHON3 
++ ifeq (yes, $(DYNAMIC_PYTHON3))
++ CFLAGS += -DDYNAMIC_PYTHON3 
++ endif
++ endif
++ 
++ ifdef TCL
++ CFLAGS += -DFEAT_TCL $(TCLINC)
++ ifeq (yes, $(DYNAMIC_TCL))
++ CFLAGS += -DDYNAMIC_TCL -DDYNAMIC_TCL_DLL=\"tcl$(TCL_VER).dll\"
++ endif
++ endif
++ 
++ ifeq ($(POSTSCRIPT),yes)
++ DEFINES += -DMSWINPS
++ endif
++ 
++ ifeq (yes, $(OLE))
++ DEFINES += -DFEAT_OLE
++ endif
++ 
++ ifeq ($(CSCOPE),yes)
++ DEFINES += -DFEAT_CSCOPE
++ endif
++ 
++ ifeq ($(NETBEANS),yes)
++ # Only allow NETBEANS for a GUI build.
++ ifeq (yes, $(GUI))
++ DEFINES += -DFEAT_NETBEANS_INTG
++ 
++ ifeq ($(NBDEBUG), yes)
++ DEFINES += -DNBDEBUG
++ NBDEBUG_INCL = nbdebug.h
++ NBDEBUG_SRC = nbdebug.c
++ endif
++ endif
++ endif
++ 
++ # DirectWrite (DirectX)
++ ifeq ($(DIRECTX),yes)
++ # Only allow DirectWrite for a GUI build.
++ ifeq (yes, $(GUI))
++ DEFINES += -DFEAT_DIRECTX -DDYNAMIC_DIRECTX
++ endif
++ endif
++ 
++ # Only allow XPM for a GUI build.
++ ifeq (yes, $(GUI))
++ 
++ ifndef XPM
++ ifeq ($(ARCH),i386)
++ XPM = xpm/x86
++ endif
++ ifeq ($(ARCH),i486)
++ XPM = xpm/x86
++ endif
++ ifeq ($(ARCH),i586)
++ XPM = xpm/x86
++ endif
++ ifeq ($(ARCH),i686)
++ XPM = xpm/x86
++ endif
++ ifeq ($(ARCH),x86-64)
++ XPM = xpm/x64
++ endif
++ endif
++ ifdef XPM
++ ifneq ($(XPM),no)
++ CFLAGS += -DFEAT_XPM_W32 -I $(XPM)/include -I $(XPM)/../include
++ endif
++ endif
++ 
++ endif
++ 
++ ifeq ($(DEBUG),yes)
++ CFLAGS += -g -fstack-check
++ DEBUG_SUFFIX=d
++ else
++ ifeq ($(OPTIMIZE), SIZE)
++ CFLAGS += -Os
++ else
++ ifeq ($(OPTIMIZE), MAXSPEED)
++ CFLAGS += -O3
++ CFLAGS += -fomit-frame-pointer -freg-struct-return
++ else  # SPEED
++ CFLAGS += -O2
++ endif
++ endif
++ CFLAGS += -s
++ endif
++ 
++ LIB = -lkernel32 -luser32 -lgdi32 -ladvapi32 -lcomdlg32 -lcomctl32 -lversion
++ GUIOBJ =  $(OUTDIR)/gui.o $(OUTDIR)/gui_w32.o $(OUTDIR)/gui_beval.o $(OUTDIR)/os_w32exe.o
++ OBJ = \
++ 	$(OUTDIR)/blowfish.o \
++ 	$(OUTDIR)/buffer.o \
++ 	$(OUTDIR)/charset.o \
++ 	$(OUTDIR)/crypt.o \
++ 	$(OUTDIR)/crypt_zip.o \
++ 	$(OUTDIR)/diff.o \
++ 	$(OUTDIR)/digraph.o \
++ 	$(OUTDIR)/edit.o \
++ 	$(OUTDIR)/eval.o \
++ 	$(OUTDIR)/ex_cmds.o \
++ 	$(OUTDIR)/ex_cmds2.o \
++ 	$(OUTDIR)/ex_docmd.o \
++ 	$(OUTDIR)/ex_eval.o \
++ 	$(OUTDIR)/ex_getln.o \
++ 	$(OUTDIR)/fileio.o \
++ 	$(OUTDIR)/fold.o \
++ 	$(OUTDIR)/getchar.o \
++ 	$(OUTDIR)/hardcopy.o \
++ 	$(OUTDIR)/hashtab.o \
++ 	$(OUTDIR)/main.o \
++ 	$(OUTDIR)/mark.o \
++ 	$(OUTDIR)/memfile.o \
++ 	$(OUTDIR)/memline.o \
++ 	$(OUTDIR)/menu.o \
++ 	$(OUTDIR)/message.o \
++ 	$(OUTDIR)/misc1.o \
++ 	$(OUTDIR)/misc2.o \
++ 	$(OUTDIR)/move.o \
++ 	$(OUTDIR)/mbyte.o \
++ 	$(OUTDIR)/normal.o \
++ 	$(OUTDIR)/ops.o \
++ 	$(OUTDIR)/option.o \
++ 	$(OUTDIR)/os_win32.o \
++ 	$(OUTDIR)/os_mswin.o \
++ 	$(OUTDIR)/winclip.o \
++ 	$(OUTDIR)/pathdef.o \
++ 	$(OUTDIR)/popupmnu.o \
++ 	$(OUTDIR)/quickfix.o \
++ 	$(OUTDIR)/regexp.o \
++ 	$(OUTDIR)/screen.o \
++ 	$(OUTDIR)/search.o \
++ 	$(OUTDIR)/sha256.o \
++ 	$(OUTDIR)/spell.o \
++ 	$(OUTDIR)/syntax.o \
++ 	$(OUTDIR)/tag.o \
++ 	$(OUTDIR)/term.o \
++ 	$(OUTDIR)/ui.o \
++ 	$(OUTDIR)/undo.o \
++ 	$(OUTDIR)/version.o \
++ 	$(OUTDIR)/vimrc.o \
++ 	$(OUTDIR)/window.o
++ 
++ ifdef PERL
++ OBJ += $(OUTDIR)/if_perl.o
++ endif
++ ifdef LUA
++ OBJ += $(OUTDIR)/if_lua.o
++ endif
++ ifdef MZSCHEME
++ OBJ += $(OUTDIR)/if_mzsch.o
++ MZSCHEME_INCL = if_mzsch.h
++ ifeq (yes,$(MZSCHEME_GENERATE_BASE))
++ CFLAGS += -DINCLUDE_MZSCHEME_BASE
++ MZ_EXTRA_DEP += mzscheme_base.c
++ endif
++ ifeq (yes,$(MZSCHEME_PRECISE_GC))
++ CFLAGS += -DMZ_PRECISE_GC
++ endif
++ endif
++ ifdef PYTHON
++ OBJ += $(OUTDIR)/if_python.o
++ endif
++ ifdef PYTHON3
++ OBJ += $(OUTDIR)/if_python3.o
++ endif
++ ifdef RUBY
++ OBJ += $(OUTDIR)/if_ruby.o
++ endif
++ ifdef TCL
++ OBJ += $(OUTDIR)/if_tcl.o
++ endif
++ ifeq ($(CSCOPE),yes)
++ OBJ += $(OUTDIR)/if_cscope.o
++ endif
++ ifeq ($(NETBEANS),yes)
++ # Only allow NETBEANS for a GUI build.
++ ifeq (yes, $(GUI))
++ OBJ += $(OUTDIR)/netbeans.o
++ LIB += -lwsock32
++ endif
++ endif
++ ifeq ($(DIRECTX),yes)
++ # Only allow DIRECTX for a GUI build.
++ ifeq (yes, $(GUI))
++ OBJ += $(OUTDIR)/gui_dwrite.o
++ LIB += -ld2d1 -ldwrite
++ USE_STDCPLUS = yes
++ endif
++ endif
++ ifneq ($(XPM),no)
++ # Only allow XPM for a GUI build.
++ ifeq (yes, $(GUI))
++ OBJ += $(OUTDIR)/xpm_w32.o
++ # You'll need libXpm.a from http://gnuwin32.sf.net
++ LIB += -L$(XPM)/lib -lXpm
++ endif
++ endif
++ 
++ 
++ ifdef MZSCHEME
++ MZSCHEME_SUFFIX = Z
++ endif
++ 
++ ifeq ($(GUI),yes)
++ TARGET := gvim$(DEBUG_SUFFIX).exe
++ DEFINES += $(DEF_GUI)
++ OBJ += $(GUIOBJ)
++ LFLAGS += -mwindows
++ OUTDIR = gobj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)$(ARCH)
++ else
++ TARGET := vim$(DEBUG_SUFFIX).exe
++ OUTDIR = obj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)$(ARCH)
++ endif
++ 
++ ifdef GETTEXT
++ ifneq (yes, $(GETTEXT))
++ CFLAGS += -I$(GETTEXTINCLUDE)
++ ifndef STATIC_GETTEXT
++ LIB += -L$(GETTEXTLIB) -l$(INTLLIB)
++ ifeq (USE_SAFE_GETTEXT_DLL, $(DYNAMIC_GETTEXT))
++ OBJ+=$(SAFE_GETTEXT_DLL_OBJ)
++ endif
++ else
++ LIB += -L$(GETTEXTLIB) -lintl
++ endif
++ endif
++ endif
++ 
++ ifdef PERL
++ ifeq (no, $(DYNAMIC_PERL))
++ LIB += -L$(PERLLIBS) -lperl$(PERL_VER)
++ endif
++ endif
++ 
++ ifdef TCL
++ LIB += -L$(TCL)/lib
++ ifeq (yes, $(DYNAMIC_TCL))
++ LIB += -ltclstub$(TCL_VER)
++ else
++ LIB += -ltcl$(TCL_VER)
++ endif
++ endif
++ 
++ ifeq (yes, $(OLE))
++ LIB += -loleaut32
++ OBJ += $(OUTDIR)/if_ole.o
++ USE_STDCPLUS = yes
++ endif
++ 
++ ifeq (yes, $(MBYTE))
++ DEFINES += -DFEAT_MBYTE
++ endif
++ 
++ ifeq (yes, $(IME))
++ DEFINES += -DFEAT_MBYTE_IME
++ ifeq (yes, $(DYNAMIC_IME))
++ DEFINES += -DDYNAMIC_IME
++ else
++ LIB += -limm32
++ endif
++ endif
++ 
++ ifdef ICONV
++ ifneq (yes, $(ICONV))
++ LIB += -L$(ICONV)
++ CFLAGS += -I$(ICONV)
++ endif
++ DEFINES+=-DDYNAMIC_ICONV
++ endif
++ 
++ ifeq (yes, $(USE_STDCPLUS))
++ ifeq (yes, $(STATIC_STDCPLUS))
++ LIB += -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
++ else
++ LIB += -lstdc++
++ endif
++ endif
++ 
++ all: $(TARGET) vimrun.exe xxd/xxd.exe install.exe uninstal.exe GvimExt/gvimext.dll
++ 
++ vimrun.exe: vimrun.c
++ 	$(CC) $(CFLAGS) -o vimrun.exe vimrun.c $(LIB)
++ 
++ install.exe: dosinst.c
++ 	$(CC) $(CFLAGS) -o install.exe dosinst.c $(LIB) -lole32 -luuid
++ 
++ uninstal.exe: uninstal.c
++ 	$(CC) $(CFLAGS) -o uninstal.exe uninstal.c $(LIB)
++ 
++ $(TARGET): $(OUTDIR) $(OBJ)
++ 	$(CC) $(CFLAGS) $(LFLAGS) -o $@ $(OBJ) $(LIB) -lole32 -luuid $(LUA_LIB) $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(PYTHON3LIB) $(RUBYLIB)
++ 
++ upx: exes
++ 	upx gvim.exe
++ 	upx vim.exe
++ 
++ mpress: exes
++ 	mpress gvim.exe
++ 	mpress vim.exe
++ 
++ xxd/xxd.exe: xxd/xxd.c
++ 	$(MAKE) -C xxd -f Make_ming.mak CC='$(CC)'
++ 
++ GvimExt/gvimext.dll: GvimExt/gvimext.cpp GvimExt/gvimext.rc GvimExt/gvimext.h
++ 	$(MAKE) -C GvimExt -f Make_ming.mak CROSS=$(CROSS) CROSS_COMPILE=$(CROSS_COMPILE) CXX='$(CXX)' STATIC_STDCPLUS=$(STATIC_STDCPLUS)
++ 
++ clean:
++ 	-$(DEL) $(OUTDIR)$(DIRSLASH)*.o
++ 	-$(DEL) $(OUTDIR)$(DIRSLASH)*.res
++ 	-rmdir $(OUTDIR)
++ 	-$(DEL) *.exe
++ 	-$(DEL) pathdef.c
++ ifdef PERL
++ 	-$(DEL) if_perl.c
++ endif
++ ifdef MZSCHEME
++ 	-$(DEL) mzscheme_base.c
++ endif
++ 	$(MAKE) -C GvimExt -f Make_ming.mak clean
++ 	$(MAKE) -C xxd -f Make_ming.mak clean
++ 
++ ###########################################################################
++ INCL = vim.h feature.h os_win32.h os_dos.h ascii.h keymap.h term.h macros.h \
++ 	structs.h regexp.h option.h ex_cmds.h proto.h globals.h farsi.h \
++ 	gui.h
++ 
++ $(OUTDIR)/if_python.o : if_python.c if_py_both.h $(INCL)
++ 	$(CC) -c $(CFLAGS) $(PYTHONINC) -DDYNAMIC_PYTHON_DLL=\"python$(PYTHON_VER).dll\" $< -o $@
++ 
++ $(OUTDIR)/if_python3.o : if_python3.c if_py_both.h $(INCL)
++ 	$(CC) -c $(CFLAGS) $(PYTHON3INC) -DDYNAMIC_PYTHON3_DLL=\"PYTHON$(PYTHON3_VER).dll\" $< -o $@
++ 
++ $(OUTDIR)/%.o : %.c $(INCL)
++ 	$(CC) -c $(CFLAGS) $< -o $@
++ 
++ $(OUTDIR)/vimrc.o: vim.rc version.h gui_w32_rc.h
++ 	$(WINDRES) $(WINDRES_FLAGS) $(DEFINES) \
++ 	    --input-format=rc --output-format=coff -i vim.rc -o $@
++ 
++ $(OUTDIR):
++ 	$(MKDIR) $(OUTDIR)
++ 
++ $(OUTDIR)/ex_docmd.o:	ex_docmd.c $(INCL) ex_cmds.h
++ 	$(CC) -c $(CFLAGS) ex_docmd.c -o $(OUTDIR)/ex_docmd.o
++ 
++ $(OUTDIR)/ex_eval.o:	ex_eval.c $(INCL) ex_cmds.h
++ 	$(CC) -c $(CFLAGS) ex_eval.c -o $(OUTDIR)/ex_eval.o
++ 
++ $(OUTDIR)/gui_w32.o:	gui_w32.c gui_w48.c $(INCL)
++ 	$(CC) -c $(CFLAGS) gui_w32.c -o $(OUTDIR)/gui_w32.o
++ 
++ $(OUTDIR)/gui_dwrite.o:	gui_dwrite.cpp $(INCL) gui_dwrite.h
++ 	$(CC) -c $(CFLAGS) gui_dwrite.cpp -o $(OUTDIR)/gui_dwrite.o
++ 
++ $(OUTDIR)/if_cscope.o:	if_cscope.c $(INCL) if_cscope.h
++ 	$(CC) -c $(CFLAGS) if_cscope.c -o $(OUTDIR)/if_cscope.o
++ 
++ # Remove -D__IID_DEFINED__ for newer versions of the w32api
++ $(OUTDIR)/if_ole.o: if_ole.cpp $(INCL)
++ 	$(CC) $(CFLAGS) -c -o $(OUTDIR)/if_ole.o if_ole.cpp
++ 
++ $(OUTDIR)/if_ruby.o: if_ruby.c $(INCL)
++ ifeq (16, $(RUBY))
++ 	$(CC) $(CFLAGS) -U_WIN32 -c -o $(OUTDIR)/if_ruby.o if_ruby.c
++ endif
++ 
++ if_perl.c: if_perl.xs typemap
++ 	$(XSUBPP) -prototypes -typemap \
++ 	     "$(PERLTYPEMAP)" if_perl.xs > $@
++ 
++ $(OUTDIR)/netbeans.o:	netbeans.c $(INCL) $(NBDEBUG_INCL) $(NBDEBUG_SRC)
++ 	$(CC) -c $(CFLAGS) netbeans.c -o $(OUTDIR)/netbeans.o
++ 
++ $(OUTDIR)/regexp.o:		regexp.c regexp_nfa.c $(INCL)
++ 	$(CC) -c $(CFLAGS) regexp.c -o $(OUTDIR)/regexp.o
++ 
++ $(OUTDIR)/if_mzsch.o:	if_mzsch.c $(INCL) if_mzsch.h $(MZ_EXTRA_DEP)
++ 	$(CC) -c $(CFLAGS) if_mzsch.c -o $(OUTDIR)/if_mzsch.o
++ 
++ mzscheme_base.c:
++ 	$(MZSCHEME)/mzc --c-mods mzscheme_base.c ++lib scheme/base
++ 
++ pathdef.c: $(INCL)
++ ifneq (sh.exe, $(SHELL))
++ 	@echo creating pathdef.c
++ 	@echo '/* pathdef.c */' > pathdef.c
++ 	@echo '#include "vim.h"' >> pathdef.c
++ 	@echo 'char_u *default_vim_dir = (char_u *)"$(VIMRCLOC)";' >> pathdef.c
++ 	@echo 'char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR)";' >> pathdef.c
++ 	@echo 'char_u *all_cflags = (char_u *)"$(CC) $(CFLAGS)";' >> pathdef.c
++ 	@echo 'char_u *all_lflags = (char_u *)"$(CC) $(CFLAGS) $(LFLAGS) -o $(TARGET) $(LIB) -lole32 -luuid $(LUA_LIB) $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(PYTHON3LIB) $(RUBYLIB)";' >> pathdef.c
++ 	@echo 'char_u *compiled_user = (char_u *)"$(USERNAME)";' >> pathdef.c
++ 	@echo 'char_u *compiled_sys = (char_u *)"$(USERDOMAIN)";' >> pathdef.c
++ else
++ 	@echo creating pathdef.c
++ 	@echo /* pathdef.c */ > pathdef.c
++ 	@echo #include "vim.h" >> pathdef.c
++ 	@echo char_u *default_vim_dir = (char_u *)"$(VIMRCLOC)"; >> pathdef.c
++ 	@echo char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR)"; >> pathdef.c
++ 	@echo char_u *all_cflags = (char_u *)"$(CC) $(CFLAGS)"; >> pathdef.c
++ 	@echo char_u *all_lflags = (char_u *)"$(CC) $(CFLAGS) $(LFLAGS) -o $(TARGET) $(LIB) -lole32 -luuid $(LUA_LIB) $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(PYTHON3LIB) $(RUBYLIB)"; >> pathdef.c
++ 	@echo char_u *compiled_user = (char_u *)"$(USERNAME)"; >> pathdef.c
++ 	@echo char_u *compiled_sys = (char_u *)"$(USERDOMAIN)"; >> pathdef.c
++ endif
+*** ../vim-7.4.495/src/Make_ming.mak	2014-10-15 12:07:07.610009454 +0200
+--- src/Make_ming.mak	2014-11-05 13:49:27.076811946 +0100
+***************
+*** 1,193 ****
+- # Makefile for VIM on Win32
+  #
+! # Info at http://www.mingw.org
+! # Alternative x86 and 64-builds: http://mingw-w64.sourceforge.net
+! # Also requires GNU make, which you can download from the same sites.
+! # Get missing libraries from http://gnuwin32.sf.net.
+  #
+! # Tested on Win32 NT 4 and Win95.
+  #
+! # To make everything, just 'make -f Make_ming.mak'.
+! # To make just e.g. gvim.exe, 'make -f Make_ming.mak gvim.exe'.
+! # After a run, you can 'make -f Make_ming.mak clean' to clean up.
+  #
+! # NOTE: Sometimes 'GNU Make' will stop after building vimrun.exe -- I think
+! # it's just run out of memory or something.  Run again, and it will continue
+! # with 'xxd'.
+! #
+! # "make upx" makes *compressed* versions of the 32 bit GUI and console EXEs,
+! # using the excellent UPX compressor:
+! #     http://upx.sourceforge.net/
+! # "make mpress" uses the MPRESS compressor for 32- and 64-bit EXEs:
+! #     http://www.matcode.com/mpress.htm
+! #
+! # Maintained by Ron Aaron <ronaharon@yahoo.com> et al.
+! # Updated 2014 Oct 13.
+! 
+! #>>>>> choose options:
+! # set to yes for a debug build
+! DEBUG=no
+! # set to SIZE for size, SPEED for speed, MAXSPEED for maximum optimization
+! OPTIMIZE=MAXSPEED
+! # set to yes to make gvim, no for vim
+! GUI=yes
+! # set to yes if you want to use DirectWrite (DirectX)
+! DIRECTX=no
+! # FEATURES=[TINY | SMALL  | NORMAL | BIG | HUGE]
+! # Set to TINY to make minimal version (few features).
+! FEATURES=BIG
+! # Set to one of i386, i486, i586, i686 as the minimum target processor.
+! # For amd64/x64 architecture set ARCH=x86-64 .
+! ARCH=i386
+! # Set to yes to cross-compile from unix; no=native Windows.
+! CROSS=no
+! # Set to path to iconv.h and libiconv.a to enable using 'iconv.dll'.
+! #ICONV="."
+! ICONV=yes
+! GETTEXT=yes
+! # Set to yes to include multibyte support.
+! MBYTE=yes
+! # Set to yes to include IME support.
+! IME=yes
+! DYNAMIC_IME=yes
+! # Set to yes to enable writing a postscript file with :hardcopy.
+! POSTSCRIPT=no
+! # Set to yes to enable OLE support.
+! OLE=no
+! # Set the default $(WINVER) to make it work with pre-Win2k.
+! ifndef WINVER
+! WINVER = 0x0500
+! endif
+! # Set to yes to enable Cscope support.
+! CSCOPE=yes
+! # Set to yes to enable Netbeans support.
+! NETBEANS=$(GUI)
+! 
+! 
+! # Link against the shared version of libstdc++ by default.  Set
+! # STATIC_STDCPLUS to "yes" to link against static version instead.
+! ifndef STATIC_STDCPLUS
+! STATIC_STDCPLUS=no
+! endif
+! 
+! # If the user doesn't want gettext, undefine it.
+! ifeq (no, $(GETTEXT))
+! GETTEXT=
+! endif
+! # Added by E.F. Amatria <eferna1@platea.ptic.mec.es> 2001 Feb 23
+! # Uncomment the first line and one of the following three if you want Native Language
+! # Support.  You'll need gnu_gettext.win32, a MINGW32 Windows PORT of gettext by
+! # Franco Bez <franco.bez@gmx.de>.  It may be found at
+! # http://home.a-city.de/franco.bez/gettext/gettext_win32_en.html
+! # Tested with mingw32 with GCC-2.95.2 on Win98
+! # Updated 2001 Jun 9
+! #GETTEXT=c:/gettext.win32.msvcrt
+! #STATIC_GETTEXT=USE_STATIC_GETTEXT
+! #DYNAMIC_GETTEXT=USE_GETTEXT_DLL
+! #DYNAMIC_GETTEXT=USE_SAFE_GETTEXT_DLL
+! SAFE_GETTEXT_DLL_OBJ = $(GETTEXT)/src/safe_gettext_dll/safe_gettext_dll.o
+! # Alternatively, if you uncomment the two following lines, you get a "safe" version
+! # without linking the safe_gettext_dll.o object file.
+! #DYNAMIC_GETTEXT=DYNAMIC_GETTEXT
+! #GETTEXT_DYNAMIC=gnu_gettext.dll
+! INTLPATH=$(GETTEXT)/lib/mingw32
+! INTLLIB=gnu_gettext
+  
+- # If you are using gettext-0.10.35 from http://sourceforge.net/projects/gettext
+- # or gettext-0.10.37 from http://sourceforge.net/projects/mingwrep/
+- # uncomment the following, but I can't build a static version with them, ?-(|
+- #GETTEXT=c:/gettext-0.10.37-20010430
+- #STATIC_GETTEXT=USE_STATIC_GETTEXT
+- #DYNAMIC_GETTEXT=DYNAMIC_GETTEXT
+- #INTLPATH=$(GETTEXT)/lib
+- #INTLLIB=intl
+  
+  # uncomment 'PERL' if you want a perl-enabled version
+! #PERL=C:/perl
+! ifdef PERL
+! ifndef PERL_VER
+! PERL_VER=56
+! endif
+! ifndef DYNAMIC_PERL
+! DYNAMIC_PERL=yes
+! endif
+! # on Linux, for cross-compile, it's here:
+! #PERLLIB=/home/ron/ActivePerl/lib
+! # on NT, it's here:
+! PERLLIB=$(PERL)/lib
+! PERLLIBS=$(PERLLIB)/Core
+! XSUBPPTRY=$(PERLLIB)/ExtUtils/xsubpp
+! XSUBPP_EXISTS=$(shell perl -e "print 1 unless -e '$(XSUBPPTRY)'")
+! ifeq "$(XSUBPP_EXISTS)" ""
+! XSUBPP=perl $(XSUBPPTRY)
+! else
+! XSUBPP=xsubpp
+! endif
+! endif
+  
+  # uncomment 'LUA' if you want a Lua-enabled version
+! #LUA=/usr/local
+! ifdef LUA
+! ifndef DYNAMIC_LUA
+! DYNAMIC_LUA=yes
+! endif
+! 
+! ifndef LUA_VER
+! LUA_VER=51
+! endif
+! 
+! ifeq (no,$(DYNAMIC_LUA))
+! LUA_LIB = -L$(LUA)/lib -llua
+! endif
+! 
+! endif
+  
+  # uncomment 'MZSCHEME' if you want a MzScheme-enabled version
+  #MZSCHEME=d:/plt
+- ifdef MZSCHEME
+- ifndef DYNAMIC_MZSCHEME
+- DYNAMIC_MZSCHEME=yes
+- endif
+- 
+- ifndef MZSCHEME_VER
+- MZSCHEME_VER=205_000
+- endif
+- 
+- ifndef MZSCHEME_PRECISE_GC
+- MZSCHEME_PRECISE_GC=no
+- endif
+- 
+- # for version 4.x we need to generate byte-code for Scheme base
+- ifndef MZSCHEME_GENERATE_BASE
+- MZSCHEME_GENERATE_BASE=no
+- endif
+  
+! ifndef MZSCHEME_USE_RACKET
+! MZSCHEME_MAIN_LIB=mzsch
+! else
+! MZSCHEME_MAIN_LIB=racket
+! endif
+! 
+! ifeq (no,$(DYNAMIC_MZSCHEME))
+! ifeq (yes,$(MZSCHEME_PRECISE_GC))
+! MZSCHEME_LIB=-l$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER)
+! else
+! MZSCHEME_LIB = -l$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER) -lmzgc$(MZSCHEME_VER)
+! endif
+! # the modern MinGW can dynamically link to dlls directly.
+! # point MZSCHEME_DLLS to where you put libmzschXXXXXXX.dll and libgcXXXXXXX.dll
+! ifndef MZSCHEME_DLLS
+! MZSCHEME_DLLS=$(MZSCHEME)
+! endif
+! MZSCHEME_LIBDIR=-L$(MZSCHEME_DLLS) -L$(MZSCHEME_DLLS)\lib
+! endif
+! 
+! endif
+! 
+! # Python support -- works with the ActiveState python 2.0 release (and others
+! # too, probably)
+! #
+! # uncomment 'PYTHON' to make python-enabled version
+  # Put the path to the python distro here.  If cross compiling from Linux, you
+  # will also need to convert the header files to unix instead of dos format:
+  #   for fil in *.h ; do vim -e -c 'set ff=unix|w|q' $fil
+--- 1,27 ----
+  #
+! # Makefile for VIM on Win32, using MinGW
+  #
+! # Also read INSTALLpc.txt!
+  #
+! # The old Make_ming.mak (maintained by Ron Aaron et al.) was merged into
+! # Make_cyg_ming.mak.
+! # This file contains MinGW specific settings. Common settings are contained
+! # in Make_cyg_ming.mak.
+  #
+! # Last updated by Ken Takata.
+! # Last Change: 2014 Oct 21
+  
+  
+  # uncomment 'PERL' if you want a perl-enabled version
+! #PERL=c:/perl
+  
+  # uncomment 'LUA' if you want a Lua-enabled version
+! #LUA=c:/lua
+  
+  # uncomment 'MZSCHEME' if you want a MzScheme-enabled version
+  #MZSCHEME=d:/plt
+  
+! # uncomment 'PYTHON' if you want a python-enabled version
+  # Put the path to the python distro here.  If cross compiling from Linux, you
+  # will also need to convert the header files to unix instead of dos format:
+  #   for fil in *.h ; do vim -e -c 'set ff=unix|w|q' $fil
+***************
+*** 200,830 ****
+  # on my NT box, it's here:
+  #PYTHON=c:/python20
+  
+! ifdef PYTHON
+! ifndef DYNAMIC_PYTHON
+! DYNAMIC_PYTHON=yes
+! endif
+! 
+! ifndef PYTHON_VER
+! PYTHON_VER=22
+! endif
+! 
+! ifeq (no,$(DYNAMIC_PYTHON))
+! PYTHONLIB=-L$(PYTHON)/libs -lpython$(PYTHON_VER)
+! endif
+! # my include files are in 'win32inc' on Linux, and 'include' in the standard
+! # NT distro (ActiveState)
+! ifeq ($(CROSS),no)
+! PYTHONINC=-I $(PYTHON)/include
+! else
+! PYTHONINC=-I $(PYTHON)/win32inc
+! endif
+! endif
+! 
+! #PYTHON3: See comment for Python 2 above
+! 
+! ifdef PYTHON3
+! ifndef DYNAMIC_PYTHON3
+! DYNAMIC_PYTHON3=yes
+! endif
+! 
+! ifndef PYTHON3_VER
+! PYTHON3_VER=31
+! endif
+! 
+! ifeq (no,$(DYNAMIC_PYTHON3))
+! PYTHON3LIB=-L$(PYTHON3)/libs -lPYTHON$(PYTHON3_VER)
+! endif
+! 
+! ifeq ($(CROSS),no)
+! PYTHON3INC=-I $(PYTHON3)/include
+! else
+! PYTHON3INC=-I $(PYTHON3)/win32inc
+! endif
+! endif
+  
+! #	TCL interface:
+! #	  TCL=[Path to TCL directory]
+! #	  DYNAMIC_TCL=yes (to load the TCL DLL dynamically)
+! #	  TCL_VER=[TCL version, eg 83, 84] (default is 83)
+  #TCL=c:/tcl
+- ifdef TCL
+- ifndef DYNAMIC_TCL
+- DYNAMIC_TCL=yes
+- endif
+- ifndef TCL_VER
+- TCL_VER = 83
+- endif
+- TCLINC += -I$(TCL)/include
+- endif
+  
+! 
+! #	Ruby interface:
+! #	  RUBY=[Path to Ruby directory]
+! #	  DYNAMIC_RUBY=yes (to load the Ruby DLL dynamically)
+! #	  RUBY_VER=[Ruby version, eg 16, 17] (default is 16)
+! #	  RUBY_VER_LONG=[Ruby version, eg 1.6, 1.7] (default is 1.6)
+! #	    You must set RUBY_VER_LONG when changing RUBY_VER.
+! #	    You must set RUBY_API_VER version to RUBY_VER_LONG.
+! #	    Don't set ruby API version to RUBY_VER like 191.
+  #RUBY=c:/ruby
+- ifdef RUBY
+- ifndef DYNAMIC_RUBY
+- DYNAMIC_RUBY=yes
+- endif
+- #  Set default value
+- ifndef RUBY_VER
+- RUBY_VER = 16
+- endif
+- ifndef RUBY_VER_LONG
+- RUBY_VER_LONG = 1.6
+- endif
+- ifndef RUBY_API_VER
+- RUBY_API_VER = $(subst .,,$(RUBY_VER_LONG))
+- endif
+- 
+- ifndef RUBY_PLATFORM
+- ifeq ($(RUBY_VER), 16)
+- RUBY_PLATFORM = i586-mswin32
+- else
+- ifneq ($(wildcard $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/i386-mingw32),)
+- RUBY_PLATFORM = i386-mingw32
+- else
+- ifneq ($(wildcard $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/x64-mingw32),)
+- RUBY_PLATFORM = x64-mingw32
+- else
+- RUBY_PLATFORM = i386-mswin32
+- endif
+- endif
+- endif
+- endif
+- 
+- ifndef RUBY_INSTALL_NAME
+- ifeq ($(RUBY_VER), 16)
+- RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_API_VER)
+- else
+- ifeq ($(ARCH),x86-64)
+- RUBY_INSTALL_NAME = x64-msvcrt-ruby$(RUBY_API_VER)
+- else
+- RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_API_VER)
+- endif
+- endif
+- endif
+- 
+- ifeq (19, $(word 1,$(sort 19 $(RUBY_VER))))
+- RUBY_19_OR_LATER = 1
+- endif
+- 
+- RUBYINC = -I $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/$(RUBY_PLATFORM)
+- ifdef RUBY_19_OR_LATER
+- RUBYINC += -I $(RUBY)/include/ruby-$(RUBY_VER_LONG) -I $(RUBY)/include/ruby-$(RUBY_VER_LONG)/$(RUBY_PLATFORM)
+- endif
+- ifeq (no, $(DYNAMIC_RUBY))
+- RUBYLIB = -L$(RUBY)/lib -l$(RUBY_INSTALL_NAME)
+- endif
+- 
+- endif # RUBY
+- 
+- # See feature.h for a list of options.
+- # Any other defines can be included here.
+- DEF_GUI=-DFEAT_GUI_W32 -DFEAT_CLIPBOARD
+- DEFINES=-DWIN32 -DWINVER=$(WINVER) -D_WIN32_WINNT=$(WINVER) \
+- 	-DHAVE_PATHDEF -DFEAT_$(FEATURES)
+- ifeq ($(ARCH),x86-64)
+- DEFINES+=-DMS_WIN64
+- endif
+- ifeq ($(CROSS),yes)
+- # cross-compiler prefix:
+- CROSS_COMPILE = i586-pc-mingw32msvc-
+- DEL = rm
+- MKDIR = mkdir -p
+- DIRSLASH = /
+- else
+- # normal (Windows) compilation:
+- CROSS_COMPILE =
+- ifneq (sh.exe, $(SHELL))
+- DEL = rm
+- MKDIR = mkdir -p
+- DIRSLASH = /
+- else
+- DEL = del
+- MKDIR = mkdir
+- DIRSLASH = \\
+- endif
+- endif
+- CC := $(CROSS_COMPILE)gcc
+- WINDRES := $(CROSS_COMPILE)windres
+- WINDRES_CC = $(CC)
+- 
+- #>>>>> end of choices
+- ###########################################################################
+- 
+- CFLAGS = -Iproto $(DEFINES) -pipe -w -march=$(ARCH) -Wall
+- WINDRES_FLAGS = --preprocessor="$(WINDRES_CC) -E -xc" -DRC_INVOKED
+- EXTRA_LIBS =
+- 
+- ifdef GETTEXT
+- DEFINES += -DHAVE_GETTEXT -DHAVE_LOCALE_H
+- GETTEXTINCLUDE = $(GETTEXT)/include
+- GETTEXTLIB = $(INTLPATH)
+- ifeq (yes, $(GETTEXT))
+- DEFINES += -DDYNAMIC_GETTEXT
+- else
+- ifdef DYNAMIC_GETTEXT
+- DEFINES += -D$(DYNAMIC_GETTEXT)
+- ifdef GETTEXT_DYNAMIC
+- DEFINES += -DGETTEXT_DYNAMIC -DGETTEXT_DLL=\"$(GETTEXT_DYNAMIC)\"
+- endif
+- endif
+- endif
+- endif
+- 
+- ifdef PERL
+- CFLAGS += -I$(PERLLIBS) -DFEAT_PERL
+- ifeq (yes, $(DYNAMIC_PERL))
+- CFLAGS += -DDYNAMIC_PERL -DDYNAMIC_PERL_DLL=\"perl$(PERL_VER).dll\"
+- EXTRA_LIBS += -L$(PERLLIBS) -lperl$(PERL_VER)
+- endif
+- endif
+- 
+- ifdef LUA
+- CFLAGS += -I$(LUA)/include -DFEAT_LUA
+- ifeq (yes, $(DYNAMIC_LUA))
+- CFLAGS += -DDYNAMIC_LUA -DDYNAMIC_LUA_DLL=\"lua$(LUA_VER).dll\"
+- endif
+- endif
+- 
+- ifdef MZSCHEME
+- CFLAGS += -I$(MZSCHEME)/include -DFEAT_MZSCHEME -DMZSCHEME_COLLECTS=\"$(MZSCHEME)/collects\"
+- ifeq (yes, $(DYNAMIC_MZSCHEME))
+- CFLAGS += -DDYNAMIC_MZSCHEME -DDYNAMIC_MZSCH_DLL=\"lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).dll\" -DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
+- endif
+- ifeq (yes, "$(MZSCHEME_DEBUG)")
+- CFLAGS += -DMZSCHEME_FORCE_GC
+- endif
+- endif
+- 
+- ifdef RUBY
+- CFLAGS += -DFEAT_RUBY $(RUBYINC)
+- ifeq (yes, $(DYNAMIC_RUBY))
+- CFLAGS += -DDYNAMIC_RUBY -DDYNAMIC_RUBY_DLL=\"$(RUBY_INSTALL_NAME).dll\"
+- CFLAGS += -DDYNAMIC_RUBY_VER=$(RUBY_VER)
+- endif
+- endif
+- 
+- ifdef PYTHON
+- CFLAGS += -DFEAT_PYTHON 
+- ifeq (yes, $(DYNAMIC_PYTHON))
+- CFLAGS += -DDYNAMIC_PYTHON
+- endif
+- endif
+- 
+- ifdef PYTHON3 
+- CFLAGS += -DFEAT_PYTHON3 
+- ifeq (yes, $(DYNAMIC_PYTHON3))
+- CFLAGS += -DDYNAMIC_PYTHON3 
+- endif
+- endif
+- 
+- ifdef TCL
+- CFLAGS += -DFEAT_TCL $(TCLINC)
+- ifeq (yes, $(DYNAMIC_TCL))
+- CFLAGS += -DDYNAMIC_TCL -DDYNAMIC_TCL_DLL=\"tcl$(TCL_VER).dll\"
+- endif
+- endif
+- 
+- ifeq ($(POSTSCRIPT),yes)
+- DEFINES += -DMSWINPS
+- endif
+- 
+- ifeq (yes, $(OLE))
+- DEFINES += -DFEAT_OLE
+- endif
+- 
+- ifeq ($(CSCOPE),yes)
+- DEFINES += -DFEAT_CSCOPE
+- endif
+- 
+- ifeq ($(NETBEANS),yes)
+- # Only allow NETBEANS for a GUI build.
+- ifeq (yes, $(GUI))
+- DEFINES += -DFEAT_NETBEANS_INTG
+- 
+- ifeq ($(NBDEBUG), yes)
+- DEFINES += -DNBDEBUG
+- NBDEBUG_INCL = nbdebug.h
+- NBDEBUG_SRC = nbdebug.c
+- endif
+- endif
+- endif
+- 
+- # DirectWrite (DirectX)
+- ifeq ($(DIRECTX),yes)
+- # Only allow DirectWrite for a GUI build.
+- ifeq (yes, $(GUI))
+- DEFINES += -DFEAT_DIRECTX -DDYNAMIC_DIRECTX
+- endif
+- endif
+- 
+- # Only allow XPM for a GUI build.
+- ifeq (yes, $(GUI))
+- 
+- ifndef XPM
+- ifeq ($(ARCH),i386)
+- XPM = xpm/x86
+- endif
+- ifeq ($(ARCH),i486)
+- XPM = xpm/x86
+- endif
+- ifeq ($(ARCH),i586)
+- XPM = xpm/x86
+- endif
+- ifeq ($(ARCH),i686)
+- XPM = xpm/x86
+- endif
+- ifeq ($(ARCH),x86-64)
+- XPM = xpm/x64
+- endif
+- endif
+- ifdef XPM
+- ifneq ($(XPM),no)
+- CFLAGS += -DFEAT_XPM_W32 -I $(XPM)/include -I $(XPM)/../include
+- endif
+- endif
+- 
+- endif
+- 
+- ifeq ($(DEBUG),yes)
+- CFLAGS += -g -fstack-check
+- DEBUG_SUFFIX=d
+- else
+- ifeq ($(OPTIMIZE), SIZE)
+- CFLAGS += -Os
+- else
+- ifeq ($(OPTIMIZE), MAXSPEED)
+- CFLAGS += -O3
+- CFLAGS += -fomit-frame-pointer -freg-struct-return
+- else  # SPEED
+- CFLAGS += -O2
+- endif
+- endif
+- CFLAGS += -s
+- endif
+- 
+- LIB = -lkernel32 -luser32 -lgdi32 -ladvapi32 -lcomdlg32 -lcomctl32 -lversion
+- GUIOBJ =  $(OUTDIR)/gui.o $(OUTDIR)/gui_w32.o $(OUTDIR)/gui_beval.o $(OUTDIR)/os_w32exe.o
+- OBJ = \
+- 	$(OUTDIR)/blowfish.o \
+- 	$(OUTDIR)/buffer.o \
+- 	$(OUTDIR)/charset.o \
+- 	$(OUTDIR)/crypt.o \
+- 	$(OUTDIR)/crypt_zip.o \
+- 	$(OUTDIR)/diff.o \
+- 	$(OUTDIR)/digraph.o \
+- 	$(OUTDIR)/edit.o \
+- 	$(OUTDIR)/eval.o \
+- 	$(OUTDIR)/ex_cmds.o \
+- 	$(OUTDIR)/ex_cmds2.o \
+- 	$(OUTDIR)/ex_docmd.o \
+- 	$(OUTDIR)/ex_eval.o \
+- 	$(OUTDIR)/ex_getln.o \
+- 	$(OUTDIR)/fileio.o \
+- 	$(OUTDIR)/fold.o \
+- 	$(OUTDIR)/getchar.o \
+- 	$(OUTDIR)/hardcopy.o \
+- 	$(OUTDIR)/hashtab.o \
+- 	$(OUTDIR)/main.o \
+- 	$(OUTDIR)/mark.o \
+- 	$(OUTDIR)/memfile.o \
+- 	$(OUTDIR)/memline.o \
+- 	$(OUTDIR)/menu.o \
+- 	$(OUTDIR)/message.o \
+- 	$(OUTDIR)/misc1.o \
+- 	$(OUTDIR)/misc2.o \
+- 	$(OUTDIR)/move.o \
+- 	$(OUTDIR)/mbyte.o \
+- 	$(OUTDIR)/normal.o \
+- 	$(OUTDIR)/ops.o \
+- 	$(OUTDIR)/option.o \
+- 	$(OUTDIR)/os_win32.o \
+- 	$(OUTDIR)/os_mswin.o \
+- 	$(OUTDIR)/winclip.o \
+- 	$(OUTDIR)/pathdef.o \
+- 	$(OUTDIR)/popupmnu.o \
+- 	$(OUTDIR)/quickfix.o \
+- 	$(OUTDIR)/regexp.o \
+- 	$(OUTDIR)/screen.o \
+- 	$(OUTDIR)/search.o \
+- 	$(OUTDIR)/sha256.o \
+- 	$(OUTDIR)/spell.o \
+- 	$(OUTDIR)/syntax.o \
+- 	$(OUTDIR)/tag.o \
+- 	$(OUTDIR)/term.o \
+- 	$(OUTDIR)/ui.o \
+- 	$(OUTDIR)/undo.o \
+- 	$(OUTDIR)/version.o \
+- 	$(OUTDIR)/vimrc.o \
+- 	$(OUTDIR)/window.o
+- 
+- ifdef PERL
+- OBJ += $(OUTDIR)/if_perl.o
+- endif
+- ifdef LUA
+- OBJ += $(OUTDIR)/if_lua.o
+- endif
+- ifdef MZSCHEME
+- OBJ += $(OUTDIR)/if_mzsch.o
+- MZSCHEME_INCL = if_mzsch.h
+- ifeq (yes,$(MZSCHEME_GENERATE_BASE))
+- CFLAGS += -DINCLUDE_MZSCHEME_BASE
+- MZ_EXTRA_DEP += mzscheme_base.c
+- endif
+- ifeq (yes,$(MZSCHEME_PRECISE_GC))
+- CFLAGS += -DMZ_PRECISE_GC
+- endif
+- endif
+- ifdef PYTHON
+- OBJ += $(OUTDIR)/if_python.o
+- endif
+- ifdef PYTHON3
+- OBJ += $(OUTDIR)/if_python3.o
+- endif
+- ifdef RUBY
+- OBJ += $(OUTDIR)/if_ruby.o
+- endif
+- ifdef TCL
+- OBJ += $(OUTDIR)/if_tcl.o
+- endif
+- ifeq ($(CSCOPE),yes)
+- OBJ += $(OUTDIR)/if_cscope.o
+- endif
+- ifeq ($(NETBEANS),yes)
+- # Only allow NETBEANS for a GUI build.
+- ifeq (yes, $(GUI))
+- OBJ += $(OUTDIR)/netbeans.o
+- LIB += -lwsock32
+- endif
+- endif
+- ifeq ($(DIRECTX),yes)
+- # Only allow DIRECTX for a GUI build.
+- ifeq (yes, $(GUI))
+- OBJ += $(OUTDIR)/gui_dwrite.o
+- LIB += -ld2d1 -ldwrite
+- USE_STDCPLUS = yes
+- endif
+- endif
+- ifneq ($(XPM),no)
+- # Only allow XPM for a GUI build.
+- ifeq (yes, $(GUI))
+- OBJ += $(OUTDIR)/xpm_w32.o
+- # You'll need libXpm.a from http://gnuwin32.sf.net
+- LIB += -L$(XPM)/lib -lXpm
+- endif
+- endif
+- 
+- 
+- ifdef MZSCHEME
+- MZSCHEME_SUFFIX = Z
+- endif
+- 
+- ifeq ($(GUI),yes)
+- TARGET := gvim$(DEBUG_SUFFIX).exe
+- DEFINES += $(DEF_GUI)
+- OBJ += $(GUIOBJ)
+- LFLAGS += -mwindows
+- OUTDIR = gobj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)$(ARCH)
+- else
+- TARGET := vim$(DEBUG_SUFFIX).exe
+- OUTDIR = obj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)$(ARCH)
+- endif
+- 
+- ifdef GETTEXT
+- ifneq (yes, $(GETTEXT))
+- CFLAGS += -I$(GETTEXTINCLUDE)
+- ifndef STATIC_GETTEXT
+- LIB += -L$(GETTEXTLIB) -l$(INTLLIB)
+- ifeq (USE_SAFE_GETTEXT_DLL, $(DYNAMIC_GETTEXT))
+- OBJ+=$(SAFE_GETTEXT_DLL_OBJ)
+- endif
+- else
+- LIB += -L$(GETTEXTLIB) -lintl
+- endif
+- endif
+- endif
+- 
+- ifdef PERL
+- ifeq (no, $(DYNAMIC_PERL))
+- LIB += -L$(PERLLIBS) -lperl$(PERL_VER)
+- endif
+- endif
+- 
+- ifdef TCL
+- LIB += -L$(TCL)/lib
+- ifeq (yes, $(DYNAMIC_TCL))
+- LIB += -ltclstub$(TCL_VER)
+- else
+- LIB += -ltcl$(TCL_VER)
+- endif
+- endif
+- 
+- ifeq (yes, $(OLE))
+- LIB += -loleaut32
+- OBJ += $(OUTDIR)/if_ole.o
+- USE_STDCPLUS = yes
+- endif
+- 
+- ifeq (yes, $(MBYTE))
+- DEFINES += -DFEAT_MBYTE
+- endif
+- 
+- ifeq (yes, $(IME))
+- DEFINES += -DFEAT_MBYTE_IME
+- ifeq (yes, $(DYNAMIC_IME))
+- DEFINES += -DDYNAMIC_IME
+- else
+- LIB += -limm32
+- endif
+- endif
+- 
+- ifdef ICONV
+- ifneq (yes, $(ICONV))
+- LIB += -L$(ICONV)
+- CFLAGS += -I$(ICONV)
+- endif
+- DEFINES+=-DDYNAMIC_ICONV
+- endif
+- 
+- ifeq (yes, $(USE_STDCPLUS))
+- ifeq (yes, $(STATIC_STDCPLUS))
+- LIB += -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
+- else
+- LIB += -lstdc++
+- endif
+- endif
+- 
+- all: $(TARGET) vimrun.exe xxd/xxd.exe install.exe uninstal.exe GvimExt/gvimext.dll
+- 
+- vimrun.exe: vimrun.c
+- 	$(CC) $(CFLAGS) -o vimrun.exe vimrun.c $(LIB)
+- 
+- install.exe: dosinst.c
+- 	$(CC) $(CFLAGS) -o install.exe dosinst.c $(LIB) -lole32 -luuid
+- 
+- uninstal.exe: uninstal.c
+- 	$(CC) $(CFLAGS) -o uninstal.exe uninstal.c $(LIB)
+- 
+- $(TARGET): $(OUTDIR) $(OBJ)
+- 	$(CC) $(CFLAGS) $(LFLAGS) -o $@ $(OBJ) $(LIB) -lole32 -luuid $(LUA_LIB) $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(PYTHON3LIB) $(RUBYLIB)
+- 
+- upx: exes
+- 	upx gvim.exe
+- 	upx vim.exe
+- 
+- mpress: exes
+- 	mpress gvim.exe
+- 	mpress vim.exe
+- 
+- xxd/xxd.exe: xxd/xxd.c
+- 	$(MAKE) -C xxd -f Make_ming.mak CC=$(CC)
+- 
+- GvimExt/gvimext.dll: GvimExt/gvimext.cpp GvimExt/gvimext.rc GvimExt/gvimext.h
+- 	$(MAKE) -C GvimExt -f Make_ming.mak CROSS=$(CROSS) CROSS_COMPILE=$(CROSS_COMPILE)
+- 
+- clean:
+- 	-$(DEL) $(OUTDIR)$(DIRSLASH)*.o
+- 	-$(DEL) $(OUTDIR)$(DIRSLASH)*.res
+- 	-rmdir $(OUTDIR)
+- 	-$(DEL) *.exe
+- 	-$(DEL) pathdef.c
+- ifdef PERL
+- 	-$(DEL) if_perl.c
+- endif
+- ifdef MZSCHEME
+- 	-$(DEL) mzscheme_base.c
+- endif
+- 	$(MAKE) -C GvimExt -f Make_ming.mak clean
+- 	$(MAKE) -C xxd -f Make_ming.mak clean
+- 
+- ###########################################################################
+- INCL = vim.h feature.h os_win32.h os_dos.h ascii.h keymap.h term.h macros.h \
+- 	structs.h regexp.h option.h ex_cmds.h proto.h globals.h farsi.h \
+- 	gui.h
+- 
+- $(OUTDIR)/if_python.o : if_python.c if_py_both.h $(INCL)
+- 	$(CC) -c $(CFLAGS) $(PYTHONINC) -DDYNAMIC_PYTHON_DLL=\"python$(PYTHON_VER).dll\" $< -o $@
+- 
+- $(OUTDIR)/if_python3.o : if_python3.c if_py_both.h $(INCL)
+- 	$(CC) -c $(CFLAGS) $(PYTHON3INC) -DDYNAMIC_PYTHON3_DLL=\"PYTHON$(PYTHON3_VER).dll\" $< -o $@
+- 
+- $(OUTDIR)/%.o : %.c $(INCL)
+- 	$(CC) -c $(CFLAGS) $< -o $@
+- 
+- $(OUTDIR)/vimrc.o: vim.rc version.h gui_w32_rc.h
+- 	$(WINDRES) $(WINDRES_FLAGS) $(DEFINES) \
+- 	    --input-format=rc --output-format=coff -i vim.rc -o $@
+- 
+- $(OUTDIR):
+- 	$(MKDIR) $(OUTDIR)
+- 
+- $(OUTDIR)/ex_docmd.o:	ex_docmd.c $(INCL) ex_cmds.h
+- 	$(CC) -c $(CFLAGS) ex_docmd.c -o $(OUTDIR)/ex_docmd.o
+- 
+- $(OUTDIR)/ex_eval.o:	ex_eval.c $(INCL) ex_cmds.h
+- 	$(CC) -c $(CFLAGS) ex_eval.c -o $(OUTDIR)/ex_eval.o
+- 
+- $(OUTDIR)/gui_w32.o:	gui_w32.c gui_w48.c $(INCL)
+- 	$(CC) -c $(CFLAGS) gui_w32.c -o $(OUTDIR)/gui_w32.o
+- 
+- $(OUTDIR)/gui_dwrite.o:	gui_dwrite.cpp $(INCL) gui_dwrite.h
+- 	$(CC) -c $(CFLAGS) gui_dwrite.cpp -o $(OUTDIR)/gui_dwrite.o
+- 
+- $(OUTDIR)/if_cscope.o:	if_cscope.c $(INCL) if_cscope.h
+- 	$(CC) -c $(CFLAGS) if_cscope.c -o $(OUTDIR)/if_cscope.o
+- 
+- # Remove -D__IID_DEFINED__ for newer versions of the w32api
+- $(OUTDIR)/if_ole.o: if_ole.cpp $(INCL)
+- 	$(CC) $(CFLAGS) -c -o $(OUTDIR)/if_ole.o if_ole.cpp
+- 
+- $(OUTDIR)/if_ruby.o: if_ruby.c $(INCL)
+- ifeq (16, $(RUBY))
+- 	$(CC) $(CFLAGS) -U_WIN32 -c -o $(OUTDIR)/if_ruby.o if_ruby.c
+- endif
+- 
+- if_perl.c: if_perl.xs typemap
+- 	$(XSUBPP) -prototypes -typemap \
+- 	     $(PERLLIB)/ExtUtils/typemap if_perl.xs > $@
+- 
+- $(OUTDIR)/netbeans.o:	netbeans.c $(INCL) $(NBDEBUG_INCL) $(NBDEBUG_SRC)
+- 	$(CC) -c $(CFLAGS) netbeans.c -o $(OUTDIR)/netbeans.o
+- 
+- $(OUTDIR)/regexp.o:		regexp.c regexp_nfa.c $(INCL)
+- 	$(CC) -c $(CFLAGS) regexp.c -o $(OUTDIR)/regexp.o
+- 
+- $(OUTDIR)/if_mzsch.o:	if_mzsch.c $(INCL) if_mzsch.h $(MZ_EXTRA_DEP)
+- 	$(CC) -c $(CFLAGS) if_mzsch.c -o $(OUTDIR)/if_mzsch.o
+  
+- mzscheme_base.c:
+- 	$(MZSCHEME)/mzc --c-mods mzscheme_base.c ++lib scheme/base
+  
+! pathdef.c: $(INCL)
+! ifneq (sh.exe, $(SHELL))
+! 	@echo creating pathdef.c
+! 	@echo '/* pathdef.c */' > pathdef.c
+! 	@echo '#include "vim.h"' >> pathdef.c
+! 	@echo 'char_u *default_vim_dir = (char_u *)"$(VIMRCLOC)";' >> pathdef.c
+! 	@echo 'char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR)";' >> pathdef.c
+! 	@echo 'char_u *all_cflags = (char_u *)"$(CC) $(CFLAGS)";' >> pathdef.c
+! 	@echo 'char_u *all_lflags = (char_u *)"$(CC) $(CFLAGS) $(LFLAGS) -o $(TARGET) $(LIB) -lole32 -luuid $(LUA_LIB) $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(PYTHON3LIB) $(RUBYLIB)";' >> pathdef.c
+! 	@echo 'char_u *compiled_user = (char_u *)"$(USERNAME)";' >> pathdef.c
+! 	@echo 'char_u *compiled_sys = (char_u *)"$(USERDOMAIN)";' >> pathdef.c
+! else
+! 	@echo creating pathdef.c
+! 	@echo /* pathdef.c */ > pathdef.c
+! 	@echo #include "vim.h" >> pathdef.c
+! 	@echo char_u *default_vim_dir = (char_u *)"$(VIMRCLOC)"; >> pathdef.c
+! 	@echo char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR)"; >> pathdef.c
+! 	@echo char_u *all_cflags = (char_u *)"$(CC) $(CFLAGS)"; >> pathdef.c
+! 	@echo char_u *all_lflags = (char_u *)"$(CC) $(CFLAGS) $(LFLAGS) -o $(TARGET) $(LIB) -lole32 -luuid $(LUA_LIB) $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(PYTHON3LIB) $(RUBYLIB)"; >> pathdef.c
+! 	@echo char_u *compiled_user = (char_u *)"$(USERNAME)"; >> pathdef.c
+! 	@echo char_u *compiled_sys = (char_u *)"$(USERDOMAIN)"; >> pathdef.c
+! endif
+--- 34,49 ----
+  # on my NT box, it's here:
+  #PYTHON=c:/python20
+  
+! # uncomment 'PYTHON3' if you want a python3-enabled version
+! #PYTHON3=c:/python31
+  
+! # uncomment 'TCL' if you want a Tcl-enabled version
+  #TCL=c:/tcl
+  
+! # uncomment 'RUBY' if you want a Ruby-enabled version
+  #RUBY=c:/ruby
+  
+  
+! # Do not change this.
+! UNDER_CYGWIN = no
+! include Make_cyg_ming.mak
+*** ../vim-7.4.495/src/Make_mvc.mak	2014-08-22 18:12:53.995244049 +0200
+--- src/Make_mvc.mak	2014-11-05 13:49:27.080811946 +0100
+***************
+*** 50,62 ****
+  #	Perl interface:
+  #	  PERL=[Path to Perl directory]
+  #	  DYNAMIC_PERL=yes (to load the Perl DLL dynamically)
+! #	  PERL_VER=[Perl version, in the form 55 (5.005), 56 (5.6.x), etc]
+  #	  (default is 56)
+  #
+  #	Python interface:
+  #	  PYTHON=[Path to Python directory]
+  #	  DYNAMIC_PYTHON=yes (to load the Python DLL dynamically)
+! #	  PYTHON_VER=[Python version, eg 15, 20]  (default is 22)
+  #
+  #	Python3 interface:
+  #	  PYTHON3=[Path to Python3 directory]
+--- 50,63 ----
+  #	Perl interface:
+  #	  PERL=[Path to Perl directory]
+  #	  DYNAMIC_PERL=yes (to load the Perl DLL dynamically)
+! #	  PERL_VER=[Perl version, in the form 55 (5.005), 56 (5.6.x),
+! #		    510 (5.10.x), etc]
+  #	  (default is 56)
+  #
+  #	Python interface:
+  #	  PYTHON=[Path to Python directory]
+  #	  DYNAMIC_PYTHON=yes (to load the Python DLL dynamically)
+! #	  PYTHON_VER=[Python version, eg 22, 23, ..., 27]  (default is 22)
+  #
+  #	Python3 interface:
+  #	  PYTHON3=[Path to Python3 directory]
+***************
+*** 66,76 ****
+  #	Ruby interface:
+  #	  RUBY=[Path to Ruby directory]
+  #	  DYNAMIC_RUBY=yes (to load the Ruby DLL dynamically)
+! #	  RUBY_VER=[Ruby version, eg 16, 17] (default is 18)
+! #	  RUBY_VER_LONG=[Ruby version, eg 1.6, 1.7] (default is 1.8)
+  #	    You must set RUBY_VER_LONG when change RUBY_VER.
+! #	    You must set RUBY_API_VER to RUBY_VER_LONG.
+! #	    Don't set ruby API version to RUBY_VER like 191.
+  #
+  #	Tcl interface:
+  #	  TCL=[Path to Tcl directory]
+--- 67,79 ----
+  #	Ruby interface:
+  #	  RUBY=[Path to Ruby directory]
+  #	  DYNAMIC_RUBY=yes (to load the Ruby DLL dynamically)
+! #	  RUBY_VER=[Ruby version, eg 18, 19, 20] (default is 18)
+! #	  RUBY_VER_LONG=[Ruby version, eg 1.8, 1.9.1, 2.0.0] (default is 1.8)
+  #	    You must set RUBY_VER_LONG when change RUBY_VER.
+! #	    RUBY_API_VER is derived from RUBY_VER_LONG.
+! #	    Note: If you use Ruby 1.9.3, set as follows:
+! #	      RUBY_VER=19
+! #	      RUBY_VER_LONG=1.9.1 (not 1.9.3, because the API version is 1.9.1.)
+  #
+  #	Tcl interface:
+  #	  TCL=[Path to Tcl directory]
+*** ../vim-7.4.495/Filelist	2014-08-29 15:12:50.950447798 +0200
+--- Filelist	2014-11-05 13:52:11.840807976 +0100
+***************
+*** 277,282 ****
+--- 277,283 ----
+  		src/Make_bc3.mak \
+  		src/Make_bc5.mak \
+  		src/Make_cyg.mak \
++ 		src/Make_cyg_ming.mak \
+  		src/Make_djg.mak \
+  		src/Make_ivc.mak \
+  		src/Make_dvc.mak \
+*** ../vim-7.4.495/src/version.c	2014-11-05 13:43:18.352820831 +0100
+--- src/version.c	2014-11-05 13:51:22.216809171 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     496,
+  /**/
+
+-- 
+ARTHUR:        What?
+BLACK KNIGHT:  None shall pass.
+ARTHUR:        I have no quarrel with you, good Sir knight, but I must cross
+               this bridge.
+BLACK KNIGHT:  Then you shall die.
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.497 b/SOURCES/7.4.497
new file mode 100644
index 0000000..d29eb20
--- /dev/null
+++ b/SOURCES/7.4.497
@@ -0,0 +1,854 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.497
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.497
+Problem:    With some regexp patterns the NFA engine uses many states and
+	    becomes very slow.  To the user it looks like Vim freezes.
+Solution:   When the number of states reaches a limit fall back to the old
+	    engine. (Christian Brabandt)
+Files:	    runtime/doc/options.txt, src/Makefile, src/regexp.c, src/regexp.h,
+	    src/regexp_nfa.c, src/testdir/Make_dos.mak,
+	    src/testdir/Make_ming.mak, src/testdir/Make_os2.mak,
+	    src/testdir/Makefile, src/testdir/samples/re.freeze.txt,
+	    src/testdir/bench_re_freeze.in, src/testdir/bench_re_freeze.vim,
+	    Filelist
+
+
+*** ../vim-7.4.496/runtime/doc/options.txt	2014-09-23 15:45:04.866801055 +0200
+--- runtime/doc/options.txt	2014-11-05 12:06:16.664961112 +0100
+***************
+*** 5622,5627 ****
+--- 5626,5635 ----
+  	Note that when using the NFA engine and the pattern contains something
+  	that is not supported the pattern will not match.  This is only useful
+  	for debugging the regexp engine.
++ 	Using automatic selection enables Vim to switch the engine, if the
++ 	default engine becomes too costly.  E.g., when the NFA engine uses too
++ 	many states.  This should prevent Vim from hanging on a combination of
++ 	a complex pattern with long text.
+  
+  		*'relativenumber'* *'rnu'* *'norelativenumber'* *'nornu'*
+  'relativenumber' 'rnu'	boolean	(default off)
+*** ../vim-7.4.496/src/Makefile	2014-08-17 17:05:39.155057796 +0200
+--- src/Makefile	2014-11-05 12:01:58.704967328 +0100
+***************
+*** 1879,1884 ****
+--- 1879,1887 ----
+  	cd testdir; $(MAKE) -f Makefile $(GUI_TESTTARGET) VIMPROG=../$(VIMTARGET) $(GUI_TESTARG) SCRIPTSOURCE=../$(SCRIPTSOURCE)
+  	$(MAKE) -f Makefile unittest
+  
++ benchmark:
++ 	cd testdir; $(MAKE) -f Makefile benchmark VIMPROG=../$(VIMTARGET) SCRIPTSOURCE=../$(SCRIPTSOURCE)
++ 
+  unittesttargets:
+  	$(MAKE) -f Makefile $(UNITTEST_TARGETS)
+  
+*** ../vim-7.4.496/src/regexp.c	2014-09-09 17:18:44.008540299 +0200
+--- src/regexp.c	2014-11-05 14:05:40.544788489 +0100
+***************
+*** 8011,8023 ****
+      bt_regcomp,
+      bt_regfree,
+      bt_regexec_nl,
+!     bt_regexec_multi
+! #ifdef DEBUG
+!     ,(char_u *)""
+! #endif
+  };
+  
+- 
+  #include "regexp_nfa.c"
+  
+  static regengine_T nfa_regengine =
+--- 8011,8020 ----
+      bt_regcomp,
+      bt_regfree,
+      bt_regexec_nl,
+!     bt_regexec_multi,
+!     (char_u *)""
+  };
+  
+  #include "regexp_nfa.c"
+  
+  static regengine_T nfa_regengine =
+***************
+*** 8025,8042 ****
+      nfa_regcomp,
+      nfa_regfree,
+      nfa_regexec_nl,
+!     nfa_regexec_multi
+! #ifdef DEBUG
+!     ,(char_u *)""
+! #endif
+  };
+  
+  /* Which regexp engine to use? Needed for vim_regcomp().
+   * Must match with 'regexpengine'. */
+  static int regexp_engine = 0;
+! #define	    AUTOMATIC_ENGINE	0
+! #define	    BACKTRACKING_ENGINE	1
+! #define	    NFA_ENGINE		2
+  #ifdef DEBUG
+  static char_u regname[][30] = {
+  		    "AUTOMATIC Regexp Engine",
+--- 8022,8035 ----
+      nfa_regcomp,
+      nfa_regfree,
+      nfa_regexec_nl,
+!     nfa_regexec_multi,
+!     (char_u *)""
+  };
+  
+  /* Which regexp engine to use? Needed for vim_regcomp().
+   * Must match with 'regexpengine'. */
+  static int regexp_engine = 0;
+! 
+  #ifdef DEBUG
+  static char_u regname[][30] = {
+  		    "AUTOMATIC Regexp Engine",
+***************
+*** 8083,8092 ****
+  	    regexp_engine = AUTOMATIC_ENGINE;
+  	}
+      }
+- #ifdef DEBUG
+      bt_regengine.expr = expr;
+      nfa_regengine.expr = expr;
+- #endif
+  
+      /*
+       * First try the NFA engine, unless backtracking was requested.
+--- 8076,8083 ----
+***************
+*** 8096,8102 ****
+      else
+  	prog = bt_regengine.regcomp(expr, re_flags);
+  
+!     if (prog == NULL)	    /* error compiling regexp with initial engine */
+      {
+  #ifdef BT_REGEXP_DEBUG_LOG
+  	if (regexp_engine != BACKTRACKING_ENGINE)   /* debugging log for NFA */
+--- 8087,8094 ----
+      else
+  	prog = bt_regengine.regcomp(expr, re_flags);
+  
+!     /* Check for error compiling regexp with initial engine. */
+!     if (prog == NULL)
+      {
+  #ifdef BT_REGEXP_DEBUG_LOG
+  	if (regexp_engine != BACKTRACKING_ENGINE)   /* debugging log for NFA */
+***************
+*** 8114,8126 ****
+  	}
+  #endif
+  	/*
+! 	 * If the NFA engine failed, the backtracking engine won't work either.
+  	 *
+  	if (regexp_engine == AUTOMATIC_ENGINE)
+  	    prog = bt_regengine.regcomp(expr, re_flags);
+  	 */
+      }
+  
+      return prog;
+  }
+  
+--- 8106,8132 ----
+  	}
+  #endif
+  	/*
+! 	 * If the NFA engine failed, try the backtracking engine.
+! 	 * Disabled for now, both engines fail on the same patterns.
+! 	 * Re-enable when regcomp() fails when the pattern would work better
+! 	 * with the other engine.
+  	 *
+  	if (regexp_engine == AUTOMATIC_ENGINE)
++ 	{
+  	    prog = bt_regengine.regcomp(expr, re_flags);
++ 	    regexp_engine == BACKTRACKING_ENGINE;
++ 	}
+  	 */
+      }
+  
++     if (prog != NULL)
++     {
++ 	/* Store the info needed to call regcomp() again when the engine turns
++ 	 * out to be very slow when executing it. */
++ 	prog->re_engine = regexp_engine;
++ 	prog->re_flags  = re_flags;
++     }
++ 
+      return prog;
+  }
+  
+***************
+*** 8135,8154 ****
+  	prog->engine->regfree(prog);
+  }
+  
+  /*
+   * Match a regexp against a string.
+   * "rmp->regprog" is a compiled regexp as returned by vim_regcomp().
+   * Uses curbuf for line count and 'iskeyword'.
+   *
+   * Return TRUE if there is a match, FALSE if not.
+   */
+      int
+  vim_regexec(rmp, line, col)
+!     regmatch_T *rmp;
+!     char_u      *line;  /* string to match against */
+!     colnr_T     col;    /* column to start looking for match */
+  {
+!     return rmp->regprog->engine->regexec_nl(rmp, line, col, FALSE);
+  }
+  
+  #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
+--- 8141,8215 ----
+  	prog->engine->regfree(prog);
+  }
+  
++ #ifdef FEAT_EVAL
++ static void report_re_switch __ARGS((char_u *pat));
++ 
++     static void
++ report_re_switch(pat)
++     char_u *pat;
++ {
++     if (p_verbose > 0)
++     {
++ 	verbose_enter();
++ 	MSG_PUTS(_("Switching to backtracking RE engine for pattern: "));
++ 	MSG_PUTS(pat);
++ 	verbose_leave();
++     }
++ }
++ #endif
++ 
++ static int vim_regexec_both __ARGS((regmatch_T *rmp, char_u *line, colnr_T col, int nl));
++ 
+  /*
+   * Match a regexp against a string.
+   * "rmp->regprog" is a compiled regexp as returned by vim_regcomp().
+   * Uses curbuf for line count and 'iskeyword'.
++  * When "nl" is TRUE consider a "\n" in "line" to be a line break.
+   *
+   * Return TRUE if there is a match, FALSE if not.
+   */
++     static int
++ vim_regexec_both(rmp, line, col, nl)
++     regmatch_T	*rmp;
++     char_u	*line;  /* string to match against */
++     colnr_T	col;    /* column to start looking for match */
++     int		nl;
++ {
++     int result = rmp->regprog->engine->regexec_nl(rmp, line, col, nl);
++ 
++     /* NFA engine aborted because it's very slow. */
++     if (rmp->regprog->re_engine == AUTOMATIC_ENGINE
++ 					       && result == NFA_TOO_EXPENSIVE)
++     {
++ 	int    save_p_re = p_re;
++ 	int    re_flags = rmp->regprog->re_flags;
++ 	char_u *pat = vim_strsave(((nfa_regprog_T *)rmp->regprog)->pattern);
++ 
++ 	p_re = BACKTRACKING_ENGINE;
++ 	vim_regfree(rmp->regprog);
++ 	if (pat != NULL)
++ 	{
++ #ifdef FEAT_EVAL
++ 	    report_re_switch(pat);
++ #endif
++ 	    rmp->regprog = vim_regcomp(pat, re_flags);
++ 	    if (rmp->regprog != NULL)
++ 		result = rmp->regprog->engine->regexec_nl(rmp, line, col, nl);
++ 	    vim_free(pat);
++ 	}
++ 
++ 	p_re = save_p_re;
++     }
++     return result;
++ }
++ 
+      int
+  vim_regexec(rmp, line, col)
+!     regmatch_T	*rmp;
+!     char_u	*line;
+!     colnr_T	col;
+  {
+!     return vim_regexec_both(rmp, line, col, FALSE);
+  }
+  
+  #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
+***************
+*** 8158,8168 ****
+   */
+      int
+  vim_regexec_nl(rmp, line, col)
+!     regmatch_T *rmp;
+!     char_u *line;
+!     colnr_T col;
+  {
+!     return rmp->regprog->engine->regexec_nl(rmp, line, col, TRUE);
+  }
+  #endif
+  
+--- 8219,8229 ----
+   */
+      int
+  vim_regexec_nl(rmp, line, col)
+!     regmatch_T	*rmp;
+!     char_u	*line;
+!     colnr_T	col;
+  {
+!     return vim_regexec_both(rmp, line, col, TRUE);
+  }
+  #endif
+  
+***************
+*** 8183,8187 ****
+      colnr_T     col;            /* column to start looking for match */
+      proftime_T	*tm;		/* timeout limit or NULL */
+  {
+!     return rmp->regprog->engine->regexec_multi(rmp, win, buf, lnum, col, tm);
+  }
+--- 8244,8275 ----
+      colnr_T     col;            /* column to start looking for match */
+      proftime_T	*tm;		/* timeout limit or NULL */
+  {
+!     int result = rmp->regprog->engine->regexec_multi(
+! 						rmp, win, buf, lnum, col, tm);
+! 
+!     /* NFA engine aborted because it's very slow. */
+!     if (rmp->regprog->re_engine == AUTOMATIC_ENGINE
+! 					       && result == NFA_TOO_EXPENSIVE)
+!     {
+! 	int    save_p_re = p_re;
+! 	int    re_flags = rmp->regprog->re_flags;
+! 	char_u *pat = vim_strsave(((nfa_regprog_T *)rmp->regprog)->pattern);
+! 
+! 	p_re = BACKTRACKING_ENGINE;
+! 	vim_regfree(rmp->regprog);
+! 	if (pat != NULL)
+! 	{
+! #ifdef FEAT_EVAL
+! 	    report_re_switch(pat);
+! #endif
+! 	    rmp->regprog = vim_regcomp(pat, re_flags);
+! 	    if (rmp->regprog != NULL)
+! 		result = rmp->regprog->engine->regexec_multi(
+! 						rmp, win, buf, lnum, col, tm);
+! 	    vim_free(pat);
+! 	}
+! 	p_re = save_p_re;
+!     }
+! 
+!     return result;
+  }
+*** ../vim-7.4.496/src/regexp.h	2014-04-23 19:06:33.702828771 +0200
+--- src/regexp.h	2014-11-05 13:09:14.136870089 +0100
+***************
+*** 27,32 ****
+--- 27,44 ----
+   */
+  #define NFA_MAX_BRACES 20
+  
++ /*
++  * In the NFA engine: how many states are allowed
++  */
++ #define NFA_MAX_STATES 100000
++ #define NFA_TOO_EXPENSIVE -1
++ 
++ /* Which regexp engine to use? Needed for vim_regcomp().
++  * Must match with 'regexpengine'. */
++ #define	    AUTOMATIC_ENGINE	0
++ #define	    BACKTRACKING_ENGINE	1
++ #define	    NFA_ENGINE		2
++ 
+  typedef struct regengine regengine_T;
+  
+  /*
+***************
+*** 38,43 ****
+--- 50,57 ----
+  {
+      regengine_T		*engine;
+      unsigned		regflags;
++     unsigned		re_engine;   /* automatic, backtracking or nfa engine */
++     unsigned		re_flags;    /* second argument for vim_regcomp() */
+  } regprog_T;
+  
+  /*
+***************
+*** 47,55 ****
+   */
+  typedef struct
+  {
+!     /* These two members implement regprog_T */
+      regengine_T		*engine;
+      unsigned		regflags;
+  
+      int			regstart;
+      char_u		reganch;
+--- 61,71 ----
+   */
+  typedef struct
+  {
+!     /* These four members implement regprog_T */
+      regengine_T		*engine;
+      unsigned		regflags;
++     unsigned		re_engine;
++     unsigned		re_flags;    /* second argument for vim_regcomp() */
+  
+      int			regstart;
+      char_u		reganch;
+***************
+*** 81,89 ****
+   */
+  typedef struct
+  {
+!     /* These two members implement regprog_T */
+      regengine_T		*engine;
+      unsigned		regflags;
+  
+      nfa_state_T		*start;		/* points into state[] */
+  
+--- 97,107 ----
+   */
+  typedef struct
+  {
+!     /* These three members implement regprog_T */
+      regengine_T		*engine;
+      unsigned		regflags;
++     unsigned		re_engine;
++     unsigned		re_flags;    /* second argument for vim_regcomp() */
+  
+      nfa_state_T		*start;		/* points into state[] */
+  
+***************
+*** 96,104 ****
+  #ifdef FEAT_SYN_HL
+      int			reghasz;
+  #endif
+- #ifdef DEBUG
+      char_u		*pattern;
+- #endif
+      int			nsubexp;	/* number of () */
+      int			nstate;
+      nfa_state_T		state[1];	/* actually longer.. */
+--- 114,120 ----
+***************
+*** 151,159 ****
+      void	(*regfree)(regprog_T *);
+      int		(*regexec_nl)(regmatch_T*, char_u*, colnr_T, int);
+      long	(*regexec_multi)(regmmatch_T*, win_T*, buf_T*, linenr_T, colnr_T, proftime_T*);
+- #ifdef DEBUG
+      char_u	*expr;
+- #endif
+  };
+  
+  #endif	/* _REGEXP_H */
+--- 167,173 ----
+*** ../vim-7.4.496/src/regexp_nfa.c	2014-10-11 12:48:22.541259950 +0200
+--- src/regexp_nfa.c	2014-11-05 13:08:43.876870818 +0100
+***************
+*** 5522,5527 ****
+--- 5522,5534 ----
+  	nextlist->n = 0;	    /* clear nextlist */
+  	nextlist->has_pim = FALSE;
+  	++nfa_listid;
++ 	if (prog->re_engine == AUTOMATIC_ENGINE && nfa_listid >= NFA_MAX_STATES)
++ 	{
++ 	    /* too many states, retry with old engine */
++ 	    nfa_match = NFA_TOO_EXPENSIVE;
++ 	    goto theend;
++ 	}
++ 
+  	thislist->id = nfa_listid;
+  	nextlist->id = nfa_listid + 1;
+  
+***************
+*** 5704,5709 ****
+--- 5711,5721 ----
+  			 */
+  			result = recursive_regmatch(t->state, NULL, prog,
+  						       submatch, m, &listids);
++ 			if (result == NFA_TOO_EXPENSIVE)
++ 			{
++ 			    nfa_match = result;
++ 			    goto theend;
++ 			}
+  
+  			/* for \@! and \@<! it is a match when the result is
+  			 * FALSE */
+***************
+*** 5817,5822 ****
+--- 5829,5839 ----
+  		/* First try matching the pattern. */
+  		result = recursive_regmatch(t->state, NULL, prog,
+  						       submatch, m, &listids);
++ 		if (result == NFA_TOO_EXPENSIVE)
++ 		{
++ 		    nfa_match = result;
++ 		    goto theend;
++ 		}
+  		if (result)
+  		{
+  		    int bytelen;
+***************
+*** 6760,6765 ****
+--- 6777,6783 ----
+      int		i;
+      regsubs_T	subs, m;
+      nfa_state_T	*start = prog->start;
++     int		result;
+  #ifdef ENABLE_LOG
+      FILE	*f;
+  #endif
+***************
+*** 6791,6798 ****
+      clear_sub(&m.synt);
+  #endif
+  
+!     if (nfa_regmatch(prog, start, &subs, &m) == FALSE)
+  	return 0;
+  
+      cleanup_subexpr();
+      if (REG_MULTI)
+--- 6809,6819 ----
+      clear_sub(&m.synt);
+  #endif
+  
+!     result = nfa_regmatch(prog, start, &subs, &m);
+!     if (result == FALSE)
+  	return 0;
++     else if (result == NFA_TOO_EXPENSIVE)
++ 	return result;
+  
+      cleanup_subexpr();
+      if (REG_MULTI)
+***************
+*** 6929,6937 ****
+      nfa_nsubexpr = prog->nsubexp;
+      nfa_listid = 1;
+      nfa_alt_listid = 2;
+- #ifdef DEBUG
+      nfa_regengine.expr = prog->pattern;
+- #endif
+  
+      if (prog->reganch && col > 0)
+  	return 0L;
+--- 6950,6956 ----
+***************
+*** 6979,6987 ****
+  
+      retval = nfa_regtry(prog, col);
+  
+- #ifdef DEBUG
+      nfa_regengine.expr = NULL;
+- #endif
+  
+  theend:
+      return retval;
+--- 6998,7004 ----
+***************
+*** 7003,7011 ****
+      if (expr == NULL)
+  	return NULL;
+  
+- #ifdef DEBUG
+      nfa_regengine.expr = expr;
+- #endif
+  
+      init_class_tab();
+  
+--- 7020,7026 ----
+***************
+*** 7082,7091 ****
+      /* Remember whether this pattern has any \z specials in it. */
+      prog->reghasz = re_has_z;
+  #endif
+- #ifdef DEBUG
+      prog->pattern = vim_strsave(expr);
+      nfa_regengine.expr = NULL;
+- #endif
+  
+  out:
+      vim_free(post_start);
+--- 7097,7104 ----
+***************
+*** 7099,7107 ****
+  #ifdef ENABLE_LOG
+      nfa_postfix_dump(expr, FAIL);
+  #endif
+- #ifdef DEBUG
+      nfa_regengine.expr = NULL;
+- #endif
+      goto out;
+  }
+  
+--- 7112,7118 ----
+***************
+*** 7115,7123 ****
+      if (prog != NULL)
+      {
+  	vim_free(((nfa_regprog_T *)prog)->match_text);
+- #ifdef DEBUG
+  	vim_free(((nfa_regprog_T *)prog)->pattern);
+- #endif
+  	vim_free(prog);
+      }
+  }
+--- 7126,7132 ----
+*** ../vim-7.4.496/src/testdir/Make_dos.mak	2014-10-21 20:57:11.534295006 +0200
+--- src/testdir/Make_dos.mak	2014-11-05 14:14:56.536775091 +0100
+***************
+*** 87,92 ****
+--- 87,93 ----
+  	-if exist Xfind rd /s /q Xfind
+  	-if exist viminfo del viminfo
+  	-del test.log
++ 	-if exists benchmark.out del benchmark.out
+  
+  .in.out:
+  	-if exist $*.failed del $*.failed
+***************
+*** 103,105 ****
+--- 104,114 ----
+  
+  nolog:
+  	-del test.log
++ 
++ benchmark:
++ 	bench_re_freeze.out
++ 
++ bench_re_freeze.out: bench_re_freeze.vim
++ 	-if exist benchmark.out del benchmark.out
++ 	$(VIMPROG) -u dos.vim -U NONE --noplugin $*.in
++ 	@IF EXIST benchmark.out ( type benchmark.out )
+*** ../vim-7.4.496/src/testdir/Make_ming.mak	2014-10-21 20:57:11.534295006 +0200
+--- src/testdir/Make_ming.mak	2014-11-05 14:15:09.608774776 +0100
+***************
+*** 12,22 ****
+--- 12,24 ----
+  DEL = rm -f
+  MV = mv
+  CP = cp
++ CAT = cat
+  DIRSLASH = /
+  else
+  DEL = del
+  MV = rename
+  CP = copy
++ CAT = type
+  DIRSLASH = \\
+  endif
+  
+***************
+*** 72,77 ****
+--- 74,81 ----
+  
+  SCRIPTS_GUI = test16.out
+  
++ SCRIPTS_BENCH = bench_re_freeze.out
++ 
+  .SUFFIXES: .in .out
+  
+  vimall:	fixff $(SCRIPTS16) $(SCRIPTS) $(SCRIPTS_GUI) $(SCRIPTS32)
+***************
+*** 80,85 ****
+--- 84,91 ----
+  nongui:	fixff $(SCRIPTS16) $(SCRIPTS)
+  	echo ALL DONE
+  
++ benchmark: $(SCRIPTS_BENCH)
++ 
+  small:
+  	echo ALL DONE
+  
+***************
+*** 114,116 ****
+--- 120,127 ----
+  	-$(DEL) X*
+  	-$(DEL) test.ok
+  	-$(DEL) viminfo
++ 
++ bench_re_freeze.out: bench_re_freeze.vim
++ 	-$(DEL) benchmark.out
++ 	$(VIMPROG) -u dos.vim -U NONE --noplugin $*.in
++ 	$(CAT) benchmark.out
+*** ../vim-7.4.496/src/testdir/Make_os2.mak	2014-10-21 20:57:11.538295006 +0200
+--- src/testdir/Make_os2.mak	2014-11-05 12:57:59.616886342 +0100
+***************
+*** 50,55 ****
+--- 50,57 ----
+  		test_signs.out \
+  		test_utf8.out
+  
++ SCRIPTS_BENCH = bench_re_freeze.out
++ 
+  .SUFFIXES: .in .out
+  
+  all:	/tmp $(SCRIPTS)
+***************
+*** 57,62 ****
+--- 59,66 ----
+  
+  $(SCRIPTS): $(VIMPROG)
+  
++ benchmark: $(SCRIPTS_BENCH)
++ 
+  clean:
+  	-rm -rf *.out Xdotest test.ok tiny.vim small.vim mbyte.vim viminfo
+  
+***************
+*** 75,77 ****
+--- 79,88 ----
+  # Create a directory for temp files
+  /tmp:
+  	-mkdir /tmp
++ 
++ bench_re_freeze.out: bench_re_freeze.vim
++ 	-del $*.failed test.ok benchmark.out
++ 	copy $*.ok test.ok
++ 	$(VIMPROG) -u os2.vim --noplugin -s dotest.in $*.in
++ 	type benchmark.out
++ 
+*** ../vim-7.4.496/src/testdir/Makefile	2014-10-21 20:57:11.538295006 +0200
+--- src/testdir/Makefile	2014-11-05 14:15:13.320774687 +0100
+***************
+*** 48,59 ****
+--- 48,63 ----
+  
+  SCRIPTS_GUI = test16.out
+  
++ SCRIPTS_BENCH = bench_re_freeze.out
++ 
+  .SUFFIXES: .in .out
+  
+  nongui:	nolog $(SCRIPTS) report
+  
+  gui:	nolog $(SCRIPTS) $(SCRIPTS_GUI) report
+  
++ benchmark: $(SCRIPTS_BENCH)
++ 
+  report:
+  	@echo
+  	@echo 'Test results:'
+***************
+*** 65,71 ****
+  $(SCRIPTS) $(SCRIPTS_GUI): $(VIMPROG)
+  
+  RM_ON_RUN = test.out X* viminfo
+! RM_ON_START = tiny.vim small.vim mbyte.vim mzscheme.vim lua.vim test.ok
+  RUN_VIM = VIMRUNTIME=$(SCRIPTSOURCE); export VIMRUNTIME; $(VALGRIND) $(VIMPROG) -u unix.vim -U NONE --noplugin -s dotest.in
+  
+  clean:
+--- 69,75 ----
+  $(SCRIPTS) $(SCRIPTS_GUI): $(VIMPROG)
+  
+  RM_ON_RUN = test.out X* viminfo
+! RM_ON_START = tiny.vim small.vim mbyte.vim mzscheme.vim lua.vim test.ok benchmark.out
+  RUN_VIM = VIMRUNTIME=$(SCRIPTSOURCE); export VIMRUNTIME; $(VALGRIND) $(VIMPROG) -u unix.vim -U NONE --noplugin -s dotest.in
+  
+  clean:
+***************
+*** 120,124 ****
+--- 124,137 ----
+  
+  test60.out: test60.vim
+  
++ bench_re_freeze.out: bench_re_freeze.vim
++ 	-rm -rf benchmark.out $(RM_ON_RUN)
++ 	# Sleep a moment to avoid that the xterm title is messed up.
++ 	# 200 msec is sufficient, but only modern sleep supports a fraction of
++ 	# a second, fall back to a second if it fails.
++ 	@-/bin/sh -c "sleep .2 > /dev/null 2>&1 || sleep 1"
++ 	-$(RUN_VIM) $*.in
++ 	@/bin/sh -c "if test -f benchmark.out; then cat benchmark.out; fi"
++ 
+  nolog:
+  	-rm -f test.log
+*** ../vim-7.4.496/src/testdir/samples/re.freeze.txt	1970-01-01 01:00:00.000000000 +0100
+--- src/testdir/samples/re.freeze.txt	2014-11-05 11:50:44.176983582 +0100
+***************
+*** 0 ****
+--- 1,6 ----
++ :set re=0 or 2
++ Search for the pattern: /\s\+\%#\@<!$/
++ vim should not freeze.
++ 
++ <td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td><td style="border-bottom windowtext 0.5pt solid; border-left windowtext;" class=abc align=right><font face=arial><font color=#ff0000><b>5</b></font></font></td> 
++ 
+*** ../vim-7.4.496/src/testdir/bench_re_freeze.in	2014-11-05 14:02:46.420792685 +0100
+--- src/testdir/bench_re_freeze.in	2014-11-05 14:24:33.000761201 +0100
+***************
+*** 0 ****
+--- 1,13 ----
++ Test for Benchmarking RE engine
++ 
++ STARTTEST
++ :so small.vim
++ :if !has("reltime") | qa! | endif
++ :set nocp cpo&vim
++ :so bench_re_freeze.vim
++ :call Measure('samples/re.freeze.txt', '\s\+\%#\@<!$', '+5')
++ :/^" Benchmark/,$w! benchmark.out
++ :qa!
++ ENDTEST
++ 
++ " Benchmark_results:
+*** ../vim-7.4.496/src/testdir/bench_re_freeze.vim	2014-11-05 14:02:46.432792684 +0100
+--- src/testdir/bench_re_freeze.vim	2014-11-05 14:09:15.668783305 +0100
+***************
+*** 0 ****
+--- 1,13 ----
++ "Test for benchmarking the RE engine
++ 
++ so small.vim
++ if !has("reltime") | finish | endif
++ func! Measure(file, pattern, arg)
++ 	for re in range(3)
++ 	    let sstart=reltime()
++ 	    let cmd=printf("../vim -u NONE -N --cmd ':set re=%d'".
++ 		\ " -c 'call search(\"%s\", \"\", \"\", 10000)' -c ':q!' %s", re, escape(a:pattern, '\\'), empty(a:arg) ? '' : a:arg)
++ 	    call system(cmd. ' '. a:file)
++ 	    $put =printf('file: %s, re: %d, time: %s', a:file, re, reltimestr(reltime(sstart)))
++ 	endfor
++ endfunc
+*** ../vim-7.4.497/Filelist	2014-11-05 13:53:13.188806497 +0100
+--- Filelist	2014-11-05 14:11:48.208779629 +0100
+***************
+*** 102,107 ****
+--- 102,110 ----
+  		src/testdir/pythonx/topmodule/submodule/subsubmodule/subsubsubmodule.py \
+  		src/testdir/python_after/*.py \
+  		src/testdir/python_before/*.py \
++ 		src/testdir/bench*.in \
++ 		src/testdir/bench*.vim \
++ 		src/testdir/samples.*.txt \
+  		src/proto.h \
+  		src/proto/blowfish.pro \
+  		src/proto/buffer.pro \
+*** ../vim-7.4.496/src/version.c	2014-11-05 13:53:13.188806497 +0100
+--- src/version.c	2014-11-05 14:02:11.728793520 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     497,
+  /**/
+
+-- 
+    With sufficient thrust, pigs fly just fine.
+                   -- RFC 1925
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.498 b/SOURCES/7.4.498
new file mode 100644
index 0000000..bd74d77
--- /dev/null
+++ b/SOURCES/7.4.498
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.498
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.498 (after 7.4.497)
+Problem:    Typo in DOS makefile.
+Solution:   Change exists to exist. (Ken Takata)
+Files:	    src/testdir/Make_dos.mak
+
+
+*** ../vim-7.4.497/src/testdir/Make_dos.mak	2014-11-05 14:26:30.764758363 +0100
+--- src/testdir/Make_dos.mak	2014-11-05 15:44:09.476646105 +0100
+***************
+*** 87,93 ****
+  	-if exist Xfind rd /s /q Xfind
+  	-if exist viminfo del viminfo
+  	-del test.log
+! 	-if exists benchmark.out del benchmark.out
+  
+  .in.out:
+  	-if exist $*.failed del $*.failed
+--- 87,93 ----
+  	-if exist Xfind rd /s /q Xfind
+  	-if exist viminfo del viminfo
+  	-del test.log
+! 	-if exist benchmark.out del benchmark.out
+  
+  .in.out:
+  	-if exist $*.failed del $*.failed
+*** ../vim-7.4.497/src/version.c	2014-11-05 14:26:30.768758363 +0100
+--- src/version.c	2014-11-05 15:44:54.832645012 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     498,
+  /**/
+
+-- 
+BLACK KNIGHT:  I move for no man.
+ARTHUR:        So be it!
+    [hah] [parry thrust]
+    [ARTHUR chops the BLACK KNIGHT's left arm off]
+ARTHUR:        Now stand aside, worthy adversary.
+BLACK KNIGHT:  'Tis but a scratch.
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.499 b/SOURCES/7.4.499
new file mode 100644
index 0000000..74a47ac
--- /dev/null
+++ b/SOURCES/7.4.499
@@ -0,0 +1,76 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.499
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.499
+Problem:    substitute() can be slow with long strings.
+Solution:   Store a pointer to the end, instead of calling strlen() every
+	    time. (Ozaki Kiichi)
+Files:	    src/eval.c
+
+
+*** ../vim-7.4.498/src/eval.c	2014-10-31 15:45:49.171053328 +0100
+--- src/eval.c	2014-11-05 15:49:49.040637923 +0100
+***************
+*** 25076,25081 ****
+--- 25076,25082 ----
+      int		i;
+      int		do_all;
+      char_u	*tail;
++     char_u	*end;
+      garray_T	ga;
+      char_u	*ret;
+      char_u	*save_cpo;
+***************
+*** 25094,25099 ****
+--- 25095,25101 ----
+      if (regmatch.regprog != NULL)
+      {
+  	tail = str;
++ 	end = str + STRLEN(str);
+  	while (vim_regexec_nl(&regmatch, str, (colnr_T)(tail - str)))
+  	{
+  	    /* Skip empty match except for first match. */
+***************
+*** 25120,25126 ****
+  	     * - The text after the match.
+  	     */
+  	    sublen = vim_regsub(&regmatch, sub, tail, FALSE, TRUE, FALSE);
+! 	    if (ga_grow(&ga, (int)(STRLEN(tail) + sublen -
+  			    (regmatch.endp[0] - regmatch.startp[0]))) == FAIL)
+  	    {
+  		ga_clear(&ga);
+--- 25122,25128 ----
+  	     * - The text after the match.
+  	     */
+  	    sublen = vim_regsub(&regmatch, sub, tail, FALSE, TRUE, FALSE);
+! 	    if (ga_grow(&ga, (int)((end - tail) + sublen -
+  			    (regmatch.endp[0] - regmatch.startp[0]))) == FAIL)
+  	    {
+  		ga_clear(&ga);
+*** ../vim-7.4.498/src/version.c	2014-11-05 15:46:06.212643292 +0100
+--- src/version.c	2014-11-05 15:50:52.880636385 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     499,
+  /**/
+
+-- 
+ARTHUR:        A scratch?  Your arm's off!
+BLACK KNIGHT:  No, it isn't.
+ARTHUR:        Well, what's that then?
+BLACK KNIGHT:  I've had worse.
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.500 b/SOURCES/7.4.500
new file mode 100644
index 0000000..0f6089c
--- /dev/null
+++ b/SOURCES/7.4.500
@@ -0,0 +1,78 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.500
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.500
+Problem:    Test 72 still fails once in a while.
+Solution:   Don't set 'fileformat' to unix, reset it. (Ken Takata)
+Files:	    src/testdir/test72.in
+
+
+*** ../vim-7.4.499/src/testdir/test72.in	2014-08-16 17:34:31.186128463 +0200
+--- src/testdir/test72.in	2014-11-05 16:34:30.068573320 +0100
+***************
+*** 8,14 ****
+  :" Test 'undofile': first a simple one-line change.
+  :set nocompatible viminfo+=nviminfo visualbell
+  :set ul=100 undofile nomore
+- :set ff=unix
+  :e! Xtestfile
+  ggdGithis is one line:set ul=100
+  :s/one/ONE/
+--- 8,13 ----
+***************
+*** 83,89 ****
+  :" With encryption, cryptmethod=blowfish
+  :e! Xtestfile
+  rubbish
+! :set undofile cm=blowfish
+  ggdGijan
+  feb
+  mar
+--- 82,88 ----
+  :" With encryption, cryptmethod=blowfish
+  :e! Xtestfile
+  rubbish
+! :set undofile cm=blowfish ff&
+  ggdGijan
+  feb
+  mar
+***************
+*** 109,115 ****
+  :" With encryption, cryptmethod=blowfish2
+  :e! Xtestfile
+  rubbish
+! :set undofile cm=blowfish2
+  ggdGijan
+  feb
+  mar
+--- 108,114 ----
+  :" With encryption, cryptmethod=blowfish2
+  :e! Xtestfile
+  rubbish
+! :set undofile cm=blowfish2 ff&
+  ggdGijan
+  feb
+  mar
+*** ../vim-7.4.499/src/version.c	2014-11-05 16:03:40.588617886 +0100
+--- src/version.c	2014-11-05 16:34:20.368573554 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     500,
+  /**/
+
+-- 
+No letters of the alphabet were harmed in the creation of this message.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.501 b/SOURCES/7.4.501
new file mode 100644
index 0000000..e21745a
--- /dev/null
+++ b/SOURCES/7.4.501
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.501
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.501 (after 7.4.497)
+Problem:    Typo in file pattern.
+Solution:   Insert a slash and remove a dot.
+Files:	    Filelist
+
+
+*** ../vim-7.4.500/Filelist	2014-11-05 14:29:27.708754099 +0100
+--- Filelist	2014-11-05 17:03:41.104531126 +0100
+***************
+*** 104,110 ****
+  		src/testdir/python_before/*.py \
+  		src/testdir/bench*.in \
+  		src/testdir/bench*.vim \
+! 		src/testdir/samples.*.txt \
+  		src/proto.h \
+  		src/proto/blowfish.pro \
+  		src/proto/buffer.pro \
+--- 104,110 ----
+  		src/testdir/python_before/*.py \
+  		src/testdir/bench*.in \
+  		src/testdir/bench*.vim \
+! 		src/testdir/samples/*.txt \
+  		src/proto.h \
+  		src/proto/blowfish.pro \
+  		src/proto/buffer.pro \
+*** ../vim-7.4.500/src/version.c	2014-11-05 16:39:24.712566220 +0100
+--- src/version.c	2014-11-05 17:03:19.828531639 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     501,
+  /**/
+
+-- 
+"It's so simple to be wise.  Just think of something stupid to say
+and then don't say it."        -- Sam Levenson
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.502 b/SOURCES/7.4.502
new file mode 100644
index 0000000..812ef79
--- /dev/null
+++ b/SOURCES/7.4.502
@@ -0,0 +1,191 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.502
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.502
+Problem:    Language mapping also applies to mapped characters.
+Solution:   Add the 'langnoremap' option, when on 'langmap' does not apply to
+	    mapped characters. (Christian Brabandt)
+Files:	    runtime/doc/options.txt, runtime/vimrc_example.vim, src/macros.h,
+	    src/option.c, src/option.h
+
+
+*** ../vim-7.4.501/runtime/doc/options.txt	2014-11-05 14:26:30.760758363 +0100
+--- runtime/doc/options.txt	2014-11-05 17:21:15.676505715 +0100
+***************
+*** 4533,4538 ****
+--- 4534,4543 ----
+  	be able to execute Normal mode commands.
+  	This is the opposite of the 'keymap' option, where characters are
+  	mapped in Insert mode.
++ 	Also consider setting 'langnoremap' to avoid 'langmap' applies to
++ 	characters resulting from a mapping.
++ 	This option cannot be set from a |modeline| or in the |sandbox|, for
++ 	security reasons.
+  
+  	Example (for Greek, in UTF-8):				*greek*  >
+  	    :set langmap=ΑA,ΒB,ΨC,ΔD,ΕE,ΦF,ΓG,ΗH,ΙI,ΞJ,ΚK,ΛL,ΜM,ΝN,ΟO,ΠP,QQ,ΡR,ΣS,ΤT,ΘU,ΩV,WW,ΧX,ΥY,ΖZ,αa,βb,ψc,δd,εe,φf,γg,ηh,ιi,ξj,κk,λl,μm,νn,οo,πp,qq,ρr,σs,τt,θu,ωv,ςw,χx,υy,ζz
+***************
+*** 4586,4591 ****
+--- 4591,4608 ----
+  		:source $VIMRUNTIME/menu.vim
+  <	Warning: This deletes all menus that you defined yourself!
+  
++ 					*'langnoremap'* *'lnr'*
++ 'langnoremap' 'lnr'	boolean (default off)
++ 			global
++ 			{not in Vi}
++ 			{only available when compiled with the |+langmap|
++ 			feature}
++ 	When on, setting 'langmap' does not apply to characters resulting from
++ 	a mapping.  This basically means, if you noticed that setting
++ 	'langmap' disables some of your mappings, try setting this option.
++ 	This option defaults to off for backwards compatibility.  Set it on if
++ 	that works for you to avoid mappings to break.
++ 
+  					*'laststatus'* *'ls'*
+  'laststatus' 'ls'	number	(default 1)
+  			global
+*** ../vim-7.4.501/runtime/vimrc_example.vim	2014-02-05 22:01:56.686546587 +0100
+--- runtime/vimrc_example.vim	2014-11-05 17:23:26.808502555 +0100
+***************
+*** 1,7 ****
+  " An example for a vimrc file.
+  "
+  " Maintainer:	Bram Moolenaar <Bram@vim.org>
+! " Last change:	2014 Feb 05
+  "
+  " To use it, copy it to
+  "     for Unix and OS/2:  ~/.vimrc
+--- 1,7 ----
+  " An example for a vimrc file.
+  "
+  " Maintainer:	Bram Moolenaar <Bram@vim.org>
+! " Last change:	2014 Nov 05
+  "
+  " To use it, copy it to
+  "     for Unix and OS/2:  ~/.vimrc
+***************
+*** 95,97 ****
+--- 95,104 ----
+    command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis
+  		  \ | wincmd p | diffthis
+  endif
++ 
++ if has('langmap') && exists('+langnoremap')
++   " Prevent that the langmap option applies to characters that result from a
++   " mapping.  If unset (default), this may break plugins (but it's backward
++   " compatible).
++   set langnoremap
++ endif
+*** ../vim-7.4.501/src/macros.h	2014-05-13 20:19:53.569808877 +0200
+--- src/macros.h	2014-11-05 17:26:42.172497848 +0100
+***************
+*** 128,140 ****
+   * Adjust chars in a language according to 'langmap' option.
+   * NOTE that there is no noticeable overhead if 'langmap' is not set.
+   * When set the overhead for characters < 256 is small.
+!  * Don't apply 'langmap' if the character comes from the Stuff buffer.
+   * The do-while is just to ignore a ';' after the macro.
+   */
+  # ifdef FEAT_MBYTE
+  #  define LANGMAP_ADJUST(c, condition) \
+      do { \
+! 	if (*p_langmap && (condition) && !KeyStuffed && (c) >= 0) \
+  	{ \
+  	    if ((c) < 256) \
+  		c = langmap_mapchar[c]; \
+--- 128,145 ----
+   * Adjust chars in a language according to 'langmap' option.
+   * NOTE that there is no noticeable overhead if 'langmap' is not set.
+   * When set the overhead for characters < 256 is small.
+!  * Don't apply 'langmap' if the character comes from the Stuff buffer or from
+!  * a mapping and the langnoremap option was set.
+   * The do-while is just to ignore a ';' after the macro.
+   */
+  # ifdef FEAT_MBYTE
+  #  define LANGMAP_ADJUST(c, condition) \
+      do { \
+! 	if (*p_langmap \
+! 		&& (condition) \
+! 		&& (!p_lnr || (p_lnr && typebuf_maplen() == 0)) \
+! 		&& !KeyStuffed \
+! 		&& (c) >= 0) \
+  	{ \
+  	    if ((c) < 256) \
+  		c = langmap_mapchar[c]; \
+***************
+*** 145,151 ****
+  # else
+  #  define LANGMAP_ADJUST(c, condition) \
+      do { \
+! 	if (*p_langmap && (condition) && !KeyStuffed && (c) >= 0 && (c) < 256) \
+  	    c = langmap_mapchar[c]; \
+      } while (0)
+  # endif
+--- 150,160 ----
+  # else
+  #  define LANGMAP_ADJUST(c, condition) \
+      do { \
+! 	if (*p_langmap \
+! 		&& (condition) \
+! 		&& (!p_lnr || (p_lnr && typebuf_maplen() == 0)) \
+! 		&& !KeyStuffed \
+! 		&& (c) >= 0 && (c) < 256) \
+  	    c = langmap_mapchar[c]; \
+      } while (0)
+  # endif
+*** ../vim-7.4.501/src/option.c	2014-09-29 17:15:09.963945227 +0200
+--- src/option.c	2014-11-05 17:17:44.208510810 +0100
+***************
+*** 1691,1696 ****
+--- 1691,1703 ----
+  			    (char_u *)NULL, PV_NONE,
+  #endif
+  			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
++     {"langnoremap",  "lnr",   P_BOOL|P_VI_DEF,
++ #ifdef FEAT_LANGMAP
++ 			    (char_u *)&p_lnr, PV_NONE,
++ #else
++ 			    (char_u *)NULL, PV_NONE,
++ #endif
++ 			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+      {"laststatus",  "ls",   P_NUM|P_VI_DEF|P_RALL,
+  #ifdef FEAT_WINDOWS
+  			    (char_u *)&p_ls, PV_NONE,
+*** ../vim-7.4.501/src/option.h	2014-09-23 15:45:04.870801055 +0200
+--- src/option.h	2014-11-05 17:17:44.212510810 +0100
+***************
+*** 576,581 ****
+--- 576,582 ----
+  EXTERN char_u	*p_km;		/* 'keymodel' */
+  #ifdef FEAT_LANGMAP
+  EXTERN char_u	*p_langmap;	/* 'langmap'*/
++ EXTERN int	p_lnr;		/* 'langnoremap' */
+  #endif
+  #if defined(FEAT_MENU) && defined(FEAT_MULTI_LANG)
+  EXTERN char_u	*p_lm;		/* 'langmenu' */
+*** ../vim-7.4.501/src/version.c	2014-11-05 17:04:10.516530418 +0100
+--- src/version.c	2014-11-05 17:15:31.820514001 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     502,
+  /**/
+
+-- 
+MARTHA'S WAY: Don't throw out all that leftover wine. Freeze into ice cubes
+              for future use in casseroles and sauces.
+MY WAY:       What leftover wine?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.503 b/SOURCES/7.4.503
new file mode 100644
index 0000000..9cad01c
--- /dev/null
+++ b/SOURCES/7.4.503
@@ -0,0 +1,193 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.503
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.503
+Problem:    Cannot append a list of lines to a file.
+Solution:   Add the append option to writefile(). (Yasuhiro Matsumoto)
+Files:	    runtime/doc/eval.txt, src/Makefile, src/eval.c,
+	    src/testdir/test_writefile.in, src/testdir/test_writefile.ok
+
+
+*** ../vim-7.4.502/runtime/doc/eval.txt	2014-09-09 16:13:05.040531695 +0200
+--- runtime/doc/eval.txt	2014-11-05 17:57:01.592454006 +0100
+***************
+*** 2040,2046 ****
+  winrestview( {dict})		none	restore view of current window
+  winsaveview()			Dict	save view of current window
+  winwidth( {nr})			Number	width of window {nr}
+! writefile( {list}, {fname} [, {binary}])
+  				Number	write list of lines to file {fname}
+  xor( {expr}, {expr})		Number  bitwise XOR
+  
+--- 2041,2047 ----
+  winrestview( {dict})		none	restore view of current window
+  winsaveview()			Dict	save view of current window
+  winwidth( {nr})			Number	width of window {nr}
+! writefile( {list}, {fname} [, {flags}])
+  				Number	write list of lines to file {fname}
+  xor( {expr}, {expr})		Number  bitwise XOR
+  
+***************
+*** 6532,6545 ****
+    :endif
+  <
+  							*writefile()*
+! writefile({list}, {fname} [, {binary}])
+  		Write |List| {list} to file {fname}.  Each list item is
+  		separated with a NL.  Each list item must be a String or
+  		Number.
+! 		When {binary} is equal to "b" binary mode is used: There will
+  		not be a NL after the last list item.  An empty item at the
+  		end does cause the last line in the file to end in a NL.
+! 		All NL characters are replaced with a NUL character.
+  		Inserting CR characters needs to be done before passing {list}
+  		to writefile().
+  		An existing file is overwritten, if possible.
+--- 6555,6574 ----
+    :endif
+  <
+  							*writefile()*
+! writefile({list}, {fname} [, {flags}])
+  		Write |List| {list} to file {fname}.  Each list item is
+  		separated with a NL.  Each list item must be a String or
+  		Number.
+! 		When {flags} contains "b" then binary mode is used: There will
+  		not be a NL after the last list item.  An empty item at the
+  		end does cause the last line in the file to end in a NL.
+! 
+! 		When {flags} contains "a" then append mode is used, lines are
+! 		append to the file: >
+! 			:call writefile(["foo"], "event.log", "a")
+! 			:call writefile(["bar"], "event.log", "a")
+! >
+! <		All NL characters are replaced with a NUL character.
+  		Inserting CR characters needs to be done before passing {list}
+  		to writefile().
+  		An existing file is overwritten, if possible.
+*** ../vim-7.4.502/src/Makefile	2014-11-05 14:26:30.760758363 +0100
+--- src/Makefile	2014-11-05 17:54:36.864457494 +0100
+***************
+*** 1899,1906 ****
+--- 1899,1910 ----
+  	test_insertcount \
+  	test_listlbr \
+  	test_listlbr_utf8 \
++ 	test_mapping \
+  	test_options \
+  	test_qf_title \
++ 	test_signs \
++ 	test_utf8 \
++ 	test_writefile \
+  	test10 test11 test12 test13 test14 test15 test16 test17 test18 test19 \
+  	test20 test21 test22 test23 test24 test25 test26 test27 test28 test29 \
+  	test30 test31 test32 test33 test34 test35 test36 test37 test38 test39 \
+*** ../vim-7.4.502/src/eval.c	2014-11-05 16:03:40.588617886 +0100
+--- src/eval.c	2014-11-05 17:59:15.388450782 +0100
+***************
+*** 19689,19694 ****
+--- 19689,19695 ----
+      typval_T	*rettv;
+  {
+      int		binary = FALSE;
++     int		append = FALSE;
+      char_u	*fname;
+      FILE	*fd;
+      int		ret = 0;
+***************
+*** 19704,19717 ****
+      if (argvars[0].vval.v_list == NULL)
+  	return;
+  
+!     if (argvars[2].v_type != VAR_UNKNOWN
+! 			      && STRCMP(get_tv_string(&argvars[2]), "b") == 0)
+! 	binary = TRUE;
+  
+      /* Always open the file in binary mode, library functions have a mind of
+       * their own about CR-LF conversion. */
+      fname = get_tv_string(&argvars[1]);
+!     if (*fname == NUL || (fd = mch_fopen((char *)fname, WRITEBIN)) == NULL)
+      {
+  	EMSG2(_(e_notcreate), *fname == NUL ? (char_u *)_("<empty>") : fname);
+  	ret = -1;
+--- 19705,19723 ----
+      if (argvars[0].vval.v_list == NULL)
+  	return;
+  
+!     if (argvars[2].v_type != VAR_UNKNOWN)
+!     {
+! 	if (vim_strchr(get_tv_string(&argvars[2]), 'b') != NULL)
+! 	    binary = TRUE;
+! 	if (vim_strchr(get_tv_string(&argvars[2]), 'a') != NULL)
+! 	    append = TRUE;
+!     }
+  
+      /* Always open the file in binary mode, library functions have a mind of
+       * their own about CR-LF conversion. */
+      fname = get_tv_string(&argvars[1]);
+!     if (*fname == NUL || (fd = mch_fopen((char *)fname,
+! 				      append ? APPENDBIN : WRITEBIN)) == NULL)
+      {
+  	EMSG2(_(e_notcreate), *fname == NUL ? (char_u *)_("<empty>") : fname);
+  	ret = -1;
+*** ../vim-7.4.502/src/testdir/test_writefile.in	2014-11-05 18:04:54.912442601 +0100
+--- src/testdir/test_writefile.in	2014-11-05 18:01:07.408448083 +0100
+***************
+*** 0 ****
+--- 1,18 ----
++ Tests for writefile()
++ 
++ STARTTEST
++ :source small.vim
++ :%delete _
++ :let f = tempname()
++ :call writefile(["over","written"], f, "b")
++ :call writefile(["hello","world"], f, "b")
++ :call writefile(["!", "good"], f, "a")
++ :call writefile(["morning"], f, "ab")
++ :call writefile(["", "vimmers"], f, "ab")
++ :bwipeout!
++ :$put =readfile(f)
++ :1 delete _
++ :w! test.out
++ :qa!
++ ENDTEST
++ 
+*** ../vim-7.4.502/src/testdir/test_writefile.ok	2014-11-05 18:04:54.916442601 +0100
+--- src/testdir/test_writefile.ok	2014-11-05 17:53:19.776459351 +0100
+***************
+*** 0 ****
+--- 1,5 ----
++ hello
++ world!
++ good
++ morning
++ vimmers
+*** ../vim-7.4.502/src/version.c	2014-11-05 17:44:47.676471691 +0100
+--- src/version.c	2014-11-05 17:55:08.508456731 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     503,
+  /**/
+
+-- 
+BLACK KNIGHT:  Come on you pansy!
+    [hah] [parry thrust]
+    [ARTHUR chops the BLACK KNIGHT's right arm off]
+ARTHUR:        Victory is mine!  [kneeling]
+               We thank thee Lord, that in thy merc-
+    [Black Knight kicks Arthur in the head while he is praying]
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.504 b/SOURCES/7.4.504
new file mode 100644
index 0000000..536853e
--- /dev/null
+++ b/SOURCES/7.4.504
@@ -0,0 +1,83 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.504
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.504
+Problem:    Restriction of the MS-Windows installer that the path must end in
+	    "Vim" prevents installing more than one version.
+Solution:   Remove the restriction. (Tim Lebedkov)
+Files:	    nsis/gvim.nsi
+
+
+*** ../vim-7.4.503/nsis/gvim.nsi	2013-08-10 13:25:08.000000000 +0200
+--- nsis/gvim.nsi	2014-11-05 18:17:11.096424861 +0100
+***************
+*** 1,6 ****
+  # NSIS file to create a self-installing exe for Vim.
+  # It requires NSIS version 2.0 or later.
+! # Last Change:	2010 Jul 30
+  
+  # WARNING: if you make changes to this script, look out for $0 to be valid,
+  # because uninstall deletes most files in $0.
+--- 1,6 ----
+  # NSIS file to create a self-installing exe for Vim.
+  # It requires NSIS version 2.0 or later.
+! # Last Change:	2014 Nov 5
+  
+  # WARNING: if you make changes to this script, look out for $0 to be valid,
+  # because uninstall deletes most files in $0.
+***************
+*** 38,44 ****
+  RequestExecutionLevel highest
+  
+  ComponentText "This will install Vim ${VER_MAJOR}.${VER_MINOR} on your computer."
+! DirText "Choose a directory to install Vim (must end in 'vim')"
+  Icon icons\vim_16c.ico
+  # NSIS2 uses a different strategy with six different images in a strip...
+  #EnabledBitmap icons\enabled.bmp
+--- 38,44 ----
+  RequestExecutionLevel highest
+  
+  ComponentText "This will install Vim ${VER_MAJOR}.${VER_MINOR} on your computer."
+! DirText "Choose a directory to install Vim (should contain 'vim')"
+  Icon icons\vim_16c.ico
+  # NSIS2 uses a different strategy with six different images in a strip...
+  #EnabledBitmap icons\enabled.bmp
+***************
+*** 135,145 ****
+  # We only accept the directory if it ends in "vim".  Using .onVerifyInstDir has
+  # the disadvantage that the browse dialog is difficult to use.
+  Function CheckInstallDir
+-   StrCpy $0 $INSTDIR 3 -3
+-   StrCmp $0 "vim" PathGood
+-     MessageBox MB_OK "The path must end in 'vim'."
+-     Abort
+-   PathGood:
+  FunctionEnd
+  
+  Function .onInstSuccess
+--- 135,140 ----
+*** ../vim-7.4.503/src/version.c	2014-11-05 18:05:48.660441306 +0100
+--- src/version.c	2014-11-05 18:14:51.076428235 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     504,
+  /**/
+
+-- 
+-rwxr-xr-x  1 root          24 Oct 29  1929 /bin/ed
+-rwxr-xr-t  4 root      131720 Jan  1  1970 /usr/ucb/vi
+-rwxr-xr-x  1 root  5.89824e37 Oct 22  1990 /usr/bin/emacs
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.505 b/SOURCES/7.4.505
new file mode 100644
index 0000000..54f1558
--- /dev/null
+++ b/SOURCES/7.4.505
@@ -0,0 +1,68 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.505
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.505
+Problem:    On MS-Windows when 'encoding' is a double-byte encoding a file
+	    name longer than MAX_PATH bytes but shorter than that in
+	    characters causes problems.
+Solution:   Fail on file names longer than MAX_PATH bytes. (Ken Takata)
+Files:	    src/os_win32.c
+
+
+*** ../vim-7.4.504/src/os_win32.c	2014-10-16 16:16:33.970230873 +0200
+--- src/os_win32.c	2014-11-05 18:32:54.624402126 +0100
+***************
+*** 6139,6144 ****
+--- 6139,6151 ----
+      }
+  # endif
+  
++     /* open() can open a file which name is longer than _MAX_PATH bytes
++      * and shorter than _MAX_PATH characters successfully, but sometimes it
++      * causes unexpected error in another part. We make it an error explicitly
++      * here. */
++     if (strlen(name) >= _MAX_PATH)
++ 	return -1;
++ 
+      return open(name, flags, mode);
+  }
+  
+***************
+*** 6188,6193 ****
+--- 6195,6207 ----
+  	 * the _wfopen() fails for missing wide functions. */
+      }
+  
++     /* fopen() can open a file which name is longer than _MAX_PATH bytes
++      * and shorter than _MAX_PATH characters successfully, but sometimes it
++      * causes unexpected error in another part. We make it an error explicitly
++      * here. */
++     if (strlen(name) >= _MAX_PATH)
++ 	return NULL;
++ 
+      return fopen(name, mode);
+  }
+  #endif
+*** ../vim-7.4.504/src/version.c	2014-11-05 18:18:13.156423366 +0100
+--- src/version.c	2014-11-05 18:33:06.684401835 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     505,
+  /**/
+
+-- 
+5 out of 4 people have trouble with fractions.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.506 b/SOURCES/7.4.506
new file mode 100644
index 0000000..d55aaba
--- /dev/null
+++ b/SOURCES/7.4.506
@@ -0,0 +1,51 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.506
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.506
+Problem:    MS-Windows: Cannot open a file with 259 characters.
+Solution:   Fix off-by-one error. (Ken Takata)
+Files:	    src/os_mswin.c
+
+
+*** ../vim-7.4.505/src/os_mswin.c	2014-10-16 20:35:32.146264814 +0200
+--- src/os_mswin.c	2014-11-05 19:32:59.748315256 +0100
+***************
+*** 411,417 ****
+  	     * - convert the result from UCS2 to 'encoding'.
+  	     */
+  	    wname = enc_to_utf16(fname, NULL);
+! 	    if (wname != NULL && _wfullpath(wbuf, wname, MAX_PATH - 1) != NULL)
+  	    {
+  		cname = utf16_to_enc((short_u *)wbuf, NULL);
+  		if (cname != NULL)
+--- 411,417 ----
+  	     * - convert the result from UCS2 to 'encoding'.
+  	     */
+  	    wname = enc_to_utf16(fname, NULL);
+! 	    if (wname != NULL && _wfullpath(wbuf, wname, MAX_PATH) != NULL)
+  	    {
+  		cname = utf16_to_enc((short_u *)wbuf, NULL);
+  		if (cname != NULL)
+*** ../vim-7.4.505/src/version.c	2014-11-05 18:35:59.104397681 +0100
+--- src/version.c	2014-11-05 19:27:04.520323815 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     506,
+  /**/
+
+-- 
+Trees moving back and forth is what makes the wind blow.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.507 b/SOURCES/7.4.507
new file mode 100644
index 0000000..408dbdf
--- /dev/null
+++ b/SOURCES/7.4.507
@@ -0,0 +1,68 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.507
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.507 (after 7.4.496)
+Problem:    Building with MingW and Perl may fail.
+Solution:   Remove quotes. (Ken Takata)
+Files:	    src/Make_cyg_ming.mak
+
+
+*** ../vim-7.4.506/src/Make_cyg_ming.mak	2014-11-05 13:53:13.188806497 +0100
+--- src/Make_cyg_ming.mak	2014-11-06 09:59:51.523061961 +0100
+***************
+*** 132,138 ****
+  endif
+  XSUBPP_EXISTS=$(shell $(PERLEXE) -e "print 1 unless -e '$(XSUBPPTRY)'")
+  ifeq "$(XSUBPP_EXISTS)" ""
+! XSUBPP=$(PERLEXE) "$(XSUBPPTRY)"
+  else
+  XSUBPP=xsubpp
+  endif
+--- 132,138 ----
+  endif
+  XSUBPP_EXISTS=$(shell $(PERLEXE) -e "print 1 unless -e '$(XSUBPPTRY)'")
+  ifeq "$(XSUBPP_EXISTS)" ""
+! XSUBPP=$(PERLEXE) $(XSUBPPTRY)
+  else
+  XSUBPP=xsubpp
+  endif
+***************
+*** 809,815 ****
+  
+  if_perl.c: if_perl.xs typemap
+  	$(XSUBPP) -prototypes -typemap \
+! 	     "$(PERLTYPEMAP)" if_perl.xs > $@
+  
+  $(OUTDIR)/netbeans.o:	netbeans.c $(INCL) $(NBDEBUG_INCL) $(NBDEBUG_SRC)
+  	$(CC) -c $(CFLAGS) netbeans.c -o $(OUTDIR)/netbeans.o
+--- 809,815 ----
+  
+  if_perl.c: if_perl.xs typemap
+  	$(XSUBPP) -prototypes -typemap \
+! 	     $(PERLTYPEMAP) if_perl.xs > $@
+  
+  $(OUTDIR)/netbeans.o:	netbeans.c $(INCL) $(NBDEBUG_INCL) $(NBDEBUG_SRC)
+  	$(CC) -c $(CFLAGS) netbeans.c -o $(OUTDIR)/netbeans.o
+*** ../vim-7.4.506/src/version.c	2014-11-05 19:33:19.552314778 +0100
+--- src/version.c	2014-11-06 10:02:45.647057766 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     507,
+  /**/
+
+-- 
+Advice to worms:  Sleep late.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.508 b/SOURCES/7.4.508
new file mode 100644
index 0000000..b587117
--- /dev/null
+++ b/SOURCES/7.4.508
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.508
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.508
+Problem:    When generating ja.sjis.po the header is not correctly adjusted.
+Solution:   Check for the right header string. (Ken Takata)
+Files:	    src/po/sjiscorr.c
+
+
+*** ../vim-7.4.507/src/po/sjiscorr.c	2013-05-19 05:15:15.000000000 +0200
+--- src/po/sjiscorr.c	2014-11-12 13:01:37.574369693 +0100
+***************
+*** 23,31 ****
+  				fputs("charset=cp932", stdout);
+  				p += 12;
+  			}
+! 			else if (strncmp(p, "ja.po - Japanese message file", 29) == 0)
+  			{
+- 				fputs("ja.sjis.po - Japanese message file for Vim (version 6.x)\n", stdout);
+  				fputs("# generated from ja.po, DO NOT EDIT", stdout);
+  				while (p[1] != '\n')
+  					++p;
+--- 23,30 ----
+  				fputs("charset=cp932", stdout);
+  				p += 12;
+  			}
+! 			else if (strncmp(p, "# Original translations", 23) == 0)
+  			{
+  				fputs("# generated from ja.po, DO NOT EDIT", stdout);
+  				while (p[1] != '\n')
+  					++p;
+*** ../vim-7.4.507/src/version.c	2014-11-06 10:02:57.023057491 +0100
+--- src/version.c	2014-11-12 13:04:27.308402708 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     508,
+  /**/
+
+-- 
+TALL KNIGHT:   Firstly.  You must get us another shrubbery!
+OTHER KNIGHTS: More shrubberies!  More shrubberies for the ex-Knights of Ni!
+ARTHUR:        Not another shrubbery -
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.509 b/SOURCES/7.4.509
new file mode 100644
index 0000000..e4ed105
--- /dev/null
+++ b/SOURCES/7.4.509
@@ -0,0 +1,115 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.509
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.509
+Problem:    Users are not aware their encryption is weak.
+Solution:   Give a warning when prompting for the key.
+Files:	    src/crypt.c, src/ex_docmd.c, src/fileio.c, src/main.c,
+	    src/proto/crypt.pro
+
+
+*** ../vim-7.4.508/src/crypt.c	2014-08-13 22:05:49.032892299 +0200
+--- src/crypt.c	2014-11-12 15:10:22.359161977 +0100
+***************
+*** 504,509 ****
+--- 504,529 ----
+  }
+  
+  /*
++  * Check the crypt method and give a warning if it's outdated.
++  */
++     void
++ crypt_check_method(method)
++     int method;
++ {
++     if (method < CRYPT_M_BF2)
++     {
++ 	msg_scroll = TRUE;
++ 	MSG(_("Warning: Using a weak encryption method; see :help 'cm'"));
++     }
++ }
++ 
++     void
++ crypt_check_current_method()
++ {
++     crypt_check_method(crypt_get_method_nr(curbuf));
++ }
++ 
++ /*
+   * Ask the user for a crypt key.
+   * When "store" is TRUE, the new key is stored in the 'key' option, and the
+   * 'key' option value is returned: Don't free it.
+*** ../vim-7.4.508/src/ex_docmd.c	2014-11-05 09:53:19.989153321 +0100
+--- src/ex_docmd.c	2014-11-12 14:53:09.621921631 +0100
+***************
+*** 11524,11529 ****
+--- 11524,11530 ----
+  ex_X(eap)
+      exarg_T	*eap UNUSED;
+  {
++     crypt_check_current_method();
+      (void)crypt_get_key(TRUE, TRUE);
+  }
+  #endif
+*** ../vim-7.4.508/src/fileio.c	2014-10-31 19:51:33.010698056 +0100
+--- src/fileio.c	2014-11-12 15:10:44.986925300 +0100
+***************
+*** 2958,2963 ****
+--- 2958,2964 ----
+  		 * Happens when retrying to detect encoding. */
+  		smsg((char_u *)_(need_key_msg), fname);
+  		msg_scroll = TRUE;
++ 		crypt_check_method(method);
+  		cryptkey = crypt_get_key(newfile, FALSE);
+  		*did_ask = TRUE;
+  
+*** ../vim-7.4.508/src/main.c	2014-09-19 13:46:49.550399801 +0200
+--- src/main.c	2014-11-12 14:52:47.866169622 +0100
+***************
+*** 854,859 ****
+--- 854,860 ----
+  #ifdef FEAT_CRYPT
+      if (params.ask_for_key)
+      {
++ 	crypt_check_current_method();
+  	(void)crypt_get_key(TRUE, TRUE);
+  	TIME_MSG("getting crypt key");
+      }
+*** ../vim-7.4.508/src/proto/crypt.pro	2014-08-10 13:34:59.060785459 +0200
+--- src/proto/crypt.pro	2014-11-12 15:06:51.349363319 +0100
+***************
+*** 19,24 ****
+--- 19,26 ----
+  void crypt_encode_inplace __ARGS((cryptstate_T *state, char_u *buf, size_t len));
+  void crypt_decode_inplace __ARGS((cryptstate_T *state, char_u *buf, size_t len));
+  void crypt_free_key __ARGS((char_u *key));
++ void crypt_check_method __ARGS((int method));
++ void crypt_check_current_method __ARGS((void));
+  char_u *crypt_get_key __ARGS((int store, int twice));
+  void crypt_append_msg __ARGS((buf_T *buf));
+  /* vim: set ft=c : */
+*** ../vim-7.4.508/src/version.c	2014-11-12 13:07:48.774069557 +0100
+--- src/version.c	2014-11-12 14:45:09.979391243 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     509,
+  /**/
+
+-- 
+Q: How do you tell the difference between a female cat and a male cat?
+A: You ask it a question and if HE answers, it's a male but, if SHE
+   answers, it's a female.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.510 b/SOURCES/7.4.510
new file mode 100644
index 0000000..e140bba
--- /dev/null
+++ b/SOURCES/7.4.510
@@ -0,0 +1,65 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.510
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.510
+Problem:    "-fwrapv" argument breaks use of cproto.
+Solution:   Remove the alphabetic arguments in a drastic way.
+Files:	    src/Makefile
+
+
+*** ../vim-7.4.509/src/Makefile	2014-11-05 18:05:48.652441306 +0100
+--- src/Makefile	2014-11-12 15:24:56.357941730 +0100
+***************
+*** 1779,1791 ****
+  proto: $(PRO_AUTO) $(PRO_MANUAL)
+  
+  # Filter out arguments that cproto doesn't support.
+! # Don't pass "-pthread" to cproto, it sees it as a list of individual flags.
+! # Don't pass "-fstack-protector" to cproto, for the same reason.
+! # Don't pass "-g" to cproto.
+  # The -E"gcc -E" argument must be separate to avoid problems with shell
+  # quoting.
+  CPROTO = cproto $(PROTO_FLAGS) -DPROTO \
+! 	 `echo '$(LINT_CFLAGS)' | sed -e 's/-pthread//g' -e 's/-fstack-protector//g' -e 's/\ -g\ / /g'`
+  
+  ### Would be nice if this would work for "normal" make.
+  ### Currently it only works for (Free)BSD make.
+--- 1779,1790 ----
+  proto: $(PRO_AUTO) $(PRO_MANUAL)
+  
+  # Filter out arguments that cproto doesn't support.
+! # Don't pass "-pthread", "-fwrapv" and similar arguments to cproto, it sees
+! # them as a list of individual flags.
+  # The -E"gcc -E" argument must be separate to avoid problems with shell
+  # quoting.
+  CPROTO = cproto $(PROTO_FLAGS) -DPROTO \
+! 	 `echo '$(LINT_CFLAGS)' | sed -e 's/ -[a-z-]\+//g'`
+  
+  ### Would be nice if this would work for "normal" make.
+  ### Currently it only works for (Free)BSD make.
+*** ../vim-7.4.509/src/version.c	2014-11-12 15:15:34.983882077 +0100
+--- src/version.c	2014-11-12 15:37:34.401182559 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     510,
+  /**/
+
+-- 
+       [Autumn changed into Winter ... Winter changed into Spring ...  Spring
+       changed back into Autumn and Autumn gave Winter and Spring a miss and
+       went straight on into Summer ...  Until one day ...]
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.511 b/SOURCES/7.4.511
new file mode 100644
index 0000000..547ac63
--- /dev/null
+++ b/SOURCES/7.4.511
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.511
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.511
+Problem:    Generating proto for if_ruby.c uses type not defined elsewhere.
+Solution:   Do not generate a prototype for
+	    rb_gc_writebarrier_unprotect_promoted()
+Files:	    src/if_ruby.c
+
+
+*** ../vim-7.4.510/src/if_ruby.c	2014-03-28 21:58:17.878256914 +0100
+--- src/if_ruby.c	2014-11-12 15:28:07.971812917 +0100
+***************
+*** 418,424 ****
+  #  endif
+  # endif
+  
+! # if defined(USE_RGENGC) && USE_RGENGC
+  void rb_gc_writebarrier_unprotect_promoted_stub(VALUE obj)
+  {
+      return dll_rb_gc_writebarrier_unprotect_promoted(obj);
+--- 418,425 ----
+  #  endif
+  # endif
+  
+!    /* Do not generate a prototype here, VALUE isn't always defined. */
+! # if defined(USE_RGENGC) && USE_RGENGC && !defined(PROTO)
+  void rb_gc_writebarrier_unprotect_promoted_stub(VALUE obj)
+  {
+      return dll_rb_gc_writebarrier_unprotect_promoted(obj);
+*** ../vim-7.4.510/src/version.c	2014-11-12 15:45:16.595789120 +0100
+--- src/version.c	2014-11-12 16:04:18.698532684 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     511,
+  /**/
+
+-- 
+TIM: To the north there lies a cave,  the cave of Caerbannog, wherein, carved
+     in mystic runes, upon the very living rock, the last words of Olfin
+     Bedwere of Rheged make plain the last resting place of the most Holy
+     Grail.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.512 b/SOURCES/7.4.512
new file mode 100644
index 0000000..0dd1945
--- /dev/null
+++ b/SOURCES/7.4.512
@@ -0,0 +1,99 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.512
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.512
+Problem:    Cannot generate prototypes for Win32 files and VMS.
+Solution:   Add typedefs and #ifdef
+Files:	    src/os_win32.c, src/gui_w32.c, src/os_vms.c
+
+
+*** ../vim-7.4.511/src/os_win32.c	2014-11-05 18:35:59.104397681 +0100
+--- src/os_win32.c	2014-11-12 15:33:13.136237810 +0100
+***************
+*** 135,140 ****
+--- 135,142 ----
+  typedef int SE_OBJECT_TYPE;
+  typedef int PSNSECINFO;
+  typedef int PSNSECINFOW;
++ typedef int STARTUPINFO;
++ typedef int PROCESS_INFORMATION;
+  #endif
+  
+  #ifndef FEAT_GUI_W32
+*** ../vim-7.4.511/src/gui_w32.c	2014-10-06 18:10:04.521273516 +0200
+--- src/gui_w32.c	2014-11-12 15:30:44.309980459 +0100
+***************
+*** 29,40 ****
+  # include "gui_dwrite.h"
+  #endif
+  
+! #if defined(FEAT_DIRECTX) || defined(PROTO)
+  static DWriteContext *s_dwc = NULL;
+  static int s_directx_enabled = 0;
+  static int s_directx_load_attempted = 0;
+  # define IS_ENABLE_DIRECTX() (s_directx_enabled && s_dwc != NULL)
+  
+      int
+  directx_enabled(void)
+  {
+--- 29,42 ----
+  # include "gui_dwrite.h"
+  #endif
+  
+! #if defined(FEAT_DIRECTX)
+  static DWriteContext *s_dwc = NULL;
+  static int s_directx_enabled = 0;
+  static int s_directx_load_attempted = 0;
+  # define IS_ENABLE_DIRECTX() (s_directx_enabled && s_dwc != NULL)
++ #endif
+  
++ #if defined(FEAT_DIRECTX) || defined(PROTO)
+      int
+  directx_enabled(void)
+  {
+*** ../vim-7.4.511/src/os_vms.c	2014-04-01 21:00:45.436733663 +0200
+--- src/os_vms.c	2014-11-12 15:34:04.223639992 +0100
+***************
+*** 12,18 ****
+  #include	"vim.h"
+  
+  /* define _generic_64 for use in time functions */
+! #ifndef VAX
+  #   include <gen64def.h>
+  #else
+  /* based on Alpha's gen64def.h; the file is absent on VAX */
+--- 12,18 ----
+  #include	"vim.h"
+  
+  /* define _generic_64 for use in time functions */
+! #if !defined(VAX) && !defined(PROTO)
+  #   include <gen64def.h>
+  #else
+  /* based on Alpha's gen64def.h; the file is absent on VAX */
+*** ../vim-7.4.511/src/version.c	2014-11-12 16:05:01.142042845 +0100
+--- src/version.c	2014-11-12 16:05:52.861446039 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     512,
+  /**/
+
+-- 
+TIM: But follow only if you are men of valour.  For the entrance to this cave
+     is guarded by a monster, a creature so foul and cruel that no man yet has
+     fought with it and lived.  Bones of full fifty men lie strewn about its
+     lair ...
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.513 b/SOURCES/7.4.513
new file mode 100644
index 0000000..aff5d6a
--- /dev/null
+++ b/SOURCES/7.4.513
@@ -0,0 +1,46 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.513
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.513
+Problem:    Crash because reference count is wrong for list returned by
+	    getreg().
+Solution:   Increment the reference count. (Kimmy Lindvall)
+Files:	    src/eval.c
+
+
+*** ../vim-7.4.512/src/eval.c	2014-11-05 18:05:48.656441306 +0100
+--- src/eval.c	2014-11-12 17:07:32.695012604 +0100
+***************
+*** 12008,12013 ****
+--- 12008,12015 ----
+  	rettv->v_type = VAR_LIST;
+  	rettv->vval.v_list = (list_T *)get_reg_contents(regname,
+  				      (arg2 ? GREG_EXPR_SRC : 0) | GREG_LIST);
++ 	if (rettv->vval.v_list != NULL)
++ 	    ++rettv->vval.v_list->lv_refcount;
+      }
+      else
+      {
+*** ../vim-7.4.512/src/version.c	2014-11-12 16:10:44.258085148 +0100
+--- src/version.c	2014-11-12 17:06:37.443703083 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     513,
+  /**/
+
+-- 
+Save the plankton - eat a whale.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.514 b/SOURCES/7.4.514
new file mode 100644
index 0000000..ed81859
--- /dev/null
+++ b/SOURCES/7.4.514
@@ -0,0 +1,46 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.514
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.514 (after 7.4.492)
+Problem:    Memory access error. (Dominique Pelle)
+Solution:   Update tpos. (Christian Brabandt)
+Files:	    src/edit.c
+
+
+*** ../vim-7.4.513/src/edit.c	2014-10-31 19:20:30.782742928 +0100
+--- src/edit.c	2014-11-12 18:53:10.890098796 +0100
+***************
+*** 6918,6923 ****
+--- 6918,6925 ----
+  		curwin->w_cursor = tpos;
+  	    else
+  	    {
++ 		/* reset tpos, could have been invalidated in the loop above */
++ 		tpos = curwin->w_cursor;
+  		tpos.col++;
+  		if (cc != NUL && gchar_pos(&tpos) == NUL)
+  		    ++curwin->w_cursor.col;	/* put cursor back on the NUL */
+*** ../vim-7.4.513/src/version.c	2014-11-12 18:49:12.992752234 +0100
+--- src/version.c	2014-11-12 18:52:50.738323726 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     514,
+  /**/
+
+-- 
+My girlfriend told me I should be more affectionate.
+So I got TWO girlfriends.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.515 b/SOURCES/7.4.515
new file mode 100644
index 0000000..0f57a6a
--- /dev/null
+++ b/SOURCES/7.4.515
@@ -0,0 +1,208 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.515
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.515
+Problem:    In a help buffer the global 'foldmethod' is used.  (Paul Marshall)
+Solution:   Reset 'foldmethod' when starting to edit a help file.  Move the
+	    code to a separate function.
+Files:	    src/ex_cmds.c
+
+
+*** ../vim-7.4.514/src/ex_cmds.c	2014-09-19 22:23:22.398467500 +0200
+--- src/ex_cmds.c	2014-11-12 19:23:48.357576278 +0100
+***************
+*** 34,39 ****
+--- 34,40 ----
+      _RTLENTRYF
+  #endif
+  	help_compare __ARGS((const void *s1, const void *s2));
++ static void prepare_help_buffer __ARGS((void));
+  
+  /*
+   * ":ascii" and "ga".
+***************
+*** 3531,3601 ****
+  	oldbuf = (flags & ECMD_OLDBUF);
+      }
+  
+-     if ((flags & ECMD_SET_HELP) || keep_help_flag)
+-     {
+- 	char_u	*p;
+- 
+- 	curbuf->b_help = TRUE;
+- #ifdef FEAT_QUICKFIX
+- 	set_string_option_direct((char_u *)"buftype", -1,
+- 				     (char_u *)"help", OPT_FREE|OPT_LOCAL, 0);
+- #endif
+- 
+- 	/*
+- 	 * Always set these options after jumping to a help tag, because the
+- 	 * user may have an autocommand that gets in the way.
+- 	 * Accept all ASCII chars for keywords, except ' ', '*', '"', '|', and
+- 	 * latin1 word characters (for translated help files).
+- 	 * Only set it when needed, buf_init_chartab() is some work.
+- 	 */
+- 	p =
+- #ifdef EBCDIC
+- 		(char_u *)"65-255,^*,^|,^\"";
+- #else
+- 		(char_u *)"!-~,^*,^|,^\",192-255";
+- #endif
+- 	if (STRCMP(curbuf->b_p_isk, p) != 0)
+- 	{
+- 	    set_string_option_direct((char_u *)"isk", -1, p,
+- 						       OPT_FREE|OPT_LOCAL, 0);
+- 	    check_buf_options(curbuf);
+- 	    (void)buf_init_chartab(curbuf, FALSE);
+- 	}
+- 
+- 	curbuf->b_p_ts = 8;		/* 'tabstop' is 8 */
+- 	curwin->w_p_list = FALSE;	/* no list mode */
+- 
+- 	curbuf->b_p_ma = FALSE;		/* not modifiable */
+- 	curbuf->b_p_bin = FALSE;	/* reset 'bin' before reading file */
+- 	curwin->w_p_nu = 0;		/* no line numbers */
+- 	curwin->w_p_rnu = 0;		/* no relative line numbers */
+- 	RESET_BINDING(curwin);		/* no scroll or cursor binding */
+- #ifdef FEAT_ARABIC
+- 	curwin->w_p_arab = FALSE;	/* no arabic mode */
+- #endif
+- #ifdef FEAT_RIGHTLEFT
+- 	curwin->w_p_rl  = FALSE;	/* help window is left-to-right */
+- #endif
+- #ifdef FEAT_FOLDING
+- 	curwin->w_p_fen = FALSE;	/* No folding in the help window */
+- #endif
+- #ifdef FEAT_DIFF
+- 	curwin->w_p_diff = FALSE;	/* No 'diff' */
+- #endif
+- #ifdef FEAT_SPELL
+- 	curwin->w_p_spell = FALSE;	/* No spell checking */
+- #endif
+- 
+  #ifdef FEAT_AUTOCMD
+! 	buf = curbuf;
+  #endif
+! 	set_buflisted(FALSE);
+      }
+      else
+      {
+- #ifdef FEAT_AUTOCMD
+- 	buf = curbuf;
+- #endif
+  	/* Don't make a buffer listed if it's a help buffer.  Useful when
+  	 * using CTRL-O to go back to a help file. */
+  	if (!curbuf->b_help)
+--- 3532,3546 ----
+  	oldbuf = (flags & ECMD_OLDBUF);
+      }
+  
+  #ifdef FEAT_AUTOCMD
+!     buf = curbuf;
+  #endif
+!     if ((flags & ECMD_SET_HELP) || keep_help_flag)
+!     {
+! 	prepare_help_buffer();
+      }
+      else
+      {
+  	/* Don't make a buffer listed if it's a help buffer.  Useful when
+  	 * using CTRL-O to go back to a help file. */
+  	if (!curbuf->b_help)
+***************
+*** 6222,6227 ****
+--- 6167,6237 ----
+  }
+  
+  /*
++  * Called when starting to edit a buffer for a help file.
++  */
++     static void
++ prepare_help_buffer()
++ {
++     char_u	*p;
++ 
++     curbuf->b_help = TRUE;
++ #ifdef FEAT_QUICKFIX
++     set_string_option_direct((char_u *)"buftype", -1,
++ 				     (char_u *)"help", OPT_FREE|OPT_LOCAL, 0);
++ #endif
++ 
++     /*
++      * Always set these options after jumping to a help tag, because the
++      * user may have an autocommand that gets in the way.
++      * Accept all ASCII chars for keywords, except ' ', '*', '"', '|', and
++      * latin1 word characters (for translated help files).
++      * Only set it when needed, buf_init_chartab() is some work.
++      */
++     p =
++ #ifdef EBCDIC
++ 	    (char_u *)"65-255,^*,^|,^\"";
++ #else
++ 	    (char_u *)"!-~,^*,^|,^\",192-255";
++ #endif
++     if (STRCMP(curbuf->b_p_isk, p) != 0)
++     {
++ 	set_string_option_direct((char_u *)"isk", -1, p, OPT_FREE|OPT_LOCAL, 0);
++ 	check_buf_options(curbuf);
++ 	(void)buf_init_chartab(curbuf, FALSE);
++     }
++ 
++     /* Don't use the global foldmethod.*/
++     set_string_option_direct((char_u *)"fdm", -1, (char_u *)"manual",
++ 						       OPT_FREE|OPT_LOCAL, 0);
++ 
++     curbuf->b_p_ts = 8;		/* 'tabstop' is 8 */
++     curwin->w_p_list = FALSE;	/* no list mode */
++ 
++     curbuf->b_p_ma = FALSE;		/* not modifiable */
++     curbuf->b_p_bin = FALSE;	/* reset 'bin' before reading file */
++     curwin->w_p_nu = 0;		/* no line numbers */
++     curwin->w_p_rnu = 0;		/* no relative line numbers */
++     RESET_BINDING(curwin);		/* no scroll or cursor binding */
++ #ifdef FEAT_ARABIC
++     curwin->w_p_arab = FALSE;	/* no arabic mode */
++ #endif
++ #ifdef FEAT_RIGHTLEFT
++     curwin->w_p_rl  = FALSE;	/* help window is left-to-right */
++ #endif
++ #ifdef FEAT_FOLDING
++     curwin->w_p_fen = FALSE;	/* No folding in the help window */
++ #endif
++ #ifdef FEAT_DIFF
++     curwin->w_p_diff = FALSE;	/* No 'diff' */
++ #endif
++ #ifdef FEAT_SPELL
++     curwin->w_p_spell = FALSE;	/* No spell checking */
++ #endif
++ 
++     set_buflisted(FALSE);
++ }
++ 
++ /*
+   * After reading a help file: May cleanup a help buffer when syntax
+   * highlighting is not used.
+   */
+*** ../vim-7.4.514/src/version.c	2014-11-12 18:59:17.602000656 +0100
+--- src/version.c	2014-11-12 19:27:25.471182666 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     515,
+  /**/
+
+-- 
+If "R" is Reverse, how come "D" is FORWARD?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.516 b/SOURCES/7.4.516
new file mode 100644
index 0000000..19941d8
--- /dev/null
+++ b/SOURCES/7.4.516
@@ -0,0 +1,66 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.516
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.516
+Problem:    Completing a function name containing a # does not work.  Issue
+	    253.
+Solution:   Recognize the # character. (Christian Brabandt)
+Files:	    src/eval.c
+
+
+*** ../vim-7.4.515/src/eval.c	2014-11-12 18:49:12.992752234 +0100
+--- src/eval.c	2014-11-12 20:05:35.609826215 +0100
+***************
+*** 3368,3378 ****
+  	    got_eq = TRUE;
+  	    xp->xp_context = EXPAND_EXPRESSION;
+  	}
+! 	else if (c == '<'
+  		&& xp->xp_context == EXPAND_FUNCTIONS
+  		&& vim_strchr(xp->xp_pattern, '(') == NULL)
+  	{
+! 	    /* Function name can start with "<SNR>" */
+  	    break;
+  	}
+  	else if (cmdidx != CMD_let || got_eq)
+--- 3368,3378 ----
+  	    got_eq = TRUE;
+  	    xp->xp_context = EXPAND_EXPRESSION;
+  	}
+! 	else if ((c == '<' || c == '#')
+  		&& xp->xp_context == EXPAND_FUNCTIONS
+  		&& vim_strchr(xp->xp_pattern, '(') == NULL)
+  	{
+! 	    /* Function name can start with "<SNR>" and contain '#'. */
+  	    break;
+  	}
+  	else if (cmdidx != CMD_let || got_eq)
+*** ../vim-7.4.515/src/version.c	2014-11-12 19:28:12.682661756 +0100
+--- src/version.c	2014-11-12 20:05:00.730212577 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     516,
+  /**/
+
+-- 
+The Law of VIM:
+For each member b of the possible behaviour space B of program P, there exists
+a finite time t before which at least one user u in the total user space U of
+program P will request b becomes a member of the allowed behaviour space B'
+(B' <= B).
+In other words: Sooner or later everyone wants everything as an option.
+                                        -- Vince Negri
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.517 b/SOURCES/7.4.517
new file mode 100644
index 0000000..40a0d96
--- /dev/null
+++ b/SOURCES/7.4.517
@@ -0,0 +1,49 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.517
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.517
+Problem:    With a wrapping line the cursor may not end up in the right place.
+	    (Nazri Ramliy)
+Solution:   Adjust n_extra for a Tab that wraps. (Christian Brabandt)
+Files:	    src/screen.c
+
+
+*** ../vim-7.4.516/src/screen.c	2014-10-10 15:28:41.985092234 +0200
+--- src/screen.c	2014-11-19 12:53:37.351818719 +0100
+***************
+*** 4456,4461 ****
+--- 4456,4465 ----
+  		    /* TODO: is passing p for start of the line OK? */
+  		    n_extra = win_lbr_chartabsize(wp, line, p, (colnr_T)vcol,
+  								    NULL) - 1;
++ 		    if (c == TAB && n_extra + col > W_WIDTH(wp))
++ 			n_extra = (int)wp->w_buffer->b_p_ts
++ 				       - vcol % (int)wp->w_buffer->b_p_ts - 1;
++ 
+  		    c_extra = ' ';
+  		    if (vim_iswhite(c))
+  		    {
+*** ../vim-7.4.516/src/version.c	2014-11-12 20:09:02.879529412 +0100
+--- src/version.c	2014-11-19 12:56:19.421955598 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     517,
+  /**/
+
+-- 
+Permission is granted to read this message out aloud on Kings Cross Road,
+London, under the condition that the orator is properly dressed.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.518 b/SOURCES/7.4.518
new file mode 100644
index 0000000..f3a360e
--- /dev/null
+++ b/SOURCES/7.4.518
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.518
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.518
+Problem:    Using status line height in width computations.
+Solution:   Use one instead. (Hirohito Higashi)
+Files:	    src/window.c
+
+
+*** ../vim-7.4.517/src/window.c	2014-10-21 20:57:11.534295006 +0200
+--- src/window.c	2014-11-19 13:36:46.758016634 +0100
+***************
+*** 796,802 ****
+  		if (frp->fr_win != oldwin && frp->fr_win != NULL
+  			&& (frp->fr_win->w_width > new_size
+  			    || frp->fr_win->w_width > oldwin->w_width
+! 						   - new_size - STATUS_HEIGHT))
+  		{
+  		    do_equal = TRUE;
+  		    break;
+--- 796,802 ----
+  		if (frp->fr_win != oldwin && frp->fr_win != NULL
+  			&& (frp->fr_win->w_width > new_size
+  			    || frp->fr_win->w_width > oldwin->w_width
+! 							      - new_size - 1))
+  		{
+  		    do_equal = TRUE;
+  		    break;
+*** ../vim-7.4.517/src/version.c	2014-11-19 13:21:24.984724043 +0100
+--- src/version.c	2014-11-19 13:39:59.875774316 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     518,
+  /**/
+
+-- 
+BRIDGEKEEPER: What is your favorite colour?
+GAWAIN:       Blue ...  No yelloooooww!
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.519 b/SOURCES/7.4.519
new file mode 100644
index 0000000..5b7e02b
--- /dev/null
+++ b/SOURCES/7.4.519
@@ -0,0 +1,866 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.519
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.519 (after 7.4.497)
+Problem:    Crash when using syntax highlighting.
+Solution:   When regprog is freed and replaced, store the result.
+Files:	    src/buffer.c, src/regexp.c, src/syntax.c, src/spell.c,
+	    src/ex_cmds2.c, src/fileio.c, src/proto/fileio.pro,
+	    src/proto/regexp.pro, src/os_unix.c
+
+
+*** ../vim-7.4.518/src/buffer.c	2014-09-23 15:45:04.870801055 +0200
+--- src/buffer.c	2014-11-19 15:50:34.129292586 +0100
+***************
+*** 28,36 ****
+  #include "vim.h"
+  
+  #if defined(FEAT_CMDL_COMPL) || defined(FEAT_LISTCMDS) || defined(FEAT_EVAL) || defined(FEAT_PERL)
+! static char_u	*buflist_match __ARGS((regprog_T *prog, buf_T *buf, int ignore_case));
+  # define HAVE_BUFLIST_MATCH
+! static char_u	*fname_match __ARGS((regprog_T *prog, char_u *name, int ignore_case));
+  #endif
+  static void	buflist_setfpos __ARGS((buf_T *buf, win_T *win, linenr_T lnum, colnr_T col, int copy_options));
+  static wininfo_T *find_wininfo __ARGS((buf_T *buf, int skip_diff_buffer));
+--- 28,36 ----
+  #include "vim.h"
+  
+  #if defined(FEAT_CMDL_COMPL) || defined(FEAT_LISTCMDS) || defined(FEAT_EVAL) || defined(FEAT_PERL)
+! static char_u	*buflist_match __ARGS((regmatch_T *rmp, buf_T *buf, int ignore_case));
+  # define HAVE_BUFLIST_MATCH
+! static char_u	*fname_match __ARGS((regmatch_T *rmp, char_u *name, int ignore_case));
+  #endif
+  static void	buflist_setfpos __ARGS((buf_T *buf, win_T *win, linenr_T lnum, colnr_T col, int copy_options));
+  static wininfo_T *find_wininfo __ARGS((buf_T *buf, int skip_diff_buffer));
+***************
+*** 2220,2226 ****
+      int		curtab_only;	/* find buffers in current tab only */
+  {
+      buf_T	*buf;
+-     regprog_T	*prog;
+      int		match = -1;
+      int		find_listed;
+      char_u	*pat;
+--- 2220,2225 ----
+***************
+*** 2265,2278 ****
+  	{
+  	    for (attempt = 0; attempt <= 3; ++attempt)
+  	    {
+  		/* may add '^' and '$' */
+  		if (toggledollar)
+  		    *patend = (attempt < 2) ? NUL : '$'; /* add/remove '$' */
+  		p = pat;
+  		if (*p == '^' && !(attempt & 1))	 /* add/remove '^' */
+  		    ++p;
+! 		prog = vim_regcomp(p, p_magic ? RE_MAGIC : 0);
+! 		if (prog == NULL)
+  		{
+  		    vim_free(pat);
+  		    return -1;
+--- 2264,2279 ----
+  	{
+  	    for (attempt = 0; attempt <= 3; ++attempt)
+  	    {
++ 		regmatch_T	regmatch;
++ 
+  		/* may add '^' and '$' */
+  		if (toggledollar)
+  		    *patend = (attempt < 2) ? NUL : '$'; /* add/remove '$' */
+  		p = pat;
+  		if (*p == '^' && !(attempt & 1))	 /* add/remove '^' */
+  		    ++p;
+! 		regmatch.regprog = vim_regcomp(p, p_magic ? RE_MAGIC : 0);
+! 		if (regmatch.regprog == NULL)
+  		{
+  		    vim_free(pat);
+  		    return -1;
+***************
+*** 2283,2289 ****
+  #ifdef FEAT_DIFF
+  			    && (!diffmode || diff_mode_buf(buf))
+  #endif
+! 			    && buflist_match(prog, buf, FALSE) != NULL)
+  		    {
+  			if (curtab_only)
+  			{
+--- 2284,2290 ----
+  #ifdef FEAT_DIFF
+  			    && (!diffmode || diff_mode_buf(buf))
+  #endif
+! 			    && buflist_match(&regmatch, buf, FALSE) != NULL)
+  		    {
+  			if (curtab_only)
+  			{
+***************
+*** 2310,2316 ****
+  			match = buf->b_fnum;	/* remember first match */
+  		    }
+  
+! 		vim_regfree(prog);
+  		if (match >= 0)			/* found one match */
+  		    break;
+  	    }
+--- 2311,2317 ----
+  			match = buf->b_fnum;	/* remember first match */
+  		    }
+  
+! 		vim_regfree(regmatch.regprog);
+  		if (match >= 0)			/* found one match */
+  		    break;
+  	    }
+***************
+*** 2352,2358 ****
+      int		round;
+      char_u	*p;
+      int		attempt;
+-     regprog_T	*prog;
+      char_u	*patc;
+  
+      *num_file = 0;		    /* return values in case of FAIL */
+--- 2353,2358 ----
+***************
+*** 2376,2385 ****
+       */
+      for (attempt = 0; attempt <= 1; ++attempt)
+      {
+  	if (attempt > 0 && patc == pat)
+  	    break;	/* there was no anchor, no need to try again */
+! 	prog = vim_regcomp(patc + attempt * 11, RE_MAGIC);
+! 	if (prog == NULL)
+  	{
+  	    if (patc != pat)
+  		vim_free(patc);
+--- 2376,2387 ----
+       */
+      for (attempt = 0; attempt <= 1; ++attempt)
+      {
++ 	regmatch_T	regmatch;
++ 
+  	if (attempt > 0 && patc == pat)
+  	    break;	/* there was no anchor, no need to try again */
+! 	regmatch.regprog = vim_regcomp(patc + attempt * 11, RE_MAGIC);
+! 	if (regmatch.regprog == NULL)
+  	{
+  	    if (patc != pat)
+  		vim_free(patc);
+***************
+*** 2397,2403 ****
+  	    {
+  		if (!buf->b_p_bl)	/* skip unlisted buffers */
+  		    continue;
+! 		p = buflist_match(prog, buf, p_wic);
+  		if (p != NULL)
+  		{
+  		    if (round == 1)
+--- 2399,2405 ----
+  	    {
+  		if (!buf->b_p_bl)	/* skip unlisted buffers */
+  		    continue;
+! 		p = buflist_match(&regmatch, buf, p_wic);
+  		if (p != NULL)
+  		{
+  		    if (round == 1)
+***************
+*** 2419,2432 ****
+  		*file = (char_u **)alloc((unsigned)(count * sizeof(char_u *)));
+  		if (*file == NULL)
+  		{
+! 		    vim_regfree(prog);
+  		    if (patc != pat)
+  			vim_free(patc);
+  		    return FAIL;
+  		}
+  	    }
+  	}
+! 	vim_regfree(prog);
+  	if (count)		/* match(es) found, break here */
+  	    break;
+      }
+--- 2421,2434 ----
+  		*file = (char_u **)alloc((unsigned)(count * sizeof(char_u *)));
+  		if (*file == NULL)
+  		{
+! 		    vim_regfree(regmatch.regprog);
+  		    if (patc != pat)
+  			vim_free(patc);
+  		    return FAIL;
+  		}
+  	    }
+  	}
+! 	vim_regfree(regmatch.regprog);
+  	if (count)		/* match(es) found, break here */
+  	    break;
+      }
+***************
+*** 2445,2461 ****
+   * Check for a match on the file name for buffer "buf" with regprog "prog".
+   */
+      static char_u *
+! buflist_match(prog, buf, ignore_case)
+!     regprog_T	*prog;
+      buf_T	*buf;
+      int		ignore_case;  /* when TRUE ignore case, when FALSE use 'fic' */
+  {
+      char_u	*match;
+  
+      /* First try the short file name, then the long file name. */
+!     match = fname_match(prog, buf->b_sfname, ignore_case);
+      if (match == NULL)
+! 	match = fname_match(prog, buf->b_ffname, ignore_case);
+  
+      return match;
+  }
+--- 2447,2463 ----
+   * Check for a match on the file name for buffer "buf" with regprog "prog".
+   */
+      static char_u *
+! buflist_match(rmp, buf, ignore_case)
+!     regmatch_T	*rmp;
+      buf_T	*buf;
+      int		ignore_case;  /* when TRUE ignore case, when FALSE use 'fic' */
+  {
+      char_u	*match;
+  
+      /* First try the short file name, then the long file name. */
+!     match = fname_match(rmp, buf->b_sfname, ignore_case);
+      if (match == NULL)
+! 	match = fname_match(rmp, buf->b_ffname, ignore_case);
+  
+      return match;
+  }
+***************
+*** 2465,2491 ****
+   * Return "name" when there is a match, NULL when not.
+   */
+      static char_u *
+! fname_match(prog, name, ignore_case)
+!     regprog_T	*prog;
+      char_u	*name;
+      int		ignore_case;  /* when TRUE ignore case, when FALSE use 'fic' */
+  {
+      char_u	*match = NULL;
+      char_u	*p;
+-     regmatch_T	regmatch;
+  
+      if (name != NULL)
+      {
+- 	regmatch.regprog = prog;
+  	/* Ignore case when 'fileignorecase' or the argument is set. */
+! 	regmatch.rm_ic = p_fic || ignore_case;
+! 	if (vim_regexec(&regmatch, name, (colnr_T)0))
+  	    match = name;
+  	else
+  	{
+  	    /* Replace $(HOME) with '~' and try matching again. */
+  	    p = home_replace_save(NULL, name);
+! 	    if (p != NULL && vim_regexec(&regmatch, p, (colnr_T)0))
+  		match = name;
+  	    vim_free(p);
+  	}
+--- 2467,2491 ----
+   * Return "name" when there is a match, NULL when not.
+   */
+      static char_u *
+! fname_match(rmp, name, ignore_case)
+!     regmatch_T	*rmp;
+      char_u	*name;
+      int		ignore_case;  /* when TRUE ignore case, when FALSE use 'fic' */
+  {
+      char_u	*match = NULL;
+      char_u	*p;
+  
+      if (name != NULL)
+      {
+  	/* Ignore case when 'fileignorecase' or the argument is set. */
+! 	rmp->rm_ic = p_fic || ignore_case;
+! 	if (vim_regexec(rmp, name, (colnr_T)0))
+  	    match = name;
+  	else
+  	{
+  	    /* Replace $(HOME) with '~' and try matching again. */
+  	    p = home_replace_save(NULL, name);
+! 	    if (p != NULL && vim_regexec(rmp, p, (colnr_T)0))
+  		match = name;
+  	    vim_free(p);
+  	}
+*** ../vim-7.4.518/src/regexp.c	2014-11-05 14:26:30.760758363 +0100
+--- src/regexp.c	2014-11-19 16:10:43.203390451 +0100
+***************
+*** 8163,8168 ****
+--- 8163,8169 ----
+  /*
+   * Match a regexp against a string.
+   * "rmp->regprog" is a compiled regexp as returned by vim_regcomp().
++  * Note: "rmp->regprog" may be freed and changed.
+   * Uses curbuf for line count and 'iskeyword'.
+   * When "nl" is TRUE consider a "\n" in "line" to be a line break.
+   *
+***************
+*** 8203,8208 ****
+--- 8204,8232 ----
+      return result;
+  }
+  
++ /*
++  * Note: "*prog" may be freed and changed.
++  */
++     int
++ vim_regexec_prog(prog, ignore_case, line, col)
++     regprog_T	**prog;
++     int		ignore_case;
++     char_u	*line;
++     colnr_T	col;
++ {
++     int r;
++     regmatch_T regmatch;
++ 
++     regmatch.regprog = *prog;
++     regmatch.rm_ic = ignore_case;
++     r = vim_regexec_both(&regmatch, line, col, FALSE);
++     *prog = regmatch.regprog;
++     return r;
++ }
++ 
++ /*
++  * Note: "rmp->regprog" may be freed and changed.
++  */
+      int
+  vim_regexec(rmp, line, col)
+      regmatch_T	*rmp;
+***************
+*** 8216,8221 ****
+--- 8240,8246 ----
+  	|| defined(FIND_REPLACE_DIALOG) || defined(PROTO)
+  /*
+   * Like vim_regexec(), but consider a "\n" in "line" to be a line break.
++  * Note: "rmp->regprog" may be freed and changed.
+   */
+      int
+  vim_regexec_nl(rmp, line, col)
+***************
+*** 8230,8235 ****
+--- 8255,8261 ----
+  /*
+   * Match a regexp against multiple lines.
+   * "rmp->regprog" is a compiled regexp as returned by vim_regcomp().
++  * Note: "rmp->regprog" may be freed and changed.
+   * Uses curbuf for line count and 'iskeyword'.
+   *
+   * Return zero if there is no match.  Return number of lines contained in the
+*** ../vim-7.4.518/src/syntax.c	2014-06-12 12:20:50.191541385 +0200
+--- src/syntax.c	2014-11-19 15:39:08.493182536 +0100
+***************
+*** 992,1004 ****
+      linenr_T	lnum;
+  {
+      regmmatch_T regmatch;
+  
+      if (syn_block->b_syn_linecont_prog != NULL)
+      {
+  	regmatch.rmm_ic = syn_block->b_syn_linecont_ic;
+  	regmatch.regprog = syn_block->b_syn_linecont_prog;
+! 	return syn_regexec(&regmatch, lnum, (colnr_T)0,
+  				IF_SYN_TIME(&syn_block->b_syn_linecont_time));
+      }
+      return FALSE;
+  }
+--- 992,1007 ----
+      linenr_T	lnum;
+  {
+      regmmatch_T regmatch;
++     int r;
+  
+      if (syn_block->b_syn_linecont_prog != NULL)
+      {
+  	regmatch.rmm_ic = syn_block->b_syn_linecont_ic;
+  	regmatch.regprog = syn_block->b_syn_linecont_prog;
+! 	r = syn_regexec(&regmatch, lnum, (colnr_T)0,
+  				IF_SYN_TIME(&syn_block->b_syn_linecont_time));
++ 	syn_block->b_syn_linecont_prog = regmatch.regprog;
++ 	return r;
+      }
+      return FALSE;
+  }
+***************
+*** 2075,2080 ****
+--- 2078,2085 ----
+  					    cur_si->si_cont_list, &spp->sp_syn,
+  					    spp->sp_flags & HL_CONTAINED))))
+  			{
++ 			    int r;
++ 
+  			    /* If we already tried matching in this line, and
+  			     * there isn't a match before next_match_col, skip
+  			     * this item. */
+***************
+*** 2089,2098 ****
+  
+  			    regmatch.rmm_ic = spp->sp_ic;
+  			    regmatch.regprog = spp->sp_prog;
+! 			    if (!syn_regexec(&regmatch,
+  					     current_lnum,
+  					     (colnr_T)lc_col,
+! 				             IF_SYN_TIME(&spp->sp_time)))
+  			    {
+  				/* no match in this line, try another one */
+  				spp->sp_startcol = MAXCOL;
+--- 2094,2105 ----
+  
+  			    regmatch.rmm_ic = spp->sp_ic;
+  			    regmatch.regprog = spp->sp_prog;
+! 			    r = syn_regexec(&regmatch,
+  					     current_lnum,
+  					     (colnr_T)lc_col,
+! 				             IF_SYN_TIME(&spp->sp_time));
+! 			    spp->sp_prog = regmatch.regprog;
+! 			    if (!r)
+  			    {
+  				/* no match in this line, try another one */
+  				spp->sp_startcol = MAXCOL;
+***************
+*** 2963,2968 ****
+--- 2970,2976 ----
+  	for (idx = start_idx; idx < syn_block->b_syn_patterns.ga_len; ++idx)
+  	{
+  	    int lc_col = matchcol;
++ 	    int r;
+  
+  	    spp = &(SYN_ITEMS(syn_block)[idx]);
+  	    if (spp->sp_type != SPTYPE_END)	/* past last END pattern */
+***************
+*** 2973,2980 ****
+  
+  	    regmatch.rmm_ic = spp->sp_ic;
+  	    regmatch.regprog = spp->sp_prog;
+! 	    if (syn_regexec(&regmatch, startpos->lnum, lc_col,
+! 						  IF_SYN_TIME(&spp->sp_time)))
+  	    {
+  		if (best_idx == -1 || regmatch.startpos[0].col
+  					      < best_regmatch.startpos[0].col)
+--- 2981,2990 ----
+  
+  	    regmatch.rmm_ic = spp->sp_ic;
+  	    regmatch.regprog = spp->sp_prog;
+! 	    r = syn_regexec(&regmatch, startpos->lnum, lc_col,
+! 						  IF_SYN_TIME(&spp->sp_time));
+! 	    spp->sp_prog = regmatch.regprog;
+! 	    if (r)
+  	    {
+  		if (best_idx == -1 || regmatch.startpos[0].col
+  					      < best_regmatch.startpos[0].col)
+***************
+*** 3000,3013 ****
+  	if (spp_skip != NULL)
+  	{
+  	    int lc_col = matchcol - spp_skip->sp_offsets[SPO_LC_OFF];
+  
+  	    if (lc_col < 0)
+  		lc_col = 0;
+  	    regmatch.rmm_ic = spp_skip->sp_ic;
+  	    regmatch.regprog = spp_skip->sp_prog;
+! 	    if (syn_regexec(&regmatch, startpos->lnum, lc_col,
+! 					      IF_SYN_TIME(&spp_skip->sp_time))
+! 		    && regmatch.startpos[0].col
+  					     <= best_regmatch.startpos[0].col)
+  	    {
+  		/* Add offset to skip pattern match */
+--- 3010,3025 ----
+  	if (spp_skip != NULL)
+  	{
+  	    int lc_col = matchcol - spp_skip->sp_offsets[SPO_LC_OFF];
++ 	    int r;
+  
+  	    if (lc_col < 0)
+  		lc_col = 0;
+  	    regmatch.rmm_ic = spp_skip->sp_ic;
+  	    regmatch.regprog = spp_skip->sp_prog;
+! 	    r = syn_regexec(&regmatch, startpos->lnum, lc_col,
+! 					      IF_SYN_TIME(&spp_skip->sp_time));
+! 	    spp_skip->sp_prog = regmatch.regprog;
+! 	    if (r && regmatch.startpos[0].col
+  					     <= best_regmatch.startpos[0].col)
+  	    {
+  		/* Add offset to skip pattern match */
+*** ../vim-7.4.518/src/spell.c	2014-09-19 16:04:08.050417797 +0200
+--- src/spell.c	2014-11-19 16:28:49.798964748 +0100
+***************
+*** 1154,1164 ****
+  	    if (capcol != NULL && wp->w_s->b_cap_prog != NULL)
+  	    {
+  		regmatch_T	regmatch;
+  
+  		/* Check for end of sentence. */
+  		regmatch.regprog = wp->w_s->b_cap_prog;
+  		regmatch.rm_ic = FALSE;
+! 		if (vim_regexec(&regmatch, ptr, 0))
+  		    *capcol = (int)(regmatch.endp[0] - ptr);
+  	    }
+  
+--- 1154,1167 ----
+  	    if (capcol != NULL && wp->w_s->b_cap_prog != NULL)
+  	    {
+  		regmatch_T	regmatch;
++ 		int		r;
+  
+  		/* Check for end of sentence. */
+  		regmatch.regprog = wp->w_s->b_cap_prog;
+  		regmatch.rm_ic = FALSE;
+! 		r = vim_regexec(&regmatch, ptr, 0);
+! 		wp->w_s->b_cap_prog = regmatch.regprog;
+! 		if (r)
+  		    *capcol = (int)(regmatch.endp[0] - ptr);
+  	    }
+  
+***************
+*** 1786,1792 ****
+      char_u	*word;
+      char_u	*flags;
+  {
+-     regmatch_T	regmatch;
+  #ifdef FEAT_MBYTE
+      char_u	uflags[MAXWLEN * 2];
+      int		i;
+--- 1789,1794 ----
+***************
+*** 1808,1816 ****
+      else
+  #endif
+  	p = flags;
+!     regmatch.regprog = slang->sl_compprog;
+!     regmatch.rm_ic = FALSE;
+!     if (!vim_regexec(&regmatch, p, 0))
+  	return FALSE;
+  
+      /* Count the number of syllables.  This may be slow, do it last.  If there
+--- 1810,1816 ----
+      else
+  #endif
+  	p = flags;
+!     if (!vim_regexec_prog(&slang->sl_compprog, FALSE, p, 0))
+  	return FALSE;
+  
+      /* Count the number of syllables.  This may be slow, do it last.  If there
+***************
+*** 1930,1937 ****
+  {
+      int		prefcnt;
+      int		pidx;
+!     regprog_T	*rp;
+!     regmatch_T	regmatch;
+      int		prefid;
+  
+      prefid = (unsigned)flags >> 24;
+--- 1930,1936 ----
+  {
+      int		prefcnt;
+      int		pidx;
+!     regprog_T	**rp;
+      int		prefid;
+  
+      prefid = (unsigned)flags >> 24;
+***************
+*** 1950,1961 ****
+  
+  	/* Check the condition, if there is one.  The condition index is
+  	 * stored in the two bytes above the prefix ID byte.  */
+! 	rp = slang->sl_prefprog[((unsigned)pidx >> 8) & 0xffff];
+! 	if (rp != NULL)
+  	{
+! 	    regmatch.regprog = rp;
+! 	    regmatch.rm_ic = FALSE;
+! 	    if (!vim_regexec(&regmatch, word, 0))
+  		continue;
+  	}
+  	else if (cond_req)
+--- 1949,1958 ----
+  
+  	/* Check the condition, if there is one.  The condition index is
+  	 * stored in the two bytes above the prefix ID byte.  */
+! 	rp = &slang->sl_prefprog[((unsigned)pidx >> 8) & 0xffff];
+! 	if (*rp != NULL)
+  	{
+! 	    if (!vim_regexec_prog(rp, FALSE, word, 0))
+  		continue;
+  	}
+  	else if (cond_req)
+***************
+*** 6903,6909 ****
+      hashitem_T	*hi;
+      affheader_T	*ah;
+      affentry_T	*ae;
+-     regmatch_T	regmatch;
+      char_u	newword[MAXWLEN];
+      int		retval = OK;
+      int		i, j;
+--- 6900,6905 ----
+***************
+*** 6944,6958 ****
+  		     * When a previously added affix had CIRCUMFIX this one
+  		     * must have it too, if it had not then this one must not
+  		     * have one either. */
+- 		    regmatch.regprog = ae->ae_prog;
+- 		    regmatch.rm_ic = FALSE;
+  		    if ((xht != NULL || !affile->af_pfxpostpone
+  				|| ae->ae_chop != NULL
+  				|| ae->ae_flags != NULL)
+  			    && (ae->ae_chop == NULL
+  				|| STRLEN(ae->ae_chop) < wordlen)
+  			    && (ae->ae_prog == NULL
+! 				|| vim_regexec(&regmatch, word, (colnr_T)0))
+  			    && (((condit & CONDIT_CFIX) == 0)
+  				== ((condit & CONDIT_AFF) == 0
+  				    || ae->ae_flags == NULL
+--- 6940,6953 ----
+  		     * When a previously added affix had CIRCUMFIX this one
+  		     * must have it too, if it had not then this one must not
+  		     * have one either. */
+  		    if ((xht != NULL || !affile->af_pfxpostpone
+  				|| ae->ae_chop != NULL
+  				|| ae->ae_flags != NULL)
+  			    && (ae->ae_chop == NULL
+  				|| STRLEN(ae->ae_chop) < wordlen)
+  			    && (ae->ae_prog == NULL
+! 				|| vim_regexec_prog(&ae->ae_prog, FALSE,
+! 							    word, (colnr_T)0))
+  			    && (((condit & CONDIT_CFIX) == 0)
+  				== ((condit & CONDIT_AFF) == 0
+  				    || ae->ae_flags == NULL
+***************
+*** 10478,10483 ****
+--- 10473,10479 ----
+  		break;
+  	    }
+  	}
++ 	curwin->w_s->b_cap_prog = regmatch.regprog;
+      }
+  
+      vim_free(line_copy);
+*** ../vim-7.4.518/src/ex_cmds2.c	2014-08-06 18:17:03.471147780 +0200
+--- src/ex_cmds2.c	2014-11-19 16:24:22.162013396 +0100
+***************
+*** 739,745 ****
+      struct debuggy *bp;
+      int		i;
+      linenr_T	lnum = 0;
+-     regmatch_T	regmatch;
+      char_u	*name = fname;
+      int		prev_got_int;
+  
+--- 739,744 ----
+***************
+*** 771,778 ****
+  #endif
+  		(bp->dbg_lnum > after && (lnum == 0 || bp->dbg_lnum < lnum)))))
+  	{
+- 	    regmatch.regprog = bp->dbg_prog;
+- 	    regmatch.rm_ic = FALSE;
+  	    /*
+  	     * Save the value of got_int and reset it.  We don't want a
+  	     * previous interruption cancel matching, only hitting CTRL-C
+--- 770,775 ----
+***************
+*** 780,786 ****
+  	     */
+  	    prev_got_int = got_int;
+  	    got_int = FALSE;
+! 	    if (vim_regexec(&regmatch, name, (colnr_T)0))
+  	    {
+  		lnum = bp->dbg_lnum;
+  		if (fp != NULL)
+--- 777,783 ----
+  	     */
+  	    prev_got_int = got_int;
+  	    got_int = FALSE;
+! 	    if (vim_regexec_prog(&bp->dbg_prog, FALSE, name, (colnr_T)0))
+  	    {
+  		lnum = bp->dbg_lnum;
+  		if (fp != NULL)
+*** ../vim-7.4.518/src/fileio.c	2014-11-12 15:15:34.983882077 +0100
+--- src/fileio.c	2014-11-19 15:57:01.496837984 +0100
+***************
+*** 7772,7777 ****
+--- 7772,7780 ----
+  static int do_autocmd_event __ARGS((event_T event, char_u *pat, int nested, char_u *cmd, int forceit, int group));
+  static int apply_autocmds_group __ARGS((event_T event, char_u *fname, char_u *fname_io, int force, int group, buf_T *buf, exarg_T *eap));
+  static void auto_next_pat __ARGS((AutoPatCmd *apc, int stop_at_last));
++ #if defined(FEAT_AUTOCMD) || defined(FEAT_WILDIGN)
++ static int match_file_pat __ARGS((char_u *pattern, regprog_T **prog, char_u *fname, char_u *sfname, char_u *tail, int allow_dirs));
++ #endif
+  
+  
+  static event_T	last_event;
+***************
+*** 9640,9646 ****
+  	{
+  	    /* execution-condition */
+  	    if (ap->buflocal_nr == 0
+! 		    ? (match_file_pat(NULL, ap->reg_prog, apc->fname,
+  				      apc->sfname, apc->tail, ap->allow_dirs))
+  		    : ap->buflocal_nr == apc->arg_bufnr)
+  	    {
+--- 9643,9649 ----
+  	{
+  	    /* execution-condition */
+  	    if (ap->buflocal_nr == 0
+! 		    ? (match_file_pat(NULL, &ap->reg_prog, apc->fname,
+  				      apc->sfname, apc->tail, ap->allow_dirs))
+  		    : ap->buflocal_nr == apc->arg_bufnr)
+  	    {
+***************
+*** 9774,9780 ****
+      for (ap = first_autopat[(int)event]; ap != NULL; ap = ap->next)
+  	if (ap->pat != NULL && ap->cmds != NULL
+  	      && (ap->buflocal_nr == 0
+! 		? match_file_pat(NULL, ap->reg_prog,
+  					  fname, sfname, tail, ap->allow_dirs)
+  		: buf != NULL && ap->buflocal_nr == buf->b_fnum
+  	   ))
+--- 9777,9783 ----
+      for (ap = first_autopat[(int)event]; ap != NULL; ap = ap->next)
+  	if (ap->pat != NULL && ap->cmds != NULL
+  	      && (ap->buflocal_nr == 0
+! 		? match_file_pat(NULL, &ap->reg_prog,
+  					  fname, sfname, tail, ap->allow_dirs)
+  		: buf != NULL && ap->buflocal_nr == buf->b_fnum
+  	   ))
+***************
+*** 10035,10044 ****
+   * Used for autocommands and 'wildignore'.
+   * Returns TRUE if there is a match, FALSE otherwise.
+   */
+!     int
+  match_file_pat(pattern, prog, fname, sfname, tail, allow_dirs)
+      char_u	*pattern;		/* pattern to match with */
+!     regprog_T	*prog;			/* pre-compiled regprog or NULL */
+      char_u	*fname;			/* full path of file name */
+      char_u	*sfname;		/* short file name or NULL */
+      char_u	*tail;			/* tail of path */
+--- 10038,10047 ----
+   * Used for autocommands and 'wildignore'.
+   * Returns TRUE if there is a match, FALSE otherwise.
+   */
+!     static int
+  match_file_pat(pattern, prog, fname, sfname, tail, allow_dirs)
+      char_u	*pattern;		/* pattern to match with */
+!     regprog_T	**prog;			/* pre-compiled regprog or NULL */
+      char_u	*fname;			/* full path of file name */
+      char_u	*sfname;		/* short file name or NULL */
+      char_u	*tail;			/* tail of path */
+***************
+*** 10093,10099 ****
+  #endif
+      {
+  	if (prog != NULL)
+! 	    regmatch.regprog = prog;
+  	else
+  	    regmatch.regprog = vim_regcomp(pattern, RE_MAGIC);
+      }
+--- 10096,10102 ----
+  #endif
+      {
+  	if (prog != NULL)
+! 	    regmatch.regprog = *prog;
+  	else
+  	    regmatch.regprog = vim_regcomp(pattern, RE_MAGIC);
+      }
+***************
+*** 10119,10125 ****
+  		 || (!allow_dirs && vim_regexec(&regmatch, tail, (colnr_T)0)))))
+  	result = TRUE;
+  
+!     if (prog == NULL)
+  	vim_regfree(regmatch.regprog);
+      return result;
+  }
+--- 10122,10130 ----
+  		 || (!allow_dirs && vim_regexec(&regmatch, tail, (colnr_T)0)))))
+  	result = TRUE;
+  
+!     if (prog != NULL)
+! 	*prog = regmatch.regprog;
+!     else
+  	vim_regfree(regmatch.regprog);
+      return result;
+  }
+*** ../vim-7.4.518/src/proto/fileio.pro	2014-08-22 23:05:50.106606614 +0200
+--- src/proto/fileio.pro	2014-11-19 15:55:55.013602515 +0100
+***************
+*** 59,65 ****
+  char_u *get_event_name __ARGS((expand_T *xp, int idx));
+  int autocmd_supported __ARGS((char_u *name));
+  int au_exists __ARGS((char_u *arg));
+- int match_file_pat __ARGS((char_u *pattern, regprog_T *prog, char_u *fname, char_u *sfname, char_u *tail, int allow_dirs));
+  int match_file_list __ARGS((char_u *list, char_u *sfname, char_u *ffname));
+  char_u *file_pat_to_reg_pat __ARGS((char_u *pat, char_u *pat_end, char *allow_dirs, int no_bslash));
+  long read_eintr __ARGS((int fd, void *buf, size_t bufsize));
+--- 59,64 ----
+*** ../vim-7.4.518/src/proto/regexp.pro	2014-04-02 19:00:53.043644100 +0200
+--- src/proto/regexp.pro	2014-11-19 16:11:34.522800480 +0100
+***************
+*** 13,18 ****
+--- 13,19 ----
+  list_T *reg_submatch_list __ARGS((int no));
+  regprog_T *vim_regcomp __ARGS((char_u *expr_arg, int re_flags));
+  void vim_regfree __ARGS((regprog_T *prog));
++ int vim_regexec_prog __ARGS((regprog_T **prog, int ignore_case, char_u *line, colnr_T col));
+  int vim_regexec __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
+  int vim_regexec_nl __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
+  long vim_regexec_multi __ARGS((regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, proftime_T *tm));
+*** ../vim-7.4.518/src/os_unix.c	2014-10-11 14:47:22.829275547 +0200
+--- src/os_unix.c	2014-11-19 16:26:48.504346537 +0100
+***************
+*** 1610,1617 ****
+      static int
+  x_connect_to_server()
+  {
+-     regmatch_T	regmatch;
+- 
+  #if defined(FEAT_CLIENTSERVER)
+      if (x_force_connect)
+  	return TRUE;
+--- 1610,1615 ----
+***************
+*** 1622,1630 ****
+      /* Check for a match with "exclude:" from 'clipboard'. */
+      if (clip_exclude_prog != NULL)
+      {
+! 	regmatch.rm_ic = FALSE;		/* Don't ignore case */
+! 	regmatch.regprog = clip_exclude_prog;
+! 	if (vim_regexec(&regmatch, T_NAME, (colnr_T)0))
+  	    return FALSE;
+      }
+      return TRUE;
+--- 1620,1626 ----
+      /* Check for a match with "exclude:" from 'clipboard'. */
+      if (clip_exclude_prog != NULL)
+      {
+! 	if (vim_regexec_prog(&clip_exclude_prog, FALSE, T_NAME, (colnr_T)0))
+  	    return FALSE;
+      }
+      return TRUE;
+*** ../vim-7.4.518/src/version.c	2014-11-19 13:40:04.903715962 +0100
+--- src/version.c	2014-11-19 15:22:36.464620036 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     519,
+  /**/
+
+-- 
+BRIDGEKEEPER: What is your favorite editor?
+GAWAIN:       Emacs ...  No, Viiiiiiiiiiimmmmmmm!
+           "Monty Python and the Holy editor wars" PYTHON (MONTY) SOFTWARE LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.520 b/SOURCES/7.4.520
new file mode 100644
index 0000000..4b5928e
--- /dev/null
+++ b/SOURCES/7.4.520
@@ -0,0 +1,48 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.520
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.520
+Problem:    Sun PCK locale is not recognzed.
+Solution:   Add PCK in the table. (Keiichi Oono)
+Files:	    src/mbyte.c
+
+
+*** ../vim-7.4.519/src/mbyte.c	2014-09-15 14:25:51.305650006 +0200
+--- src/mbyte.c	2014-11-19 16:48:14.205705174 +0100
+***************
+*** 405,410 ****
+--- 405,411 ----
+      {"unix-jis",	IDX_EUC_JP},
+      {"ujis",		IDX_EUC_JP},
+      {"shift-jis",	IDX_SJIS},
++     {"pck",		IDX_SJIS},	/* Sun: PCK */
+      {"euckr",		IDX_EUC_KR},
+      {"5601",		IDX_EUC_KR},	/* Sun: KS C 5601 */
+      {"euccn",		IDX_EUC_CN},
+*** ../vim-7.4.519/src/version.c	2014-11-19 16:38:01.520679869 +0100
+--- src/version.c	2014-11-19 16:49:28.404860112 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     520,
+  /**/
+
+-- 
+BRIDGEKEEPER: What is the air-speed velocity of an unladen swallow?
+ARTHUR:       What do you mean?  An African or European swallow?
+BRIDGEKEEPER: Er ...  I don't know that ... Aaaaarrrrrrggghhh!
+   BRIDGEKEEPER is cast into the gorge.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.521 b/SOURCES/7.4.521
new file mode 100644
index 0000000..20f13b4
--- /dev/null
+++ b/SOURCES/7.4.521
@@ -0,0 +1,49 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.521
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.521
+Problem:    When using "vep" a mark is moved to the next line. (Maxi Padulo,
+	    Issue 283)
+Solution:   Decrement the line number. (Christian Brabandt)
+Files:	    src/ops.c
+
+
+*** ../vim-7.4.520/src/ops.c	2014-08-16 18:36:38.593993280 +0200
+--- src/ops.c	2014-11-19 17:29:55.697280694 +0100
+***************
+*** 3831,3836 ****
+--- 3831,3839 ----
+  		    lnum++;
+  	    } while (VIsual_active && lnum <= curbuf->b_visual.vi_end.lnum);
+  
++ 	    if (VIsual_active) /* reset lnum to the last visual line */
++ 		lnum--;
++ 
+  	    curbuf->b_op_end = curwin->w_cursor;
+  	    /* For "CTRL-O p" in Insert mode, put cursor after last char */
+  	    if (totlen && (restart_edit != 0 || (flags & PUT_CURSEND)))
+*** ../vim-7.4.520/src/version.c	2014-11-19 17:05:52.209648533 +0100
+--- src/version.c	2014-11-19 17:30:30.220890822 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     521,
+  /**/
+
+-- 
+BEDEVERE: How do you know so much about swallows?
+ARTHUR:   Well you have to know these things when you're a king, you know.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.522 b/SOURCES/7.4.522
new file mode 100644
index 0000000..fa23c23
--- /dev/null
+++ b/SOURCES/7.4.522
@@ -0,0 +1,51 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.522
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.522
+Problem:    Specifying wrong buffer size for GetLongPathName().
+Solution:   Use the actual size. (Ken Takata)
+Files:	    src/eval.c
+
+
+*** ../vim-7.4.521/src/eval.c	2014-11-12 20:09:02.875529458 +0100
+--- src/eval.c	2014-11-19 18:01:14.560028682 +0100
+***************
+*** 24762,24768 ****
+  	    p = alloc(_MAX_PATH + 1);
+  	    if (p != NULL)
+  	    {
+! 		if (GetLongPathName(*fnamep, p, MAXPATHL))
+  		{
+  		    vim_free(*bufp);
+  		    *bufp = *fnamep = p;
+--- 24762,24768 ----
+  	    p = alloc(_MAX_PATH + 1);
+  	    if (p != NULL)
+  	    {
+! 		if (GetLongPathName(*fnamep, p, _MAX_PATH))
+  		{
+  		    vim_free(*bufp);
+  		    *bufp = *fnamep = p;
+*** ../vim-7.4.521/src/version.c	2014-11-19 17:35:35.085446649 +0100
+--- src/version.c	2014-11-19 18:02:02.003491140 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     522,
+  /**/
+
+-- 
+Every person is responsible for the choices he makes.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.523 b/SOURCES/7.4.523
new file mode 100644
index 0000000..488e8fd
--- /dev/null
+++ b/SOURCES/7.4.523
@@ -0,0 +1,99 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.523
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.523
+Problem:    When the X11 server is stopped and restarted, while Vim is kept in
+	    the background, copy/paste no longer works. (Issue 203)
+Solution:   Setup the clipboard again. (Christian Brabandt)
+Files:	    src/os_unix.c
+
+
+*** ../vim-7.4.522/src/os_unix.c	2014-11-19 16:38:01.520679869 +0100
+--- src/os_unix.c	2014-11-19 18:34:45.505245180 +0100
+***************
+*** 1586,1597 ****
+--- 1586,1600 ----
+   * An X IO Error handler, used to catch terminal errors.
+   */
+  static int x_IOerror_handler __ARGS((Display *dpy));
++ static void may_restore_clipboard __ARGS((void));
++ static int xterm_dpy_was_reset = FALSE;
+  
+      static int
+  x_IOerror_handler(dpy)
+      Display *dpy UNUSED;
+  {
+      xterm_dpy = NULL;
++     xterm_dpy_was_reset = TRUE;
+      x11_window = 0;
+      x11_display = NULL;
+      xterm_Shell = (Widget)0;
+***************
+*** 1602,1607 ****
+--- 1605,1626 ----
+      return 0;  /* avoid the compiler complains about missing return value */
+  # endif
+  }
++ 
++ /*
++  * If the X11 connection was lost try to restore it.
++  * Helps when the X11 server was stopped and restarted while Vim was inactive
++  * (e.g. though tmux).
++  */
++     static void
++ may_restore_clipboard()
++ {
++     if (xterm_dpy_was_reset)
++     {
++ 	xterm_dpy_was_reset = FALSE;
++ 	setup_term_clip();
++ 	get_x11_title(FALSE);
++     }
++ }
+  #endif
+  
+  /*
+***************
+*** 5274,5279 ****
+--- 5293,5299 ----
+  	}
+  # endif
+  # ifdef FEAT_XCLIPBOARD
++ 	may_restore_clipboard();
+  	if (xterm_Shell != (Widget)0)
+  	{
+  	    xterm_idx = nfd;
+***************
+*** 5426,5431 ****
+--- 5446,5452 ----
+  	}
+  # endif
+  # ifdef FEAT_XCLIPBOARD
++ 	may_restore_clipboard();
+  	if (xterm_Shell != (Widget)0)
+  	{
+  	    FD_SET(ConnectionNumber(xterm_dpy), &rfds);
+*** ../vim-7.4.522/src/version.c	2014-11-19 18:03:24.202559721 +0100
+--- src/version.c	2014-11-19 18:48:06.140215792 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     523,
+  /**/
+
+-- 
+There is no right or wrong, there is only your personal opinion.
+                 (Bram Moolenaar)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.524 b/SOURCES/7.4.524
new file mode 100644
index 0000000..3553ca1
--- /dev/null
+++ b/SOURCES/7.4.524
@@ -0,0 +1,96 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.524
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.524
+Problem:    When using ":ownsyntax" spell checking is messed up. (Issue 78)
+Solution:   Use the window-local option values. (Christian Brabandt)
+Files:	    src/option.c, src/syntax.c
+
+
+*** ../vim-7.4.523/src/option.c	2014-11-05 17:44:47.676471691 +0100
+--- src/option.c	2014-11-19 19:29:49.351843116 +0100
+***************
+*** 6706,6720 ****
+  #ifdef FEAT_SPELL
+      /* When 'spelllang' or 'spellfile' is set and there is a window for this
+       * buffer in which 'spell' is set load the wordlists. */
+!     else if (varp == &(curbuf->b_s.b_p_spl) || varp == &(curbuf->b_s.b_p_spf))
+      {
+  	win_T	    *wp;
+  	int	    l;
+  
+! 	if (varp == &(curbuf->b_s.b_p_spf))
+  	{
+! 	    l = (int)STRLEN(curbuf->b_s.b_p_spf);
+! 	    if (l > 0 && (l < 4 || STRCMP(curbuf->b_s.b_p_spf + l - 4,
+  								".add") != 0))
+  		errmsg = e_invarg;
+  	}
+--- 6706,6721 ----
+  #ifdef FEAT_SPELL
+      /* When 'spelllang' or 'spellfile' is set and there is a window for this
+       * buffer in which 'spell' is set load the wordlists. */
+!     else if (varp == &(curwin->w_s->b_p_spl)
+! 	    || varp == &(curwin->w_s->b_p_spf))
+      {
+  	win_T	    *wp;
+  	int	    l;
+  
+! 	if (varp == &(curwin->w_s->b_p_spf))
+  	{
+! 	    l = (int)STRLEN(curwin->w_s->b_p_spf);
+! 	    if (l > 0 && (l < 4 || STRCMP(curwin->w_s->b_p_spf + l - 4,
+  								".add") != 0))
+  		errmsg = e_invarg;
+  	}
+*** ../vim-7.4.523/src/syntax.c	2014-11-19 16:38:01.512679964 +0100
+--- src/syntax.c	2014-11-19 19:24:56.431160659 +0100
+***************
+*** 6304,6314 ****
+  	curwin->w_s = (synblock_T *)alloc(sizeof(synblock_T));
+  	memset(curwin->w_s, 0, sizeof(synblock_T));
+  #ifdef FEAT_SPELL
+  	curwin->w_p_spell = FALSE;	/* No spell checking */
+  	clear_string_option(&curwin->w_s->b_p_spc);
+  	clear_string_option(&curwin->w_s->b_p_spf);
+- 	vim_regfree(curwin->w_s->b_cap_prog);
+- 	curwin->w_s->b_cap_prog = NULL;
+  	clear_string_option(&curwin->w_s->b_p_spl);
+  #endif
+      }
+--- 6304,6313 ----
+  	curwin->w_s = (synblock_T *)alloc(sizeof(synblock_T));
+  	memset(curwin->w_s, 0, sizeof(synblock_T));
+  #ifdef FEAT_SPELL
++ 	/* TODO: keep the spell checking as it was. */
+  	curwin->w_p_spell = FALSE;	/* No spell checking */
+  	clear_string_option(&curwin->w_s->b_p_spc);
+  	clear_string_option(&curwin->w_s->b_p_spf);
+  	clear_string_option(&curwin->w_s->b_p_spl);
+  #endif
+      }
+*** ../vim-7.4.523/src/version.c	2014-11-19 18:48:41.515814987 +0100
+--- src/version.c	2014-11-19 19:26:00.158438943 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     524,
+  /**/
+
+-- 
+A special law prohibits unmarried women from parachuting on Sunday or she
+shall risk arrest, fine, and/or jailing.
+		[real standing law in Florida, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.525 b/SOURCES/7.4.525
new file mode 100644
index 0000000..63f584e
--- /dev/null
+++ b/SOURCES/7.4.525
@@ -0,0 +1,87 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.525
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.525
+Problem:    map() leaks memory when there is an error in the expression.
+Solution:   Call clear_tv(). (Christian Brabandt)
+Files:	    src/eval.c
+
+
+*** ../vim-7.4.524/src/eval.c	2014-11-19 18:03:24.198559765 +0100
+--- src/eval.c	2014-11-19 20:01:36.426226654 +0100
+***************
+*** 10720,10737 ****
+  	    {
+  		if (!HASHITEM_EMPTY(hi))
+  		{
+  		    --todo;
+  		    di = HI2DI(hi);
+  		    if (tv_check_lock(di->di_tv.v_lock,
+  						     (char_u *)_(arg_errmsg)))
+  			break;
+  		    vimvars[VV_KEY].vv_str = vim_strsave(di->di_key);
+! 		    if (filter_map_one(&di->di_tv, expr, map, &rem) == FAIL
+! 								  || did_emsg)
+  			break;
+  		    if (!map && rem)
+  			dictitem_remove(d, di);
+- 		    clear_tv(&vimvars[VV_KEY].vv_tv);
+  		}
+  	    }
+  	    hash_unlock(ht);
+--- 10720,10739 ----
+  	    {
+  		if (!HASHITEM_EMPTY(hi))
+  		{
++ 		    int r;
++ 
+  		    --todo;
+  		    di = HI2DI(hi);
+  		    if (tv_check_lock(di->di_tv.v_lock,
+  						     (char_u *)_(arg_errmsg)))
+  			break;
+  		    vimvars[VV_KEY].vv_str = vim_strsave(di->di_key);
+! 		    r = filter_map_one(&di->di_tv, expr, map, &rem);
+! 		    clear_tv(&vimvars[VV_KEY].vv_tv);
+! 		    if (r == FAIL || did_emsg)
+  			break;
+  		    if (!map && rem)
+  			dictitem_remove(d, di);
+  		}
+  	    }
+  	    hash_unlock(ht);
+***************
+*** 10782,10787 ****
+--- 10784,10790 ----
+      if (*s != NUL)  /* check for trailing chars after expr */
+      {
+  	EMSG2(_(e_invexpr2), s);
++ 	clear_tv(&rettv);
+  	goto theend;
+      }
+      if (map)
+*** ../vim-7.4.524/src/version.c	2014-11-19 19:33:13.373532135 +0100
+--- src/version.c	2014-11-19 19:58:41.356215390 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     525,
+  /**/
+
+-- 
+If an elephant is left tied to a parking meter, the parking fee has to be paid
+just as it would for a vehicle.
+		[real standing law in Florida, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.526 b/SOURCES/7.4.526
new file mode 100644
index 0000000..7d120ca
--- /dev/null
+++ b/SOURCES/7.4.526
@@ -0,0 +1,191 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.526
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.526
+Problem:    matchstr() fails on long text. Daniel Hahler)
+Solution:   Return NFA_TOO_EXPENSIVE from regexec_nl(). (Christian Brabandt)
+Files:	    src/regexp.c, src/regexec_nfa.c
+
+
+*** ../vim-7.4.525/src/regexp.c	2014-11-19 16:38:01.508680012 +0100
+--- src/regexp.c	2014-11-20 22:59:03.865027911 +0100
+***************
+*** 3739,3745 ****
+   * Uses curbuf for line count and 'iskeyword'.
+   * if "line_lbr" is TRUE  consider a "\n" in "line" to be a line break.
+   *
+!  * Return TRUE if there is a match, FALSE if not.
+   */
+      static int
+  bt_regexec_nl(rmp, line, col, line_lbr)
+--- 3739,3745 ----
+   * Uses curbuf for line count and 'iskeyword'.
+   * if "line_lbr" is TRUE  consider a "\n" in "line" to be a line break.
+   *
+!  * Returns 0 for failure, number of lines contained in the match otherwise.
+   */
+      static int
+  bt_regexec_nl(rmp, line, col, line_lbr)
+***************
+*** 3759,3765 ****
+      ireg_icombine = FALSE;
+  #endif
+      ireg_maxcol = 0;
+!     return (bt_regexec_both(line, col, NULL) != 0);
+  }
+  
+  static long bt_regexec_multi __ARGS((regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, proftime_T *tm));
+--- 3759,3766 ----
+      ireg_icombine = FALSE;
+  #endif
+      ireg_maxcol = 0;
+! 
+!     return bt_regexec_both(line, col, NULL);
+  }
+  
+  static long bt_regexec_multi __ARGS((regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, proftime_T *tm));
+***************
+*** 3781,3788 ****
+      colnr_T	col;		/* column to start looking for match */
+      proftime_T	*tm;		/* timeout limit or NULL */
+  {
+-     long	r;
+- 
+      reg_match = NULL;
+      reg_mmatch = rmp;
+      reg_buf = buf;
+--- 3782,3787 ----
+***************
+*** 3796,3809 ****
+  #endif
+      ireg_maxcol = rmp->rmm_maxcol;
+  
+!     r = bt_regexec_both(NULL, col, tm);
+! 
+!     return r;
+  }
+  
+  /*
+   * Match a regexp against a string ("line" points to the string) or multiple
+   * lines ("line" is NULL, use reg_getline()).
+   */
+      static long
+  bt_regexec_both(line, col, tm)
+--- 3795,3807 ----
+  #endif
+      ireg_maxcol = rmp->rmm_maxcol;
+  
+!     return bt_regexec_both(NULL, col, tm);
+  }
+  
+  /*
+   * Match a regexp against a string ("line" points to the string) or multiple
+   * lines ("line" is NULL, use reg_getline()).
++  * Returns 0 for failure, number of lines contained in the match otherwise.
+   */
+      static long
+  bt_regexec_both(line, col, tm)
+***************
+*** 3811,3819 ****
+      colnr_T	col;		/* column to start looking for match */
+      proftime_T	*tm UNUSED;	/* timeout limit or NULL */
+  {
+!     bt_regprog_T	*prog;
+!     char_u	*s;
+!     long	retval = 0L;
+  
+      /* Create "regstack" and "backpos" if they are not allocated yet.
+       * We allocate *_INITIAL amount of bytes first and then set the grow size
+--- 3809,3817 ----
+      colnr_T	col;		/* column to start looking for match */
+      proftime_T	*tm UNUSED;	/* timeout limit or NULL */
+  {
+!     bt_regprog_T    *prog;
+!     char_u	    *s;
+!     long	    retval = 0L;
+  
+      /* Create "regstack" and "backpos" if they are not allocated yet.
+       * We allocate *_INITIAL amount of bytes first and then set the grow size
+***************
+*** 8201,8211 ****
+  
+  	p_re = save_p_re;
+      }
+!     return result;
+  }
+  
+  /*
+   * Note: "*prog" may be freed and changed.
+   */
+      int
+  vim_regexec_prog(prog, ignore_case, line, col)
+--- 8199,8210 ----
+  
+  	p_re = save_p_re;
+      }
+!     return result > 0;
+  }
+  
+  /*
+   * Note: "*prog" may be freed and changed.
++  * Return TRUE if there is a match, FALSE if not.
+   */
+      int
+  vim_regexec_prog(prog, ignore_case, line, col)
+***************
+*** 8226,8231 ****
+--- 8225,8231 ----
+  
+  /*
+   * Note: "rmp->regprog" may be freed and changed.
++  * Return TRUE if there is a match, FALSE if not.
+   */
+      int
+  vim_regexec(rmp, line, col)
+***************
+*** 8241,8246 ****
+--- 8241,8247 ----
+  /*
+   * Like vim_regexec(), but consider a "\n" in "line" to be a line break.
+   * Note: "rmp->regprog" may be freed and changed.
++  * Return TRUE if there is a match, FALSE if not.
+   */
+      int
+  vim_regexec_nl(rmp, line, col)
+***************
+*** 8297,8301 ****
+  	p_re = save_p_re;
+      }
+  
+!     return result;
+  }
+--- 8298,8302 ----
+  	p_re = save_p_re;
+      }
+  
+!     return result <= 0 ? 0 : result;
+  }
+*** ../vim-7.4.525/src/version.c	2014-11-19 20:04:43.656099839 +0100
+--- src/version.c	2014-11-20 22:55:15.899663148 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     526,
+  /**/
+
+-- 
+Why don't cannibals eat clowns?
+Because they taste funny.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.527 b/SOURCES/7.4.527
new file mode 100644
index 0000000..ac2edcf
--- /dev/null
+++ b/SOURCES/7.4.527
@@ -0,0 +1,120 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.527
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.527
+Problem:    Still confusing regexp failure and NFA_TOO_EXPENSIVE.
+Solution:   NFA changes equivalent of 7.4.526.
+Files:	    src/regexp_nfa.c
+
+
+*** ../vim-7.4.526/src/regexp_nfa.c	2014-11-05 14:26:30.764758363 +0100
+--- src/regexp_nfa.c	2014-11-23 15:50:57.980625347 +0100
+***************
+*** 6767,6773 ****
+  
+  /*
+   * Try match of "prog" with at regline["col"].
+!  * Returns 0 for failure, number of lines contained in the match otherwise.
+   */
+      static long
+  nfa_regtry(prog, col)
+--- 6767,6773 ----
+  
+  /*
+   * Try match of "prog" with at regline["col"].
+!  * Returns <= 0 for failure, number of lines contained in the match otherwise.
+   */
+      static long
+  nfa_regtry(prog, col)
+***************
+*** 6897,6903 ****
+   * Match a regexp against a string ("line" points to the string) or multiple
+   * lines ("line" is NULL, use reg_getline()).
+   *
+!  * Returns 0 for failure, number of lines contained in the match otherwise.
+   */
+      static long
+  nfa_regexec_both(line, startcol)
+--- 6897,6903 ----
+   * Match a regexp against a string ("line" points to the string) or multiple
+   * lines ("line" is NULL, use reg_getline()).
+   *
+!  * Returns <= 0 for failure, number of lines contained in the match otherwise.
+   */
+      static long
+  nfa_regexec_both(line, startcol)
+***************
+*** 7137,7143 ****
+   * Uses curbuf for line count and 'iskeyword'.
+   * If "line_lbr" is TRUE consider a "\n" in "line" to be a line break.
+   *
+!  * Return TRUE if there is a match, FALSE if not.
+   */
+      static int
+  nfa_regexec_nl(rmp, line, col, line_lbr)
+--- 7137,7143 ----
+   * Uses curbuf for line count and 'iskeyword'.
+   * If "line_lbr" is TRUE consider a "\n" in "line" to be a line break.
+   *
+!  * Returns <= 0 for failure, number of lines contained in the match otherwise.
+   */
+      static int
+  nfa_regexec_nl(rmp, line, col, line_lbr)
+***************
+*** 7157,7163 ****
+      ireg_icombine = FALSE;
+  #endif
+      ireg_maxcol = 0;
+!     return (nfa_regexec_both(line, col) != 0);
+  }
+  
+  
+--- 7157,7163 ----
+      ireg_icombine = FALSE;
+  #endif
+      ireg_maxcol = 0;
+!     return nfa_regexec_both(line, col);
+  }
+  
+  
+***************
+*** 7166,7172 ****
+   * "rmp->regprog" is a compiled regexp as returned by vim_regcomp().
+   * Uses curbuf for line count and 'iskeyword'.
+   *
+!  * Return zero if there is no match.  Return number of lines contained in the
+   * match otherwise.
+   *
+   * Note: the body is the same as bt_regexec() except for nfa_regexec_both()
+--- 7166,7172 ----
+   * "rmp->regprog" is a compiled regexp as returned by vim_regcomp().
+   * Uses curbuf for line count and 'iskeyword'.
+   *
+!  * Return <= 0 if there is no match.  Return number of lines contained in the
+   * match otherwise.
+   *
+   * Note: the body is the same as bt_regexec() except for nfa_regexec_both()
+*** ../vim-7.4.526/src/version.c	2014-11-20 23:07:00.515474686 +0100
+--- src/version.c	2014-11-23 15:53:23.170981186 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     527,
+  /**/
+
+-- 
+"I know that there are people who don't love their fellow man,
+and I hate those people!" - Tom Lehrer
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.528 b/SOURCES/7.4.528
new file mode 100644
index 0000000..decf8fb
--- /dev/null
+++ b/SOURCES/7.4.528
@@ -0,0 +1,62 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.528
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.528
+Problem:    Crash when using matchadd() (Yasuhiro Matsumoto)
+Solution:   Copy the match regprog.
+Files:	    src/screen.c
+
+
+*** ../vim-7.4.527/src/screen.c	2014-11-19 13:21:24.984724043 +0100
+--- src/screen.c	2014-11-27 13:26:05.754837048 +0100
+***************
+*** 7588,7593 ****
+--- 7588,7599 ----
+  	shl->lnum = lnum;
+  	if (shl->rm.regprog != NULL)
+  	{
++ 	    /* Remember whether shl->rm is using a copy of the regprog in
++ 	     * cur->match. */
++ 	    int regprog_is_copy = (shl != &search_hl && cur != NULL
++ 				&& shl == &cur->hl
++ 				&& cur->match.regprog == cur->hl.rm.regprog);
++ 
+  	    nmatched = vim_regexec_multi(&shl->rm, win, shl->buf, lnum,
+  		    matchcol,
+  #ifdef FEAT_RELTIME
+***************
+*** 7596,7601 ****
+--- 7602,7611 ----
+  		    NULL
+  #endif
+  		    );
++ 	    /* Copy the regprog, in case it got freed and recompiled. */
++ 	    if (regprog_is_copy)
++ 		cur->match.regprog = cur->hl.rm.regprog;
++ 
+  	    if (called_emsg || got_int)
+  	    {
+  		/* Error while handling regexp: stop using this regexp. */
+*** ../vim-7.4.527/src/version.c	2014-11-23 15:57:45.568009419 +0100
+--- src/version.c	2014-11-27 13:28:07.393495013 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     528,
+  /**/
+
+-- 
+FATAL ERROR! SYSTEM HALTED! - Press any key to continue doing nothing.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.529 b/SOURCES/7.4.529
new file mode 100644
index 0000000..68c35e8
--- /dev/null
+++ b/SOURCES/7.4.529
@@ -0,0 +1,224 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.529
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.529
+Problem:    No test for what 7.4.517 fixes.
+Solution:   Adjust the tests for breakindent. (Christian Brabandt)
+Files:	    src/testdir/test_breakindent.in, src/testdir/test_breakindent.ok
+
+
+*** ../vim-7.4.528/src/testdir/test_breakindent.in	2014-08-24 21:39:45.488526954 +0200
+--- src/testdir/test_breakindent.in	2014-11-27 14:04:39.349335102 +0100
+***************
+*** 6,23 ****
+  :10new|:vsp|:vert resize 20
+  :put =\"\tabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP\"
+  :set ts=4 sw=4 sts=4 breakindent
+! :fu! ScreenChar(width)
+  :	let c=''
+  :	for i in range(1,a:width)
+! :		let c.=nr2char(screenchar(line('.'), i))
+  :	endfor
+  :       let c.="\n"
+  :	for i in range(1,a:width)
+! :		let c.=nr2char(screenchar(line('.')+1, i))
+  :	endfor
+  :       let c.="\n"
+  :	for i in range(1,a:width)
+! :		let c.=nr2char(screenchar(line('.')+2, i))
+  :	endfor
+  :	return c
+  :endfu
+--- 6,23 ----
+  :10new|:vsp|:vert resize 20
+  :put =\"\tabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP\"
+  :set ts=4 sw=4 sts=4 breakindent
+! :fu! ScreenChar(line, width)
+  :	let c=''
+  :	for i in range(1,a:width)
+! :		let c.=nr2char(screenchar(a:line, i))
+  :	endfor
+  :       let c.="\n"
+  :	for i in range(1,a:width)
+! :		let c.=nr2char(screenchar(a:line+1, i))
+  :	endfor
+  :       let c.="\n"
+  :	for i in range(1,a:width)
+! :		let c.=nr2char(screenchar(a:line+2, i))
+  :	endfor
+  :	return c
+  :endfu
+***************
+*** 29,71 ****
+  :endfu
+  :set briopt=min:0
+  :let g:test="Test 1: Simple breakindent"
+! :let line1=ScreenChar(8)
+  :call DoRecordScreen()
+  :let g:test="Test 2: Simple breakindent + sbr=>>"
+  :set sbr=>>
+! :let line1=ScreenChar(8)
+  :call DoRecordScreen()
+  :let g:test ="Test 3: Simple breakindent + briopt:sbr"
+  :set briopt=sbr,min:0 sbr=++
+! :let line1=ScreenChar(8)
+  :call DoRecordScreen()
+  :let g:test ="Test 4: Simple breakindent + min width: 18"
+  :set sbr= briopt=min:18
+! :let line1=ScreenChar(8)
+  :call DoRecordScreen()
+  :let g:test =" Test 5: Simple breakindent + shift by 2"
+  :set briopt=shift:2,min:0
+! :let line1=ScreenChar(8)
+  :call DoRecordScreen()
+  :let g:test=" Test 6: Simple breakindent + shift by -1"
+  :set briopt=shift:-1,min:0
+! :let line1=ScreenChar(8)
+  :call DoRecordScreen()
+  :let g:test=" Test 7: breakindent + shift by +1 + nu + sbr=? briopt:sbr"
+  :set briopt=shift:1,sbr,min:0 nu sbr=? nuw=4
+! :let line1=ScreenChar(10)
+  :call DoRecordScreen()
+  :let g:test=" Test 8: breakindent + shift:1 + nu + sbr=# list briopt:sbr"
+  :set briopt=shift:1,sbr,min:0 nu sbr=# list
+! :let line1=ScreenChar(10)
+  :call DoRecordScreen()
+  :let g:test=" Test 9: breakindent + shift by +1 + 'nu' + sbr=# list"
+  :set briopt-=sbr
+! :let line1=ScreenChar(10)
+  :call DoRecordScreen()
+  :let g:test=" Test 10: breakindent + shift by +1 + 'nu' + sbr=~ cpo+=n"
+  :set cpo+=n sbr=~ nu nuw=4 nolist briopt=sbr,min:0
+! :let line1=ScreenChar(10)
+  :call DoRecordScreen()
+  :wincmd p
+  :let g:test="\n Test 11: strdisplaywidth when breakindent is on"
+--- 29,71 ----
+  :endfu
+  :set briopt=min:0
+  :let g:test="Test 1: Simple breakindent"
+! :let line1=ScreenChar(line('.'),8)
+  :call DoRecordScreen()
+  :let g:test="Test 2: Simple breakindent + sbr=>>"
+  :set sbr=>>
+! :let line1=ScreenChar(line('.'),8)
+  :call DoRecordScreen()
+  :let g:test ="Test 3: Simple breakindent + briopt:sbr"
+  :set briopt=sbr,min:0 sbr=++
+! :let line1=ScreenChar(line('.'),8)
+  :call DoRecordScreen()
+  :let g:test ="Test 4: Simple breakindent + min width: 18"
+  :set sbr= briopt=min:18
+! :let line1=ScreenChar(line('.'),8)
+  :call DoRecordScreen()
+  :let g:test =" Test 5: Simple breakindent + shift by 2"
+  :set briopt=shift:2,min:0
+! :let line1=ScreenChar(line('.'),8)
+  :call DoRecordScreen()
+  :let g:test=" Test 6: Simple breakindent + shift by -1"
+  :set briopt=shift:-1,min:0
+! :let line1=ScreenChar(line('.'),8)
+  :call DoRecordScreen()
+  :let g:test=" Test 7: breakindent + shift by +1 + nu + sbr=? briopt:sbr"
+  :set briopt=shift:1,sbr,min:0 nu sbr=? nuw=4
+! :let line1=ScreenChar(line('.'),10)
+  :call DoRecordScreen()
+  :let g:test=" Test 8: breakindent + shift:1 + nu + sbr=# list briopt:sbr"
+  :set briopt=shift:1,sbr,min:0 nu sbr=# list
+! :let line1=ScreenChar(line('.'),10)
+  :call DoRecordScreen()
+  :let g:test=" Test 9: breakindent + shift by +1 + 'nu' + sbr=# list"
+  :set briopt-=sbr
+! :let line1=ScreenChar(line('.'),10)
+  :call DoRecordScreen()
+  :let g:test=" Test 10: breakindent + shift by +1 + 'nu' + sbr=~ cpo+=n"
+  :set cpo+=n sbr=~ nu nuw=4 nolist briopt=sbr,min:0
+! :let line1=ScreenChar(line('.'),10)
+  :call DoRecordScreen()
+  :wincmd p
+  :let g:test="\n Test 11: strdisplaywidth when breakindent is on"
+***************
+*** 74,79 ****
+--- 74,87 ----
+  :let width = strlen(text[1:])+indent(2)*4+strlen(&sbr)*3 " text wraps 3 times
+  :$put =g:test
+  :$put =printf(\"strdisplaywidth: %d == calculated: %d\", strdisplaywidth(text), width)
++ :let g:str="\t\t\t\t\t{"
++ :let g:test=" Test 12: breakindent + long indent"
++ :wincmd p
++ :set all& breakindent linebreak briopt=min:10 nu numberwidth=3 ts=4
++ :$put =g:str
++ zt:let line1=ScreenChar(1,10)
++ :wincmd p
++ :call DoRecordScreen()
+  :"
+  :" Test, that the string "    a\tb\tc\td\te" is correctly
+  :" displayed in a 20 column wide window (see bug report
+***************
+*** 87,93 ****
+  :?^\s*z
+  fygjyl:let line2 = @0
+  :quit!
+! :$put ='Test 12: breakindent with wrapping Tab'
+  :$put =line1
+  :$put =line2
+  :"
+--- 95,101 ----
+  :?^\s*z
+  fygjyl:let line2 = @0
+  :quit!
+! :$put ='Test 13: breakindent with wrapping Tab'
+  :$put =line1
+  :$put =line2
+  :"
+*** ../vim-7.4.528/src/testdir/test_breakindent.ok	2014-08-24 21:19:22.220571318 +0200
+--- src/testdir/test_breakindent.ok	2014-11-27 14:04:39.349335102 +0100
+***************
+*** 53,58 ****
+  
+   Test 11: strdisplaywidth when breakindent is on
+  strdisplaywidth: 46 == calculated: 64
+! Test 12: breakindent with wrapping Tab
+  d
+  w
+--- 53,64 ----
+  
+   Test 11: strdisplaywidth when breakindent is on
+  strdisplaywidth: 46 == calculated: 64
+! 					{
+! 
+!  Test 12: breakindent + long indent
+! 56        
+!           
+! ~         
+! Test 13: breakindent with wrapping Tab
+  d
+  w
+*** ../vim-7.4.528/src/version.c	2014-11-27 13:37:07.403539956 +0100
+--- src/version.c	2014-11-27 14:05:44.240619187 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     529,
+  /**/
+
+-- 
+(letter from Mark to Mike, about the film's probable certificate)
+      I would like to get back to the Censor and agree to lose the shits, take
+      the odd Jesus Christ out and lose Oh fuck off, but to retain 'fart in
+      your general direction', 'castanets of your testicles' and 'oral sex'
+      and ask him for an 'A' rating on that basis.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.531 b/SOURCES/7.4.531
new file mode 100644
index 0000000..6acf9a0
--- /dev/null
+++ b/SOURCES/7.4.531
@@ -0,0 +1,165 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.531
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.531
+Problem:    Comments about parsing an Ex command are wrong.
+Solution:   Correct the steop numbers.
+Files:	    src/ex_docmd.c
+
+
+*** ../vim-7.4.530/src/ex_docmd.c	2014-11-27 16:22:42.742413039 +0100
+--- src/ex_docmd.c	2014-11-27 16:37:22.164760647 +0100
+***************
+*** 1721,1728 ****
+   *
+   * 1. skip comment lines and leading space
+   * 2. handle command modifiers
+!  * 3. parse command
+   * 4. parse range
+   * 6. parse arguments
+   * 7. switch on command name
+   *
+--- 1721,1729 ----
+   *
+   * 1. skip comment lines and leading space
+   * 2. handle command modifiers
+!  * 3. find the command
+   * 4. parse range
++  * 5. Parse the command.
+   * 6. parse arguments
+   * 7. switch on command name
+   *
+***************
+*** 2335,2341 ****
+  	ea.forceit = FALSE;
+  
+  /*
+!  * 5. Parse arguments.
+   */
+      if (!IS_USER_CMDIDX(ea.cmdidx))
+  	ea.argt = (long)cmdnames[(int)ea.cmdidx].cmd_argt;
+--- 2336,2342 ----
+  	ea.forceit = FALSE;
+  
+  /*
+!  * 6. Parse arguments.
+   */
+      if (!IS_USER_CMDIDX(ea.cmdidx))
+  	ea.argt = (long)cmdnames[(int)ea.cmdidx].cmd_argt;
+***************
+*** 2782,2788 ****
+  #endif
+  
+  /*
+!  * 6. Switch on command name.
+   *
+   * The "ea" structure holds the arguments that can be used.
+   */
+--- 2783,2789 ----
+  #endif
+  
+  /*
+!  * 7. Switch on command name.
+   *
+   * The "ea" structure holds the arguments that can be used.
+   */
+***************
+*** 3319,3325 ****
+      ea.argt = 0;
+  
+  /*
+!  * 2. skip comment lines and leading space, colons or bars
+   */
+      for (cmd = buff; vim_strchr((char_u *)" \t:|", *cmd) != NULL; cmd++)
+  	;
+--- 3320,3326 ----
+      ea.argt = 0;
+  
+  /*
+!  * 1. skip comment lines and leading space, colons or bars
+   */
+      for (cmd = buff; vim_strchr((char_u *)" \t:|", *cmd) != NULL; cmd++)
+  	;
+***************
+*** 3334,3346 ****
+      }
+  
+  /*
+!  * 3. parse a range specifier of the form: addr [,addr] [;addr] ..
+   */
+      cmd = skip_range(cmd, &xp->xp_context);
+- 
+- /*
+-  * 4. parse command
+-  */
+      xp->xp_pattern = cmd;
+      if (*cmd == NUL)
+  	return NULL;
+--- 3335,3343 ----
+      }
+  
+  /*
+!  * 3. Skip over the range to find the command.
+   */
+      cmd = skip_range(cmd, &xp->xp_context);
+      xp->xp_pattern = cmd;
+      if (*cmd == NUL)
+  	return NULL;
+***************
+*** 3446,3452 ****
+      }
+  
+  /*
+!  * 5. parse arguments
+   */
+      if (!IS_USER_CMDIDX(ea.cmdidx))
+  	ea.argt = (long)cmdnames[(int)ea.cmdidx].cmd_argt;
+--- 3443,3449 ----
+      }
+  
+  /*
+!  * 6. parse arguments
+   */
+      if (!IS_USER_CMDIDX(ea.cmdidx))
+  	ea.argt = (long)cmdnames[(int)ea.cmdidx].cmd_argt;
+***************
+*** 3682,3688 ****
+      }
+  
+  /*
+!  * 6. switch on command name
+   */
+      switch (ea.cmdidx)
+      {
+--- 3679,3685 ----
+      }
+  
+  /*
+!  * 6. Switch on command name.
+   */
+      switch (ea.cmdidx)
+      {
+*** ../vim-7.4.530/src/version.c	2014-11-27 16:22:42.746412995 +0100
+--- src/version.c	2014-11-27 16:30:25.149339297 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     531,
+  /**/
+
+-- 
+Wi n0t trei a h0liday in Sweden thi yer?
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.532 b/SOURCES/7.4.532
new file mode 100644
index 0000000..88b12b9
--- /dev/null
+++ b/SOURCES/7.4.532
@@ -0,0 +1,141 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.532
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.532
+Problem:    When using 'incsearch' "2/pattern/e" highlights the first match.
+Solution:   Move the code to set extra_col inside the loop for count.  (Ozaki
+	    Kiichi)
+Files:	    src/search.c
+
+
+*** ../vim-7.4.531/src/search.c	2014-06-17 13:50:06.148087184 +0200
+--- src/search.c	2014-11-27 17:21:49.579489220 +0100
+***************
+*** 552,557 ****
+--- 552,558 ----
+      int		match_ok;
+      long	nmatched;
+      int		submatch = 0;
++     int		first_match = TRUE;
+      int		save_called_emsg = called_emsg;
+  #ifdef FEAT_SEARCH_EXTRA
+      int		break_loop = FALSE;
+***************
+*** 565,597 ****
+  	return FAIL;
+      }
+  
+-     /* When not accepting a match at the start position set "extra_col" to a
+-      * non-zero value.  Don't do that when starting at MAXCOL, since MAXCOL +
+-      * 1 is zero. */
+-     if ((options & SEARCH_START) || pos->col == MAXCOL)
+- 	extra_col = 0;
+- #ifdef FEAT_MBYTE
+-     /* Watch out for the "col" being MAXCOL - 2, used in a closed fold. */
+-     else if (dir != BACKWARD && has_mbyte
+- 		    && pos->lnum >= 1 && pos->lnum <= buf->b_ml.ml_line_count
+- 						     && pos->col < MAXCOL - 2)
+-     {
+- 	ptr = ml_get_buf(buf, pos->lnum, FALSE) + pos->col;
+- 	if (*ptr == NUL)
+- 	    extra_col = 1;
+- 	else
+- 	    extra_col = (*mb_ptr2len)(ptr);
+-     }
+- #endif
+-     else
+- 	extra_col = 1;
+- 
+      /*
+       * find the string
+       */
+      called_emsg = FALSE;
+      do	/* loop for count */
+      {
+  	start_pos = *pos;	/* remember start pos for detecting no match */
+  	found = 0;		/* default: not found */
+  	at_first_line = TRUE;	/* default: start in first line */
+--- 566,598 ----
+  	return FAIL;
+      }
+  
+      /*
+       * find the string
+       */
+      called_emsg = FALSE;
+      do	/* loop for count */
+      {
++ 	/* When not accepting a match at the start position set "extra_col" to
++ 	 * a non-zero value.  Don't do that when starting at MAXCOL, since
++ 	 * MAXCOL + 1 is zero. */
++ 	if ((options & SEARCH_START) || pos->col == MAXCOL)
++ 	    extra_col = 0;
++ #ifdef FEAT_MBYTE
++ 	/* Watch out for the "col" being MAXCOL - 2, used in a closed fold. */
++ 	else if (dir != BACKWARD && has_mbyte
++ 		     && pos->lnum >= 1 && pos->lnum <= buf->b_ml.ml_line_count
++ 						     && pos->col < MAXCOL - 2)
++ 	{
++ 	    ptr = ml_get_buf(buf, pos->lnum, FALSE) + pos->col;
++ 	    if (*ptr == NUL)
++ 		extra_col = 1;
++ 	    else
++ 		extra_col = (*mb_ptr2len)(ptr);
++ 	}
++ #endif
++ 	else
++ 	    extra_col = 1;
++ 
+  	start_pos = *pos;	/* remember start pos for detecting no match */
+  	found = 0;		/* default: not found */
+  	at_first_line = TRUE;	/* default: start in first line */
+***************
+*** 677,683 ****
+  			 * otherwise "/$" will get stuck on end of line.
+  			 */
+  			while (matchpos.lnum == 0
+! 				&& ((options & SEARCH_END)
+  				    ?  (nmatched == 1
+  					&& (int)endpos.col - 1
+  					     < (int)start_pos.col + extra_col)
+--- 678,684 ----
+  			 * otherwise "/$" will get stuck on end of line.
+  			 */
+  			while (matchpos.lnum == 0
+! 				&& ((options & SEARCH_END) && first_match
+  				    ?  (nmatched == 1
+  					&& (int)endpos.col - 1
+  					     < (int)start_pos.col + extra_col)
+***************
+*** 908,913 ****
+--- 909,915 ----
+  		    pos->coladd = 0;
+  #endif
+  		    found = 1;
++ 		    first_match = FALSE;
+  
+  		    /* Set variables used for 'incsearch' highlighting. */
+  		    search_match_lines = endpos.lnum - matchpos.lnum;
+*** ../vim-7.4.531/src/version.c	2014-11-27 16:38:07.652261234 +0100
+--- src/version.c	2014-11-27 17:29:13.762616760 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     532,
+  /**/
+
+-- 
+The most powerful force in the universe is gossip.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.533 b/SOURCES/7.4.533
new file mode 100644
index 0000000..3c22395
--- /dev/null
+++ b/SOURCES/7.4.533
@@ -0,0 +1,229 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.533
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.533
+Problem:    ":hardcopy" leaks memory in case of errors.
+Solution:   Free memory in all code paths. (Christian Brabandt)
+Files:	    src/hardcopy.c
+
+
+*** ../vim-7.4.532/src/hardcopy.c	2013-05-06 04:00:47.000000000 +0200
+--- src/hardcopy.c	2014-11-27 17:35:48.418285820 +0100
+***************
+*** 2960,2971 ****
+      if (!prt_find_resource("prolog", res_prolog))
+      {
+  	EMSG(_("E456: Can't find PostScript resource file \"prolog.ps\""));
+! 	return FALSE;
+      }
+      if (!prt_open_resource(res_prolog))
+! 	return FALSE;
+      if (!prt_check_resource(res_prolog, PRT_PROLOG_VERSION))
+! 	return FALSE;
+  #ifdef FEAT_MBYTE
+      if (prt_out_mbyte)
+      {
+--- 2960,2971 ----
+      if (!prt_find_resource("prolog", res_prolog))
+      {
+  	EMSG(_("E456: Can't find PostScript resource file \"prolog.ps\""));
+! 	goto theend;
+      }
+      if (!prt_open_resource(res_prolog))
+! 	goto theend;
+      if (!prt_check_resource(res_prolog, PRT_PROLOG_VERSION))
+! 	goto theend;
+  #ifdef FEAT_MBYTE
+      if (prt_out_mbyte)
+      {
+***************
+*** 2973,2984 ****
+  	if (!prt_find_resource("cidfont", res_cidfont))
+  	{
+  	    EMSG(_("E456: Can't find PostScript resource file \"cidfont.ps\""));
+! 	    return FALSE;
+  	}
+  	if (!prt_open_resource(res_cidfont))
+! 	    return FALSE;
+  	if (!prt_check_resource(res_cidfont, PRT_CID_PROLOG_VERSION))
+! 	    return FALSE;
+      }
+  #endif
+  
+--- 2973,2984 ----
+  	if (!prt_find_resource("cidfont", res_cidfont))
+  	{
+  	    EMSG(_("E456: Can't find PostScript resource file \"cidfont.ps\""));
+! 	    goto theend;
+  	}
+  	if (!prt_open_resource(res_cidfont))
+! 	    goto theend;
+  	if (!prt_check_resource(res_cidfont, PRT_CID_PROLOG_VERSION))
+! 	    goto theend;
+      }
+  #endif
+  
+***************
+*** 3012,3023 ****
+  		{
+  		    EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
+  			    p_encoding);
+! 		    return FALSE;
+  		}
+  	    }
+  	}
+  	if (!prt_open_resource(res_encoding))
+! 	    return FALSE;
+  	/* For the moment there are no checks on encoding resource files to
+  	 * perform */
+  #ifdef FEAT_MBYTE
+--- 3012,3023 ----
+  		{
+  		    EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
+  			    p_encoding);
+! 		    goto theend;
+  		}
+  	    }
+  	}
+  	if (!prt_open_resource(res_encoding))
+! 	    goto theend;
+  	/* For the moment there are no checks on encoding resource files to
+  	 * perform */
+  #ifdef FEAT_MBYTE
+***************
+*** 3034,3043 ****
+  	    {
+  		EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
+  							  prt_ascii_encoding);
+! 		return FALSE;
+  	    }
+  	    if (!prt_open_resource(res_encoding))
+! 		return FALSE;
+  	    /* For the moment there are no checks on encoding resource files to
+  	     * perform */
+  	}
+--- 3034,3043 ----
+  	    {
+  		EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
+  							  prt_ascii_encoding);
+! 		goto theend;
+  	    }
+  	    if (!prt_open_resource(res_encoding))
+! 		goto theend;
+  	    /* For the moment there are no checks on encoding resource files to
+  	     * perform */
+  	}
+***************
+*** 3050,3056 ****
+  	{
+  	    EMSG2(_("E620: Unable to convert to print encoding \"%s\""),
+  		    p_encoding);
+! 	    return FALSE;
+  	}
+  	prt_do_conv = TRUE;
+      }
+--- 3050,3056 ----
+  	{
+  	    EMSG2(_("E620: Unable to convert to print encoding \"%s\""),
+  		    p_encoding);
+! 	    goto theend;
+  	}
+  	prt_do_conv = TRUE;
+      }
+***************
+*** 3063,3072 ****
+  	{
+  	    EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
+  								    prt_cmap);
+! 	    return FALSE;
+  	}
+  	if (!prt_open_resource(res_cmap))
+! 	    return FALSE;
+      }
+  #endif
+  
+--- 3063,3072 ----
+  	{
+  	    EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
+  								    prt_cmap);
+! 	    goto theend;
+  	}
+  	if (!prt_open_resource(res_cmap))
+! 	    goto theend;
+      }
+  #endif
+  
+***************
+*** 3140,3154 ****
+  
+      /* Add required procsets - NOTE: order is important! */
+      if (!prt_add_resource(res_prolog))
+! 	return FALSE;
+  #ifdef FEAT_MBYTE
+      if (prt_out_mbyte)
+      {
+  	/* Add CID font procset, and any user supplied CMap */
+  	if (!prt_add_resource(res_cidfont))
+! 	    return FALSE;
+  	if (prt_custom_cmap && !prt_add_resource(res_cmap))
+! 	    return FALSE;
+      }
+  #endif
+  
+--- 3140,3154 ----
+  
+      /* Add required procsets - NOTE: order is important! */
+      if (!prt_add_resource(res_prolog))
+! 	goto theend;
+  #ifdef FEAT_MBYTE
+      if (prt_out_mbyte)
+      {
+  	/* Add CID font procset, and any user supplied CMap */
+  	if (!prt_add_resource(res_cidfont))
+! 	    goto theend;
+  	if (prt_custom_cmap && !prt_add_resource(res_cmap))
+! 	    goto theend;
+      }
+  #endif
+  
+***************
+*** 3158,3164 ****
+  	/* There will be only one Roman font encoding to be included in the PS
+  	 * file. */
+  	if (!prt_add_resource(res_encoding))
+! 	    return FALSE;
+  
+      prt_dsc_noarg("EndProlog");
+  
+--- 3158,3164 ----
+  	/* There will be only one Roman font encoding to be included in the PS
+  	 * file. */
+  	if (!prt_add_resource(res_encoding))
+! 	    goto theend;
+  
+      prt_dsc_noarg("EndProlog");
+  
+*** ../vim-7.4.532/src/version.c	2014-11-27 17:29:52.770188864 +0100
+--- src/version.c	2014-11-27 17:32:56.636171921 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     533,
+  /**/
+
+-- 
+People who want to share their religious views with you
+almost never want you to share yours with them.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.534 b/SOURCES/7.4.534
new file mode 100644
index 0000000..0328251
--- /dev/null
+++ b/SOURCES/7.4.534
@@ -0,0 +1,94 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.534
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.534
+Problem:    Warnings when compiling if_ruby.c.
+Solution:   Avoid the warnings. (Ken Takata)
+Files:	    src/if_ruby.c
+
+
+*** ../vim-7.4.533/src/if_ruby.c	2014-11-12 16:05:01.142042845 +0100
+--- src/if_ruby.c	2014-11-27 17:42:25.205922384 +0100
+***************
+*** 96,106 ****
+  # define rb_num2int rb_num2int_stub
+  #endif
+  
+! # if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 21
+  /* Ruby 2.1 adds new GC called RGenGC and RARRAY_PTR uses
+   * rb_gc_writebarrier_unprotect_promoted if USE_RGENGC  */
+! #  define rb_gc_writebarrier_unprotect_promoted rb_gc_writebarrier_unprotect_promoted_stub
+! # endif
+  
+  #include <ruby.h>
+  #ifdef RUBY19_OR_LATER
+--- 96,106 ----
+  # define rb_num2int rb_num2int_stub
+  #endif
+  
+! #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 21
+  /* Ruby 2.1 adds new GC called RGenGC and RARRAY_PTR uses
+   * rb_gc_writebarrier_unprotect_promoted if USE_RGENGC  */
+! # define rb_gc_writebarrier_unprotect_promoted rb_gc_writebarrier_unprotect_promoted_stub
+! #endif
+  
+  #include <ruby.h>
+  #ifdef RUBY19_OR_LATER
+***************
+*** 422,428 ****
+  # if defined(USE_RGENGC) && USE_RGENGC && !defined(PROTO)
+  void rb_gc_writebarrier_unprotect_promoted_stub(VALUE obj)
+  {
+!     return dll_rb_gc_writebarrier_unprotect_promoted(obj);
+  }
+  # endif
+  
+--- 422,428 ----
+  # if defined(USE_RGENGC) && USE_RGENGC && !defined(PROTO)
+  void rb_gc_writebarrier_unprotect_promoted_stub(VALUE obj)
+  {
+!     dll_rb_gc_writebarrier_unprotect_promoted(obj);
+  }
+  # endif
+  
+***************
+*** 763,769 ****
+  	    /* suggested by Ariya Mizutani */
+  	    int argc = 1;
+  	    char *argv[] = {"gvim.exe"};
+! 	    NtInitialize(&argc, &argv);
+  #endif
+  	    {
+  #if defined(RUBY19_OR_LATER) || defined(RUBY_INIT_STACK)
+--- 763,770 ----
+  	    /* suggested by Ariya Mizutani */
+  	    int argc = 1;
+  	    char *argv[] = {"gvim.exe"};
+! 	    char **argvp = argv;
+! 	    NtInitialize(&argc, &argvp);
+  #endif
+  	    {
+  #if defined(RUBY19_OR_LATER) || defined(RUBY_INIT_STACK)
+*** ../vim-7.4.533/src/version.c	2014-11-27 17:37:53.524909964 +0100
+--- src/version.c	2014-11-27 17:42:13.626049717 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     534,
+  /**/
+
+-- 
+This message contains 78% recycled characters.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.535 b/SOURCES/7.4.535
new file mode 100644
index 0000000..20c32ed
--- /dev/null
+++ b/SOURCES/7.4.535
@@ -0,0 +1,469 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.535
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.535 (after 7.4.530)
+Problem:    Can't build with tiny features.
+Solution:   Add #ifdefs and skip a test.
+Files:	    src/ex_docmd.c, src/testdir/test_argument_count.in
+
+
+*** ../vim-7.4.534/src/ex_docmd.c	2014-11-27 16:38:07.648261279 +0100
+--- src/ex_docmd.c	2014-11-27 18:12:30.874072643 +0100
+***************
+*** 1713,1718 ****
+--- 1713,1765 ----
+      return buf->b_fnum;
+  }
+  
++ #ifdef FEAT_WINDOWS
++ static int current_win_nr __ARGS((win_T *win));
++ static int current_tab_nr __ARGS((tabpage_T *tab));
++ 
++     static int
++ current_win_nr(win)
++     win_T	*win;
++ {
++     win_T	*wp;
++     int		nr = 0;
++ 
++     for (wp = firstwin; wp != NULL; wp = wp->w_next)
++     {
++ 	++nr;
++ 	if (wp == win)
++ 	    break;
++     }
++     return nr;
++ }
++ 
++     static int
++ current_tab_nr(tab)
++     tabpage_T   *tab;
++ {
++     tabpage_T	*tp;
++     int		nr = 0;
++ 
++     for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
++     {
++ 	++nr;
++ 	if (tp == tab)
++ 	    break;
++     }
++     return nr;
++ }
++ 
++ # define CURRENT_WIN_NR current_win_nr(curwin)
++ # define LAST_WIN_NR current_win_nr(NULL)
++ # define CURRENT_TAB_NR current_tab_nr(curtab)
++ # define LAST_TAB_NR current_tab_nr(NULL)
++ #else
++ # define CURRENT_WIN_NR 1
++ # define LAST_WIN_NR 1
++ # define CURRENT_TAB_NR 1
++ # define LAST_TAB_NR 1
++ #endif
++ 
+  
+  /*
+   * Execute one Ex command.
+***************
+*** 1765,1772 ****
+  #endif
+      cmdmod_T		save_cmdmod;
+      int			ni;			/* set when Not Implemented */
+-     win_T		*wp;
+-     tabpage_T		*tp;
+      char_u		*cmd;
+  
+      vim_memset(&ea, 0, sizeof(ea));
+--- 1812,1817 ----
+***************
+*** 2085,2097 ****
+  		ea.line2 = curwin->w_cursor.lnum;
+  		break;
+  	    case ADDR_WINDOWS:
+! 		lnum = 0;
+! 		for (wp = firstwin; wp != NULL; wp = wp->w_next)
+! 		{
+! 		    lnum++;
+! 		    if (wp == curwin)
+! 			break;
+! 		}
+  		ea.line2 = lnum;
+  		break;
+  	    case ADDR_ARGUMENTS:
+--- 2130,2136 ----
+  		ea.line2 = curwin->w_cursor.lnum;
+  		break;
+  	    case ADDR_WINDOWS:
+! 		lnum = CURRENT_WIN_NR;
+  		ea.line2 = lnum;
+  		break;
+  	    case ADDR_ARGUMENTS:
+***************
+*** 2102,2114 ****
+  		ea.line2 = curbuf->b_fnum;
+  		break;
+  	    case ADDR_TABS:
+! 		lnum = 0;
+! 		for(tp = first_tabpage; tp != NULL; tp = tp->tp_next)
+! 		{
+! 		    lnum++;
+! 		    if (tp == curtab)
+! 			break;
+! 		}
+  		ea.line2 = lnum;
+  		break;
+  	}
+--- 2141,2147 ----
+  		ea.line2 = curbuf->b_fnum;
+  		break;
+  	    case ADDR_TABS:
+! 		lnum = CURRENT_TAB_NR;
+  		ea.line2 = lnum;
+  		break;
+  	}
+***************
+*** 4198,4205 ****
+      pos_T	pos;
+      pos_T	*fp;
+      linenr_T	lnum;
+-     win_T	*wp;
+-     tabpage_T	*tp;
+  
+      cmd = skipwhite(*ptr);
+      lnum = MAXLNUM;
+--- 4231,4236 ----
+***************
+*** 4215,4227 ****
+  			lnum = curwin->w_cursor.lnum;
+  			break;
+  		    case ADDR_WINDOWS:
+! 			lnum = 0;
+! 			for (wp = firstwin; wp != NULL; wp = wp->w_next)
+! 			{
+! 			    lnum++;
+! 			    if (wp == curwin)
+! 				break;
+! 			}
+  			break;
+  		    case ADDR_ARGUMENTS:
+  			lnum = curwin->w_arg_idx + 1;
+--- 4246,4252 ----
+  			lnum = curwin->w_cursor.lnum;
+  			break;
+  		    case ADDR_WINDOWS:
+! 			lnum = CURRENT_WIN_NR;
+  			break;
+  		    case ADDR_ARGUMENTS:
+  			lnum = curwin->w_arg_idx + 1;
+***************
+*** 4231,4243 ****
+  			lnum = curbuf->b_fnum;
+  			break;
+  		    case ADDR_TABS:
+! 			lnum = 0;
+! 			for(tp = first_tabpage; tp != NULL; tp = tp->tp_next)
+! 			{
+! 			    lnum++;
+! 			    if (tp == curtab)
+! 				break;
+! 			}
+  			break;
+  		}
+  		break;
+--- 4256,4262 ----
+  			lnum = curbuf->b_fnum;
+  			break;
+  		    case ADDR_TABS:
+! 			lnum = CURRENT_TAB_NR;
+  			break;
+  		}
+  		break;
+***************
+*** 4250,4258 ****
+  			lnum = curbuf->b_ml.ml_line_count;
+  			break;
+  		    case ADDR_WINDOWS:
+! 			lnum = 0;
+! 			for (wp = firstwin; wp != NULL; wp = wp->w_next)
+! 			    lnum++;
+  			break;
+  		    case ADDR_ARGUMENTS:
+  			lnum = ARGCOUNT;
+--- 4269,4275 ----
+  			lnum = curbuf->b_ml.ml_line_count;
+  			break;
+  		    case ADDR_WINDOWS:
+! 			lnum = LAST_WIN_NR;
+  			break;
+  		    case ADDR_ARGUMENTS:
+  			lnum = ARGCOUNT;
+***************
+*** 4262,4270 ****
+  			lnum = lastbuf->b_fnum;
+  			break;
+  		    case ADDR_TABS:
+! 			lnum = 0;
+! 			for(tp = first_tabpage; tp != NULL; tp = tp->tp_next)
+! 			    lnum++;
+  			break;
+  		}
+  		break;
+--- 4279,4285 ----
+  			lnum = lastbuf->b_fnum;
+  			break;
+  		    case ADDR_TABS:
+! 			lnum = LAST_TAB_NR;
+  			break;
+  		}
+  		break;
+***************
+*** 4419,4434 ****
+  		switch (addr_type)
+  		{
+  		    case ADDR_LINES:
+! 			lnum = curwin->w_cursor.lnum;	/* "+1" is same as ".+1" */
+  			break;
+  		    case ADDR_WINDOWS:
+! 			lnum = 0;
+! 			for (wp = firstwin; wp != NULL; wp = wp->w_next)
+! 			{
+! 			    lnum++;
+! 			    if (wp == curwin)
+! 				break;
+! 			}
+  			break;
+  		    case ADDR_ARGUMENTS:
+  			lnum = curwin->w_arg_idx + 1;
+--- 4434,4444 ----
+  		switch (addr_type)
+  		{
+  		    case ADDR_LINES:
+! 			/* "+1" is same as ".+1" */
+! 			lnum = curwin->w_cursor.lnum;
+  			break;
+  		    case ADDR_WINDOWS:
+! 			lnum = CURRENT_WIN_NR;
+  			break;
+  		    case ADDR_ARGUMENTS:
+  			lnum = curwin->w_arg_idx + 1;
+***************
+*** 4438,4450 ****
+  			lnum = curbuf->b_fnum;
+  			break;
+  		    case ADDR_TABS:
+! 			lnum = 0;
+! 			for(tp = first_tabpage; tp != NULL; tp = tp->tp_next)
+! 			{
+! 			    lnum++;
+! 			    if (tp == curtab)
+! 				break;
+! 			}
+  			break;
+  		}
+  	    }
+--- 4448,4454 ----
+  			lnum = curbuf->b_fnum;
+  			break;
+  		    case ADDR_TABS:
+! 			lnum = CURRENT_TAB_NR;
+  			break;
+  		}
+  	    }
+***************
+*** 4481,4489 ****
+  			lnum = 0;
+  			break;
+  		    }
+! 		    c = 0;
+! 		    for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
+! 			c++;
+  		    if (lnum >= c)
+  			lnum = c;
+  		    break;
+--- 4485,4491 ----
+  			lnum = 0;
+  			break;
+  		    }
+! 		    c = LAST_TAB_NR;
+  		    if (lnum >= c)
+  			lnum = c;
+  		    break;
+***************
+*** 4493,4501 ****
+  			lnum = 0;
+  			break;
+  		    }
+! 		    c = 0;
+! 		    for (wp = firstwin; wp != NULL; wp = wp->w_next)
+! 			c++;
+  		    if (lnum > c)
+  			lnum = c;
+  		    break;
+--- 4495,4501 ----
+  			lnum = 0;
+  			break;
+  		    }
+! 		    c = LAST_WIN_NR;
+  		    if (lnum > c)
+  			lnum = c;
+  		    break;
+***************
+*** 6805,6819 ****
+  }
+  
+  /*
+!  * ":quit": quit current window, quit Vim if closed the last window.
+   */
+      static void
+  ex_quit(eap)
+      exarg_T	*eap;
+  {
+      win_T	*wp;
+!     buf_T	*buf;
+!     int		wnr;
+  
+  #ifdef FEAT_CMDWIN
+      if (cmdwin_type != 0)
+--- 6805,6819 ----
+  }
+  
+  /*
+!  * ":quit": quit current window, quit Vim if the last window is closed.
+   */
+      static void
+  ex_quit(eap)
+      exarg_T	*eap;
+  {
++ #if defined(FEAT_WINDOWS) || defined(FEAT_AUTOCMD)
+      win_T	*wp;
+! #endif
+  
+  #ifdef FEAT_CMDWIN
+      if (cmdwin_type != 0)
+***************
+*** 6828,6855 ****
+  	text_locked_msg();
+  	return;
+      }
+      if (eap->addr_count > 0)
+      {
+! 	wnr = eap->line2;
+! 	for (wp = firstwin; --wnr > 0; )
+! 	{
+! 	    if (wp->w_next == NULL)
+  		break;
+- 	    else
+- 		wp = wp->w_next;
+- 	}
+- 	buf = wp->w_buffer;
+      }
+      else
+!     {
+  	wp = curwin;
+! 	buf = curbuf;
+!     }
+  #ifdef FEAT_AUTOCMD
+      apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, curbuf);
+      /* Refuse to quit when locked or when the buffer in the last window is
+       * being closed (can only happen in autocommands). */
+!     if (curbuf_locked() || (buf->b_nwindows == 1 && buf->b_closing))
+  	return;
+  #endif
+  
+--- 6828,6854 ----
+  	text_locked_msg();
+  	return;
+      }
++ #ifdef FEAT_WINDOWS
+      if (eap->addr_count > 0)
+      {
+! 	int	wnr = eap->line2;
+! 
+! 	for (wp = firstwin; wp->w_next != NULL; wp = wp->w_next)
+! 	    if (--wnr <= 0)
+  		break;
+      }
+      else
+! #endif
+! #if defined(FEAT_WINDOWS) || defined(FEAT_AUTOCMD)
+  	wp = curwin;
+! #endif
+! 
+  #ifdef FEAT_AUTOCMD
+      apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, curbuf);
+      /* Refuse to quit when locked or when the buffer in the last window is
+       * being closed (can only happen in autocommands). */
+!     if (curbuf_locked() || (wp->w_buffer->b_nwindows == 1
+! 						  && wp->w_buffer->b_closing))
+  	return;
+  #endif
+  
+***************
+*** 7214,7222 ****
+  ex_hide(eap)
+      exarg_T	*eap;
+  {
+-     win_T	*win;
+-     int		winnr = 0;
+- 
+      if (*eap->arg != NUL && check_nextcmd(eap->arg) == NULL)
+  	eap->errmsg = e_invarg;
+      else
+--- 7213,7218 ----
+***************
+*** 7231,7237 ****
+  # endif
+  	    if (eap->addr_count == 0)
+  		win_close(curwin, FALSE);	/* don't free buffer */
+! 	    else {
+  		for (win = firstwin; win != NULL; win = win->w_next)
+  		{
+  		    winnr++;
+--- 7227,7237 ----
+  # endif
+  	    if (eap->addr_count == 0)
+  		win_close(curwin, FALSE);	/* don't free buffer */
+! 	    else
+! 	    {
+! 		int	winnr = 0;
+! 		win_T	*win;
+! 
+  		for (win = firstwin; win != NULL; win = win->w_next)
+  		{
+  		    winnr++;
+*** ../vim-7.4.534/src/testdir/test_argument_count.in	2014-11-27 16:22:42.746412995 +0100
+--- src/testdir/test_argument_count.in	2014-11-27 18:21:05.568408375 +0100
+***************
+*** 1,6 ****
+--- 1,7 ----
+  Tests for :[count]argument! and :[count]argdelete     vim: set ft=vim :
+  
+  STARTTEST
++ :so small.vim
+  :%argd
+  :argadd a b c d
+  :set hidden
+*** ../vim-7.4.534/src/version.c	2014-11-27 17:44:05.380820867 +0100
+--- src/version.c	2014-11-27 18:30:32.826167330 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     535,
+  /**/
+
+-- 
+Mushrooms always grow in damp places and so they look like umbrellas.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.536 b/SOURCES/7.4.536
new file mode 100644
index 0000000..4d32a95
--- /dev/null
+++ b/SOURCES/7.4.536
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.536
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.536
+Problem:    Test 63 fails when using a black&white terminal.
+Solution:   Add attributes for a non-color terminal. (Christian Brabandt)
+Files:	    src/testdir/test63.in
+
+
+*** ../vim-7.4.535/src/testdir/test63.in	2014-08-16 16:28:31.882272056 +0200
+--- src/testdir/test63.in	2014-11-27 18:38:27.936941297 +0100
+***************
+*** 7,15 ****
+  :" --- Check that "matcharg()" returns the correct group and pattern if a match
+  :" --- is defined.
+  :let @r = "*** Test 1: "
+! :highlight MyGroup1 ctermbg=red guibg=red
+! :highlight MyGroup2 ctermbg=green guibg=green
+! :highlight MyGroup3 ctermbg=blue guibg=blue
+  :match MyGroup1 /TODO/
+  :2match MyGroup2 /FIXME/
+  :3match MyGroup3 /XXX/
+--- 7,15 ----
+  :" --- Check that "matcharg()" returns the correct group and pattern if a match
+  :" --- is defined.
+  :let @r = "*** Test 1: "
+! :highlight MyGroup1 term=bold ctermbg=red guibg=red
+! :highlight MyGroup2 term=italic ctermbg=green guibg=green
+! :highlight MyGroup3 term=underline ctermbg=blue guibg=blue
+  :match MyGroup1 /TODO/
+  :2match MyGroup2 /FIXME/
+  :3match MyGroup3 /XXX/
+*** ../vim-7.4.535/src/version.c	2014-11-27 18:32:58.532564506 +0100
+--- src/version.c	2014-11-27 18:37:25.493628091 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     536,
+  /**/
+
+-- 
+To keep milk from turning sour: Keep it in the cow.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.537 b/SOURCES/7.4.537
new file mode 100644
index 0000000..982a06c
--- /dev/null
+++ b/SOURCES/7.4.537
@@ -0,0 +1,120 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.537
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.537
+Problem:    Value of v:hlsearch reflects an internal variable.
+Solution:   Make the value reflect whether search highlighting is actually
+	    displayed. (Christian Brabandt)
+Files:	    runtime/doc/eval.txt, src/testdir/test101.in,
+	    src/testdir/test101.ok, src/vim.h
+
+
+*** ../vim-7.4.536/runtime/doc/eval.txt	2014-11-05 18:05:48.652441306 +0100
+--- runtime/doc/eval.txt	2014-11-27 19:05:43.646912096 +0100
+***************
+*** 1457,1466 ****
+  		Read-only in the |sandbox|. |fold-foldtext|
+  
+  					*v:hlsearch* *hlsearch-variable*
+! v:hlsearch	Variable that determines whether search highlighting is on. 
+! 		Makes sense only if 'hlsearch' is enabled which requires 
+! 		|+extra_search|. Setting this variable to zero acts the like 
+! 		|:nohlsearch| command, setting it to one acts like >
+  			let &hlsearch = &hlsearch
+  <
+  					*v:insertmode* *insertmode-variable*
+--- 1457,1466 ----
+  		Read-only in the |sandbox|. |fold-foldtext|
+  
+  					*v:hlsearch* *hlsearch-variable*
+! v:hlsearch	Variable that indicates whether search highlighting is on. 
+! 		Setting it makes sense only if 'hlsearch' is enabled which
+! 		requires |+extra_search|. Setting this variable to zero acts
+! 		the like |:nohlsearch| command, setting it to one acts like >
+  			let &hlsearch = &hlsearch
+  <
+  					*v:insertmode* *insertmode-variable*
+*** ../vim-7.4.536/src/testdir/test101.in	2013-11-08 04:30:06.000000000 +0100
+--- src/testdir/test101.in	2014-11-27 19:07:09.509965031 +0100
+***************
+*** 25,30 ****
+--- 25,33 ----
+  :AddR
+  /
+  :AddR
++ :set nohls
++ /
++ :AddR
+  :let r1=r[0][0]
+  :" I guess it is not guaranteed that screenattr outputs always the same character
+  :call map(r, 'v:val[1].":".(v:val[0]==r1?"highlighted":"not highlighted")')
+*** ../vim-7.4.536/src/testdir/test101.ok	2013-11-08 04:30:06.000000000 +0100
+--- src/testdir/test101.ok	2014-11-27 19:07:09.509965031 +0100
+***************
+*** 8,11 ****
+--- 8,12 ----
+  1:highlighted
+  0:not highlighted
+  1:highlighted
++ 0:not highlighted
+  Vim(let):E706:
+*** ../vim-7.4.536/src/vim.h	2014-08-29 12:58:38.246430208 +0200
+--- src/vim.h	2014-11-27 19:07:09.509965031 +0100
+***************
+*** 1998,2004 ****
+  
+  #ifndef FEAT_VIRTUALEDIT
+  # define getvvcol(w, p, s, c, e) getvcol(w, p, s, c, e)
+! # define virtual_active() 0
+  # define virtual_op FALSE
+  #endif
+  
+--- 1998,2004 ----
+  
+  #ifndef FEAT_VIRTUALEDIT
+  # define getvvcol(w, p, s, c, e) getvcol(w, p, s, c, e)
+! # define virtual_active() FALSE
+  # define virtual_op FALSE
+  #endif
+  
+***************
+*** 2277,2283 ****
+  #define AUTOLOAD_CHAR '#'
+  
+  #ifdef FEAT_EVAL
+! # define SET_NO_HLSEARCH(flag) no_hlsearch = (flag); set_vim_var_nr(VV_HLSEARCH, !no_hlsearch)
+  #else
+  # define SET_NO_HLSEARCH(flag) no_hlsearch = (flag)
+  #endif
+--- 2277,2283 ----
+  #define AUTOLOAD_CHAR '#'
+  
+  #ifdef FEAT_EVAL
+! # define SET_NO_HLSEARCH(flag) no_hlsearch = (flag); set_vim_var_nr(VV_HLSEARCH, !no_hlsearch && p_hls)
+  #else
+  # define SET_NO_HLSEARCH(flag) no_hlsearch = (flag)
+  #endif
+*** ../vim-7.4.536/src/version.c	2014-11-27 18:57:07.472605147 +0100
+--- src/version.c	2014-11-27 19:07:39.973629032 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     537,
+  /**/
+
+-- 
+A M00se once bit my sister ...
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.538 b/SOURCES/7.4.538
new file mode 100644
index 0000000..ddd4619
--- /dev/null
+++ b/SOURCES/7.4.538
@@ -0,0 +1,162 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.538
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.538
+Problem:    Tests fail with small features plus Python.
+Solution:   Disallow weird combination of options.  Do not set "fdm" when
+	    folding is disabled.
+Files:	    src/option.c, src/ex_cmds.c, src/configure.in, src/auto/configure,
+	    src/feature.h
+
+
+*** ../vim-7.4.537/src/option.c	2014-11-19 19:33:13.369532180 +0100
+--- src/option.c	2014-11-30 12:56:25.150896626 +0100
+***************
+*** 5575,5580 ****
+--- 5575,5581 ----
+  	if (idx < 0)	/* not found (should not happen) */
+  	{
+  	    EMSG2(_(e_intern2), "set_string_option_direct()");
++ 	    EMSG2(_("For option %s"), name);
+  	    return;
+  	}
+      }
+*** ../vim-7.4.537/src/ex_cmds.c	2014-11-12 19:28:12.682661756 +0100
+--- src/ex_cmds.c	2014-11-30 12:58:01.761820052 +0100
+***************
+*** 6200,6208 ****
+--- 6200,6210 ----
+  	(void)buf_init_chartab(curbuf, FALSE);
+      }
+  
++ #ifdef FEAT_FOLDING
+      /* Don't use the global foldmethod.*/
+      set_string_option_direct((char_u *)"fdm", -1, (char_u *)"manual",
+  						       OPT_FREE|OPT_LOCAL, 0);
++ #endif
+  
+      curbuf->b_p_ts = 8;		/* 'tabstop' is 8 */
+      curwin->w_p_list = FALSE;	/* no list mode */
+*** ../vim-7.4.537/src/configure.in	2014-10-11 14:47:22.817275547 +0200
+--- src/configure.in	2014-11-30 13:16:17.549623303 +0100
+***************
+*** 1041,1046 ****
+--- 1041,1050 ----
+  	[enable_pythoninterp="no"])
+  AC_MSG_RESULT($enable_pythoninterp)
+  if test "$enable_pythoninterp" = "yes" -o "$enable_pythoninterp" = "dynamic"; then
++   if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
++     AC_MSG_ERROR([cannot use Python with tiny or small features])
++   fi
++ 
+    dnl -- find the python executable
+    AC_PATH_PROGS(vi_cv_path_python, python2 python)
+    if test "X$vi_cv_path_python" != "X"; then
+***************
+*** 1243,1248 ****
+--- 1247,1256 ----
+  	[enable_python3interp="no"])
+  AC_MSG_RESULT($enable_python3interp)
+  if test "$enable_python3interp" = "yes" -o "$enable_python3interp" = "dynamic"; then
++   if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
++     AC_MSG_ERROR([cannot use Python with tiny or small features])
++   fi
++ 
+    dnl -- find the python3 executable
+    AC_PATH_PROGS(vi_cv_path_python3, python3 python)
+    if test "X$vi_cv_path_python3" != "X"; then
+***************
+*** 1720,1725 ****
+--- 1728,1737 ----
+  	[enable_rubyinterp="no"])
+  AC_MSG_RESULT($enable_rubyinterp)
+  if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
++   if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
++     AC_MSG_ERROR([cannot use Ruby with tiny or small features])
++   fi
++ 
+    AC_MSG_CHECKING(--with-ruby-command argument)
+    AC_SUBST(vi_cv_path_ruby)
+    AC_ARG_WITH(ruby-command, [  --with-ruby-command=RUBY  name of the Ruby command (default: ruby)],
+*** ../vim-7.4.537/src/auto/configure	2014-10-11 14:47:22.825275547 +0200
+--- src/auto/configure	2014-11-30 13:16:24.781542840 +0100
+***************
+*** 5728,5733 ****
+--- 5728,5737 ----
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_pythoninterp" >&5
+  $as_echo "$enable_pythoninterp" >&6; }
+  if test "$enable_pythoninterp" = "yes" -o "$enable_pythoninterp" = "dynamic"; then
++   if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
++     as_fn_error $? "cannot use Python with tiny or small features" "$LINENO" 5
++   fi
++ 
+      for ac_prog in python2 python
+  do
+    # Extract the first word of "$ac_prog", so it can be a program name with args.
+***************
+*** 6044,6049 ****
+--- 6048,6057 ----
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_python3interp" >&5
+  $as_echo "$enable_python3interp" >&6; }
+  if test "$enable_python3interp" = "yes" -o "$enable_python3interp" = "dynamic"; then
++   if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
++     as_fn_error $? "cannot use Python with tiny or small features" "$LINENO" 5
++   fi
++ 
+      for ac_prog in python3 python
+  do
+    # Extract the first word of "$ac_prog", so it can be a program name with args.
+***************
+*** 6929,6934 ****
+--- 6937,6946 ----
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_rubyinterp" >&5
+  $as_echo "$enable_rubyinterp" >&6; }
+  if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
++   if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
++     as_fn_error $? "cannot use Ruby with tiny or small features" "$LINENO" 5
++   fi
++ 
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking --with-ruby-command argument" >&5
+  $as_echo_n "checking --with-ruby-command argument... " >&6; }
+  
+*** ../vim-7.4.537/src/feature.h	2014-03-23 15:12:29.943264337 +0100
+--- src/feature.h	2014-11-30 13:22:11.997681089 +0100
+***************
+*** 385,397 ****
+  #endif
+  
+  /*
+-  * +python and +python3 require FEAT_EVAL.
+-  */
+- #if !defined(FEAT_EVAL) && (defined(FEAT_PYTHON3) || defined(FEAT_PYTHON))
+- # define FEAT_EVAL
+- #endif
+- 
+- /*
+   * +profile		Profiling for functions and scripts.
+   */
+  #if defined(FEAT_HUGE) \
+--- 385,390 ----
+*** ../vim-7.4.537/src/version.c	2014-11-27 19:14:45.080940970 +0100
+--- src/version.c	2014-11-30 13:22:33.565441297 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     538,
+  /**/
+
+-- 
+Computers make very fast, very accurate, mistakes.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.539 b/SOURCES/7.4.539
new file mode 100644
index 0000000..b6e42ca
--- /dev/null
+++ b/SOURCES/7.4.539
@@ -0,0 +1,258 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.539
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.539 (after 7.4.530)
+Problem:    Crash when computing buffer count.  Problem with range for user
+	    commands.  Line range wrong in Visual area.
+Solution:   Avoid segfault in compute_buffer_local_count().  Check for
+	    CMD_USER when checking type of range. (Marcin Szamotulski)
+Files:	    runtime/doc/windows.txt, src/ex_docmd.c
+
+
+*** ../vim-7.4.538/runtime/doc/windows.txt	2014-11-27 16:22:42.738413084 +0100
+--- runtime/doc/windows.txt	2014-11-30 14:34:30.241835431 +0100
+***************
+*** 1026,1032 ****
+  		Actually, the buffer isn't completely deleted, it is removed
+  		from the buffer list |unlisted-buffer| and option values,
+  		variables and mappings/abbreviations for the buffer are
+! 		cleared.
+  
+  :bdelete[!] {bufname}						*E93* *E94*
+  		Like ":bdelete[!] [N]", but buffer given by name.  Note that a
+--- 1029,1039 ----
+  		Actually, the buffer isn't completely deleted, it is removed
+  		from the buffer list |unlisted-buffer| and option values,
+  		variables and mappings/abbreviations for the buffer are
+! 		cleared. Examples: >
+! 		    :.,$-bdelete    " delete buffers from the current one to
+! 				    " last but one
+! 		    :%bdelete	    " delete all buffers
+! <
+  
+  :bdelete[!] {bufname}						*E93* *E94*
+  		Like ":bdelete[!] [N]", but buffer given by name.  Note that a
+***************
+*** 1050,1056 ****
+  		Like |:bdelete|, but really delete the buffer.  Everything
+  		related to the buffer is lost.  All marks in this buffer
+  		become invalid, option settings are lost, etc.  Don't use this
+! 		unless you know what you are doing.
+  
+  :[N]bun[load][!]				*:bun* *:bunload* *E515*
+  :bun[load][!] [N]
+--- 1057,1067 ----
+  		Like |:bdelete|, but really delete the buffer.  Everything
+  		related to the buffer is lost.  All marks in this buffer
+  		become invalid, option settings are lost, etc.  Don't use this
+! 		unless you know what you are doing. Examples: >
+! 		    :.+,$bwipeout   " wipe out all buffers after the current
+! 				    " one
+! 		    :%bwipeout	    " wipe out all buffers
+! <
+  
+  :[N]bun[load][!]				*:bun* *:bunload* *E515*
+  :bun[load][!] [N]
+*** ../vim-7.4.538/src/ex_docmd.c	2014-11-27 18:32:58.528564550 +0100
+--- src/ex_docmd.c	2014-11-30 14:40:28.521847466 +0100
+***************
+*** 1694,1699 ****
+--- 1694,1700 ----
+      int	    offset;
+  {
+      buf_T   *buf;
++     buf_T   *nextbuf;
+      int     count = offset;
+  
+      buf = firstbuf;
+***************
+*** 1701,1715 ****
+  	buf = buf->b_next;
+      while (count != 0)
+      {
+! 	count += (count < 0) ? 1 : -1;
+! 	if (buf->b_prev == NULL)
+  	    break;
+! 	buf = (count < 0) ? buf->b_prev : buf->b_next;
+  	if (addr_type == ADDR_LOADED_BUFFERS)
+  	    /* skip over unloaded buffers */
+! 	    while (buf->b_prev != NULL && buf->b_ml.ml_mfp == NULL)
+! 		buf = (count < 0) ? buf->b_prev : buf->b_next;
+      }
+      return buf->b_fnum;
+  }
+  
+--- 1702,1731 ----
+  	buf = buf->b_next;
+      while (count != 0)
+      {
+! 	count += (offset < 0) ? 1 : -1;
+! 	nextbuf = (offset < 0) ? buf->b_prev : buf->b_next;
+! 	if (nextbuf == NULL)
+  	    break;
+! 	buf = nextbuf;
+  	if (addr_type == ADDR_LOADED_BUFFERS)
+  	    /* skip over unloaded buffers */
+! 	    while (buf->b_ml.ml_mfp == NULL)
+! 	    {
+! 		nextbuf = (offset < 0) ? buf->b_prev : buf->b_next;
+! 		if (nextbuf == NULL)
+! 		    break;
+! 		buf = nextbuf;
+! 	    }
+      }
++     /* we might have gone too far, last buffer is not loadedd */
++     if (addr_type == ADDR_LOADED_BUFFERS)
++ 	while (buf->b_ml.ml_mfp == NULL)
++ 	{
++ 	    nextbuf = (offset >= 0) ? buf->b_prev : buf->b_next;
++ 	    if (nextbuf == NULL)
++ 		break;
++ 	    buf = nextbuf;
++ 	}
+      return buf->b_fnum;
+  }
+  
+***************
+*** 2113,2119 ****
+   * is equal to the lower.
+   */
+  
+!     if (ea.cmdidx != CMD_SIZE)
+  	ea.addr_type = cmdnames[(int)ea.cmdidx].cmd_addr_type;
+      else
+  	ea.addr_type = ADDR_LINES;
+--- 2129,2135 ----
+   * is equal to the lower.
+   */
+  
+!     if (ea.cmdidx != CMD_USER && ea.cmdidx != CMD_SIZE)
+  	ea.addr_type = cmdnames[(int)ea.cmdidx].cmd_addr_type;
+      else
+  	ea.addr_type = ADDR_LINES;
+***************
+*** 2153,2158 ****
+--- 2169,2175 ----
+  	{
+  	    if (*ea.cmd == '%')		    /* '%' - all lines */
+  	    {
++ 		buf_T	*buf;
+  		++ea.cmd;
+  		switch (ea.addr_type)
+  		{
+***************
+*** 2160,2168 ****
+  			ea.line1 = 1;
+  			ea.line2 = curbuf->b_ml.ml_line_count;
+  			break;
+- 		    case ADDR_WINDOWS:
+  		    case ADDR_LOADED_BUFFERS:
+  		    case ADDR_UNLOADED_BUFFERS:
+  		    case ADDR_TABS:
+  			errormsg = (char_u *)_(e_invrange);
+  			goto doend;
+--- 2177,2197 ----
+  			ea.line1 = 1;
+  			ea.line2 = curbuf->b_ml.ml_line_count;
+  			break;
+  		    case ADDR_LOADED_BUFFERS:
++ 			buf = firstbuf;
++ 			while (buf->b_next != NULL && buf->b_ml.ml_mfp == NULL)
++ 			    buf = buf->b_next;
++ 			ea.line1 = buf->b_fnum;
++ 			buf = lastbuf;
++ 			while (buf->b_prev != NULL && buf->b_ml.ml_mfp == NULL)
++ 			    buf = buf->b_prev;
++ 			ea.line2 = buf->b_fnum;
++ 			break;
+  		    case ADDR_UNLOADED_BUFFERS:
++ 			ea.line1 = firstbuf->b_fnum;
++ 			ea.line2 = lastbuf->b_fnum;
++ 			break;
++ 		    case ADDR_WINDOWS:
+  		    case ADDR_TABS:
+  			errormsg = (char_u *)_(e_invrange);
+  			goto doend;
+***************
+*** 4463,4469 ****
+  		n = getdigits(&cmd);
+  	    if (addr_type == ADDR_LOADED_BUFFERS
+  		    || addr_type == ADDR_UNLOADED_BUFFERS)
+! 		lnum = compute_buffer_local_count(addr_type, lnum, n);
+  	    else if (i == '-')
+  		lnum -= n;
+  	    else
+--- 4492,4498 ----
+  		n = getdigits(&cmd);
+  	    if (addr_type == ADDR_LOADED_BUFFERS
+  		    || addr_type == ADDR_UNLOADED_BUFFERS)
+! 		lnum = compute_buffer_local_count(addr_type, lnum, (i == '-') ? -1 * n : n);
+  	    else if (i == '-')
+  		lnum -= n;
+  	    else
+***************
+*** 4485,4493 ****
+  			lnum = 0;
+  			break;
+  		    }
+! 		    c = LAST_TAB_NR;
+! 		    if (lnum >= c)
+! 			lnum = c;
+  		    break;
+  		case ADDR_WINDOWS:
+  		    if (lnum < 0)
+--- 4514,4521 ----
+  			lnum = 0;
+  			break;
+  		    }
+! 		    if (lnum >= LAST_TAB_NR)
+! 			lnum = LAST_TAB_NR;
+  		    break;
+  		case ADDR_WINDOWS:
+  		    if (lnum < 0)
+***************
+*** 4495,4503 ****
+  			lnum = 0;
+  			break;
+  		    }
+! 		    c = LAST_WIN_NR;
+! 		    if (lnum > c)
+! 			lnum = c;
+  		    break;
+  		case ADDR_LOADED_BUFFERS:
+  		case ADDR_UNLOADED_BUFFERS:
+--- 4523,4530 ----
+  			lnum = 0;
+  			break;
+  		    }
+! 		    if (lnum >= LAST_WIN_NR)
+! 			lnum = LAST_WIN_NR;
+  		    break;
+  		case ADDR_LOADED_BUFFERS:
+  		case ADDR_UNLOADED_BUFFERS:
+*** ../vim-7.4.538/src/version.c	2014-11-30 13:34:16.893626683 +0100
+--- src/version.c	2014-11-30 14:33:29.622510487 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     539,
+  /**/
+
+-- 
+SOLDIER: What?  Ridden on a horse?
+ARTHUR:  Yes!
+SOLDIER: You're using coconuts!
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.540 b/SOURCES/7.4.540
new file mode 100644
index 0000000..685fb7a
--- /dev/null
+++ b/SOURCES/7.4.540
@@ -0,0 +1,58 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.540
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.540 (after 7.4.539)
+Problem:    Cannot build with tiny and small features. (Taro Muraoka)
+Solution:   Add #ifdef around CMD_USER.
+Files:	    src/ex_docmd.c
+
+
+*** ../vim-7.4.539/src/ex_docmd.c	2014-11-30 14:50:12.259356186 +0100
+--- src/ex_docmd.c	2014-11-30 22:32:24.213687119 +0100
+***************
+*** 2129,2135 ****
+   * is equal to the lower.
+   */
+  
+!     if (ea.cmdidx != CMD_USER && ea.cmdidx != CMD_SIZE)
+  	ea.addr_type = cmdnames[(int)ea.cmdidx].cmd_addr_type;
+      else
+  	ea.addr_type = ADDR_LINES;
+--- 2129,2139 ----
+   * is equal to the lower.
+   */
+  
+!     if (ea.cmdidx != CMD_SIZE
+! #ifdef FEAT_USR_CMDS
+! 	&& ea.cmdidx != CMD_USER
+! #endif
+!        )
+  	ea.addr_type = cmdnames[(int)ea.cmdidx].cmd_addr_type;
+      else
+  	ea.addr_type = ADDR_LINES;
+*** ../vim-7.4.539/src/version.c	2014-11-30 14:50:12.259356186 +0100
+--- src/version.c	2014-11-30 22:34:06.820539874 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     540,
+  /**/
+
+-- 
+SECOND SOLDIER: It could be carried by an African swallow!
+FIRST SOLDIER:  Oh  yes! An African swallow maybe ... but not a European
+                swallow. that's my point.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.541 b/SOURCES/7.4.541
new file mode 100644
index 0000000..27f407b
--- /dev/null
+++ b/SOURCES/7.4.541
@@ -0,0 +1,86 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.541
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.541
+Problem:    Crash when doing a range assign.
+Solution:   Check for NULL poiter. (Yukihiro Nakadaira)
+Files:	    src/eval.c, src/testdir/test55.in, src/testdir/test55.ok
+
+
+*** ../vim-7.4.540/src/eval.c	2014-11-19 20:04:43.656099839 +0100
+--- src/eval.c	2014-12-07 00:05:47.404278920 +0100
+***************
+*** 2951,2957 ****
+  	/*
+  	 * Check whether any of the list items is locked
+  	 */
+! 	for (ri = rettv->vval.v_list->lv_first; ri != NULL; )
+  	{
+  	    if (tv_check_lock(ll_li->li_tv.v_lock, lp->ll_name))
+  		return;
+--- 2951,2957 ----
+  	/*
+  	 * Check whether any of the list items is locked
+  	 */
+! 	for (ri = rettv->vval.v_list->lv_first; ri != NULL && ll_li != NULL; )
+  	{
+  	    if (tv_check_lock(ll_li->li_tv.v_lock, lp->ll_name))
+  		return;
+*** ../vim-7.4.540/src/testdir/test55.in	2014-08-29 09:46:04.262404970 +0200
+--- src/testdir/test55.in	2014-12-07 00:04:41.892976604 +0100
+***************
+*** 401,406 ****
+--- 401,411 ----
+  :  $put =v:exception[:15] . v:exception[-1:-1]
+  :endtry
+  :$put =string(d)
++ :"
++ :" test for range assign
++ :let l = [0]
++ :let l[:] = [1, 2]
++ :$put =string(l)
+  :endfun
+  :"
+  :call Test(1, 2, [3, 4], {5: 6})  " This may take a while
+*** ../vim-7.4.540/src/testdir/test55.ok	2014-08-29 09:46:04.266404970 +0200
+--- src/testdir/test55.ok	2014-12-07 00:05:08.208695651 +0100
+***************
+*** 129,134 ****
+--- 129,135 ----
+  {'a': {'b': 'B'}}
+  Vim(call):E737: a
+  {'a': {'b': 'B'}}
++ [1, 2]
+  Vim(foldopen):E490:
+  
+  
+*** ../vim-7.4.540/src/version.c	2014-11-30 22:51:00.629191482 +0100
+--- src/version.c	2014-12-07 00:04:11.237300854 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     541,
+  /**/
+
+-- 
+Any resemblance between the above views and those of my employer, my terminal,
+or the view out my window are purely coincidental.  Any resemblance between
+the above and my own views is non-deterministic.  The question of the
+existence of views in the absence of anyone to hold them is left as an
+exercise for the reader.  The question of the existence of the reader is left
+as an exercise for the second god coefficient.  (A discussion of
+non-orthogonal, non-integral polytheism is beyond the scope of this article.)
+						(Ralph Jennings)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.542 b/SOURCES/7.4.542
new file mode 100644
index 0000000..9532766
--- /dev/null
+++ b/SOURCES/7.4.542
@@ -0,0 +1,992 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.5
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.542
+Problem:    Using a range for window and buffer commands has a few problems.
+	    Cannot specify the type of range for a user command.
+Solution:   Add the -addr argument for user commands.  Fix problems. (Marcin
+	    Szamotulski)
+Files:	    src/testdir/test_command_count.in,
+	    src/testdir/test_command_count.ok src/testdir/Make_amiga.mak
+	    src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+	    src/testdir/Make_os2.mak, src/testdir/Make_vms.mms,
+	    src/testdir/Makefile, runtime/doc/map.txt, src/Makefile,
+	    src/ex_cmds.h, src/ex_docmd.c, src/ex_getln.c,
+	    src/proto/ex_docmd.pro, src/vim.h,
+
+
+*** ../vim-7.4.541/src/testdir/test_command_count.in	2014-12-08 04:12:53.163981827 +0100
+--- src/testdir/test_command_count.in	2014-12-08 03:25:41.562266976 +0100
+***************
+*** 0 ****
+--- 1,50 ----
++ Test for user command counts	    vim: set ft=vim :
++ 
++ STARTTEST
++ :let g:lines = []
++ :so tiny.vim
++ :com -range RangeLines :call add(g:lines, 'Rangeg:Lines '.<line1>.' '.<line2>)
++ :com -range -addr=arguments RangeArguments :call add(g:lines, 'RangeArguments '.<line1>.' '.<line2>)
++ :com -range=% -addr=arguments RangeArgumentsAll :call add(g:lines, 'RangeArgumentsAll '.<line1>.' '.<line2>)
++ :com -range -addr=loaded_buffers RangeLoadedBuffers :call add(g:lines, 'RangeLoadedBuffers '.<line1>.' '.<line2>)
++ :com -range=% -addr=loaded_buffers RangeLoadedBuffersAll :call add(g:lines, 'RangeLoadedBuffersAll '.<line1>.' '.<line2>)
++ :com -range -addr=buffers RangeBuffers :call add(g:lines, 'RangeBuffers '.<line1>.' '.<line2>)
++ :com -range=% -addr=buffers RangeBuffersAll :call add(g:lines, 'RangeBuffersAll '.<line1>.' '.<line2>)
++ :com -range -addr=windows RangeWindows :call add(g:lines, 'RangeWindows '.<line1>.' '.<line2>)
++ :com -range=% -addr=windows RangeWindowsAll :call add(g:lines, 'RangeWindowsAll '.<line1>.' '.<line2>)
++ :com -range -addr=tabs RangeTabs :call add(g:lines, 'RangeTabs '.<line1>.' '.<line2>)
++ :com -range=% -addr=tabs RangeTabsAll :call add(g:lines, 'RangeTabsAll '.<line1>.' '.<line2>)
++ :set hidden
++ :arga a b c d
++ :argdo echo "loading buffers"
++ :argu 3
++ :.-,$-RangeArguments
++ :%RangeArguments
++ :RangeArgumentsAll
++ :N
++ :.RangeArguments
++ :split|split|split|split
++ :3wincmd w
++ :.,$RangeWindows
++ :%RangeWindows
++ :RangeWindowsAll
++ :only
++ :blast|bd
++ :.,$RangeLoadedBuffers
++ :%RangeLoadedBuffers
++ :RangeLoadedBuffersAll
++ :.,$RangeBuffers
++ :%RangeBuffers
++ :RangeBuffersAll
++ :tabe|tabe|tabe|tabe
++ :normal 2gt
++ :.,$RangeTabs
++ :%RangeTabs
++ :RangeTabsAll
++ :1tabonly
++ :e! test.out
++ :call append(0, g:lines)
++ :w|qa!
++ ENDTEST
++ 
++ 
+*** ../vim-7.4.541/src/testdir/test_command_count.ok	2014-12-08 04:12:53.163981827 +0100
+--- src/testdir/test_command_count.ok	2014-12-08 03:26:11.769943969 +0100
+***************
+*** 0 ****
+--- 1,17 ----
++ RangeArguments 2 4
++ RangeArguments 1 5
++ RangeArgumentsAll 1 5
++ RangeArguments 2 2
++ RangeWindows 3 5
++ RangeWindows 1 5
++ RangeWindowsAll 1 5
++ RangeLoadedBuffers 2 4
++ RangeLoadedBuffers 1 4
++ RangeLoadedBuffersAll 1 4
++ RangeBuffers 2 5
++ RangeBuffers 1 5
++ RangeBuffersAll 1 5
++ RangeTabs 2 5
++ RangeTabs 1 5
++ RangeTabsAll 1 5
++ 
+*** ../vim-7.4.541/src/testdir/Make_amiga.mak	2014-11-27 16:22:42.742413039 +0100
+--- src/testdir/Make_amiga.mak	2014-12-08 03:28:30.984456524 +0100
+***************
+*** 41,46 ****
+--- 41,47 ----
+  		test_breakindent.out \
+  		test_changelist.out \
+  		test_close_count.out \
++ 		test_command_count.out \
+  		test_eval.out \
+  		test_insertcount.out \
+  		test_listlbr.out \
+***************
+*** 178,183 ****
+--- 179,185 ----
+  test_breakindent.out: test_breakindent.in
+  test_changelist.out: test_changelist.in
+  test_close_count.out: test_close_count.in
++ test_command_count.out: test_command_count.in
+  test_eval.out: test_eval.in
+  test_insertcount.out: test_insertcount.in
+  test_listlbr.out: test_listlbr.in
+*** ../vim-7.4.541/src/testdir/Make_dos.mak	2014-11-27 16:22:42.742413039 +0100
+--- src/testdir/Make_dos.mak	2014-12-08 03:28:43.168326713 +0100
+***************
+*** 40,45 ****
+--- 40,46 ----
+  		test_breakindent.out \
+  		test_changelist.out \
+  		test_close_count.out \
++ 		test_command_count.out \
+  		test_eval.out \
+  		test_insertcount.out \
+  		test_listlbr.out \
+*** ../vim-7.4.541/src/testdir/Make_ming.mak	2014-11-27 16:22:42.742413039 +0100
+--- src/testdir/Make_ming.mak	2014-12-08 03:28:54.020208323 +0100
+***************
+*** 62,67 ****
+--- 62,68 ----
+  		test_breakindent.out \
+  		test_changelist.out \
+  		test_close_count.out \
++ 		test_command_count.out \
+  		test_eval.out \
+  		test_insertcount.out \
+  		test_listlbr.out \
+*** ../vim-7.4.541/src/testdir/Make_os2.mak	2014-11-27 16:22:42.742413039 +0100
+--- src/testdir/Make_os2.mak	2014-12-08 03:29:03.304108543 +0100
+***************
+*** 42,47 ****
+--- 42,48 ----
+  		test_breakindent.out \
+  		test_changelist.out \
+  		test_close_count.out \
++ 		test_command_count.out \
+  		test_eval.out \
+  		test_insertcount.out \
+  		test_listlbr.out \
+*** ../vim-7.4.541/src/testdir/Make_vms.mms	2014-11-27 16:22:42.746412995 +0100
+--- src/testdir/Make_vms.mms	2014-12-08 03:29:12.596009487 +0100
+***************
+*** 4,10 ****
+  # Authors:	Zoltan Arpadffy, <arpadffy@polarhome.com>
+  #		Sandor Kopanyi,  <sandor.kopanyi@mailbox.hu>
+  #
+! # Last change:  2014 Nov 27
+  #
+  # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+  # Edit the lines in the Configuration section below to select.
+--- 4,10 ----
+  # Authors:	Zoltan Arpadffy, <arpadffy@polarhome.com>
+  #		Sandor Kopanyi,  <sandor.kopanyi@mailbox.hu>
+  #
+! # Last change:  2014 Dec 08
+  #
+  # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+  # Edit the lines in the Configuration section below to select.
+***************
+*** 101,106 ****
+--- 101,107 ----
+  	 test_breakindent.out \
+  	 test_changelist.out \
+  	 test_close_count.out \
++ 	 test_command_count.out \
+  	 test_eval.out \
+  	 test_insertcount.out \
+  	 test_listlbr.out \
+*** ../vim-7.4.541/src/testdir/Makefile	2014-11-27 16:22:42.746412995 +0100
+--- src/testdir/Makefile	2014-12-08 03:29:36.519753429 +0100
+***************
+*** 38,43 ****
+--- 38,44 ----
+  		test_breakindent.out \
+  		test_changelist.out \
+  		test_close_count.out \
++ 		test_command_count.out \
+  		test_eval.out \
+  		test_insertcount.out \
+  		test_listlbr.out \
+*** ../vim-7.4.541/runtime/doc/map.txt	2014-02-23 23:38:58.820760280 +0100
+--- runtime/doc/map.txt	2014-12-08 03:33:48.569056762 +0100
+***************
+*** 1344,1349 ****
+--- 1358,1376 ----
+  Note that -range=N and -count=N are mutually exclusive - only one should be
+  specified.
+  
++ 					*E889* *:command-addr*
++ It is possible that the special characters in the range like ., $ or % which
++ by default correspond to the current line, last line and the whole buffer,
++ relate to arguments, (loaded) buffers, windows or tab pages.
++ 
++ Possible values are:
++ 	-addr=lines		Range of lines (this is the default)
++ 	-addr=arguments		Range for arguments
++ 	-addr=buffers		Range for buffers (also not loaded buffers)
++ 	-addr=loaded_buffers	Range for loaded buffers
++ 	-addr=windows		Range for windows
++ 	-addr=tabs		Range for tab pages
++ 
+  Special cases				*:command-bang* *:command-bar*
+  					*:command-register* *:command-buffer*
+  There are some special cases as well:
+*** ../vim-7.4.541/src/Makefile	2014-11-27 16:22:42.738413084 +0100
+--- src/Makefile	2014-12-08 03:30:06.167435718 +0100
+***************
+*** 1896,1901 ****
+--- 1896,1902 ----
+  	test_breakindent \
+  	test_changelist \
+  	test_close_count \
++ 	test_command_count \
+  	test_eval \
+  	test_insertcount \
+  	test_listlbr \
+*** ../vim-7.4.541/src/ex_cmds.h	2014-11-27 16:22:42.742413039 +0100
+--- src/ex_cmds.h	2014-12-08 03:30:59.278867940 +0100
+***************
+*** 63,69 ****
+  #define ADDR_WINDOWS		1
+  #define ADDR_ARGUMENTS		2
+  #define ADDR_LOADED_BUFFERS	3
+! #define ADDR_UNLOADED_BUFFERS	4
+  #define ADDR_TABS		5
+  
+  #ifndef DO_DECLARE_EXCMD
+--- 63,69 ----
+  #define ADDR_WINDOWS		1
+  #define ADDR_ARGUMENTS		2
+  #define ADDR_LOADED_BUFFERS	3
+! #define ADDR_BUFFERS	4
+  #define ADDR_TABS		5
+  
+  #ifndef DO_DECLARE_EXCMD
+***************
+*** 161,167 ****
+  			ADDR_LINES),
+  EX(CMD_buffer,		"buffer",	ex_buffer,
+  			BANG|RANGE|NOTADR|BUFNAME|BUFUNL|COUNT|EXTRA|EDITCMD|TRLBAR,
+! 			ADDR_UNLOADED_BUFFERS),
+  EX(CMD_bNext,		"bNext",	ex_bprevious,
+  			BANG|RANGE|NOTADR|COUNT|EDITCMD|TRLBAR,
+  			ADDR_LINES),
+--- 161,167 ----
+  			ADDR_LINES),
+  EX(CMD_buffer,		"buffer",	ex_buffer,
+  			BANG|RANGE|NOTADR|BUFNAME|BUFUNL|COUNT|EXTRA|EDITCMD|TRLBAR,
+! 			ADDR_BUFFERS),
+  EX(CMD_bNext,		"bNext",	ex_bprevious,
+  			BANG|RANGE|NOTADR|COUNT|EDITCMD|TRLBAR,
+  			ADDR_LINES),
+***************
+*** 227,233 ****
+  			ADDR_LOADED_BUFFERS),
+  EX(CMD_bwipeout,	"bwipeout",	ex_bunload,
+  			BANG|RANGE|NOTADR|BUFNAME|BUFUNL|COUNT|EXTRA|TRLBAR,
+! 			ADDR_UNLOADED_BUFFERS),
+  EX(CMD_change,		"change",	ex_change,
+  			BANG|WHOLEFOLD|RANGE|COUNT|TRLBAR|CMDWIN|MODIFY,
+  			ADDR_LINES),
+--- 227,233 ----
+  			ADDR_LOADED_BUFFERS),
+  EX(CMD_bwipeout,	"bwipeout",	ex_bunload,
+  			BANG|RANGE|NOTADR|BUFNAME|BUFUNL|COUNT|EXTRA|TRLBAR,
+! 			ADDR_BUFFERS),
+  EX(CMD_change,		"change",	ex_change,
+  			BANG|WHOLEFOLD|RANGE|COUNT|TRLBAR|CMDWIN|MODIFY,
+  			ADDR_LINES),
+***************
+*** 1184,1190 ****
+  			ADDR_LINES),
+  EX(CMD_sbuffer,		"sbuffer",	ex_buffer,
+  			BANG|RANGE|NOTADR|BUFNAME|BUFUNL|COUNT|EXTRA|EDITCMD|TRLBAR,
+! 			ADDR_UNLOADED_BUFFERS),
+  EX(CMD_sbNext,		"sbNext",	ex_bprevious,
+  			RANGE|NOTADR|COUNT|EDITCMD|TRLBAR,
+  			ADDR_LINES),
+--- 1184,1190 ----
+  			ADDR_LINES),
+  EX(CMD_sbuffer,		"sbuffer",	ex_buffer,
+  			BANG|RANGE|NOTADR|BUFNAME|BUFUNL|COUNT|EXTRA|EDITCMD|TRLBAR,
+! 			ADDR_BUFFERS),
+  EX(CMD_sbNext,		"sbNext",	ex_bprevious,
+  			RANGE|NOTADR|COUNT|EDITCMD|TRLBAR,
+  			ADDR_LINES),
+*** ../vim-7.4.541/src/ex_docmd.c	2014-11-30 22:51:00.629191482 +0100
+--- src/ex_docmd.c	2014-12-08 04:00:14.540095591 +0100
+***************
+*** 27,32 ****
+--- 27,33 ----
+      char_u	*uc_rep;	/* The command's replacement string */
+      long	uc_def;		/* The default value for a range/count */
+      int		uc_compl;	/* completion type */
++     int		uc_addr_type;	/* The command's address type */
+  # ifdef FEAT_EVAL
+      scid_T	uc_scriptID;	/* SID where the command was defined */
+  #  ifdef FEAT_CMDL_COMPL
+***************
+*** 2136,2142 ****
+--- 2137,2147 ----
+         )
+  	ea.addr_type = cmdnames[(int)ea.cmdidx].cmd_addr_type;
+      else
++ #ifdef FEAT_USR_CMDS
++ 	if (ea.cmdidx != CMD_USER)
++ #endif
+  	ea.addr_type = ADDR_LINES;
++     /* ea.addr_type for user commands is set by find_ucmd */
+      ea.cmd = cmd;
+  
+      /* repeat for all ',' or ';' separated addresses */
+***************
+*** 2157,2163 ****
+  		ea.line2 = curwin->w_arg_idx + 1;
+  		break;
+  	    case ADDR_LOADED_BUFFERS:
+! 	    case ADDR_UNLOADED_BUFFERS:
+  		ea.line2 = curbuf->b_fnum;
+  		break;
+  	    case ADDR_TABS:
+--- 2162,2168 ----
+  		ea.line2 = curwin->w_arg_idx + 1;
+  		break;
+  	    case ADDR_LOADED_BUFFERS:
+! 	    case ADDR_BUFFERS:
+  		ea.line2 = curbuf->b_fnum;
+  		break;
+  	    case ADDR_TABS:
+***************
+*** 2191,2208 ****
+  			    buf = buf->b_prev;
+  			ea.line2 = buf->b_fnum;
+  			break;
+! 		    case ADDR_UNLOADED_BUFFERS:
+  			ea.line1 = firstbuf->b_fnum;
+  			ea.line2 = lastbuf->b_fnum;
+  			break;
+  		    case ADDR_WINDOWS:
+  		    case ADDR_TABS:
+! 			errormsg = (char_u *)_(e_invrange);
+! 			goto doend;
+  			break;
+  		    case ADDR_ARGUMENTS:
+! 			ea.line1 = 1;
+! 			ea.line2 = ARGCOUNT;
+  			break;
+  		}
+  		++ea.addr_count;
+--- 2196,2229 ----
+  			    buf = buf->b_prev;
+  			ea.line2 = buf->b_fnum;
+  			break;
+! 		    case ADDR_BUFFERS:
+  			ea.line1 = firstbuf->b_fnum;
+  			ea.line2 = lastbuf->b_fnum;
+  			break;
+  		    case ADDR_WINDOWS:
+  		    case ADDR_TABS:
+! 			if (IS_USER_CMDIDX(ea.cmdidx))
+! 			{
+! 			    ea.line1 = 1;
+! 			    ea.line2 = ea.addr_type == ADDR_WINDOWS
+! 						  ? LAST_WIN_NR : LAST_TAB_NR;
+! 			}
+! 			else
+! 			{
+! 			    /* there is no Vim command which uses '%' and
+! 			     * ADDR_WINDOWS or ADDR_TABS */
+! 			    errormsg = (char_u *)_(e_invrange);
+! 			    goto doend;
+! 			}
+  			break;
+  		    case ADDR_ARGUMENTS:
+! 			if (ARGCOUNT == 0)
+! 			    ea.line1 = ea.line2 = 0;
+! 			else
+! 			{
+! 			    ea.line1 = 1;
+! 			    ea.line2 = ARGCOUNT;
+! 			}
+  			break;
+  		}
+  		++ea.addr_count;
+***************
+*** 2629,2636 ****
+  
+      if ((ea.argt & DFLALL) && ea.addr_count == 0)
+      {
+  	ea.line1 = 1;
+! 	ea.line2 = curbuf->b_ml.ml_line_count;
+      }
+  
+      /* accept numbered register only when no count allowed (:put) */
+--- 2650,2690 ----
+  
+      if ((ea.argt & DFLALL) && ea.addr_count == 0)
+      {
++ 	buf_T	    *buf;
++ 
+  	ea.line1 = 1;
+! 	switch (ea.addr_type)
+! 	{
+! 	    case ADDR_LINES:
+! 		ea.line2 = curbuf->b_ml.ml_line_count;
+! 		break;
+! 	    case ADDR_LOADED_BUFFERS:
+! 		buf = firstbuf;
+! 		while (buf->b_next != NULL && buf->b_ml.ml_mfp == NULL)
+! 		    buf = buf->b_next;
+! 		ea.line1 = buf->b_fnum;
+! 		buf = lastbuf;
+! 		while (buf->b_prev != NULL && buf->b_ml.ml_mfp == NULL)
+! 		    buf = buf->b_prev;
+! 		ea.line2 = buf->b_fnum;
+! 		break;
+! 	    case ADDR_BUFFERS:
+! 		ea.line1 = firstbuf->b_fnum;
+! 		ea.line2 = lastbuf->b_fnum;
+! 		break;
+! 	    case ADDR_WINDOWS:
+! 		ea.line2 = LAST_WIN_NR;
+! 		break;
+! 	    case ADDR_TABS:
+! 		ea.line2 = LAST_TAB_NR;
+! 		break;
+! 	    case ADDR_ARGUMENTS:
+! 		if (ARGCOUNT == 0)
+! 		    ea.line1 = ea.line2 = 0;
+! 		else
+! 		    ea.line2 = ARGCOUNT;
+! 		break;
+! 	}
+      }
+  
+      /* accept numbered register only when no count allowed (:put) */
+***************
+*** 3211,3216 ****
+--- 3265,3271 ----
+  			eap->cmdidx = CMD_USER_BUF;
+  		    eap->argt = (long)uc->uc_argt;
+  		    eap->useridx = j;
++ 		    eap->addr_type = uc->uc_addr_type;
+  
+  # ifdef FEAT_CMDL_COMPL
+  		    if (compl != NULL)
+***************
+*** 3839,3845 ****
+  			return NULL;
+  		    }
+  
+! 		    /* For the -complete and -nargs attributes, we complete
+  		     * their arguments as well.
+  		     */
+  		    if (STRNICMP(arg, "complete", p - arg) == 0)
+--- 3894,3900 ----
+  			return NULL;
+  		    }
+  
+! 		    /* For the -complete, -nargs and -addr attributes, we complete
+  		     * their arguments as well.
+  		     */
+  		    if (STRNICMP(arg, "complete", p - arg) == 0)
+***************
+*** 3854,3859 ****
+--- 3909,3920 ----
+  			xp->xp_pattern = p + 1;
+  			return NULL;
+  		    }
++ 		    else if (STRNICMP(arg, "addr", p - arg) == 0)
++ 		    {
++ 			xp->xp_context = EXPAND_USER_ADDR_TYPE;
++ 			xp->xp_pattern = p + 1;
++ 			return NULL;
++ 		    }
+  		    return NULL;
+  		}
+  		arg = skipwhite(p);
+***************
+*** 4264,4269 ****
+--- 4325,4331 ----
+      pos_T	pos;
+      pos_T	*fp;
+      linenr_T	lnum;
++     buf_T	*buf;
+  
+      cmd = skipwhite(*ptr);
+      lnum = MAXLNUM;
+***************
+*** 4285,4291 ****
+  			lnum = curwin->w_arg_idx + 1;
+  			break;
+  		    case ADDR_LOADED_BUFFERS:
+! 		    case ADDR_UNLOADED_BUFFERS:
+  			lnum = curbuf->b_fnum;
+  			break;
+  		    case ADDR_TABS:
+--- 4347,4353 ----
+  			lnum = curwin->w_arg_idx + 1;
+  			break;
+  		    case ADDR_LOADED_BUFFERS:
+! 		    case ADDR_BUFFERS:
+  			lnum = curbuf->b_fnum;
+  			break;
+  		    case ADDR_TABS:
+***************
+*** 4308,4314 ****
+  			lnum = ARGCOUNT;
+  			break;
+  		    case ADDR_LOADED_BUFFERS:
+! 		    case ADDR_UNLOADED_BUFFERS:
+  			lnum = lastbuf->b_fnum;
+  			break;
+  		    case ADDR_TABS:
+--- 4370,4385 ----
+  			lnum = ARGCOUNT;
+  			break;
+  		    case ADDR_LOADED_BUFFERS:
+! 			buf = lastbuf;
+! 			while (buf->b_ml.ml_mfp == NULL)
+! 			{
+! 			    if (buf->b_prev == NULL)
+! 				break;
+! 			    buf = buf->b_prev;
+! 			}
+! 			lnum = buf->b_fnum;
+! 			break;
+! 		    case ADDR_BUFFERS:
+  			lnum = lastbuf->b_fnum;
+  			break;
+  		    case ADDR_TABS:
+***************
+*** 4477,4483 ****
+  			lnum = curwin->w_arg_idx + 1;
+  			break;
+  		    case ADDR_LOADED_BUFFERS:
+! 		    case ADDR_UNLOADED_BUFFERS:
+  			lnum = curbuf->b_fnum;
+  			break;
+  		    case ADDR_TABS:
+--- 4548,4554 ----
+  			lnum = curwin->w_arg_idx + 1;
+  			break;
+  		    case ADDR_LOADED_BUFFERS:
+! 		    case ADDR_BUFFERS:
+  			lnum = curbuf->b_fnum;
+  			break;
+  		    case ADDR_TABS:
+***************
+*** 4495,4501 ****
+  	    else
+  		n = getdigits(&cmd);
+  	    if (addr_type == ADDR_LOADED_BUFFERS
+! 		    || addr_type == ADDR_UNLOADED_BUFFERS)
+  		lnum = compute_buffer_local_count(addr_type, lnum, (i == '-') ? -1 * n : n);
+  	    else if (i == '-')
+  		lnum -= n;
+--- 4566,4572 ----
+  	    else
+  		n = getdigits(&cmd);
+  	    if (addr_type == ADDR_LOADED_BUFFERS
+! 		    || addr_type == ADDR_BUFFERS)
+  		lnum = compute_buffer_local_count(addr_type, lnum, (i == '-') ? -1 * n : n);
+  	    else if (i == '-')
+  		lnum -= n;
+***************
+*** 4531,4537 ****
+  			lnum = LAST_WIN_NR;
+  		    break;
+  		case ADDR_LOADED_BUFFERS:
+! 		case ADDR_UNLOADED_BUFFERS:
+  		    if (lnum < firstbuf->b_fnum)
+  		    {
+  			lnum = firstbuf->b_fnum;
+--- 4602,4608 ----
+  			lnum = LAST_WIN_NR;
+  		    break;
+  		case ADDR_LOADED_BUFFERS:
+! 		case ADDR_BUFFERS:
+  		    if (lnum < firstbuf->b_fnum)
+  		    {
+  			lnum = firstbuf->b_fnum;
+***************
+*** 5585,5598 ****
+  #endif
+  
+  #if defined(FEAT_USR_CMDS) || defined(PROTO)
+! static int	uc_add_command __ARGS((char_u *name, size_t name_len, char_u *rep, long argt, long def, int flags, int compl, char_u *compl_arg, int force));
+  static void	uc_list __ARGS((char_u *name, size_t name_len));
+! static int	uc_scan_attr __ARGS((char_u *attr, size_t len, long *argt, long *def, int *flags, int *compl, char_u **compl_arg));
+  static char_u	*uc_split_args __ARGS((char_u *arg, size_t *lenp));
+  static size_t	uc_check_code __ARGS((char_u *code, size_t len, char_u *buf, ucmd_T *cmd, exarg_T *eap, char_u **split_buf, size_t *split_len));
+  
+      static int
+! uc_add_command(name, name_len, rep, argt, def, flags, compl, compl_arg, force)
+      char_u	*name;
+      size_t	name_len;
+      char_u	*rep;
+--- 5656,5669 ----
+  #endif
+  
+  #if defined(FEAT_USR_CMDS) || defined(PROTO)
+! static int	uc_add_command __ARGS((char_u *name, size_t name_len, char_u *rep, long argt, long def, int flags, int compl, char_u *compl_arg, int addr_type, int force));
+  static void	uc_list __ARGS((char_u *name, size_t name_len));
+! static int	uc_scan_attr __ARGS((char_u *attr, size_t len, long *argt, long *def, int *flags, int *compl, char_u **compl_arg, int* attr_type_arg));
+  static char_u	*uc_split_args __ARGS((char_u *arg, size_t *lenp));
+  static size_t	uc_check_code __ARGS((char_u *code, size_t len, char_u *buf, ucmd_T *cmd, exarg_T *eap, char_u **split_buf, size_t *split_len));
+  
+      static int
+! uc_add_command(name, name_len, rep, argt, def, flags, compl, compl_arg, addr_type, force)
+      char_u	*name;
+      size_t	name_len;
+      char_u	*rep;
+***************
+*** 5601,5606 ****
+--- 5672,5678 ----
+      int		flags;
+      int		compl;
+      char_u	*compl_arg;
++     int		addr_type;
+      int		force;
+  {
+      ucmd_T	*cmd = NULL;
+***************
+*** 5695,5700 ****
+--- 5767,5773 ----
+      cmd->uc_compl_arg = compl_arg;
+  # endif
+  #endif
++     cmd->uc_addr_type = addr_type;
+  
+      return OK;
+  
+***************
+*** 5707,5712 ****
+--- 5780,5802 ----
+  }
+  #endif
+  
++ #if defined(FEAT_USR_CMDS)
++ static struct
++ {
++     int	    expand;
++     char    *name;
++ } addr_type_complete[] =
++ {
++     {ADDR_ARGUMENTS, "arguments"},
++     {ADDR_LINES, "lines"},
++     {ADDR_LOADED_BUFFERS, "loaded_buffers"},
++     {ADDR_TABS, "tabs"},
++     {ADDR_BUFFERS, "buffers"},
++     {ADDR_WINDOWS, "windows"},
++     {-1, NULL}
++ };
++ #endif
++ 
+  #if defined(FEAT_USR_CMDS) || defined(FEAT_EVAL) || defined(PROTO)
+  /*
+   * List of names for completion for ":command" with the EXPAND_ flag.
+***************
+*** 5794,5800 ****
+  
+  	    /* Put out the title first time */
+  	    if (!found)
+! 		MSG_PUTS_TITLE(_("\n    Name        Args Range Complete  Definition"));
+  	    found = TRUE;
+  	    msg_putchar('\n');
+  	    if (got_int)
+--- 5884,5890 ----
+  
+  	    /* Put out the title first time */
+  	    if (!found)
+! 		MSG_PUTS_TITLE(_("\n    Name        Args       Address   Complete  Definition"));
+  	    found = TRUE;
+  	    msg_putchar('\n');
+  	    if (got_int)
+***************
+*** 5855,5860 ****
+--- 5945,5964 ----
+  		IObuff[len++] = ' ';
+  	    } while (len < 11);
+  
++ 	    /* Address Type */
++ 	    for (j = 0; addr_type_complete[j].expand != -1; ++j)
++ 		if (addr_type_complete[j].expand != ADDR_LINES
++ 			&& addr_type_complete[j].expand == cmd->uc_addr_type)
++ 		{
++ 		    STRCPY(IObuff + len, addr_type_complete[j].name);
++ 		    len += (int)STRLEN(IObuff + len);
++ 		    break;
++ 		}
++ 
++ 	    do {
++ 		IObuff[len++] = ' ';
++ 	    } while (len < 21);
++ 
+  	    /* Completion */
+  	    for (j = 0; command_complete[j].expand != 0; ++j)
+  		if (command_complete[j].expand == cmd->uc_compl)
+***************
+*** 5866,5872 ****
+  
+  	    do {
+  		IObuff[len++] = ' ';
+! 	    } while (len < 21);
+  
+  	    IObuff[len] = '\0';
+  	    msg_outtrans(IObuff);
+--- 5970,5976 ----
+  
+  	    do {
+  		IObuff[len++] = ' ';
+! 	    } while (len < 35);
+  
+  	    IObuff[len] = '\0';
+  	    msg_outtrans(IObuff);
+***************
+*** 5906,5912 ****
+  }
+  
+      static int
+! uc_scan_attr(attr, len, argt, def, flags, compl, compl_arg)
+      char_u	*attr;
+      size_t	len;
+      long	*argt;
+--- 6010,6016 ----
+  }
+  
+      static int
+! uc_scan_attr(attr, len, argt, def, flags, compl, compl_arg, addr_type_arg)
+      char_u	*attr;
+      size_t	len;
+      long	*argt;
+***************
+*** 5914,5919 ****
+--- 6018,6024 ----
+      int		*flags;
+      int		*compl;
+      char_u	**compl_arg;
++     int		*addr_type_arg;
+  {
+      char_u	*p;
+  
+***************
+*** 6032,6037 ****
+--- 6137,6156 ----
+  								      == FAIL)
+  		return FAIL;
+  	}
++ 	else if (STRNICMP(attr, "addr", attrlen) == 0)
++ 	{
++ 	    *argt |= RANGE;
++ 	    if (val == NULL)
++ 	    {
++ 		EMSG(_("E179: argument required for -addr"));
++ 		return FAIL;
++ 	    }
++ 	    if (parse_addr_type_arg(val, (int)vallen, argt, addr_type_arg)
++ 								      == FAIL)
++ 		return FAIL;
++ 	    if (addr_type_arg != ADDR_LINES)
++ 		*argt |= (ZEROR | NOTADR) ;
++ 	}
+  	else
+  	{
+  	    char_u ch = attr[len];
+***************
+*** 6060,6065 ****
+--- 6179,6185 ----
+      int	    flags = 0;
+      int	    compl = EXPAND_NOTHING;
+      char_u  *compl_arg = NULL;
++     int	    addr_type_arg = ADDR_LINES;
+      int	    has_attr = (eap->arg[0] == '-');
+      int	    name_len;
+  
+***************
+*** 6070,6076 ****
+      {
+  	++p;
+  	end = skiptowhite(p);
+! 	if (uc_scan_attr(p, end - p, &argt, &def, &flags, &compl, &compl_arg)
+  		== FAIL)
+  	    return;
+  	p = skipwhite(end);
+--- 6190,6196 ----
+      {
+  	++p;
+  	end = skiptowhite(p);
+! 	if (uc_scan_attr(p, end - p, &argt, &def, &flags, &compl, &compl_arg, &addr_type_arg)
+  		== FAIL)
+  	    return;
+  	p = skipwhite(end);
+***************
+*** 6111,6117 ****
+      }
+      else
+  	uc_add_command(name, end - name, p, argt, def, flags, compl, compl_arg,
+! 								eap->forceit);
+  }
+  
+  /*
+--- 6231,6237 ----
+      }
+      else
+  	uc_add_command(name, end - name, p, argt, def, flags, compl, compl_arg,
+! 								addr_type_arg, eap->forceit);
+  }
+  
+  /*
+***************
+*** 6652,6657 ****
+--- 6772,6788 ----
+  }
+  
+  /*
++  * Function given to ExpandGeneric() to obtain the list of user address type names.
++  */
++     char_u *
++ get_user_cmd_addr_type(xp, idx)
++     expand_T	*xp UNUSED;
++     int		idx;
++ {
++     return (char_u *)addr_type_complete[idx].name;
++ }
++ 
++ /*
+   * Function given to ExpandGeneric() to obtain the list of user command
+   * attributes.
+   */
+***************
+*** 6661,6668 ****
+      int		idx;
+  {
+      static char *user_cmd_flags[] =
+! 	{"bang", "bar", "buffer", "complete", "count",
+! 	    "nargs", "range", "register"};
+  
+      if (idx >= (int)(sizeof(user_cmd_flags) / sizeof(user_cmd_flags[0])))
+  	return NULL;
+--- 6792,6799 ----
+      int		idx;
+  {
+      static char *user_cmd_flags[] =
+! 	{"addr", "bang", "bar", "buffer", "complete",
+! 	    "count", "nargs", "range", "register"};
+  
+      if (idx >= (int)(sizeof(user_cmd_flags) / sizeof(user_cmd_flags[0])))
+  	return NULL;
+***************
+*** 6696,6701 ****
+--- 6827,6869 ----
+  }
+  # endif /* FEAT_CMDL_COMPL */
+  
++ /*
++  * Parse address type argument
++  */
++     int
++ parse_addr_type_arg(value, vallen, argt, addr_type_arg)
++     char_u	*value;
++     int		vallen;
++     long	*argt;
++     int		*addr_type_arg;
++ {
++     int	    i, a, b;
++     for (i = 0; addr_type_complete[i].expand != -1; ++i)
++     {
++ 	a = (int)STRLEN(addr_type_complete[i].name) == vallen;
++ 	b = STRNCMP(value, addr_type_complete[i].name, vallen) == 0;
++ 	if (a && b)
++ 	{
++ 	    *addr_type_arg = addr_type_complete[i].expand;
++ 	    break;
++ 	}
++     }
++ 
++     if (addr_type_complete[i].expand == -1)
++     {
++ 	char_u	*err = value;
++ 	for (i=0; err[i] == NUL || !vim_iswhite(err[i]); i++);
++ 	err[i] = NUL;
++ 	EMSG2(_("E180: Invalid address type value: %s"), err);
++ 	return FAIL;
++     }
++ 
++     if (*addr_type_arg != ADDR_LINES)
++ 	*argt |= NOTADR;
++ 
++     return OK;
++ }
++ 
+  #endif	/* FEAT_USR_CMDS */
+  
+  #if defined(FEAT_USR_CMDS) || defined(FEAT_EVAL) || defined(PROTO)
+*** ../vim-7.4.541/src/ex_getln.c	2014-09-09 18:45:45.884551705 +0200
+--- src/ex_getln.c	2014-12-08 03:30:59.286867854 +0100
+***************
+*** 4697,4702 ****
+--- 4697,4703 ----
+  #endif
+  #ifdef FEAT_USR_CMDS
+  	    {EXPAND_USER_COMMANDS, get_user_commands, FALSE, TRUE},
++ 	    {EXPAND_USER_ADDR_TYPE, get_user_cmd_addr_type, FALSE, TRUE},
+  	    {EXPAND_USER_CMD_FLAGS, get_user_cmd_flags, FALSE, TRUE},
+  	    {EXPAND_USER_NARGS, get_user_cmd_nargs, FALSE, TRUE},
+  	    {EXPAND_USER_COMPLETE, get_user_cmd_complete, FALSE, TRUE},
+*** ../vim-7.4.541/src/proto/ex_docmd.pro	2014-04-01 17:49:40.140891378 +0200
+--- src/proto/ex_docmd.pro	2014-12-08 03:55:53.314888997 +0100
+***************
+*** 19,27 ****
+--- 19,29 ----
+  void ex_comclear __ARGS((exarg_T *eap));
+  void uc_clear __ARGS((garray_T *gap));
+  char_u *get_user_commands __ARGS((expand_T *xp, int idx));
++ char_u *get_user_cmd_addr_type __ARGS((expand_T *xp, int idx));
+  char_u *get_user_cmd_flags __ARGS((expand_T *xp, int idx));
+  char_u *get_user_cmd_nargs __ARGS((expand_T *xp, int idx));
+  char_u *get_user_cmd_complete __ARGS((expand_T *xp, int idx));
++ int parse_addr_type_arg __ARGS((char_u *value, int vallen, long *argt, int *addr_type_arg));
+  int parse_compl_arg __ARGS((char_u *value, int vallen, int *complp, long *argt, char_u **compl_arg));
+  void not_exiting __ARGS((void));
+  void tabpage_close __ARGS((int forceit));
+***************
+*** 43,48 ****
+--- 45,51 ----
+  void post_chdir __ARGS((int local));
+  void ex_cd __ARGS((exarg_T *eap));
+  void do_sleep __ARGS((long msec));
++ void ex_may_print __ARGS((exarg_T *eap));
+  int vim_mkdir_emsg __ARGS((char_u *name, int prot));
+  FILE *open_exfile __ARGS((char_u *fname, int forceit, char *mode));
+  void update_topline_cursor __ARGS((void));
+***************
+*** 54,58 ****
+  int put_line __ARGS((FILE *fd, char *s));
+  void dialog_msg __ARGS((char_u *buff, char *format, char_u *fname));
+  char_u *get_behave_arg __ARGS((expand_T *xp, int idx));
+- void ex_may_print __ARGS((exarg_T *eap));
+  /* vim: set ft=c : */
+--- 57,60 ----
+*** ../vim-7.4.541/src/vim.h	2014-11-27 19:14:45.080940970 +0100
+--- src/vim.h	2014-12-08 03:30:59.290867811 +0100
+***************
+*** 798,803 ****
+--- 798,804 ----
+  #define EXPAND_HISTORY		41
+  #define EXPAND_USER		42
+  #define EXPAND_SYNTIME		43
++ #define EXPAND_USER_ADDR_TYPE	44
+  
+  /* Values for exmode_active (0 is no exmode) */
+  #define EXMODE_NORMAL		1
+*** ../vim-7.4.541/src/version.c	2014-12-07 00:18:27.528202992 +0100
+--- src/version.c	2014-12-08 03:32:08.402128425 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     542,
+  /**/
+
+-- 
+CRONE:  Who sent you?
+ARTHUR: The Knights Who Say GNU!
+CRONE:  Aaaagh!  (she looks around in rear) No!  We have no licenses here.
+           "Monty Python and the Holy editor wars" PYTHON (MONTY) SOFTWARE LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.543 b/SOURCES/7.4.543
new file mode 100644
index 0000000..d0f03f9
--- /dev/null
+++ b/SOURCES/7.4.543
@@ -0,0 +1,132 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.543
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.543
+Problem:    Since patch 7.4.232 "1,3s/\n//" joins two lines instead of three.
+	    (Eliseo Martínez)  Issue 287
+Solution:   Correct the line count. (Christian Brabandt)
+	    Also set the last used search pattern.
+Files:	    src/ex_cmds.c, src/search.c, src/proto/search.pro
+
+
+*** ../vim-7.4.542/src/ex_cmds.c	2014-11-30 13:34:16.889626728 +0100
+--- src/ex_cmds.c	2014-12-13 03:11:09.032894963 +0100
+***************
+*** 4408,4413 ****
+--- 4408,4415 ----
+  	    && (*cmd == NUL || (cmd[1] == NUL && (*cmd == 'g' || *cmd == 'l'
+  					     || *cmd == 'p' || *cmd == '#'))))
+      {
++ 	linenr_T    joined_lines_count;
++ 
+  	curwin->w_cursor.lnum = eap->line1;
+  	if (*cmd == 'l')
+  	    eap->flags = EXFLAG_LIST;
+***************
+*** 4416,4425 ****
+  	else if (*cmd == 'p')
+  	    eap->flags = EXFLAG_PRINT;
+  
+! 	(void)do_join(eap->line2 - eap->line1 + 1, FALSE, TRUE, FALSE, TRUE);
+! 	sub_nlines = sub_nsubs = eap->line2 - eap->line1 + 1;
+! 	(void)do_sub_msg(FALSE);
+! 	ex_may_print(eap);
+  	return;
+      }
+  
+--- 4418,4444 ----
+  	else if (*cmd == 'p')
+  	    eap->flags = EXFLAG_PRINT;
+  
+! 	/* The number of lines joined is the number of lines in the range plus
+! 	 * one.  One less when the last line is included. */
+! 	joined_lines_count = eap->line2 - eap->line1 + 1;
+! 	if (eap->line2 < curbuf->b_ml.ml_line_count)
+! 	    ++joined_lines_count;
+! 	if (joined_lines_count > 1)
+! 	{
+! 	    (void)do_join(joined_lines_count, FALSE, TRUE, FALSE, TRUE);
+! 	    sub_nsubs = joined_lines_count - 1;
+! 	    sub_nlines = 1;
+! 	    (void)do_sub_msg(FALSE);
+! 	    ex_may_print(eap);
+! 	}
+! 
+! 	if (!cmdmod.keeppatterns)
+! 	    save_re_pat(RE_SUBST, pat, p_magic);
+! #ifdef FEAT_CMDHIST
+! 	/* put pattern in history */
+! 	add_to_history(HIST_SEARCH, pat, TRUE, NUL);
+! #endif
+! 
+  	return;
+      }
+  
+*** ../vim-7.4.542/src/search.c	2014-11-27 17:29:52.770188864 +0100
+--- src/search.c	2014-12-13 03:12:18.032159491 +0100
+***************
+*** 12,18 ****
+  
+  #include "vim.h"
+  
+- static void save_re_pat __ARGS((int idx, char_u *pat, int magic));
+  #ifdef FEAT_EVAL
+  static void set_vv_searchforward __ARGS((void));
+  static int first_submatch __ARGS((regmmatch_T *rp));
+--- 12,17 ----
+***************
+*** 272,278 ****
+  }
+  #endif
+  
+!     static void
+  save_re_pat(idx, pat, magic)
+      int		idx;
+      char_u	*pat;
+--- 271,277 ----
+  }
+  #endif
+  
+!     void
+  save_re_pat(idx, pat, magic)
+      int		idx;
+      char_u	*pat;
+*** ../vim-7.4.542/src/proto/search.pro	2013-08-10 13:37:25.000000000 +0200
+--- src/proto/search.pro	2014-12-13 03:12:21.440123253 +0100
+***************
+*** 2,7 ****
+--- 2,8 ----
+  int search_regcomp __ARGS((char_u *pat, int pat_save, int pat_use, int options, regmmatch_T *regmatch));
+  char_u *get_search_pat __ARGS((void));
+  char_u *reverse_text __ARGS((char_u *s));
++ void save_re_pat __ARGS((int idx, char_u *pat, int magic));
+  void save_search_patterns __ARGS((void));
+  void restore_search_patterns __ARGS((void));
+  void free_search_patterns __ARGS((void));
+*** ../vim-7.4.542/src/version.c	2014-12-08 04:16:26.273702793 +0100
+--- src/version.c	2014-12-13 02:54:27.295570327 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     543,
+  /**/
+
+-- 
+For large projects, Team Leaders use sophisticated project management software
+to keep track of who's doing what.  The software collects the lies and guesses
+of the project team and organizes them in to instantly outdated charts that
+are too boring to look at closely.  This is called "planning".
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.544 b/SOURCES/7.4.544
new file mode 100644
index 0000000..137480a
--- /dev/null
+++ b/SOURCES/7.4.544
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.544
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.544
+Problem:    Warnings for unused arguments when compiling with a combination of
+	    features.
+Solution:   Add "UNUSED".
+Files:	    src/if_cscope.c
+
+
+*** ../vim-7.4.543/src/if_cscope.c	2013-06-30 14:59:21.000000000 +0200
+--- src/if_cscope.c	2014-11-30 13:19:06.699741651 +0100
+***************
+*** 1131,1138 ****
+      char *pat;
+      int forceit;
+      int verbose;
+!     int	use_ll;
+!     char_u *cmdline;
+  {
+      int i;
+      char *cmd;
+--- 1131,1138 ----
+      char *pat;
+      int forceit;
+      int verbose;
+!     int	use_ll UNUSED;
+!     char_u *cmdline UNUSED;
+  {
+      int i;
+      char *cmd;
+*** ../vim-7.4.543/src/version.c	2014-12-13 03:17:07.465046539 +0100
+--- src/version.c	2014-12-13 03:19:54.743238147 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     544,
+  /**/
+
+-- 
+At some point in the project somebody will start whining about the need to
+determine the project "requirements".  This involves interviewing people who
+don't know what they want but, curiously, know exactly when they need it.
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.545 b/SOURCES/7.4.545
new file mode 100644
index 0000000..1fd6027
--- /dev/null
+++ b/SOURCES/7.4.545
@@ -0,0 +1,64 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.545
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.545
+Problem:    Highlighting for multi-line matches is not correct.
+Solution:   Stop highlight at the end of the match. (Hirohito Higashi)
+Files:	    src/screen.c
+
+
+*** ../vim-7.4.544/src/screen.c	2014-11-27 13:37:07.399540002 +0100
+--- src/screen.c	2014-12-13 03:30:31.520358269 +0100
+***************
+*** 3864,3872 ****
+  				&& v >= (long)shl->startcol
+  				&& v < (long)shl->endcol)
+  			{
+  			    shl->attr_cur = shl->attr;
+  			}
+! 			else if (v >= (long)shl->endcol && shl->lnum == lnum)
+  			{
+  			    shl->attr_cur = 0;
+  			    next_search_hl(wp, shl, lnum, (colnr_T)v, cur);
+--- 3864,3878 ----
+  				&& v >= (long)shl->startcol
+  				&& v < (long)shl->endcol)
+  			{
++ #ifdef FEAT_MBYTE
++ 			    int tmp_col = v + MB_PTR2LEN(ptr);
++ 
++ 			    if (shl->endcol < tmp_col)
++ 				shl->endcol = tmp_col;
++ #endif
+  			    shl->attr_cur = shl->attr;
+  			}
+! 			else if (v == (long)shl->endcol)
+  			{
+  			    shl->attr_cur = 0;
+  			    next_search_hl(wp, shl, lnum, (colnr_T)v, cur);
+*** ../vim-7.4.544/src/version.c	2014-12-13 03:20:10.543067406 +0100
+--- src/version.c	2014-12-13 03:36:19.704599650 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     545,
+  /**/
+
+-- 
+You can test a person's importance in the organization by asking how much RAM
+his computer has.  Anybody who knows the answer to that question is not a
+decision-maker.
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.546 b/SOURCES/7.4.546
new file mode 100644
index 0000000..94b51ae
--- /dev/null
+++ b/SOURCES/7.4.546
@@ -0,0 +1,149 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.546
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.546
+Problem:    Repeated use of vim_snprintf() with a number.
+Solution:   Move these vim_snprintf() calls into a function.
+Files:	    src/window.c
+
+
+*** ../vim-7.4.545/src/window.c	2014-11-27 16:22:42.746412995 +0100
+--- src/window.c	2014-12-13 03:54:57.760646343 +0100
+***************
+*** 11,16 ****
+--- 11,17 ----
+  
+  static int path_is_url __ARGS((char_u *p));
+  #if defined(FEAT_WINDOWS) || defined(PROTO)
++ static void cmd_with_count __ARGS((char *cmd, char_u *bufp, size_t bufsize, long Prenum));
+  static void win_init __ARGS((win_T *newp, win_T *oldp, int flags));
+  static void win_init_some __ARGS((win_T *newp, win_T *oldp));
+  static void frame_comp_pos __ARGS((frame_T *topfrp, int *row, int *col));
+***************
+*** 167,176 ****
+      case '^':
+  		CHECK_CMDWIN
+  		reset_VIsual_and_resel();	/* stop Visual mode */
+! 		STRCPY(cbuf, "split #");
+! 		if (Prenum)
+! 		    vim_snprintf((char *)cbuf + 7, sizeof(cbuf) - 7,
+! 							       "%ld", Prenum);
+  		do_cmdline_cmd(cbuf);
+  		break;
+  
+--- 168,174 ----
+      case '^':
+  		CHECK_CMDWIN
+  		reset_VIsual_and_resel();	/* stop Visual mode */
+! 		cmd_with_count("split #", cbuf, sizeof(cbuf), Prenum);
+  		do_cmdline_cmd(cbuf);
+  		break;
+  
+***************
+*** 199,208 ****
+      case Ctrl_Q:
+      case 'q':
+  		reset_VIsual_and_resel();	/* stop Visual mode */
+! 		STRCPY(cbuf, "quit");
+! 		if (Prenum)
+! 		    vim_snprintf((char *)cbuf + 4, sizeof(cbuf) - 5,
+! 							    "%ld", Prenum);
+  		do_cmdline_cmd(cbuf);
+  		break;
+  
+--- 197,203 ----
+      case Ctrl_Q:
+      case 'q':
+  		reset_VIsual_and_resel();	/* stop Visual mode */
+! 		cmd_with_count("quit", cbuf, sizeof(cbuf), Prenum);
+  		do_cmdline_cmd(cbuf);
+  		break;
+  
+***************
+*** 210,219 ****
+      case Ctrl_C:
+      case 'c':
+  		reset_VIsual_and_resel();	/* stop Visual mode */
+! 		STRCPY(cbuf, "close");
+! 		if (Prenum)
+! 		    vim_snprintf((char *)cbuf + 5, sizeof(cbuf) - 5,
+! 							       "%ld", Prenum);
+  		do_cmdline_cmd(cbuf);
+  		break;
+  
+--- 205,211 ----
+      case Ctrl_C:
+      case 'c':
+  		reset_VIsual_and_resel();	/* stop Visual mode */
+! 		cmd_with_count("close", cbuf, sizeof(cbuf), Prenum);
+  		do_cmdline_cmd(cbuf);
+  		break;
+  
+***************
+*** 243,252 ****
+      case 'o':
+  		CHECK_CMDWIN
+  		reset_VIsual_and_resel();	/* stop Visual mode */
+! 		STRCPY(cbuf, "only");
+! 		if (Prenum > 0)
+! 		    vim_snprintf((char *)cbuf + 4, sizeof(cbuf) - 4,
+! 								"%ld", Prenum);
+  		do_cmdline_cmd(cbuf);
+  		break;
+  
+--- 235,241 ----
+      case 'o':
+  		CHECK_CMDWIN
+  		reset_VIsual_and_resel();	/* stop Visual mode */
+! 		cmd_with_count("only", cbuf, sizeof(cbuf), Prenum);
+  		do_cmdline_cmd(cbuf);
+  		break;
+  
+***************
+*** 635,640 ****
+--- 624,643 ----
+      }
+  }
+  
++     static void
++ cmd_with_count(cmd, bufp, bufsize, Prenum)
++     char	*cmd;
++     char_u	*bufp;
++     size_t	bufsize;
++     long	Prenum;
++ {
++     size_t	len = STRLEN(cmd);
++ 
++     STRCPY(bufp, cmd);
++     if (Prenum > 0)
++ 	vim_snprintf((char *)bufp + len, bufsize - len, "%ld", Prenum);
++ }
++ 
+  /*
+   * split the current window, implements CTRL-W s and :split
+   *
+*** ../vim-7.4.545/src/version.c	2014-12-13 03:36:34.992435104 +0100
+--- src/version.c	2014-12-13 03:43:58.447663037 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     546,
+  /**/
+
+-- 
+The only way the average employee can speak to an executive is by taking a
+second job as a golf caddie.
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.547 b/SOURCES/7.4.547
new file mode 100644
index 0000000..e550140
--- /dev/null
+++ b/SOURCES/7.4.547
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.547
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.547
+Problem:    Using "vit" does not select a multi-byte character at the end
+            correctly.
+Solution:   Advance the cursor over the multi-byte character. (Christian
+            Brabandt)
+Files:      src/search.c
+
+
+*** ../vim-7.4.546/src/search.c	2014-12-13 03:17:07.465046539 +0100
+--- src/search.c	2014-12-13 20:08:39.464238348 +0100
+***************
+*** 3932,3938 ****
+  	if (lt(end_pos, start_pos))
+  	    curwin->w_cursor = start_pos;
+  	else if (*p_sel == 'e')
+! 	    ++curwin->w_cursor.col;
+  	VIsual = start_pos;
+  	VIsual_mode = 'v';
+  	redraw_curbuf_later(INVERTED);	/* update the inversion */
+--- 3932,3938 ----
+  	if (lt(end_pos, start_pos))
+  	    curwin->w_cursor = start_pos;
+  	else if (*p_sel == 'e')
+! 	    inc_cursor();
+  	VIsual = start_pos;
+  	VIsual_mode = 'v';
+  	redraw_curbuf_later(INVERTED);	/* update the inversion */
+*** ../vim-7.4.546/src/version.c	2014-12-13 03:58:03.798672391 +0100
+--- src/version.c	2014-12-13 20:08:44.652181415 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     547,
+  /**/
+
+-- 
+Engineers will go without food and hygiene for days to solve a problem.
+(Other times just because they forgot.)
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.548 b/SOURCES/7.4.548
new file mode 100644
index 0000000..71df1f5
--- /dev/null
+++ b/SOURCES/7.4.548
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.548
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.548
+Problem:    Compilation fails with native version of MinGW-w64, because the
+            it doesn't have x86_64-w64-mingw32-windres.exe.
+Solution:   Use windres instead. (Ken Takata)
+Files:      src/Make_cyg_ming.mak
+
+
+*** ../vim-7.4.547/src/Make_cyg_ming.mak	2014-11-06 10:02:57.019057492 +0100
+--- src/Make_cyg_ming.mak	2014-12-13 20:47:00.291904877 +0100
+***************
+*** 366,372 ****
+--- 366,376 ----
+  endif
+  CC := $(CROSS_COMPILE)gcc
+  CXX := $(CROSS_COMPILE)g++
++ ifeq ($(UNDER_CYGWIN),yes)
+  WINDRES := $(CROSS_COMPILE)windres
++ else
++ WINDRES := windres
++ endif
+  WINDRES_CC = $(CC)
+  
+  #>>>>> end of choices
+*** ../vim-7.4.547/src/version.c	2014-12-13 20:11:29.582422289 +0100
+--- src/version.c	2014-12-13 20:49:27.018361058 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     548,
+  /**/
+
+-- 
+Article in the first Free Software Magazine: "Bram Moolenaar studied electrical
+engineering at the Technical University of Delft and graduated in 1985 on a
+multi-processor Unix architecture."
+Response by "dimator": Could the school not afford a proper stage for the
+ceremony?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.549 b/SOURCES/7.4.549
new file mode 100644
index 0000000..a6af54c
--- /dev/null
+++ b/SOURCES/7.4.549
@@ -0,0 +1,221 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.549
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.549
+Problem:    Function name not recognized correctly when inside a function.
+Solution:   Don't check for an alpha character.
+Files:      src/eval.c, src/testdir/test_nested_function.in,
+            src/testdir/test_nested_function.ok, src/testdir/Make_amiga.mak,
+            src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+            src/testdir/Make_os2.mak, src/testdir/Make_vms.mms,
+            src/testdir/Makefile
+
+
+*** ../vim-7.4.548/src/eval.c	2014-12-07 00:18:27.524203161 +0100
+--- src/eval.c	2014-12-13 20:27:16.728347709 +0100
+***************
+*** 22283,22296 ****
+  		if (*p == '!')
+  		    p = skipwhite(p + 1);
+  		p += eval_fname_script(p);
+! 		if (ASCII_ISALPHA(*p))
+  		{
+! 		    vim_free(trans_function_name(&p, TRUE, 0, NULL));
+! 		    if (*skipwhite(p) == '(')
+! 		    {
+! 			++nesting;
+! 			indent += 2;
+! 		    }
+  		}
+  	    }
+  
+--- 22283,22293 ----
+  		if (*p == '!')
+  		    p = skipwhite(p + 1);
+  		p += eval_fname_script(p);
+! 		vim_free(trans_function_name(&p, TRUE, 0, NULL));
+! 		if (*skipwhite(p) == '(')
+  		{
+! 		    ++nesting;
+! 		    indent += 2;
+  		}
+  	    }
+  
+*** ../vim-7.4.548/src/testdir/test_nested_function.in	2014-12-13 21:00:22.243356614 +0100
+--- src/testdir/test_nested_function.in	2014-12-13 20:21:18.080145982 +0100
+***************
+*** 0 ****
+--- 1,34 ----
++ Tests for Nested function                vim: set ft=vim :
++ 
++ STARTTEST
++ :so small.vim
++ :fu! NestedFunc()
++ :  fu! Func1()
++ :    $put ='Func1'
++ :  endfunction
++ :  call Func1()
++ :  fu! s:func2()
++ :    $put ='s:func2'
++ :  endfunction
++ :  call s:func2()
++ :  fu! s:_func3()
++ :    $put ='s:_func3'
++ :  endfunction
++ :  call s:_func3()
++ :  let fn = 'Func4'
++ :  fu! {fn}()
++ :    $put ='Func4'
++ :  endfunction
++ :  call {fn}()
++ :  let fn = 'func5'
++ :  fu! s:{fn}()
++ :    $put ='s:func5'
++ :  endfunction
++ :  call s:{fn}()
++ :endfunction
++ :call NestedFunc()
++ :/^result:/,$w! test.out
++ :qa!
++ ENDTEST
++ 
++ result:
+*** ../vim-7.4.548/src/testdir/test_nested_function.ok	2014-12-13 21:00:22.251356529 +0100
+--- src/testdir/test_nested_function.ok	2014-12-13 20:21:44.215867748 +0100
+***************
+*** 0 ****
+--- 1,6 ----
++ result:
++ Func1
++ s:func2
++ s:_func3
++ Func4
++ s:func5
+*** ../vim-7.4.548/src/testdir/Make_amiga.mak	2014-12-08 04:16:26.253702999 +0100
+--- src/testdir/Make_amiga.mak	2014-12-13 20:23:59.554425738 +0100
+***************
+*** 47,52 ****
+--- 47,53 ----
+  		test_listlbr.out \
+  		test_listlbr_utf8.out \
+  		test_mapping.out \
++ 		test_nested_function.out \
+  		test_options.out \
+  		test_qf_title.out \
+  		test_signs.out \
+***************
+*** 184,189 ****
+--- 185,192 ----
+  test_insertcount.out: test_insertcount.in
+  test_listlbr.out: test_listlbr.in
+  test_listlbr_utf8.out: test_listlbr_utf8.in
++ test_mapping.out: test_mapping.in
++ test_nested_function.out: test_nested_function.in
+  test_options.out: test_options.in
+  test_qf_title.out: test_qf_title.in
+  test_signs.out: test_signs.in
+*** ../vim-7.4.548/src/testdir/Make_dos.mak	2014-12-08 04:16:26.253702999 +0100
+--- src/testdir/Make_dos.mak	2014-12-13 20:24:11.946293504 +0100
+***************
+*** 46,51 ****
+--- 46,52 ----
+  		test_listlbr.out \
+  		test_listlbr_utf8.out \
+  		test_mapping.out \
++ 		test_nested_function.out \
+  		test_options.out \
+  		test_qf_title.out \
+  		test_signs.out \
+*** ../vim-7.4.548/src/testdir/Make_ming.mak	2014-12-08 04:16:26.253702999 +0100
+--- src/testdir/Make_ming.mak	2014-12-13 20:24:17.058237473 +0100
+***************
+*** 68,73 ****
+--- 68,74 ----
+  		test_listlbr.out \
+  		test_listlbr_utf8.out \
+  		test_mapping.out \
++ 		test_nested_function.out \
+  		test_options.out \
+  		test_qf_title.out \
+  		test_signs.out \
+*** ../vim-7.4.548/src/testdir/Make_os2.mak	2014-12-08 04:16:26.253702999 +0100
+--- src/testdir/Make_os2.mak	2014-12-13 20:24:21.598190646 +0100
+***************
+*** 48,53 ****
+--- 48,54 ----
+  		test_listlbr.out \
+  		test_listlbr_utf8.out \
+  		test_mapping.out \
++ 		test_nested_function.out \
+  		test_options.out \
+  		test_qf_title.out \
+  		test_signs.out \
+*** ../vim-7.4.548/src/testdir/Make_vms.mms	2014-12-08 04:16:26.253702999 +0100
+--- src/testdir/Make_vms.mms	2014-12-13 20:24:29.302110051 +0100
+***************
+*** 4,10 ****
+  # Authors:	Zoltan Arpadffy, <arpadffy@polarhome.com>
+  #		Sandor Kopanyi,  <sandor.kopanyi@mailbox.hu>
+  #
+! # Last change:  2014 Dec 08
+  #
+  # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+  # Edit the lines in the Configuration section below to select.
+--- 4,10 ----
+  # Authors:	Zoltan Arpadffy, <arpadffy@polarhome.com>
+  #		Sandor Kopanyi,  <sandor.kopanyi@mailbox.hu>
+  #
+! # Last change:  2014 Dec 13
+  #
+  # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+  # Edit the lines in the Configuration section below to select.
+***************
+*** 107,112 ****
+--- 107,113 ----
+  	 test_listlbr.out \
+  	 test_listlbr_utf8.out \
+  	 test_mapping.out \
++ 	 test_nested_function.out \
+  	 test_options.out \
+  	 test_qf_title.out \
+  	 test_signs.out \
+*** ../vim-7.4.548/src/testdir/Makefile	2014-12-08 04:16:26.253702999 +0100
+--- src/testdir/Makefile	2014-12-13 20:24:42.609966838 +0100
+***************
+*** 44,49 ****
+--- 44,50 ----
+  		test_listlbr.out \
+  		test_listlbr_utf8.out \
+  		test_mapping.out \
++ 		test_nested_function.out \
+  		test_options.out \
+  		test_qf_title.out \
+  		test_signs.out \
+*** ../vim-7.4.548/src/version.c	2014-12-13 20:50:01.793994592 +0100
+--- src/version.c	2014-12-13 20:56:11.850046569 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     549,
+  /**/
+
+-- 
+Engineers are always delighted to share wisdom, even in areas in which they
+have no experience whatsoever.  Their logic provides them with inherent
+insight into any field of expertise.  This can be a problem when dealing with
+the illogical people who believe that knowledge can only be derived through
+experience.
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.550 b/SOURCES/7.4.550
new file mode 100644
index 0000000..9886741
--- /dev/null
+++ b/SOURCES/7.4.550
@@ -0,0 +1,147 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.550
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.550
+Problem:    curs_rows() function is always called with the second argument
+            false.
+Solution:   Remove the argument. (Christian Brabandt)
+            validate_botline_win() can then also be removed.
+Files:      src/move.c
+
+
+*** ../vim-7.4.549/src/move.c	2014-09-23 18:37:52.422823701 +0200
+--- src/move.c	2014-12-13 20:54:33.687102446 +0100
+***************
+*** 23,30 ****
+  static void redraw_for_cursorline __ARGS((win_T *wp));
+  static int scrolljump_value __ARGS((void));
+  static int check_top_offset __ARGS((void));
+! static void curs_rows __ARGS((win_T *wp, int do_botline));
+! static void validate_botline_win __ARGS((win_T *wp));
+  static void validate_cheight __ARGS((void));
+  
+  typedef struct
+--- 23,29 ----
+  static void redraw_for_cursorline __ARGS((win_T *wp));
+  static int scrolljump_value __ARGS((void));
+  static int check_top_offset __ARGS((void));
+! static void curs_rows __ARGS((win_T *wp));
+  static void validate_cheight __ARGS((void));
+  
+  typedef struct
+***************
+*** 609,625 ****
+  }
+  
+  /*
+-  * Make sure the value of wp->w_botline is valid.
+-  */
+-     static void
+- validate_botline_win(wp)
+-     win_T	*wp;
+- {
+-     if (!(wp->w_valid & VALID_BOTLINE))
+- 	comp_botline(wp);
+- }
+- 
+- /*
+   * Mark curwin->w_botline as invalid (because of some change in the buffer).
+   */
+      void
+--- 608,613 ----
+***************
+*** 678,697 ****
+      update_topline();
+      check_cursor_moved(curwin);
+      if (!(curwin->w_valid & VALID_CROW))
+! 	curs_rows(curwin, FALSE);
+  }
+  #endif
+  
+  /*
+   * Compute wp->w_cline_row and wp->w_cline_height, based on the current value
+   * of wp->w_topline.
+-  *
+-  * Returns OK when cursor is in the window, FAIL when it isn't.
+   */
+      static void
+! curs_rows(wp, do_botline)
+      win_T	*wp;
+-     int		do_botline;		/* also compute w_botline */
+  {
+      linenr_T	lnum;
+      int		i;
+--- 666,682 ----
+      update_topline();
+      check_cursor_moved(curwin);
+      if (!(curwin->w_valid & VALID_CROW))
+! 	curs_rows(curwin);
+  }
+  #endif
+  
+  /*
+   * Compute wp->w_cline_row and wp->w_cline_height, based on the current value
+   * of wp->w_topline.
+   */
+      static void
+! curs_rows(wp)
+      win_T	*wp;
+  {
+      linenr_T	lnum;
+      int		i;
+***************
+*** 810,818 ****
+      redraw_for_cursorline(curwin);
+      wp->w_valid |= VALID_CROW|VALID_CHEIGHT;
+  
+-     /* validate botline too, if update_screen doesn't do it */
+-     if (do_botline && all_invalid)
+- 	validate_botline_win(wp);
+  }
+  
+  /*
+--- 795,800 ----
+***************
+*** 986,992 ****
+       * Next make sure that w_cline_row is valid.
+       */
+      if (!(curwin->w_valid & VALID_CROW))
+! 	curs_rows(curwin, FALSE);
+  
+      /*
+       * Compute the number of virtual columns.
+--- 968,974 ----
+       * Next make sure that w_cline_row is valid.
+       */
+      if (!(curwin->w_valid & VALID_CROW))
+! 	curs_rows(curwin);
+  
+      /*
+       * Compute the number of virtual columns.
+*** ../vim-7.4.549/src/version.c	2014-12-13 21:00:52.059036480 +0100
+--- src/version.c	2014-12-13 21:04:26.080739460 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     550,
+  /**/
+
+-- 
+For humans, honesty is a matter of degree.  Engineers are always honest in
+matters of technology and human relationships.  That's why it's a good idea
+to keep engineers away from customers, romantic interests, and other people
+who can't handle the truth.
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.551 b/SOURCES/7.4.551
new file mode 100644
index 0000000..cd67a7e
--- /dev/null
+++ b/SOURCES/7.4.551
@@ -0,0 +1,205 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.551
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.551
+Problem:    "ygn" may yank too much. (Fritzophrenic)  Issue 295.
+Solution:   Check the width of the next match. (Christian Brabandt)
+Files:      src/search.c, src/testdir/test53.in, src/testdir/test53.ok
+
+
+*** ../vim-7.4.550/src/search.c	2014-12-13 20:11:29.582422289 +0100
+--- src/search.c	2014-12-13 21:55:26.608363239 +0100
+***************
+*** 4441,4452 ****
+  
+  #endif /* FEAT_TEXTOBJ */
+  
+! static int is_one_char __ARGS((char_u *pattern));
+  
+  /*
+   * Find next search match under cursor, cursor at end.
+   * Used while an operator is pending, and in Visual mode.
+-  * TODO: redo only works when used in operator pending mode
+   */
+      int
+  current_search(count, forward)
+--- 4441,4451 ----
+  
+  #endif /* FEAT_TEXTOBJ */
+  
+! static int is_one_char __ARGS((char_u *pattern, int move));
+  
+  /*
+   * Find next search match under cursor, cursor at end.
+   * Used while an operator is pending, and in Visual mode.
+   */
+      int
+  current_search(count, forward)
+***************
+*** 4491,4497 ****
+  	orig_pos = pos = start_pos = curwin->w_cursor;
+  
+      /* Is the pattern is zero-width? */
+!     one_char = is_one_char(spats[last_idx].pat);
+      if (one_char == -1)
+      {
+  	p_ws = old_p_ws;
+--- 4490,4496 ----
+  	orig_pos = pos = start_pos = curwin->w_cursor;
+  
+      /* Is the pattern is zero-width? */
+!     one_char = is_one_char(spats[last_idx].pat, TRUE);
+      if (one_char == -1)
+      {
+  	p_ws = old_p_ws;
+***************
+*** 4550,4555 ****
+--- 4549,4558 ----
+      start_pos = pos;
+      flags = forward ? SEARCH_END : 0;
+  
++     /* Check again from the current cursor position,
++      * since the next match might actually by only one char wide */
++     one_char = is_one_char(spats[last_idx].pat, FALSE);
++ 
+      /* move to match, except for zero-width matches, in which case, we are
+       * already on the next match */
+      if (!one_char)
+***************
+*** 4599,4624 ****
+  
+  /*
+   * Check if the pattern is one character or zero-width.
+   * Returns TRUE, FALSE or -1 for failure.
+   */
+      static int
+! is_one_char(pattern)
+      char_u	*pattern;
+  {
+      regmmatch_T	regmatch;
+      int		nmatched = 0;
+      int		result = -1;
+      pos_T	pos;
+      int		save_called_emsg = called_emsg;
+  
+      if (search_regcomp(pattern, RE_SEARCH, RE_SEARCH,
+  					      SEARCH_KEEP, &regmatch) == FAIL)
+  	return -1;
+  
+      /* move to match */
+!     clearpos(&pos);
+      if (searchit(curwin, curbuf, &pos, FORWARD, spats[last_idx].pat, 1,
+! 				     SEARCH_KEEP, RE_SEARCH, 0, NULL) != FAIL)
+      {
+  	/* Zero-width pattern should match somewhere, then we can check if
+  	 * start and end are in the same position. */
+--- 4602,4639 ----
+  
+  /*
+   * Check if the pattern is one character or zero-width.
++  * If move is TRUE, check from the beginning of the buffer, else from the
++  * current cursor position.
+   * Returns TRUE, FALSE or -1 for failure.
+   */
+      static int
+! is_one_char(pattern, move)
+      char_u	*pattern;
++     int		move;
+  {
+      regmmatch_T	regmatch;
+      int		nmatched = 0;
+      int		result = -1;
+      pos_T	pos;
+      int		save_called_emsg = called_emsg;
++     int		flag = 0;
+  
+      if (search_regcomp(pattern, RE_SEARCH, RE_SEARCH,
+  					      SEARCH_KEEP, &regmatch) == FAIL)
+  	return -1;
+  
+      /* move to match */
+!     if (move)
+! 	clearpos(&pos)
+!     else
+!     {
+! 	pos = curwin->w_cursor;
+! 	/* accept a match at the cursor position */
+! 	flag = SEARCH_START;
+!     }
+! 
+      if (searchit(curwin, curbuf, &pos, FORWARD, spats[last_idx].pat, 1,
+! 			      SEARCH_KEEP + flag, RE_SEARCH, 0, NULL) != FAIL)
+      {
+  	/* Zero-width pattern should match somewhere, then we can check if
+  	 * start and end are in the same position. */
+*** ../vim-7.4.550/src/testdir/test53.in	2014-02-22 22:18:39.536905522 +0100
+--- src/testdir/test53.in	2014-12-13 21:52:43.314091440 +0100
+***************
+*** 79,84 ****
+--- 79,86 ----
+  :" test repeating gUgn
+  /^Depp
+  gggUgn.
++ gg/a:0\@!\zs\d\+
++ nygnop
+  :/^start:/,/^end:/wq! test.out
+  ENDTEST
+  
+***************
+*** 108,113 ****
+--- 110,120 ----
+  uniquepattern uniquepattern
+  my very excellent mother just served us nachos
+  for (i=0; i<=10; i++)
++ a:10
++ 
++ a:1
++ 
++ a:20
+  Y
+  text
+  Y
+*** ../vim-7.4.550/src/testdir/test53.ok	2014-02-22 22:18:39.536905522 +0100
+--- src/testdir/test53.ok	2014-12-13 21:52:43.314091440 +0100
+***************
+*** 49,54 ****
+--- 49,60 ----
+   uniquepattern
+  my very excellent mongoose just served us nachos
+  for (j=0; i<=10; i++)
++ a:10
++ 
++ a:1
++ 1
++ 
++ a:20
+  
+  text
+  Y
+*** ../vim-7.4.550/src/version.c	2014-12-13 21:09:53.721226911 +0100
+--- src/version.c	2014-12-13 21:52:20.346334198 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     551,
+  /**/
+
+-- 
+While it's true that many normal people whould prefer not to _date_ an
+engineer, most normal people harbor an intense desire to _mate_ with them,
+thus producing engineerlike children who will have high-paying jobs long
+before losing their virginity.
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.552 b/SOURCES/7.4.552
new file mode 100644
index 0000000..118c226
--- /dev/null
+++ b/SOURCES/7.4.552
@@ -0,0 +1,83 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.552
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.552
+Problem:    Langmap applies to Insert mode expression mappings.
+Solution:   Check for Insert mode. (Daniel Hahler)
+Files:	    src/getchar.c, src/testdir/test_mapping.in,
+	    src/testdir/test_mapping.ok
+
+
+*** ../vim-7.4.551/src/getchar.c	2014-10-21 19:35:28.406284296 +0200
+--- src/getchar.c	2014-12-14 00:35:48.712903309 +0100
+***************
+*** 2145,2151 ****
+  			    nolmaplen = 2;
+  			else
+  			{
+! 			    LANGMAP_ADJUST(c1, TRUE);
+  			    nolmaplen = 0;
+  			}
+  #endif
+--- 2145,2151 ----
+  			    nolmaplen = 2;
+  			else
+  			{
+! 			    LANGMAP_ADJUST(c1, (State & INSERT) == 0);
+  			    nolmaplen = 0;
+  			}
+  #endif
+*** ../vim-7.4.551/src/testdir/test_mapping.in	2014-10-22 22:08:58.386493141 +0200
+--- src/testdir/test_mapping.in	2014-12-14 00:35:12.713288209 +0100
+***************
+*** 8,13 ****
+--- 8,22 ----
+  :inoreab чкпр   vim
+  GAчкпр 
+  
++ 
++ : " langmap should not get remapped in insert mode
++ :inoremap { FAIL_ilangmap
++ :set langmap=+{ langnoremap
++ o+
++ : " expr mapping with langmap
++ :inoremap <expr> { "FAIL_iexplangmap"
++ o+
++ 
+  :/^test/,$w! test.out
+  :qa!
+  ENDTEST
+*** ../vim-7.4.551/src/testdir/test_mapping.ok	2014-10-21 16:22:01.407175226 +0200
+--- src/testdir/test_mapping.ok	2014-12-14 00:29:32.216931811 +0100
+***************
+*** 1,2 ****
+--- 1,4 ----
+  test starts here:
+  vim
++ +
++ +
+*** ../vim-7.4.551/src/version.c	2014-12-13 22:00:18.161279370 +0100
+--- src/version.c	2014-12-14 00:27:36.310171797 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     552,
+  /**/
+
+-- 
+Engineers are widely recognized as superior marriage material: intelligent,
+dependable, employed, honest, and handy around the house.
+				(Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.553 b/SOURCES/7.4.553
new file mode 100644
index 0000000..a2bfc3e
--- /dev/null
+++ b/SOURCES/7.4.553
@@ -0,0 +1,315 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.553
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.553
+Problem:    Various small issues.
+Solution:   Fix those issues.
+Files:	    src/ex_cmds.h, src/gui.h, src/message.c, src/testdir/test39.in,
+	    src/proto/eval.pro, src/proto/misc1.pro, src/proto/ops.pro,
+	    src/proto/screen.pro, src/proto/window.pro. src/os_unix.c,
+	    src/Make_vms.mms, src/proto/os_vms.pro, src/INSTALL
+
+
+*** ../vim-7.4.552/src/ex_cmds.h	2014-12-08 04:16:26.257702950 +0100
+--- src/ex_cmds.h	2014-12-17 12:41:18.536370067 +0100
+***************
+*** 63,69 ****
+  #define ADDR_WINDOWS		1
+  #define ADDR_ARGUMENTS		2
+  #define ADDR_LOADED_BUFFERS	3
+! #define ADDR_BUFFERS	4
+  #define ADDR_TABS		5
+  
+  #ifndef DO_DECLARE_EXCMD
+--- 63,69 ----
+  #define ADDR_WINDOWS		1
+  #define ADDR_ARGUMENTS		2
+  #define ADDR_LOADED_BUFFERS	3
+! #define ADDR_BUFFERS		4
+  #define ADDR_TABS		5
+  
+  #ifndef DO_DECLARE_EXCMD
+*** ../vim-7.4.552/src/gui.h	2013-06-17 22:22:49.000000000 +0200
+--- src/gui.h	2014-11-20 22:14:04.635717128 +0100
+***************
+*** 41,47 ****
+  # include <Events.h>
+  # include <Menus.h>
+  # if !(defined (TARGET_API_MAC_CARBON) && (TARGET_API_MAC_CARBON))
+! #   include <Windows.h>
+  # endif
+  # include <Controls.h>
+  /*# include <TextEdit.h>*/
+--- 41,47 ----
+  # include <Events.h>
+  # include <Menus.h>
+  # if !(defined (TARGET_API_MAC_CARBON) && (TARGET_API_MAC_CARBON))
+! #  include <Windows.h>
+  # endif
+  # include <Controls.h>
+  /*# include <TextEdit.h>*/
+*** ../vim-7.4.552/src/message.c	2014-02-23 22:52:33.368764715 +0100
+--- src/message.c	2014-10-31 13:43:15.075230535 +0100
+***************
+*** 4030,4040 ****
+   * pointer for resulting string argument if "str_m" is zero (as per ISO C99).
+   *
+   * The return value is the number of characters which would be generated
+!  * for the given input, excluding the trailing null. If this value
+   * is greater or equal to "str_m", not all characters from the result
+   * have been stored in str, output bytes beyond the ("str_m"-1) -th character
+   * are discarded. If "str_m" is greater than zero it is guaranteed
+!  * the resulting string will be null-terminated.
+   */
+  
+  /*
+--- 4030,4040 ----
+   * pointer for resulting string argument if "str_m" is zero (as per ISO C99).
+   *
+   * The return value is the number of characters which would be generated
+!  * for the given input, excluding the trailing NUL. If this value
+   * is greater or equal to "str_m", not all characters from the result
+   * have been stored in str, output bytes beyond the ("str_m"-1) -th character
+   * are discarded. If "str_m" is greater than zero it is guaranteed
+!  * the resulting string will be NUL-terminated.
+   */
+  
+  /*
+*** ../vim-7.4.552/src/testdir/test39.in	2014-08-16 18:13:00.082044726 +0200
+--- src/testdir/test39.in	2014-08-16 18:22:56.418023098 +0200
+***************
+*** 85,90 ****
+--- 85,94 ----
+  cccc
+  dddd
+  
++ yaaa
++ ¿¿¿
++ bbb
++ 
+  A23
+  4567
+  
+*** ../vim-7.4.552/src/proto/eval.pro	2014-05-07 17:31:32.473182497 +0200
+--- src/proto/eval.pro	2014-11-12 15:34:08.671587958 +0100
+***************
+*** 59,66 ****
+  int list_append_dict __ARGS((list_T *list, dict_T *dict));
+  int list_append_string __ARGS((list_T *l, char_u *str, int len));
+  int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item));
+- void vimlist_remove __ARGS((list_T *l, listitem_T *item, listitem_T *item2));
+  void list_insert __ARGS((list_T *l, listitem_T *ni, listitem_T *item));
+  int garbage_collect __ARGS((void));
+  void set_ref_in_ht __ARGS((hashtab_T *ht, int copyID));
+  void set_ref_in_list __ARGS((list_T *l, int copyID));
+--- 59,66 ----
+  int list_append_dict __ARGS((list_T *list, dict_T *dict));
+  int list_append_string __ARGS((list_T *l, char_u *str, int len));
+  int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item));
+  void list_insert __ARGS((list_T *l, listitem_T *ni, listitem_T *item));
++ void vimlist_remove __ARGS((list_T *l, listitem_T *item, listitem_T *item2));
+  int garbage_collect __ARGS((void));
+  void set_ref_in_ht __ARGS((hashtab_T *ht, int copyID));
+  void set_ref_in_list __ARGS((list_T *l, int copyID));
+*** ../vim-7.4.552/src/proto/misc1.pro	2014-06-25 14:39:35.110348584 +0200
+--- src/proto/misc1.pro	2014-11-12 15:34:16.043501712 +0100
+***************
+*** 5,11 ****
+  int get_indent_str __ARGS((char_u *ptr, int ts, int list));
+  int set_indent __ARGS((int size, int flags));
+  int get_number_indent __ARGS((linenr_T lnum));
+! int get_breakindent_win __ARGS((win_T *wp, char_u *ptr));
+  int open_line __ARGS((int dir, int flags, int second_line_indent));
+  int get_leader_len __ARGS((char_u *line, char_u **flags, int backward, int include_space));
+  int get_last_leader_offset __ARGS((char_u *line, char_u **flags));
+--- 5,11 ----
+  int get_indent_str __ARGS((char_u *ptr, int ts, int list));
+  int set_indent __ARGS((int size, int flags));
+  int get_number_indent __ARGS((linenr_T lnum));
+! int get_breakindent_win __ARGS((win_T *wp, char_u *line));
+  int open_line __ARGS((int dir, int flags, int second_line_indent));
+  int get_leader_len __ARGS((char_u *line, char_u **flags, int backward, int include_space));
+  int get_last_leader_offset __ARGS((char_u *line, char_u **flags));
+*** ../vim-7.4.552/src/proto/ops.pro	2014-04-29 12:15:22.860032651 +0200
+--- src/proto/ops.pro	2014-11-12 15:34:17.567483882 +0100
+***************
+*** 55,62 ****
+  char_u get_reg_type __ARGS((int regname, long *reglen));
+  char_u *get_reg_contents __ARGS((int regname, int flags));
+  void write_reg_contents __ARGS((int name, char_u *str, int maxlen, int must_append));
+- void write_reg_contents_ex __ARGS((int name, char_u *str, int maxlen, int must_append, int yank_type, long block_len));
+  void write_reg_contents_lst __ARGS((int name, char_u **strings, int maxlen, int must_append, int yank_type, long block_len));
+  void clear_oparg __ARGS((oparg_T *oap));
+  void cursor_pos_info __ARGS((void));
+  /* vim: set ft=c : */
+--- 55,62 ----
+  char_u get_reg_type __ARGS((int regname, long *reglen));
+  char_u *get_reg_contents __ARGS((int regname, int flags));
+  void write_reg_contents __ARGS((int name, char_u *str, int maxlen, int must_append));
+  void write_reg_contents_lst __ARGS((int name, char_u **strings, int maxlen, int must_append, int yank_type, long block_len));
++ void write_reg_contents_ex __ARGS((int name, char_u *str, int maxlen, int must_append, int yank_type, long block_len));
+  void clear_oparg __ARGS((oparg_T *oap));
+  void cursor_pos_info __ARGS((void));
+  /* vim: set ft=c : */
+*** ../vim-7.4.552/src/proto/screen.pro	2013-08-10 13:37:25.000000000 +0200
+--- src/proto/screen.pro	2014-11-12 15:34:19.455461795 +0100
+***************
+*** 26,32 ****
+  void screen_putchar __ARGS((int c, int row, int col, int attr));
+  void screen_getbytes __ARGS((int row, int col, char_u *bytes, int *attrp));
+  void screen_puts __ARGS((char_u *text, int row, int col, int attr));
+! void screen_puts_len __ARGS((char_u *text, int len, int row, int col, int attr));
+  void screen_stop_highlight __ARGS((void));
+  void reset_cterm_colors __ARGS((void));
+  void screen_draw_rectangle __ARGS((int row, int col, int height, int width, int invert));
+--- 26,32 ----
+  void screen_putchar __ARGS((int c, int row, int col, int attr));
+  void screen_getbytes __ARGS((int row, int col, char_u *bytes, int *attrp));
+  void screen_puts __ARGS((char_u *text, int row, int col, int attr));
+! void screen_puts_len __ARGS((char_u *text, int textlen, int row, int col, int attr));
+  void screen_stop_highlight __ARGS((void));
+  void reset_cterm_colors __ARGS((void));
+  void screen_draw_rectangle __ARGS((int row, int col, int height, int width, int invert));
+*** ../vim-7.4.552/src/os_unix.c	2014-11-19 18:48:41.515814987 +0100
+--- src/os_unix.c	2014-11-23 13:47:50.484703720 +0100
+***************
+*** 1609,1615 ****
+  /*
+   * If the X11 connection was lost try to restore it.
+   * Helps when the X11 server was stopped and restarted while Vim was inactive
+!  * (e.g. though tmux).
+   */
+      static void
+  may_restore_clipboard()
+--- 1609,1615 ----
+  /*
+   * If the X11 connection was lost try to restore it.
+   * Helps when the X11 server was stopped and restarted while Vim was inactive
+!  * (e.g. through tmux).
+   */
+      static void
+  may_restore_clipboard()
+*** ../vim-7.4.552/src/Make_vms.mms	2014-03-12 16:51:35.048792541 +0100
+--- src/Make_vms.mms	2014-08-10 16:27:11.040711199 +0200
+***************
+*** 2,8 ****
+  # Makefile for Vim on OpenVMS
+  #
+  # Maintainer:   Zoltan Arpadffy <arpadffy@polarhome.com>
+! # Last change:  2014 Feb 24
+  #
+  # This has script been tested on VMS 6.2 to 8.2 on DEC Alpha, VAX and IA64
+  # with MMS and MMK
+--- 2,8 ----
+  # Makefile for Vim on OpenVMS
+  #
+  # Maintainer:   Zoltan Arpadffy <arpadffy@polarhome.com>
+! # Last change:  2014 Aug 10
+  #
+  # This has script been tested on VMS 6.2 to 8.2 on DEC Alpha, VAX and IA64
+  # with MMS and MMK
+***************
+*** 309,315 ****
+  ALL_LIBS = $(LIBS) $(GUI_LIB_DIR) $(GUI_LIB) \
+  	   $(PERL_LIB) $(PYTHON_LIB) $(TCL_LIB) $(SNIFF_LIB) $(RUBY_LIB)
+  
+! SRC =	blowfish.c buffer.c charset.c diff.c digraph.c edit.c eval.c ex_cmds.c ex_cmds2.c \
+  	ex_docmd.c ex_eval.c ex_getln.c if_xcmdsrv.c fileio.c fold.c getchar.c \
+  	hardcopy.c hashtab.c main.c mark.c menu.c mbyte.c memfile.c memline.c message.c misc1.c \
+  	misc2.c move.c normal.c ops.c option.c popupmnu.c quickfix.c regexp.c search.c sha256.c\
+--- 309,315 ----
+  ALL_LIBS = $(LIBS) $(GUI_LIB_DIR) $(GUI_LIB) \
+  	   $(PERL_LIB) $(PYTHON_LIB) $(TCL_LIB) $(SNIFF_LIB) $(RUBY_LIB)
+  
+! SRC =	blowfish.c buffer.c charset.c crypt.c, crypt_zip.c diff.c digraph.c edit.c eval.c ex_cmds.c ex_cmds2.c \
+  	ex_docmd.c ex_eval.c ex_getln.c if_xcmdsrv.c fileio.c fold.c getchar.c \
+  	hardcopy.c hashtab.c main.c mark.c menu.c mbyte.c memfile.c memline.c message.c misc1.c \
+  	misc2.c move.c normal.c ops.c option.c popupmnu.c quickfix.c regexp.c search.c sha256.c\
+***************
+*** 318,324 ****
+  	$(GUI_SRC) $(PERL_SRC) $(PYTHON_SRC) $(TCL_SRC) $(SNIFF_SRC) \
+  	$(RUBY_SRC) $(HANGULIN_SRC) $(MZSCH_SRC)
+  
+! OBJ =	blowfish.obj buffer.obj charset.obj diff.obj digraph.obj edit.obj eval.obj \
+  	ex_cmds.obj ex_cmds2.obj ex_docmd.obj ex_eval.obj ex_getln.obj \
+  	if_xcmdsrv.obj fileio.obj fold.obj getchar.obj hardcopy.obj hashtab.obj main.obj mark.obj \
+  	menu.obj memfile.obj memline.obj message.obj misc1.obj misc2.obj \
+--- 318,324 ----
+  	$(GUI_SRC) $(PERL_SRC) $(PYTHON_SRC) $(TCL_SRC) $(SNIFF_SRC) \
+  	$(RUBY_SRC) $(HANGULIN_SRC) $(MZSCH_SRC)
+  
+! OBJ =	blowfish.obj buffer.obj charset.obj crypt.obj, crypt_zip.obj diff.obj digraph.obj edit.obj eval.obj \
+  	ex_cmds.obj ex_cmds2.obj ex_docmd.obj ex_eval.obj ex_getln.obj \
+  	if_xcmdsrv.obj fileio.obj fold.obj getchar.obj hardcopy.obj hashtab.obj main.obj mark.obj \
+  	menu.obj memfile.obj memline.obj message.obj misc1.obj misc2.obj \
+*** ../vim-7.4.552/src/proto/os_vms.pro	2014-03-12 16:51:35.060792541 +0100
+--- src/proto/os_vms.pro	2014-11-12 15:34:29.219347574 +0100
+***************
+*** 5,15 ****
+  char_u *mch_getenv __ARGS((char_u *lognam));
+  int mch_setenv __ARGS((char *var, char *value, int x));
+  int vms_sys __ARGS((char *cmd, char *out, char *inp));
+  int vms_sys_status __ARGS((int status));
+  int vms_read __ARGS((char *inbuf, size_t nbytes));
+- char *vms_tolower __ARGS((char *name));
+  int mch_expand_wildcards __ARGS((int num_pat, char_u **pat, int *num_file, char_u ***file, int flags));
+  int mch_expandpath __ARGS((garray_T *gap, char_u *path, int flags));
+  void *vms_fixfilename __ARGS((void *instring));
+  void vms_remove_version __ARGS((void *fname));
+  /* vim: set ft=c : */
+--- 5,16 ----
+  char_u *mch_getenv __ARGS((char_u *lognam));
+  int mch_setenv __ARGS((char *var, char *value, int x));
+  int vms_sys __ARGS((char *cmd, char *out, char *inp));
++ char *vms_tolower __ARGS((char *name));
+  int vms_sys_status __ARGS((int status));
+  int vms_read __ARGS((char *inbuf, size_t nbytes));
+  int mch_expand_wildcards __ARGS((int num_pat, char_u **pat, int *num_file, char_u ***file, int flags));
+  int mch_expandpath __ARGS((garray_T *gap, char_u *path, int flags));
+  void *vms_fixfilename __ARGS((void *instring));
+  void vms_remove_version __ARGS((void *fname));
++ int RealWaitForChar __ARGS((int fd, long msec, int *check_for_gpm));
+  /* vim: set ft=c : */
+*** ../vim-7.4.552/src/INSTALL	2011-05-19 12:36:17.000000000 +0200
+--- src/INSTALL	2014-07-06 14:30:41.411368351 +0200
+***************
+*** 316,322 ****
+  the `configure' script.  `configure' automatically checks for the
+  source code in the directory that `configure' is in and in `..'.
+  
+!    If you have to use a `make' that does not supports the `VPATH'
+  variable, you have to compile the package for one architecture at a time
+  in the source code directory.  After you have installed the package for
+  one architecture, use `make distclean' before reconfiguring for another
+--- 316,322 ----
+  the `configure' script.  `configure' automatically checks for the
+  source code in the directory that `configure' is in and in `..'.
+  
+!    If you have to use a `make' that does not support the `VPATH'
+  variable, you have to compile the package for one architecture at a time
+  in the source code directory.  After you have installed the package for
+  one architecture, use `make distclean' before reconfiguring for another
+*** ../vim-7.4.552/src/version.c	2014-12-14 00:43:50.335749455 +0100
+--- src/version.c	2014-12-17 12:39:41.933558755 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     553,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+1. You actually wore a blue ribbon to protest the Communications Decency Act.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.554 b/SOURCES/7.4.554
new file mode 100644
index 0000000..b159251
--- /dev/null
+++ b/SOURCES/7.4.554
@@ -0,0 +1,65 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.554
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.554
+Problem:    Missing part of patch 7.4.519.
+Solution:   Copy back regprog after calling vim_regexec.
+Files:	    src/quickfix.c
+
+
+*** ../vim-7.4.553/src/quickfix.c	2014-07-23 16:33:04.075886500 +0200
+--- src/quickfix.c	2014-11-19 16:21:16.404128731 +0100
+***************
+*** 592,597 ****
+--- 592,599 ----
+  restofline:
+  	for ( ; fmt_ptr != NULL; fmt_ptr = fmt_ptr->next)
+  	{
++ 	    int r;
++ 
+  	    idx = fmt_ptr->prefix;
+  	    if (multiscan && vim_strchr((char_u *)"OPQ", idx) == NULL)
+  		continue;
+***************
+*** 607,613 ****
+  	    tail = NULL;
+  
+  	    regmatch.regprog = fmt_ptr->prog;
+! 	    if (vim_regexec(&regmatch, IObuff, (colnr_T)0))
+  	    {
+  		if ((idx == 'C' || idx == 'Z') && !multiline)
+  		    continue;
+--- 609,617 ----
+  	    tail = NULL;
+  
+  	    regmatch.regprog = fmt_ptr->prog;
+! 	    r = vim_regexec(&regmatch, IObuff, (colnr_T)0);
+! 	    fmt_ptr->prog = regmatch.regprog;
+! 	    if (r)
+  	    {
+  		if ((idx == 'C' || idx == 'Z') && !multiline)
+  		    continue;
+*** ../vim-7.4.553/src/version.c	2014-12-17 14:36:10.367090935 +0100
+--- src/version.c	2014-12-17 14:40:51.463618087 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     554,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+2. You kiss your girlfriend's home page.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.555 b/SOURCES/7.4.555
new file mode 100644
index 0000000..431985d
--- /dev/null
+++ b/SOURCES/7.4.555
@@ -0,0 +1,84 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.555
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.555
+Problem:    test_close_count may fail for some combination of features.
+Solution:   Require normal features.
+Files:	    src/testdir/test_close_count.in
+
+
+*** ../vim-7.4.554/src/testdir/test_close_count.in	2014-11-27 16:22:42.746412995 +0100
+--- src/testdir/test_close_count.in	2014-11-30 13:07:39.347388895 +0100
+***************
+*** 1,8 ****
+  Tests for :[count]close! and :[count]hide     vim: set ft=vim :
+  
+  STARTTEST
+  :let tests = []
+- :so tiny.vim
+  :for i in range(5)
+  :new
+  :endfor
+--- 1,8 ----
+  Tests for :[count]close! and :[count]hide     vim: set ft=vim :
+  
+  STARTTEST
++ :so small.vim
+  :let tests = []
+  :for i in range(5)
+  :new
+  :endfor
+***************
+*** 46,52 ****
+  
+  STARTTEST
+  :let tests = []
+- :so tiny.vim
+  :for i in range(5)
+  :new
+  :endfor
+--- 46,51 ----
+***************
+*** 94,100 ****
+  
+  STARTTEST
+  :let tests = []
+- :so tiny.vim
+  :set hidden
+  :for i in range(5)
+  :new
+--- 93,98 ----
+***************
+*** 123,129 ****
+  
+  STARTTEST
+  :let tests = []
+- :so tiny.vim
+  :set hidden
+  :for i in range(5)
+  :new
+--- 121,126 ----
+*** ../vim-7.4.554/src/version.c	2014-12-17 14:41:06.083437433 +0100
+--- src/version.c	2014-12-17 14:42:07.426679571 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     555,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+3. Your bookmark takes 15 minutes to scroll from top to bottom.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.556 b/SOURCES/7.4.556
new file mode 100644
index 0000000..e0cf3c2
--- /dev/null
+++ b/SOURCES/7.4.556
@@ -0,0 +1,70 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.556
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.556
+Problem:    Failed commands in Python interface not handled correctly.
+Solution:   Restore window and buffer on failure.
+Files:	    src/if_py_both.h
+
+
+*** ../vim-7.4.555/src/if_py_both.h	2014-08-29 13:49:48.678436915 +0200
+--- src/if_py_both.h	2014-09-19 14:21:33.474404353 +0200
+***************
+*** 3172,3177 ****
+--- 3172,3178 ----
+  	    if (switch_win(&save_curwin, &save_curtab, (win_T *)from,
+  			      win_find_tabpage((win_T *)from), FALSE) == FAIL)
+  	    {
++ 		restore_win(save_curwin, save_curtab, TRUE);
+  		if (VimTryEnd())
+  		    return -1;
+  		PyErr_SET_VIM(N_("problem while switching windows"));
+***************
+*** 4032,4040 ****
+      win_T	*wp;
+      tabpage_T	*tp;
+  
+!     if (find_win_for_buf(buf, &wp, &tp) == FAIL
+! 	    || switch_win(save_curwinp, save_curtabp, wp, tp, TRUE) == FAIL)
+  	switch_buffer(save_curbufp, buf);
+  }
+  
+      static void
+--- 4033,4045 ----
+      win_T	*wp;
+      tabpage_T	*tp;
+  
+!     if (find_win_for_buf(buf, &wp, &tp) == FAIL)
+  	switch_buffer(save_curbufp, buf);
++     else if (switch_win(save_curwinp, save_curtabp, wp, tp, TRUE) == FAIL)
++     {
++ 	restore_win(*save_curwinp, *save_curtabp, TRUE);
++ 	switch_buffer(save_curbufp, buf);
++     }
+  }
+  
+      static void
+*** ../vim-7.4.555/src/version.c	2014-12-17 14:42:42.990240206 +0100
+--- src/version.c	2014-12-17 14:44:33.304877367 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     556,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+4. Your eyeglasses have a web site burned in on them.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.557 b/SOURCES/7.4.557
new file mode 100644
index 0000000..8d249f7
--- /dev/null
+++ b/SOURCES/7.4.557
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.557
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.557
+Problem:    One more small issue.
+Solution:   Update function proto.
+Files:	    src/proto/window.pro
+
+
+*** ../vim-7.4.556/src/proto/window.pro	2014-06-17 17:48:21.780628008 +0200
+--- src/proto/window.pro	2014-11-12 15:34:22.895421553 +0100
+***************
+*** 75,81 ****
+  void switch_buffer __ARGS((buf_T **save_curbuf, buf_T *buf));
+  void restore_buffer __ARGS((buf_T *save_curbuf));
+  int win_hasvertsplit __ARGS((void));
+! int match_add __ARGS((win_T *wp, char_u *grp, char_u *pat, int prio, int id, list_T *pos));
+  int match_delete __ARGS((win_T *wp, int id, int perr));
+  void clear_matches __ARGS((win_T *wp));
+  matchitem_T *get_match __ARGS((win_T *wp, int id));
+--- 75,81 ----
+  void switch_buffer __ARGS((buf_T **save_curbuf, buf_T *buf));
+  void restore_buffer __ARGS((buf_T *save_curbuf));
+  int win_hasvertsplit __ARGS((void));
+! int match_add __ARGS((win_T *wp, char_u *grp, char_u *pat, int prio, int id, list_T *pos_list));
+  int match_delete __ARGS((win_T *wp, int id, int perr));
+  void clear_matches __ARGS((win_T *wp));
+  matchitem_T *get_match __ARGS((win_T *wp, int id));
+*** ../vim-7.4.556/src/version.c	2014-12-17 14:45:56.095854545 +0100
+--- src/version.c	2014-12-17 14:47:19.674822175 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     557,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+5. You find yourself brainstorming for new subjects to search.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.558 b/SOURCES/7.4.558
new file mode 100644
index 0000000..74046e6
--- /dev/null
+++ b/SOURCES/7.4.558
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.558
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.558
+Problem:    When the X server restarts Vim may get stuck.
+Solution:   Destroy the application context and create it again.  (Issue 203)
+Files:	    src/os_unix.c
+
+
+*** ../vim-7.4.557/src/os_unix.c	2014-12-17 14:36:10.367090935 +0100
+--- src/os_unix.c	2014-12-17 17:55:23.187644328 +0100
+***************
+*** 1617,1622 ****
+--- 1617,1633 ----
+      if (xterm_dpy_was_reset)
+      {
+  	xterm_dpy_was_reset = FALSE;
++ 
++ # ifndef LESSTIF_VERSION
++ 	/* This has been reported to avoid Vim getting stuck. */
++ 	if (app_context != (XtAppContext)NULL)
++ 	{
++ 	    XtDestroyApplicationContext(app_context);
++ 	    app_context = (XtAppContext)NULL;
++ 	    x11_display = NULL; /* freed by XtDestroyApplicationContext() */
++ 	}
++ # endif
++ 
+  	setup_term_clip();
+  	get_x11_title(FALSE);
+      }
+*** ../vim-7.4.557/src/version.c	2014-12-17 14:47:52.870412129 +0100
+--- src/version.c	2014-12-17 17:57:10.026323560 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     558,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+14. You start introducing yourself as "Jim at I-I-Net dot net dot au"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.559 b/SOURCES/7.4.559
new file mode 100644
index 0000000..7425f53
--- /dev/null
+++ b/SOURCES/7.4.559
@@ -0,0 +1,96 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.559
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.559
+Problem:    Appending a block in the middle of a tab does not work correctly
+	    when virtualedit is set.
+Solution:   Decrement spaces and count, don't reset them. (James McCoy)
+Files:	    src/ops.c, src/testdir/test39.in, src/testdir/test39.ok
+
+
+*** ../vim-7.4.558/src/ops.c	2014-11-19 17:35:35.081446695 +0100
+--- src/ops.c	2014-12-17 18:28:39.034973177 +0100
+***************
+*** 612,631 ****
+  #ifdef FEAT_MBYTE
+  	if (has_mbyte && spaces > 0)
+  	{
+  	    /* Avoid starting halfway a multi-byte character. */
+  	    if (b_insert)
+  	    {
+! 		int off = (*mb_head_off)(oldp, oldp + offset + spaces);
+! 		spaces -= off;
+! 		count -= off;
+  	    }
+  	    else
+  	    {
+! 		int off = (*mb_off_next)(oldp, oldp + offset);
+  		offset += off;
+- 		spaces = 0;
+- 		count = 0;
+  	    }
+  	}
+  #endif
+  
+--- 612,631 ----
+  #ifdef FEAT_MBYTE
+  	if (has_mbyte && spaces > 0)
+  	{
++ 	    int off;
++ 
+  	    /* Avoid starting halfway a multi-byte character. */
+  	    if (b_insert)
+  	    {
+! 		off = (*mb_head_off)(oldp, oldp + offset + spaces);
+  	    }
+  	    else
+  	    {
+! 		off = (*mb_off_next)(oldp, oldp + offset);
+  		offset += off;
+  	    }
++ 	    spaces -= off;
++ 	    count -= off;
+  	}
+  #endif
+  
+*** ../vim-7.4.558/src/testdir/test39.ok	2014-08-16 18:13:00.082044726 +0200
+--- src/testdir/test39.ok	2014-12-17 18:18:33.090470463 +0100
+***************
+*** 26,31 ****
+--- 26,35 ----
+         x 	line2
+         x 	line3
+  
++        x     x   line1
++        x     x   line2
++        x     x   line3
++ 
+  the YOUTUSSEUU end
+  - yOUSSTUSSEXu -
+  THE YOUTUSSEUU END
+*** ../vim-7.4.558/src/version.c	2014-12-17 17:59:26.916631344 +0100
+--- src/version.c	2014-12-17 18:32:23.276199179 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     559,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+15. Your heart races faster and beats irregularly each time you see a new WWW
+    site address in print or on TV, even though you've never had heart
+    problems before.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.560 b/SOURCES/7.4.560
new file mode 100644
index 0000000..2da74c4
--- /dev/null
+++ b/SOURCES/7.4.560
@@ -0,0 +1,205 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.560
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.560
+Problem:    Memory leak using :wviminfo. Issue 296.
+Solution:   Free memory when needed. (idea by Christian Brabandt)
+Files:	    src/ops.c
+
+
+*** ../vim-7.4.559/src/ops.c	2014-12-17 18:35:37.553795955 +0100
+--- src/ops.c	2014-12-17 20:59:49.722557613 +0100
+***************
+*** 5663,5668 ****
+--- 5663,5670 ----
+      int		set_prev = FALSE;
+      char_u	*str;
+      char_u	**array = NULL;
++     int		new_type;
++     colnr_T	new_width;
+  
+      /* We only get here (hopefully) if line[0] == '"' */
+      str = virp->vir_line + 1;
+***************
+*** 5695,5715 ****
+      limit = 100;	/* Optimized for registers containing <= 100 lines */
+      if (do_it)
+      {
+  	if (set_prev)
+  	    y_previous = y_current;
+! 	vim_free(y_current->y_array);
+! 	array = y_current->y_array =
+! 		       (char_u **)alloc((unsigned)(limit * sizeof(char_u *)));
+  	str = skipwhite(skiptowhite(str));
+  	if (STRNCMP(str, "CHAR", 4) == 0)
+! 	    y_current->y_type = MCHAR;
+  	else if (STRNCMP(str, "BLOCK", 5) == 0)
+! 	    y_current->y_type = MBLOCK;
+  	else
+! 	    y_current->y_type = MLINE;
+  	/* get the block width; if it's missing we get a zero, which is OK */
+  	str = skipwhite(skiptowhite(str));
+! 	y_current->y_width = getdigits(&str);
+      }
+  
+      while (!(eof = viminfo_readline(virp))
+--- 5697,5721 ----
+      limit = 100;	/* Optimized for registers containing <= 100 lines */
+      if (do_it)
+      {
++ 	/*
++ 	 * Build the new register in array[].
++ 	 * y_array is kept as-is until done.
++ 	 * The "do_it" flag is reset when something is wrong, in which case
++ 	 * array[] needs to be freed.
++ 	 */
+  	if (set_prev)
+  	    y_previous = y_current;
+! 	array = (char_u **)alloc((unsigned)(limit * sizeof(char_u *)));
+  	str = skipwhite(skiptowhite(str));
+  	if (STRNCMP(str, "CHAR", 4) == 0)
+! 	    new_type = MCHAR;
+  	else if (STRNCMP(str, "BLOCK", 5) == 0)
+! 	    new_type = MBLOCK;
+  	else
+! 	    new_type = MLINE;
+  	/* get the block width; if it's missing we get a zero, which is OK */
+  	str = skipwhite(skiptowhite(str));
+! 	new_width = getdigits(&str);
+      }
+  
+      while (!(eof = viminfo_readline(virp))
+***************
+*** 5717,5756 ****
+      {
+  	if (do_it)
+  	{
+! 	    if (size >= limit)
+  	    {
+! 		y_current->y_array = (char_u **)
+  			      alloc((unsigned)(limit * 2 * sizeof(char_u *)));
+  		for (i = 0; i < limit; i++)
+! 		    y_current->y_array[i] = array[i];
+  		vim_free(array);
+  		limit *= 2;
+- 		array = y_current->y_array;
+  	    }
+  	    str = viminfo_readstring(virp, 1, TRUE);
+  	    if (str != NULL)
+  		array[size++] = str;
+  	    else
+  		do_it = FALSE;
+  	}
+      }
+      if (do_it)
+      {
+  	if (size == 0)
+  	{
+- 	    vim_free(array);
+  	    y_current->y_array = NULL;
+  	}
+! 	else if (size < limit)
+  	{
+  	    y_current->y_array =
+  			(char_u **)alloc((unsigned)(size * sizeof(char_u *)));
+  	    for (i = 0; i < size; i++)
+! 		y_current->y_array[i] = array[i];
+! 	    vim_free(array);
+  	}
+- 	y_current->y_size = size;
+      }
+      return eof;
+  }
+  
+--- 5723,5788 ----
+      {
+  	if (do_it)
+  	{
+! 	    if (size == limit)
+  	    {
+! 		char_u **new_array = (char_u **)
+  			      alloc((unsigned)(limit * 2 * sizeof(char_u *)));
++ 
++ 		if (new_array == NULL)
++ 		{
++ 		    do_it = FALSE;
++ 		    break;
++ 		}
+  		for (i = 0; i < limit; i++)
+! 		    new_array[i] = array[i];
+  		vim_free(array);
++ 		array = new_array;
+  		limit *= 2;
+  	    }
+  	    str = viminfo_readstring(virp, 1, TRUE);
+  	    if (str != NULL)
+  		array[size++] = str;
+  	    else
++ 		/* error, don't store the result */
+  		do_it = FALSE;
+  	}
+      }
+      if (do_it)
+      {
++ 	/* free y_array[] */
++ 	for (i = 0; i < y_current->y_size; i++)
++ 	    vim_free(y_current->y_array[i]);
++ 	vim_free(y_current->y_array);
++ 
++ 	y_current->y_type = new_type;
++ 	y_current->y_width = new_width;
++ 	y_current->y_size = size;
+  	if (size == 0)
+  	{
+  	    y_current->y_array = NULL;
+  	}
+! 	else
+  	{
++ 	    /* Move the lines from array[] to y_array[]. */
+  	    y_current->y_array =
+  			(char_u **)alloc((unsigned)(size * sizeof(char_u *)));
+  	    for (i = 0; i < size; i++)
+! 	    {
+! 		if (y_current->y_array == NULL)
+! 		    vim_free(array[i]);
+! 		else
+! 		    y_current->y_array[i] = array[i];
+! 	    }
+  	}
+      }
++     else
++     {
++ 	/* Free array[] if it was filled. */
++ 	for (i = 0; i < size; i++)
++ 	    vim_free(array[i]);
++     }
++     vim_free(array);
++ 
+      return eof;
+  }
+  
+*** ../vim-7.4.559/src/version.c	2014-12-17 18:35:37.553795955 +0100
+--- src/version.c	2014-12-17 18:56:33.810259558 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     560,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+17. You turn on your intercom when leaving the room so you can hear if new
+    e-mail arrives.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.561 b/SOURCES/7.4.561
new file mode 100644
index 0000000..d28c780
--- /dev/null
+++ b/SOURCES/7.4.561
@@ -0,0 +1,109 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.561
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.561
+Problem:    Ex range handling is wrong for buffer-local user commands.
+Solution:   Check for CMD_USER_BUF. (Marcin Szamotulski)
+Files:	    src/ex_docmd.c, src/testdir/test_command_count.in,
+	    src/testdir/test_command_count.ok
+
+
+*** ../vim-7.4.560/src/ex_docmd.c	2014-12-08 04:16:26.265702875 +0100
+--- src/ex_docmd.c	2015-01-07 13:11:45.740538584 +0100
+***************
+*** 2133,2144 ****
+      if (ea.cmdidx != CMD_SIZE
+  #ifdef FEAT_USR_CMDS
+  	&& ea.cmdidx != CMD_USER
+  #endif
+         )
+  	ea.addr_type = cmdnames[(int)ea.cmdidx].cmd_addr_type;
+      else
+  #ifdef FEAT_USR_CMDS
+! 	if (ea.cmdidx != CMD_USER)
+  #endif
+  	ea.addr_type = ADDR_LINES;
+      /* ea.addr_type for user commands is set by find_ucmd */
+--- 2133,2145 ----
+      if (ea.cmdidx != CMD_SIZE
+  #ifdef FEAT_USR_CMDS
+  	&& ea.cmdidx != CMD_USER
++ 	&& ea.cmdidx != CMD_USER_BUF
+  #endif
+         )
+  	ea.addr_type = cmdnames[(int)ea.cmdidx].cmd_addr_type;
+      else
+  #ifdef FEAT_USR_CMDS
+! 	if (ea.cmdidx != CMD_USER && ea.cmdidx != CMD_USER_BUF)
+  #endif
+  	ea.addr_type = ADDR_LINES;
+      /* ea.addr_type for user commands is set by find_ucmd */
+*** ../vim-7.4.560/src/testdir/test_command_count.in	2014-12-08 04:16:26.249703054 +0100
+--- src/testdir/test_command_count.in	2015-01-07 13:12:34.099980778 +0100
+***************
+*** 3,9 ****
+  STARTTEST
+  :let g:lines = []
+  :so tiny.vim
+! :com -range RangeLines :call add(g:lines, 'Rangeg:Lines '.<line1>.' '.<line2>)
+  :com -range -addr=arguments RangeArguments :call add(g:lines, 'RangeArguments '.<line1>.' '.<line2>)
+  :com -range=% -addr=arguments RangeArgumentsAll :call add(g:lines, 'RangeArgumentsAll '.<line1>.' '.<line2>)
+  :com -range -addr=loaded_buffers RangeLoadedBuffers :call add(g:lines, 'RangeLoadedBuffers '.<line1>.' '.<line2>)
+--- 3,9 ----
+  STARTTEST
+  :let g:lines = []
+  :so tiny.vim
+! :com -range=% RangeLines :call add(g:lines, 'RangeLines '.<line1>.' '.<line2>)
+  :com -range -addr=arguments RangeArguments :call add(g:lines, 'RangeArguments '.<line1>.' '.<line2>)
+  :com -range=% -addr=arguments RangeArgumentsAll :call add(g:lines, 'RangeArgumentsAll '.<line1>.' '.<line2>)
+  :com -range -addr=loaded_buffers RangeLoadedBuffers :call add(g:lines, 'RangeLoadedBuffers '.<line1>.' '.<line2>)
+***************
+*** 42,47 ****
+--- 42,53 ----
+  :%RangeTabs
+  :RangeTabsAll
+  :1tabonly
++ :s/\n/\r\r\r\r\r/
++ :2ma<
++ :$-ma>
++ :'<,'>RangeLines
++ :com -range=% -buffer LocalRangeLines :call add(g:lines, 'LocalRangeLines '.<line1>.' '.<line2>)
++ :'<,'>LocalRangeLines
+  :e! test.out
+  :call append(0, g:lines)
+  :w|qa!
+*** ../vim-7.4.560/src/testdir/test_command_count.ok	2014-12-08 04:16:26.249703054 +0100
+--- src/testdir/test_command_count.ok	2015-01-07 12:59:08.657271709 +0100
+***************
+*** 14,17 ****
+--- 14,19 ----
+  RangeTabs 2 5
+  RangeTabs 1 5
+  RangeTabsAll 1 5
++ RangeLines 2 5
++ LocalRangeLines 2 5
+  
+*** ../vim-7.4.560/src/version.c	2014-12-17 21:00:44.989871256 +0100
+--- src/version.c	2015-01-07 12:58:04.754008894 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     561,
+  /**/
+
+-- 
+Q: What is a patch 22?
+A: A patch you need to include to make it possible to include patches.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.562 b/SOURCES/7.4.562
new file mode 100644
index 0000000..d462c38
--- /dev/null
+++ b/SOURCES/7.4.562
@@ -0,0 +1,65 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.562
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.562
+Problem:    Segfault with wide screen and error in 'rulerformat'. (Ingo Karkat)
+Solution:   Check there is enough space. (Christian Brabandt)
+Files:	    src/buffer.c, src/screen.c
+
+
+*** ../vim-7.4.561/src/buffer.c	2014-11-19 16:38:01.500680103 +0100
+--- src/buffer.c	2015-01-07 13:24:22.663808167 +0100
+***************
+*** 4409,4414 ****
+--- 4409,4416 ----
+      long	above; /* number of lines above window */
+      long	below; /* number of lines below window */
+  
++     if (buflen < 3) /* need at least 3 chars for writing */
++ 	return;
+      above = wp->w_topline - 1;
+  #ifdef FEAT_DIFF
+      above += diff_check_fill(wp, wp->w_topline) - wp->w_topfill;
+*** ../vim-7.4.561/src/screen.c	2014-12-13 03:36:34.988435244 +0100
+--- src/screen.c	2015-01-07 13:28:04.069254599 +0100
+***************
+*** 10588,10594 ****
+  	    this_ru_col = (WITH_WIDTH(width) + 1) / 2;
+  	if (this_ru_col + o < WITH_WIDTH(width))
+  	{
+! 	    while (this_ru_col + o < WITH_WIDTH(width))
+  	    {
+  #ifdef FEAT_MBYTE
+  		if (has_mbyte)
+--- 10588,10595 ----
+  	    this_ru_col = (WITH_WIDTH(width) + 1) / 2;
+  	if (this_ru_col + o < WITH_WIDTH(width))
+  	{
+! 	    /* need at least 3 chars left for get_rel_pos() + NUL */
+! 	    while (this_ru_col + o < WITH_WIDTH(width) && RULER_BUF_LEN > i + 4)
+  	    {
+  #ifdef FEAT_MBYTE
+  		if (has_mbyte)
+*** ../vim-7.4.561/src/version.c	2015-01-07 13:15:40.609829496 +0100
+--- src/version.c	2015-01-07 13:22:59.184770984 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     562,
+  /**/
+
+-- 
+"I can't complain, but sometimes I still do."   (Joe Walsh)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.564 b/SOURCES/7.4.564
new file mode 100644
index 0000000..16f5e75
--- /dev/null
+++ b/SOURCES/7.4.564
@@ -0,0 +1,246 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.564
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.564
+Problem:    FEAT_OSFILETYPE is used even though it's never defined.
+Solution:   Remove the code. (Christian Brabandt)
+Files:	    src/fileio.c
+
+
+*** ../vim-7.4.563/src/fileio.c	2014-11-19 16:38:01.516679915 +0100
+--- src/fileio.c	2015-01-07 14:40:04.731344734 +0100
+***************
+*** 10049,10105 ****
+  {
+      regmatch_T	regmatch;
+      int		result = FALSE;
+- #ifdef FEAT_OSFILETYPE
+-     int		no_pattern = FALSE; /* TRUE if check is filetype only */
+-     char_u	*type_start;
+-     char_u	c;
+-     int		match = FALSE;
+- #endif
+  
+      regmatch.rm_ic = p_fic; /* ignore case if 'fileignorecase' is set */
+! #ifdef FEAT_OSFILETYPE
+!     if (*pattern == '<')
+!     {
+! 	/* There is a filetype condition specified with this pattern.
+! 	 * Check the filetype matches first. If not, don't bother with the
+! 	 * pattern (set regprog to NULL).
+! 	 * Always use magic for the regexp.
+! 	 */
+! 
+! 	for (type_start = pattern + 1; (c = *pattern); pattern++)
+! 	{
+! 	    if ((c == ';' || c == '>') && match == FALSE)
+! 	    {
+! 		*pattern = NUL;	    /* Terminate the string */
+! 		/* TODO: match with 'filetype' of buffer that "fname" comes
+! 		 * from. */
+! 		match = mch_check_filetype(fname, type_start);
+! 		*pattern = c;	    /* Restore the terminator */
+! 		type_start = pattern + 1;
+! 	    }
+! 	    if (c == '>')
+! 		break;
+! 	}
+! 
+! 	/* (c should never be NUL, but check anyway) */
+! 	if (match == FALSE || c == NUL)
+! 	    regmatch.regprog = NULL;	/* Doesn't match - don't check pat. */
+! 	else if (*pattern == NUL)
+! 	{
+! 	    regmatch.regprog = NULL;	/* Vim will try to free regprog later */
+! 	    no_pattern = TRUE;	/* Always matches - don't check pat. */
+! 	}
+! 	else
+! 	    regmatch.regprog = vim_regcomp(pattern + 1, RE_MAGIC);
+!     }
+      else
+! #endif
+!     {
+! 	if (prog != NULL)
+! 	    regmatch.regprog = *prog;
+! 	else
+! 	    regmatch.regprog = vim_regcomp(pattern, RE_MAGIC);
+!     }
+  
+      /*
+       * Try for a match with the pattern with:
+--- 10049,10060 ----
+  {
+      regmatch_T	regmatch;
+      int		result = FALSE;
+  
+      regmatch.rm_ic = p_fic; /* ignore case if 'fileignorecase' is set */
+!     if (prog != NULL)
+! 	regmatch.regprog = *prog;
+      else
+! 	regmatch.regprog = vim_regcomp(pattern, RE_MAGIC);
+  
+      /*
+       * Try for a match with the pattern with:
+***************
+*** 10107,10125 ****
+       * 2. the short file name, when the pattern has a '/'.
+       * 3. the tail of the file name, when the pattern has no '/'.
+       */
+!     if (
+! #ifdef FEAT_OSFILETYPE
+! 	    /* If the check is for a filetype only and we don't care
+! 	     * about the path then skip all the regexp stuff.
+! 	     */
+! 	    no_pattern ||
+! #endif
+! 	    (regmatch.regprog != NULL
+  	     && ((allow_dirs
+  		     && (vim_regexec(&regmatch, fname, (colnr_T)0)
+  			 || (sfname != NULL
+  			     && vim_regexec(&regmatch, sfname, (colnr_T)0))))
+! 		 || (!allow_dirs && vim_regexec(&regmatch, tail, (colnr_T)0)))))
+  	result = TRUE;
+  
+      if (prog != NULL)
+--- 10062,10073 ----
+       * 2. the short file name, when the pattern has a '/'.
+       * 3. the tail of the file name, when the pattern has no '/'.
+       */
+!     if (regmatch.regprog != NULL
+  	     && ((allow_dirs
+  		     && (vim_regexec(&regmatch, fname, (colnr_T)0)
+  			 || (sfname != NULL
+  			     && vim_regexec(&regmatch, sfname, (colnr_T)0))))
+! 		 || (!allow_dirs && vim_regexec(&regmatch, tail, (colnr_T)0))))
+  	result = TRUE;
+  
+      if (prog != NULL)
+***************
+*** 10176,10184 ****
+   * allow_dirs, otherwise FALSE is put there -- webb.
+   * Handle backslashes before special characters, like "\*" and "\ ".
+   *
+-  * If FEAT_OSFILETYPE defined then pass initial <type> through unchanged. Eg:
+-  * '<html>myfile' becomes '<html>^myfile$' -- leonard.
+-  *
+   * Returns NULL when out of memory.
+   */
+      char_u *
+--- 10124,10129 ----
+***************
+*** 10188,10241 ****
+      char	*allow_dirs;	/* Result passed back out in here */
+      int		no_bslash UNUSED; /* Don't use a backward slash as pathsep */
+  {
+!     int		size;
+      char_u	*endp;
+      char_u	*reg_pat;
+      char_u	*p;
+      int		i;
+      int		nested = 0;
+      int		add_dollar = TRUE;
+- #ifdef FEAT_OSFILETYPE
+-     int		check_length = 0;
+- #endif
+  
+      if (allow_dirs != NULL)
+  	*allow_dirs = FALSE;
+      if (pat_end == NULL)
+  	pat_end = pat + STRLEN(pat);
+  
+- #ifdef FEAT_OSFILETYPE
+-     /* Find out how much of the string is the filetype check */
+-     if (*pat == '<')
+-     {
+- 	/* Count chars until the next '>' */
+- 	for (p = pat + 1; p < pat_end && *p != '>'; p++)
+- 	    ;
+- 	if (p < pat_end)
+- 	{
+- 	    /* Pattern is of the form <.*>.*  */
+- 	    check_length = p - pat + 1;
+- 	    if (p + 1 >= pat_end)
+- 	    {
+- 		/* The 'pattern' is a filetype check ONLY */
+- 		reg_pat = (char_u *)alloc(check_length + 1);
+- 		if (reg_pat != NULL)
+- 		{
+- 		    mch_memmove(reg_pat, pat, (size_t)check_length);
+- 		    reg_pat[check_length] = NUL;
+- 		}
+- 		return reg_pat;
+- 	    }
+- 	}
+- 	/* else: there was no closing '>' - assume it was a normal pattern */
+- 
+-     }
+-     pat += check_length;
+-     size = 2 + check_length;
+- #else
+-     size = 2;		/* '^' at start, '$' at end */
+- #endif
+- 
+      for (p = pat; p < pat_end; p++)
+      {
+  	switch (*p)
+--- 10133,10151 ----
+      char	*allow_dirs;	/* Result passed back out in here */
+      int		no_bslash UNUSED; /* Don't use a backward slash as pathsep */
+  {
+!     int		size = 2; /* '^' at start, '$' at end */
+      char_u	*endp;
+      char_u	*reg_pat;
+      char_u	*p;
+      int		i;
+      int		nested = 0;
+      int		add_dollar = TRUE;
+  
+      if (allow_dirs != NULL)
+  	*allow_dirs = FALSE;
+      if (pat_end == NULL)
+  	pat_end = pat + STRLEN(pat);
+  
+      for (p = pat; p < pat_end; p++)
+      {
+  	switch (*p)
+***************
+*** 10270,10283 ****
+      if (reg_pat == NULL)
+  	return NULL;
+  
+- #ifdef FEAT_OSFILETYPE
+-     /* Copy the type check in to the start. */
+-     if (check_length)
+- 	mch_memmove(reg_pat, pat - check_length, (size_t)check_length);
+-     i = check_length;
+- #else
+      i = 0;
+- #endif
+  
+      if (pat[0] == '*')
+  	while (pat[0] == '*' && pat < pat_end - 1)
+--- 10180,10186 ----
+*** ../vim-7.4.563/src/version.c	2015-01-07 14:02:47.609220508 +0100
+--- src/version.c	2015-01-07 14:32:36.464539801 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     564,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+55. You ask your doctor to implant a gig in your brain.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.565 b/SOURCES/7.4.565
new file mode 100644
index 0000000..c513c4d
--- /dev/null
+++ b/SOURCES/7.4.565
@@ -0,0 +1,411 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.565
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.565
+Problem:    Ranges for arguments, buffers, tabs, etc. are not checked to be
+	    valid but limited to the maximum.  This can cause the wrong thing
+	    to happen.
+Solution:   Give an error for an invalid value. (Marcin Szamotulski)
+	    Use windows range for ":wincmd".
+Files:	    src/ex_docmd.c, src/ex_cmds.h, src/testdir/test62.in,
+	    src/testdir/test_argument_count.in,
+	    src/testdir/test_argument_count.ok,
+	    src/testdir/test_close_count.in,
+	    src/testdir/test_command_count.in,
+	    src/testdir/test_command_count.ok
+
+
+*** ../vim-7.4.564/src/ex_docmd.c	2015-01-07 13:15:40.605829542 +0100
+--- src/ex_docmd.c	2015-01-07 15:33:21.950217606 +0100
+***************
+*** 2161,2166 ****
+--- 2161,2168 ----
+  		break;
+  	    case ADDR_ARGUMENTS:
+  		ea.line2 = curwin->w_arg_idx + 1;
++ 		if (ea.line2 > ARGCOUNT)
++ 		    ea.line2 = ARGCOUNT;
+  		break;
+  	    case ADDR_LOADED_BUFFERS:
+  	    case ADDR_BUFFERS:
+***************
+*** 3110,3116 ****
+       * Exceptions:
+       * - the 'k' command can directly be followed by any character.
+       * - the 's' command can be followed directly by 'c', 'g', 'i', 'I' or 'r'
+!      *	    but :sre[wind] is another command, as are :scrip[tnames],
+       *	    :scs[cope], :sim[alt], :sig[ns] and :sil[ent].
+       * - the "d" command can directly be followed by 'l' or 'p' flag.
+       */
+--- 3112,3118 ----
+       * Exceptions:
+       * - the 'k' command can directly be followed by any character.
+       * - the 's' command can be followed directly by 'c', 'g', 'i', 'I' or 'r'
+!      *	    but :sre[wind] is another command, as are :scr[iptnames],
+       *	    :scs[cope], :sim[alt], :sig[ns] and :sil[ent].
+       * - the "d" command can directly be followed by 'l' or 'p' flag.
+       */
+***************
+*** 4573,4618 ****
+  		lnum -= n;
+  	    else
+  		lnum += n;
+- 
+- 	    switch (addr_type)
+- 	    {
+- 		case ADDR_LINES:
+- 		    break;
+- 		case ADDR_ARGUMENTS:
+- 		    if (lnum < 0)
+- 			lnum = 0;
+- 		    else if (lnum >= ARGCOUNT)
+- 			lnum = ARGCOUNT;
+- 		    break;
+- 		case ADDR_TABS:
+- 		    if (lnum < 0)
+- 		    {
+- 			lnum = 0;
+- 			break;
+- 		    }
+- 		    if (lnum >= LAST_TAB_NR)
+- 			lnum = LAST_TAB_NR;
+- 		    break;
+- 		case ADDR_WINDOWS:
+- 		    if (lnum < 0)
+- 		    {
+- 			lnum = 0;
+- 			break;
+- 		    }
+- 		    if (lnum >= LAST_WIN_NR)
+- 			lnum = LAST_WIN_NR;
+- 		    break;
+- 		case ADDR_LOADED_BUFFERS:
+- 		case ADDR_BUFFERS:
+- 		    if (lnum < firstbuf->b_fnum)
+- 		    {
+- 			lnum = firstbuf->b_fnum;
+- 			break;
+- 		    }
+- 		    if (lnum > lastbuf->b_fnum)
+- 			lnum = lastbuf->b_fnum;
+- 		    break;
+- 	    }
+  	}
+      } while (*cmd == '/' || *cmd == '?');
+  
+--- 4575,4580 ----
+***************
+*** 4675,4691 ****
+  invalid_range(eap)
+      exarg_T	*eap;
+  {
+      if (       eap->line1 < 0
+  	    || eap->line2 < 0
+! 	    || eap->line1 > eap->line2
+! 	    || ((eap->argt & RANGE)
+! 		&& !(eap->argt & NOTADR)
+! 		&& eap->line2 > curbuf->b_ml.ml_line_count
+  #ifdef FEAT_DIFF
+! 			+ (eap->cmdidx == CMD_diffget)
+  #endif
+! 		))
+! 	return (char_u *)_(e_invrange);
+      return NULL;
+  }
+  
+--- 4637,4701 ----
+  invalid_range(eap)
+      exarg_T	*eap;
+  {
++     buf_T	*buf;
+      if (       eap->line1 < 0
+  	    || eap->line2 < 0
+! 	    || eap->line1 > eap->line2)
+! 	return (char_u *)_(e_invrange);
+! 
+!     if (eap->argt & RANGE)
+!     {
+! 	switch(eap->addr_type)
+! 	{
+! 	    case ADDR_LINES:
+! 		if (!(eap->argt & NOTADR)
+! 			&& eap->line2 > curbuf->b_ml.ml_line_count
+  #ifdef FEAT_DIFF
+! 			    + (eap->cmdidx == CMD_diffget)
+  #endif
+! 		   )
+! 		    return (char_u *)_(e_invrange);
+! 		break;
+! 	    case ADDR_ARGUMENTS:
+! 		if (eap->line2 > ARGCOUNT + (!ARGCOUNT))    // add 1 if ARCOUNT is 0
+! 		    return (char_u *)_(e_invrange);
+! 		break;
+! 	    case ADDR_BUFFERS:
+! 		if (eap->line1 < firstbuf->b_fnum
+! 			|| eap->line2 > lastbuf->b_fnum)
+! 		    return (char_u *)_(e_invrange);
+! 		break;
+! 	    case ADDR_LOADED_BUFFERS:
+! 		buf = firstbuf;
+! 		while (buf->b_ml.ml_mfp == NULL)
+! 		{
+! 		    if (buf->b_next == NULL)
+! 			return (char_u *)_(e_invrange);
+! 		    buf = buf->b_next;
+! 		}
+! 		if (eap->line1 < buf->b_fnum)
+! 		    return (char_u *)_(e_invrange);
+! 		buf = lastbuf;
+! 		while (buf->b_ml.ml_mfp == NULL)
+! 		{
+! 		    if (buf->b_prev == NULL)
+! 			return (char_u *)_(e_invrange);
+! 		    buf = buf->b_prev;
+! 		}
+! 		if (eap->line2 > buf->b_fnum)
+! 		    return (char_u *)_(e_invrange);
+! 		break;
+! 	    case ADDR_WINDOWS:
+! 		if (eap->line1 < 1
+! 			|| eap->line2 > LAST_WIN_NR)
+! 		    return (char_u *)_(e_invrange);
+! 		break;
+! 	    case ADDR_TABS:
+! 		if (eap->line2 > LAST_TAB_NR)
+! 		    return (char_u *)_(e_invrange);
+! 		break;
+! 	}
+!     }
+      return NULL;
+  }
+  
+*** ../vim-7.4.564/src/ex_cmds.h	2014-12-17 14:36:10.363090985 +0100
+--- src/ex_cmds.h	2015-01-07 15:47:15.336518550 +0100
+***************
+*** 1574,1580 ****
+  			ADDR_LINES),
+  EX(CMD_wincmd,		"wincmd",	ex_wincmd,
+  			NEEDARG|WORD1|RANGE|NOTADR,
+! 			ADDR_LINES),
+  EX(CMD_windo,		"windo",	ex_listdo,
+  			BANG|NEEDARG|EXTRA|NOTRLCOM,
+  			ADDR_LINES),
+--- 1574,1580 ----
+  			ADDR_LINES),
+  EX(CMD_wincmd,		"wincmd",	ex_wincmd,
+  			NEEDARG|WORD1|RANGE|NOTADR,
+! 			ADDR_WINDOWS),
+  EX(CMD_windo,		"windo",	ex_listdo,
+  			BANG|NEEDARG|EXTRA|NOTRLCOM,
+  			ADDR_LINES),
+*** ../vim-7.4.564/src/testdir/test62.in	2014-04-29 11:55:26.172053624 +0200
+--- src/testdir/test62.in	2015-01-07 15:33:21.950217606 +0100
+***************
+*** 13,19 ****
+  :" Open three tab pages and use ":tabdo"
+  :0tabnew
+  :1tabnew
+! :888tabnew
+  :tabdo call append(line('$'), 'this is tab page ' . tabpagenr())
+  :tabclose! 2
+  :tabrewind
+--- 13,19 ----
+  :" Open three tab pages and use ":tabdo"
+  :0tabnew
+  :1tabnew
+! :$tabnew
+  :tabdo call append(line('$'), 'this is tab page ' . tabpagenr())
+  :tabclose! 2
+  :tabrewind
+*** ../vim-7.4.564/src/testdir/test_argument_count.in	2014-11-27 18:32:58.532564506 +0100
+--- src/testdir/test_argument_count.in	2015-01-07 15:33:21.950217606 +0100
+***************
+*** 27,36 ****
+  :1arga c
+  :1arga b
+  :$argu
+- :+arga d
+  :$arga x
+  :call add(arglists, argv())
+! :$-10arga Y
+  :call add(arglists, argv())
+  :%argd
+  :call add(arglists, argv())
+--- 27,35 ----
+  :1arga c
+  :1arga b
+  :$argu
+  :$arga x
+  :call add(arglists, argv())
+! :0arga Y
+  :call add(arglists, argv())
+  :%argd
+  :call add(arglists, argv())
+*** ../vim-7.4.564/src/testdir/test_argument_count.ok	2014-11-27 16:22:42.746412995 +0100
+--- src/testdir/test_argument_count.ok	2015-01-07 15:33:21.950217606 +0100
+***************
+*** 7,13 ****
+  a b d
+  a d
+  a
+! a b c d x
+! Y a b c d x
+  
+  a f
+--- 7,13 ----
+  a b d
+  a d
+  a
+! a b c x
+! Y a b c x
+  
+  a f
+*** ../vim-7.4.564/src/testdir/test_close_count.in	2014-12-17 14:42:42.990240206 +0100
+--- src/testdir/test_close_count.in	2015-01-07 15:33:21.950217606 +0100
+***************
+*** 28,34 ****
+  :new
+  :new
+  :2wincmd w
+! :-2close!
+  :let buffers = []
+  :windo call add(buffers, bufnr('%'))
+  :call add(tests, buffers)
+--- 28,34 ----
+  :new
+  :new
+  :2wincmd w
+! :-1close!
+  :let buffers = []
+  :windo call add(buffers, bufnr('%'))
+  :call add(tests, buffers)
+***************
+*** 61,67 ****
+  :let buffers = []
+  :windo call add(buffers, bufnr('%'))
+  :call add(tests, buffers)
+! :9hide
+  :let buffers = []
+  :windo call add(buffers, bufnr('%'))
+  :call add(tests, buffers)
+--- 61,67 ----
+  :let buffers = []
+  :windo call add(buffers, bufnr('%'))
+  :call add(tests, buffers)
+! :$hide
+  :let buffers = []
+  :windo call add(buffers, bufnr('%'))
+  :call add(tests, buffers)
+*** ../vim-7.4.564/src/testdir/test_command_count.in	2015-01-07 13:15:40.609829496 +0100
+--- src/testdir/test_command_count.in	2015-01-07 15:49:24.343016552 +0100
+***************
+*** 1,8 ****
+  Test for user command counts	    vim: set ft=vim :
+  
+  STARTTEST
+- :let g:lines = []
+  :so tiny.vim
+  :com -range=% RangeLines :call add(g:lines, 'RangeLines '.<line1>.' '.<line2>)
+  :com -range -addr=arguments RangeArguments :call add(g:lines, 'RangeArguments '.<line1>.' '.<line2>)
+  :com -range=% -addr=arguments RangeArgumentsAll :call add(g:lines, 'RangeArgumentsAll '.<line1>.' '.<line2>)
+--- 1,8 ----
+  Test for user command counts	    vim: set ft=vim :
+  
+  STARTTEST
+  :so tiny.vim
++ :let g:lines = []
+  :com -range=% RangeLines :call add(g:lines, 'RangeLines '.<line1>.' '.<line2>)
+  :com -range -addr=arguments RangeArguments :call add(g:lines, 'RangeArguments '.<line1>.' '.<line2>)
+  :com -range=% -addr=arguments RangeArgumentsAll :call add(g:lines, 'RangeArgumentsAll '.<line1>.' '.<line2>)
+***************
+*** 48,53 ****
+--- 48,93 ----
+  :'<,'>RangeLines
+  :com -range=% -buffer LocalRangeLines :call add(g:lines, 'LocalRangeLines '.<line1>.' '.<line2>)
+  :'<,'>LocalRangeLines
++ :b1
++ ENDTEST
++ 
++ STARTTEST
++ :call add(g:lines, '')
++ :%argd
++ :arga a b c d
++ :let v:errmsg = ''
++ :5argu
++ :call add(g:lines, '5argu ' . v:errmsg)
++ :$argu
++ :call add(g:lines, '4argu ' . expand('%:t'))
++ :let v:errmsg = ''
++ :1argu
++ :call add(g:lines, '1argu ' . expand('%:t'))
++ :let v:errmsg = ''
++ :100b
++ :call add(g:lines, '100b ' . v:errmsg)
++ :split|split|split|split
++ :let v:errmsg = ''
++ :0close
++ :call add(g:lines, '0close ' . v:errmsg)
++ :$wincmd w
++ :$close
++ :call add(g:lines, '$close ' . winnr())
++ :let v:errmsg = ''
++ :$+close
++ :call add(g:lines, '$+close ' . v:errmsg)
++ :$tabe
++ :call add(g:lines, '$tabe ' . tabpagenr())
++ :let v:errmsg = ''
++ :$+tabe
++ :call add(g:lines, '$+tabe ' . v:errmsg)
++ :only!
++ :e x
++ :0tabm
++ :normal 1gt
++ :call add(g:lines, '0tabm ' . expand('%:t'))
++ :tabonly!
++ :only!
+  :e! test.out
+  :call append(0, g:lines)
+  :w|qa!
+*** ../vim-7.4.564/src/testdir/test_command_count.ok	2015-01-07 13:15:40.609829496 +0100
+--- src/testdir/test_command_count.ok	2015-01-07 15:49:19.223076159 +0100
+***************
+*** 17,19 ****
+--- 17,30 ----
+  RangeLines 2 5
+  LocalRangeLines 2 5
+  
++ 5argu E16: Invalid range
++ 4argu d
++ 1argu a
++ 100b E16: Invalid range
++ 0close E16: Invalid range
++ $close 4
++ $+close E16: Invalid range
++ $tabe 2
++ $+tabe E16: Invalid range
++ 0tabm x
++ 
+*** ../vim-7.4.564/src/version.c	2015-01-07 14:43:35.728900384 +0100
+--- src/version.c	2015-01-07 15:32:05.899101868 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     565,
+  /**/
+
+-- 
+"I simultaneously try to keep my head in the clouds and my feet on the
+ground.  Sometimes it's a stretch, though."              -- Larry Wall
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.566 b/SOURCES/7.4.566
new file mode 100644
index 0000000..96bb68e
--- /dev/null
+++ b/SOURCES/7.4.566
@@ -0,0 +1,612 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.566
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.566
+Problem:    :argdo, :bufdo, :windo and :tabdo don't take a range.
+Solution:   Support the range. (Marcin Szamotulski)
+Files:	    runtime/doc/editing.txt, runtime/doc/tabpage.txt,
+	    runtime/doc/windows.txt, src/ex_cmds.h, src/ex_cmds2.c,
+	    src/testdir/test_command_count.in,
+	    src/testdir/test_command_count.ok
+
+
+*** ../vim-7.4.565/runtime/doc/editing.txt	2014-11-27 16:22:42.734413130 +0100
+--- runtime/doc/editing.txt	2015-01-07 16:09:20.501100753 +0100
+***************
+*** 38,43 ****
+--- 38,44 ----
+  file name.  It can be used with "#" on the command line |:_#| and you can use
+  the |CTRL-^| command to toggle between the current and the alternate file.
+  However, the alternate file name is not changed when |:keepalt| is used.
++ An alternate file name is remembered for each window.
+  
+  							*:keepalt* *:keepa*
+  :keepalt {cmd}		Execute {cmd} while keeping the current alternate file
+***************
+*** 610,616 ****
+  :[count]arga[dd] {name} ..			*:arga* *:argadd* *E479*
+  :[count]arga[dd]
+  			Add the {name}s to the argument list.  When {name} is
+! 			omitted at the current buffer name to the argument
+  			list.
+  			If [count] is omitted, the {name}s are added just
+  			after the current entry in the argument list.
+--- 611,617 ----
+  :[count]arga[dd] {name} ..			*:arga* *:argadd* *E479*
+  :[count]arga[dd]
+  			Add the {name}s to the argument list.  When {name} is
+! 			omitted add the current buffer name to the argument
+  			list.
+  			If [count] is omitted, the {name}s are added just
+  			after the current entry in the argument list.
+***************
+*** 831,838 ****
+  USING THE ARGUMENT LIST
+  
+  						*:argdo*
+! :argdo[!] {cmd}		Execute {cmd} for each file in the argument list.
+! 			It works like doing this: >
+  				:rewind
+  				:{cmd}
+  				:next
+--- 832,840 ----
+  USING THE ARGUMENT LIST
+  
+  						*:argdo*
+! :[range]argdo[!] {cmd}	Execute {cmd} for each file in the argument list or
+! 			if [range] is specified only for arguments in that
+! 			range.  It works like doing this: >
+  				:rewind
+  				:{cmd}
+  				:next
+***************
+*** 1090,1096 ****
+  
+  :q[uit]!		Quit without writing, also when currently visible
+  			buffers have changes.  Does not exit when this is the
+! 			last window and there are is a changed hidden buffer.
+  			In this case, the first changed hidden buffer becomes
+  			the current buffer.
+  			Use ":qall!" to exit always.
+--- 1092,1098 ----
+  
+  :q[uit]!		Quit without writing, also when currently visible
+  			buffers have changes.  Does not exit when this is the
+! 			last window and there is a changed hidden buffer.
+  			In this case, the first changed hidden buffer becomes
+  			the current buffer.
+  			Use ":qall!" to exit always.
+***************
+*** 1390,1396 ****
+  You could do this to edit very secret text: >
+  	:set noundofile viminfo=
+  	:noswapfile edit secrets.txt
+! Keep in mind that without a swap file you risk loosing your work in a crash.
+  
+  WARNING: If you make a typo when entering the key and then write the file and
+  exit, the text will be lost!
+--- 1392,1398 ----
+  You could do this to edit very secret text: >
+  	:set noundofile viminfo=
+  	:noswapfile edit secrets.txt
+! Keep in mind that without a swap file you risk losing your work in a crash.
+  
+  WARNING: If you make a typo when entering the key and then write the file and
+  exit, the text will be lost!
+***************
+*** 1426,1438 ****
+  set automatically to the method used when that file was written.  You can
+  change 'cryptmethod' before writing that file to change the method.
+  
+! To set the default method, used for new files, use one of these in your
+! |vimrc| file: >
+! 	set cm=zip
+  	set cm=blowfish2
+! Use the first one if you need to be compatible with Vim 7.2 and older.  Using
+! "blowfish2" is highly recommended if you can use a Vim version that supports
+! it.
+  
+  The message given for reading and writing a file will show "[crypted]" when
+  using zip, "[blowfish]" when using blowfish, etc.
+--- 1428,1438 ----
+  set automatically to the method used when that file was written.  You can
+  change 'cryptmethod' before writing that file to change the method.
+  
+! To set the default method, used for new files, use this in your |vimrc| 
+! file: >
+  	set cm=blowfish2
+! Using "blowfish2" is highly recommended.  Only use another method if you
+! must use an older Vim version that does not support it.
+  
+  The message given for reading and writing a file will show "[crypted]" when
+  using zip, "[blowfish]" when using blowfish, etc.
+***************
+*** 1494,1501 ****
+  - Pkzip uses the same encryption as 'cryptmethod' "zip", and US Govt has no
+    objection to its export.  Pkzip's public file APPNOTE.TXT describes this
+    algorithm in detail.
+! - The implmentation of 'cryptmethod' "blowfish" has a flaw.  It is possible to
+!   crack the first 64 bytes of a file and in some circumstances more of the
+    file. Use of it is not recommended, but it's still the strongest method
+    supported by Vim 7.3 and 7.4.  The "zip" method is even weaker.
+  - Vim originates from the Netherlands.  That is where the sources come from.
+--- 1494,1501 ----
+  - Pkzip uses the same encryption as 'cryptmethod' "zip", and US Govt has no
+    objection to its export.  Pkzip's public file APPNOTE.TXT describes this
+    algorithm in detail.
+! - The implementation of 'cryptmethod' "blowfish" has a flaw.  It is possible
+!   to crack the first 64 bytes of a file and in some circumstances more of the
+    file. Use of it is not recommended, but it's still the strongest method
+    supported by Vim 7.3 and 7.4.  The "zip" method is even weaker.
+  - Vim originates from the Netherlands.  That is where the sources come from.
+*** ../vim-7.4.565/runtime/doc/tabpage.txt	2014-11-27 16:22:42.738413084 +0100
+--- runtime/doc/tabpage.txt	2015-01-07 16:09:20.501100753 +0100
+***************
+*** 206,212 ****
+  		    :tabmove	" move the tab page to the right
+  		    :.tabmove	" as above
+  		    :+tabmove	" as above
+! 		    :0tabmove	" move the tab page to the begining of the tab
+  				" list
+  		    :$tabmove	" move the tab page to the end of the tab list
+  <
+--- 206,212 ----
+  		    :tabmove	" move the tab page to the right
+  		    :.tabmove	" as above
+  		    :+tabmove	" as above
+! 		    :0tabmove	" move the tab page to the beginning of the tab
+  				" list
+  		    :$tabmove	" move the tab page to the end of the tab list
+  <
+***************
+*** 224,231 ****
+  LOOPING OVER TAB PAGES:
+  
+  							*:tabd* *:tabdo*
+! :tabd[o] {cmd}	Execute {cmd} in each tab page.
+! 		It works like doing this: >
+  			:tabfirst
+  			:{cmd}
+  			:tabnext
+--- 224,233 ----
+  LOOPING OVER TAB PAGES:
+  
+  							*:tabd* *:tabdo*
+! :[range]tabd[o] {cmd}
+! 		Execute {cmd} in each tab page or if [range] is given only in
+! 		tab pages which tab page number is in the [range].  It works
+! 		like doing this: >
+  			:tabfirst
+  			:{cmd}
+  			:tabnext
+***************
+*** 271,278 ****
+  triggers:
+  	WinLeave		leave current window
+  	TabLeave		leave current tab page
+- 	TabEnter		enter new tab page
+  	WinEnter		enter window in new tab page
+  	BufLeave		leave current buffer
+  	BufEnter		enter new empty buffer
+  
+--- 273,280 ----
+  triggers:
+  	WinLeave		leave current window
+  	TabLeave		leave current tab page
+  	WinEnter		enter window in new tab page
++ 	TabEnter		enter new tab page
+  	BufLeave		leave current buffer
+  	BufEnter		enter new empty buffer
+  
+*** ../vim-7.4.565/runtime/doc/windows.txt	2014-11-30 14:50:12.255356230 +0100
+--- runtime/doc/windows.txt	2015-01-07 16:09:20.501100753 +0100
+***************
+*** 278,293 ****
+  		and there is only one window for the current buffer, and the
+  		buffer was changed, the command fails.
+  		
+! 		(Note: CTRL-Q does not
+! 		work on all terminals).  If [count] is greater than
+! 		the last window number the last window will be closed: >
+  		    :1quit  " quit the first window
+  		    :$quit  " quit the last window
+  		    :9quit  " quit the last window
+  			     " if there are less than 9 windows opened
+  		    :-quit  " quit the previews window
+  		    :+quit  " quit the next window
+! 		    :+2quit " will also work as expected
+  <
+  :q[uit]!
+  :{count}q[uit]!
+--- 278,294 ----
+  		and there is only one window for the current buffer, and the
+  		buffer was changed, the command fails.
+  		
+! 		(Note: CTRL-Q does not work on all terminals).
+! 		
+! 		If [count] is greater than the last window number the last
+! 		window will be closed: >
+  		    :1quit  " quit the first window
+  		    :$quit  " quit the last window
+  		    :9quit  " quit the last window
+  			     " if there are less than 9 windows opened
+  		    :-quit  " quit the previews window
+  		    :+quit  " quit the next window
+! 		    :+2quit " quit the second next window
+  <
+  :q[uit]!
+  :{count}q[uit]!
+***************
+*** 332,340 ****
+  		screen.  For {count} see |:quit| command.
+  		
+  		The buffer becomes hidden (unless there is another window
+! 		editing it or 'bufhidden' is "unload" or "delete").  If the
+! 		window is the last one in the current tab page the tab page is
+! 		closed.  |tab-page| 
+  		
+  		The value of 'hidden' is irrelevant for this command.  Changes
+  		to the buffer are not written and won't get lost, so this is a
+--- 333,341 ----
+  		screen.  For {count} see |:quit| command.
+  		
+  		The buffer becomes hidden (unless there is another window
+! 		editing it or 'bufhidden' is "unload", "delete" or "wipe").
+! 		If the window is the last one in the current tab page the tab
+! 		page is closed.  |tab-page| 
+  		
+  		The value of 'hidden' is irrelevant for this command.  Changes
+  		to the buffer are not written and won't get lost, so this is a
+***************
+*** 697,704 ****
+  8. Do a command in all buffers or windows			*list-repeat*
+  
+  							*:windo*
+! :windo {cmd}		Execute {cmd} in each window.
+! 			It works like doing this: >
+  				CTRL-W t
+  				:{cmd}
+  				CTRL-W w
+--- 698,706 ----
+  8. Do a command in all buffers or windows			*list-repeat*
+  
+  							*:windo*
+! :[range]windo {cmd}	Execute {cmd} in each window or if [range] is given
+! 			only in windows for which the window number lies in
+! 			the [range].  It works like doing this: >
+  				CTRL-W t
+  				:{cmd}
+  				CTRL-W w
+***************
+*** 716,723 ****
+  			Also see |:tabdo|, |:argdo| and |:bufdo|.
+  
+  							*:bufdo*
+! :bufdo[!] {cmd}		Execute {cmd} in each buffer in the buffer list.
+! 			It works like doing this: >
+  				:bfirst
+  				:{cmd}
+  				:bnext
+--- 718,727 ----
+  			Also see |:tabdo|, |:argdo| and |:bufdo|.
+  
+  							*:bufdo*
+! :[range]bufdo[!] {cmd}	Execute {cmd} in each buffer in the buffer list or if
+! 			[range] is given only for buffers for which their
+! 			buffer numer is in the [range].  It works like doing
+! 			this: >
+  				:bfirst
+  				:{cmd}
+  				:bnext
+***************
+*** 763,780 ****
+  
+  CTRL-W ]					*CTRL-W_]* *CTRL-W_CTRL-]*
+  CTRL-W CTRL-]	Split current window in two.  Use identifier under cursor as a
+! 		tag and jump to it in the new upper window.  Make new window N
+! 		high.
+  
+  							*CTRL-W_g]*
+  CTRL-W g ]	Split current window in two.  Use identifier under cursor as a
+  		tag and perform ":tselect" on it in the new upper window.
+  		Make new window N high.
+  
+  							*CTRL-W_g_CTRL-]*
+  CTRL-W g CTRL-]	Split current window in two.  Use identifier under cursor as a
+! 		tag and perform ":tjump" on it in the new upper window.  Make
+! 		new window N high.
+  
+  CTRL-W f					*CTRL-W_f* *CTRL-W_CTRL-F*
+  CTRL-W CTRL-F	Split current window in two.  Edit file name under cursor.
+--- 767,787 ----
+  
+  CTRL-W ]					*CTRL-W_]* *CTRL-W_CTRL-]*
+  CTRL-W CTRL-]	Split current window in two.  Use identifier under cursor as a
+! 		tag and jump to it in the new upper window.
+! 		In Visual mode uses the Visually selected text as a tag.
+! 		Make new window N high.
+  
+  							*CTRL-W_g]*
+  CTRL-W g ]	Split current window in two.  Use identifier under cursor as a
+  		tag and perform ":tselect" on it in the new upper window.
++ 		In Visual mode uses the Visually selected text as a tag.
+  		Make new window N high.
+  
+  							*CTRL-W_g_CTRL-]*
+  CTRL-W g CTRL-]	Split current window in two.  Use identifier under cursor as a
+! 		tag and perform ":tjump" on it in the new upper window.
+! 		In Visual mode uses the Visually selected text as a tag.
+! 		Make new window N high.
+  
+  CTRL-W f					*CTRL-W_f* *CTRL-W_CTRL-F*
+  CTRL-W CTRL-F	Split current window in two.  Edit file name under cursor.
+*** ../vim-7.4.565/src/ex_cmds.h	2015-01-07 15:57:13.145559792 +0100
+--- src/ex_cmds.h	2015-01-07 16:13:24.406265045 +0100
+***************
+*** 133,140 ****
+  			BANG|RANGE|NOTADR|FILES|TRLBAR,
+  			ADDR_ARGUMENTS),
+  EX(CMD_argdo,		"argdo",	ex_listdo,
+! 			BANG|NEEDARG|EXTRA|NOTRLCOM,
+! 			ADDR_LINES),
+  EX(CMD_argedit,		"argedit",	ex_argedit,
+  			BANG|NEEDARG|RANGE|NOTADR|FILE1|EDITCMD|ARGOPT|TRLBAR,
+  			ADDR_ARGUMENTS),
+--- 133,140 ----
+  			BANG|RANGE|NOTADR|FILES|TRLBAR,
+  			ADDR_ARGUMENTS),
+  EX(CMD_argdo,		"argdo",	ex_listdo,
+! 			BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL,
+! 			ADDR_ARGUMENTS),
+  EX(CMD_argedit,		"argedit",	ex_argedit,
+  			BANG|NEEDARG|RANGE|NOTADR|FILE1|EDITCMD|ARGOPT|TRLBAR,
+  			ADDR_ARGUMENTS),
+***************
+*** 220,227 ****
+  			BANG|TRLBAR|CMDWIN,
+  			ADDR_LINES),
+  EX(CMD_bufdo,		"bufdo",	ex_listdo,
+! 			BANG|NEEDARG|EXTRA|NOTRLCOM,
+! 			ADDR_LINES),
+  EX(CMD_bunload,		"bunload",	ex_bunload,
+  			BANG|RANGE|NOTADR|BUFNAME|COUNT|EXTRA|TRLBAR,
+  			ADDR_LOADED_BUFFERS),
+--- 220,227 ----
+  			BANG|TRLBAR|CMDWIN,
+  			ADDR_LINES),
+  EX(CMD_bufdo,		"bufdo",	ex_listdo,
+! 			BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL,
+! 			ADDR_BUFFERS),
+  EX(CMD_bunload,		"bunload",	ex_bunload,
+  			BANG|RANGE|NOTADR|BUFNAME|COUNT|EXTRA|TRLBAR,
+  			ADDR_LOADED_BUFFERS),
+***************
+*** 1384,1391 ****
+  			RANGE|NOTADR|COUNT|BANG|TRLBAR|CMDWIN,
+  			ADDR_TABS),
+  EX(CMD_tabdo,		"tabdo",	ex_listdo,
+! 			NEEDARG|EXTRA|NOTRLCOM,
+! 			ADDR_LINES),
+  EX(CMD_tabedit,		"tabedit",	ex_splitview,
+  			BANG|FILE1|RANGE|NOTADR|ZEROR|EDITCMD|ARGOPT|TRLBAR,
+  			ADDR_TABS),
+--- 1384,1391 ----
+  			RANGE|NOTADR|COUNT|BANG|TRLBAR|CMDWIN,
+  			ADDR_TABS),
+  EX(CMD_tabdo,		"tabdo",	ex_listdo,
+! 			NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL,
+! 			ADDR_TABS),
+  EX(CMD_tabedit,		"tabedit",	ex_splitview,
+  			BANG|FILE1|RANGE|NOTADR|ZEROR|EDITCMD|ARGOPT|TRLBAR,
+  			ADDR_TABS),
+***************
+*** 1576,1583 ****
+  			NEEDARG|WORD1|RANGE|NOTADR,
+  			ADDR_WINDOWS),
+  EX(CMD_windo,		"windo",	ex_listdo,
+! 			BANG|NEEDARG|EXTRA|NOTRLCOM,
+! 			ADDR_LINES),
+  EX(CMD_winpos,		"winpos",	ex_winpos,
+  			EXTRA|TRLBAR|CMDWIN,
+  			ADDR_LINES),
+--- 1576,1583 ----
+  			NEEDARG|WORD1|RANGE|NOTADR,
+  			ADDR_WINDOWS),
+  EX(CMD_windo,		"windo",	ex_listdo,
+! 			BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL,
+! 			ADDR_WINDOWS),
+  EX(CMD_winpos,		"winpos",	ex_winpos,
+  			EXTRA|TRLBAR|CMDWIN,
+  			ADDR_LINES),
+*** ../vim-7.4.565/src/ex_cmds2.c	2014-11-19 16:38:01.512679964 +0100
+--- src/ex_cmds2.c	2015-01-07 16:12:42.526751920 +0100
+***************
+*** 2472,2486 ****
+  				    | (eap->forceit ? CCGD_FORCEIT : 0)
+  				    | CCGD_EXCMD))
+      {
+- 	/* start at the first argument/window/buffer */
+  	i = 0;
+  #ifdef FEAT_WINDOWS
+  	wp = firstwin;
+  	tp = first_tabpage;
+  #endif
+  	/* set pcmark now */
+  	if (eap->cmdidx == CMD_bufdo)
+! 	    goto_buffer(eap, DOBUF_FIRST, FORWARD, 0);
+  	else
+  	    setpcmark();
+  	listcmd_busy = TRUE;	    /* avoids setting pcmark below */
+--- 2472,2507 ----
+  				    | (eap->forceit ? CCGD_FORCEIT : 0)
+  				    | CCGD_EXCMD))
+      {
+  	i = 0;
++ 	/* start at the eap->line1 argument/window/buffer */
+  #ifdef FEAT_WINDOWS
+  	wp = firstwin;
+  	tp = first_tabpage;
+  #endif
++ 	switch (eap->cmdidx)
++ 	{
++ #ifdef FEAT_WINDOWS
++ 	    case CMD_windo:
++ 		for ( ; wp != NULL && i + 1 < eap->line1; wp = wp->w_next)
++ 		    i++;
++ 		break;
++ 	    case CMD_tabdo:
++ 		for( ; tp != NULL && i + 1 < eap->line1; tp = tp->tp_next)
++ 		    i++;
++ 		break;
++ #endif
++ 	    case CMD_argdo:
++ 		i = eap->line1 - 1;
++ 		break;
++ 	    case CMD_bufdo:
++ 		i = eap->line1;
++ 		break;
++ 	    default:
++ 		break;
++ 	}
+  	/* set pcmark now */
+  	if (eap->cmdidx == CMD_bufdo)
+! 	    goto_buffer(eap, DOBUF_FIRST, FORWARD, i);
+  	else
+  	    setpcmark();
+  	listcmd_busy = TRUE;	    /* avoids setting pcmark below */
+***************
+*** 2506,2512 ****
+  		}
+  		if (curwin->w_arg_idx != i)
+  		    break;
+- 		++i;
+  	    }
+  #ifdef FEAT_WINDOWS
+  	    else if (eap->cmdidx == CMD_windo)
+--- 2527,2532 ----
+***************
+*** 2541,2546 ****
+--- 2561,2568 ----
+  		    }
+  	    }
+  
++ 	    ++i;
++ 
+  	    /* execute the command */
+  	    do_cmdline(eap->arg, eap->getline, eap->cookie,
+  						DOCMD_VERBOSE + DOCMD_NOWAIT);
+***************
+*** 2548,2554 ****
+  	    if (eap->cmdidx == CMD_bufdo)
+  	    {
+  		/* Done? */
+! 		if (next_fnum < 0)
+  		    break;
+  		/* Check if the buffer still exists. */
+  		for (buf = firstbuf; buf != NULL; buf = buf->b_next)
+--- 2570,2576 ----
+  	    if (eap->cmdidx == CMD_bufdo)
+  	    {
+  		/* Done? */
+! 		if (next_fnum < 0 || next_fnum > eap->line2)
+  		    break;
+  		/* Check if the buffer still exists. */
+  		for (buf = firstbuf; buf != NULL; buf = buf->b_next)
+***************
+*** 2579,2584 ****
+--- 2601,2614 ----
+  		    do_check_scrollbind(TRUE);
+  #endif
+  	    }
++ 
++ #ifdef FEAT_WINDOWS
++ 	    if (eap->cmdidx == CMD_windo || eap->cmdidx == CMD_tabdo)
++ 		if (i+1 > eap->line2)
++ 		    break;
++ #endif
++ 	    if (eap->cmdidx == CMD_argdo && i >= eap->line2)
++ 		break;
+  	}
+  	listcmd_busy = FALSE;
+      }
+*** ../vim-7.4.565/src/testdir/test_command_count.in	2015-01-07 15:57:13.145559792 +0100
+--- src/testdir/test_command_count.in	2015-01-07 16:19:57.217698877 +0100
+***************
+*** 90,95 ****
+--- 90,129 ----
+  :only!
+  :e! test.out
+  :call append(0, g:lines)
++ :unlet g:lines
++ :w|bd
++ :se hidden
++ :b1
++ ENDTEST
++ 
++ STARTTEST
++ :only!
++ :let g:lines = []
++ :%argd
++ :arga a b c d e f
++ :3argu
++ :let args = ''
++ :.,$-argdo let args .= ' '.expand('%')
++ :call add(g:lines, 'argdo:' . args)
++ :split|split|split|split
++ :2wincmd w
++ :let windows = ''
++ :.,$-windo let windows .= ' '.winnr()
++ :call add(g:lines, 'windo:'. windows)
++ :b2
++ :let buffers = ''
++ :.,$-bufdo let buffers .= ' '.bufnr('%')
++ :call add(g:lines, 'bufdo:' . buffers)
++ :let buffers = ''
++ :3,7bufdo let buffers .= ' '.bufnr('%')
++ :call add(g:lines, 'bufdo:' . buffers)
++ :tabe|tabe|tabe|tabe
++ :normal! 2gt
++ :let tabpages = ''
++ :.,$-tabdo let tabpages .= ' '.tabpagenr()
++ :call add(g:lines, 'tabdo:' . tabpages)
++ :e! test.out
++ :call append('$', g:lines)
+  :w|qa!
+  ENDTEST
+  
+*** ../vim-7.4.565/src/testdir/test_command_count.ok	2015-01-07 15:57:13.145559792 +0100
+--- src/testdir/test_command_count.ok	2015-01-07 16:19:51.805761782 +0100
+***************
+*** 28,30 ****
+--- 28,35 ----
+  $+tabe E16: Invalid range
+  0tabm x
+  
++ argdo: c d e
++ windo: 2 3 4
++ bufdo: 2 3 4 5 6 7 8 9 10 12
++ bufdo: 3 4 5 6 7
++ tabdo: 2 3 4
+*** ../vim-7.4.565/src/version.c	2015-01-07 15:57:13.149559746 +0100
+--- src/version.c	2015-01-07 16:50:24.620511525 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     566,
+  /**/
+
+-- 
+ERROR 047: Keyboard not found.  Press RETURN to continue.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.567 b/SOURCES/7.4.567
new file mode 100644
index 0000000..20024b1
--- /dev/null
+++ b/SOURCES/7.4.567
@@ -0,0 +1,51 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.567
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.567
+Problem:    Non-ascii vertical separater characters are always redrawn.
+Solution:   Compare only the one byte that's stored. (Thiago Padilha)
+Files:	    src/screen.c
+
+
+*** ../vim-7.4.566/src/screen.c	2015-01-07 13:31:48.890661692 +0100
+--- src/screen.c	2015-01-07 18:44:50.021472601 +0100
+***************
+*** 6062,6068 ****
+  	    int c;
+  
+  	    c = fillchar_vsep(&hl);
+! 	    if (ScreenLines[off_to] != c
+  # ifdef FEAT_MBYTE
+  		    || (enc_utf8 && (int)ScreenLinesUC[off_to]
+  						       != (c >= 0x80 ? c : 0))
+--- 6062,6068 ----
+  	    int c;
+  
+  	    c = fillchar_vsep(&hl);
+! 	    if (ScreenLines[off_to] != (schar_T)c
+  # ifdef FEAT_MBYTE
+  		    || (enc_utf8 && (int)ScreenLinesUC[off_to]
+  						       != (c >= 0x80 ? c : 0))
+*** ../vim-7.4.566/src/version.c	2015-01-07 16:52:53.506792420 +0100
+--- src/version.c	2015-01-07 18:43:16.906545056 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     567,
+  /**/
+
+-- 
+Keyboard not found.  Think ENTER to continue.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.568 b/SOURCES/7.4.568
new file mode 100644
index 0000000..2be1b21
--- /dev/null
+++ b/SOURCES/7.4.568
@@ -0,0 +1,73 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.568
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.568
+Problem:    Giving an error for ":0wincmd w" is a problem for some plugins.
+Solution:   Allow the zero in the range. (Marcin Szamotulski)
+Files:	    src/ex_docmd.c, src/testdir/test_command_count.ok
+
+
+*** ../vim-7.4.567/src/ex_docmd.c	2015-01-07 15:57:13.145559792 +0100
+--- src/ex_docmd.c	2015-01-14 11:14:26.690308629 +0100
+***************
+*** 4686,4693 ****
+  		    return (char_u *)_(e_invrange);
+  		break;
+  	    case ADDR_WINDOWS:
+! 		if (eap->line1 < 1
+! 			|| eap->line2 > LAST_WIN_NR)
+  		    return (char_u *)_(e_invrange);
+  		break;
+  	    case ADDR_TABS:
+--- 4686,4692 ----
+  		    return (char_u *)_(e_invrange);
+  		break;
+  	    case ADDR_WINDOWS:
+! 		if (eap->line2 > LAST_WIN_NR)
+  		    return (char_u *)_(e_invrange);
+  		break;
+  	    case ADDR_TABS:
+*** ../vim-7.4.567/src/testdir/test_command_count.ok	2015-01-07 16:52:53.506792420 +0100
+--- src/testdir/test_command_count.ok	2015-01-14 11:22:19.405222287 +0100
+***************
+*** 21,28 ****
+  4argu d
+  1argu a
+  100b E16: Invalid range
+! 0close E16: Invalid range
+! $close 4
+  $+close E16: Invalid range
+  $tabe 2
+  $+tabe E16: Invalid range
+--- 21,28 ----
+  4argu d
+  1argu a
+  100b E16: Invalid range
+! 0close 
+! $close 3
+  $+close E16: Invalid range
+  $tabe 2
+  $+tabe E16: Invalid range
+*** ../vim-7.4.567/src/version.c	2015-01-07 19:04:25.299934570 +0100
+--- src/version.c	2015-01-14 11:15:38.117540026 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     568,
+  /**/
+
+-- 
+ASCII stupid question, get a stupid ANSI.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.570 b/SOURCES/7.4.570
new file mode 100644
index 0000000..8996c2b
--- /dev/null
+++ b/SOURCES/7.4.570
@@ -0,0 +1,139 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.570
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.570
+Problem:    Building with dynamic library does not work for Ruby 2.2.0
+Solution:   Change #ifdefs and #defines. (Ken Takata)
+Files:	    src/if_ruby.c
+
+
+*** ../vim-7.4.569/src/if_ruby.c	2014-11-27 17:44:05.376820913 +0100
+--- src/if_ruby.c	2015-01-14 14:02:59.680115042 +0100
+***************
+*** 96,106 ****
+  # define rb_num2int rb_num2int_stub
+  #endif
+  
+! #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 21
+  /* Ruby 2.1 adds new GC called RGenGC and RARRAY_PTR uses
+   * rb_gc_writebarrier_unprotect_promoted if USE_RGENGC  */
+  # define rb_gc_writebarrier_unprotect_promoted rb_gc_writebarrier_unprotect_promoted_stub
+  #endif
+  
+  #include <ruby.h>
+  #ifdef RUBY19_OR_LATER
+--- 96,110 ----
+  # define rb_num2int rb_num2int_stub
+  #endif
+  
+! #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER == 21
+  /* Ruby 2.1 adds new GC called RGenGC and RARRAY_PTR uses
+   * rb_gc_writebarrier_unprotect_promoted if USE_RGENGC  */
+  # define rb_gc_writebarrier_unprotect_promoted rb_gc_writebarrier_unprotect_promoted_stub
+  #endif
++ #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 22
++ # define rb_gc_writebarrier_unprotect rb_gc_writebarrier_unprotect_stub
++ # define rb_check_type rb_check_type_stub
++ #endif
+  
+  #include <ruby.h>
+  #ifdef RUBY19_OR_LATER
+***************
+*** 180,186 ****
+   */
+  # define rb_assoc_new			dll_rb_assoc_new
+  # define rb_cObject			(*dll_rb_cObject)
+! # define rb_check_type			dll_rb_check_type
+  # define rb_class_path			dll_rb_class_path
+  # define rb_data_object_alloc		dll_rb_data_object_alloc
+  # define rb_define_class_under		dll_rb_define_class_under
+--- 184,192 ----
+   */
+  # define rb_assoc_new			dll_rb_assoc_new
+  # define rb_cObject			(*dll_rb_cObject)
+! # if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER < 22
+! #  define rb_check_type			dll_rb_check_type
+! # endif
+  # define rb_class_path			dll_rb_class_path
+  # define rb_data_object_alloc		dll_rb_data_object_alloc
+  # define rb_define_class_under		dll_rb_define_class_under
+***************
+*** 382,388 ****
+--- 388,398 ----
+  # endif
+  
+  # if defined(USE_RGENGC) && USE_RGENGC
++ #  if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER == 21
+  static void (*dll_rb_gc_writebarrier_unprotect_promoted)(VALUE);
++ #  else
++ static void (*dll_rb_gc_writebarrier_unprotect)(VALUE obj);
++ #  endif
+  # endif
+  
+  # if defined(RUBY19_OR_LATER) && !defined(PROTO)
+***************
+*** 420,429 ****
+--- 430,453 ----
+  
+     /* Do not generate a prototype here, VALUE isn't always defined. */
+  # if defined(USE_RGENGC) && USE_RGENGC && !defined(PROTO)
++ #  if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER == 21
+  void rb_gc_writebarrier_unprotect_promoted_stub(VALUE obj)
+  {
+      dll_rb_gc_writebarrier_unprotect_promoted(obj);
+  }
++ #  else
++ void rb_gc_writebarrier_unprotect_stub(VALUE obj)
++ {
++     dll_rb_gc_writebarrier_unprotect(obj);
++ }
++ #  endif
++ # endif
++ 
++ # if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 22
++ void rb_check_type_stub(VALUE v, int i)
++ {
++     dll_rb_check_type(v, i);
++ }
+  # endif
+  
+  static HINSTANCE hinstRuby = NULL; /* Instance of ruby.dll */
+***************
+*** 542,548 ****
+--- 566,576 ----
+      {"ruby_init_stack", (RUBY_PROC*)&dll_ruby_init_stack},
+  # endif
+  # if defined(USE_RGENGC) && USE_RGENGC
++ #  if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER == 21
+      {"rb_gc_writebarrier_unprotect_promoted", (RUBY_PROC*)&dll_rb_gc_writebarrier_unprotect_promoted},
++ #  else
++     {"rb_gc_writebarrier_unprotect", (RUBY_PROC*)&dll_rb_gc_writebarrier_unprotect},
++ #  endif
+  # endif
+      {"", NULL},
+  };
+*** ../vim-7.4.569/src/version.c	2015-01-14 12:44:38.407422077 +0100
+--- src/version.c	2015-01-14 14:02:53.868178396 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     570,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+89. In addition to your e-mail address being on your business
+    cards you even have your own domain.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.571 b/SOURCES/7.4.571
new file mode 100644
index 0000000..1b86116
--- /dev/null
+++ b/SOURCES/7.4.571
@@ -0,0 +1,64 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.571
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.571 (after 7.4.569)
+Problem:    Can't build with tiny features. (Ike Devolder)
+Solution:   Add #ifdef.
+Files:	    src/getchar.c
+
+
+*** ../vim-7.4.570/src/getchar.c	2015-01-14 12:44:38.403422124 +0100
+--- src/getchar.c	2015-01-14 14:06:14.457992406 +0100
+***************
+*** 3710,3718 ****
+--- 3710,3720 ----
+  	else if (*keys == Ctrl_C)
+  	{
+  	    /* If CTRL-C has been unmapped, reuse it for Interrupting. */
++ #ifdef FEAT_LOCALMAP
+  	    if (map_table == curbuf->b_maphash)
+  		curbuf->b_mapped_ctrl_c &= ~mode;
+  	    else
++ #endif
+  		mapped_ctrl_c &= ~mode;
+  	}
+  	goto theend;
+***************
+*** 3750,3758 ****
+--- 3752,3762 ----
+      /* If CTRL-C has been mapped, don't always use it for Interrupting. */
+      if (*keys == Ctrl_C)
+      {
++ #ifdef FEAT_LOCALMAP
+  	if (map_table == curbuf->b_maphash)
+  	    curbuf->b_mapped_ctrl_c |= mode;
+  	else
++ #endif
+  	    mapped_ctrl_c |= mode;
+      }
+  
+*** ../vim-7.4.570/src/version.c	2015-01-14 14:04:05.511397639 +0100
+--- src/version.c	2015-01-14 14:07:02.889464623 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     571,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+91. It's Saturday afternoon in the middle of May and you
+    are on computer.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.572 b/SOURCES/7.4.572
new file mode 100644
index 0000000..54423b2
--- /dev/null
+++ b/SOURCES/7.4.572
@@ -0,0 +1,257 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.572
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.572
+Problem:    Address type of :wincmd depends on the argument.
+Solution:   Check the argument.
+Files:	    src/ex_docmd.c, src/window.c, src/proto/window.pro
+
+
+*** ../vim-7.4.571/src/ex_docmd.c	2015-01-14 11:24:51.851582151 +0100
+--- src/ex_docmd.c	2015-01-14 14:48:24.586468863 +0100
+***************
+*** 2130,2151 ****
+   * is equal to the lower.
+   */
+  
+-     if (ea.cmdidx != CMD_SIZE
+- #ifdef FEAT_USR_CMDS
+- 	&& ea.cmdidx != CMD_USER
+- 	&& ea.cmdidx != CMD_USER_BUF
+- #endif
+-        )
+- 	ea.addr_type = cmdnames[(int)ea.cmdidx].cmd_addr_type;
+-     else
+- #ifdef FEAT_USR_CMDS
+- 	if (ea.cmdidx != CMD_USER && ea.cmdidx != CMD_USER_BUF)
+- #endif
+- 	ea.addr_type = ADDR_LINES;
+      /* ea.addr_type for user commands is set by find_ucmd */
+!     ea.cmd = cmd;
+  
+      /* repeat for all ',' or ';' separated addresses */
+      for (;;)
+      {
+  	ea.line1 = ea.line2;
+--- 2130,2152 ----
+   * is equal to the lower.
+   */
+  
+      /* ea.addr_type for user commands is set by find_ucmd */
+!     if (!IS_USER_CMDIDX(ea.cmdidx))
+!     {
+! 	if (ea.cmdidx != CMD_SIZE)
+! 	    ea.addr_type = cmdnames[(int)ea.cmdidx].cmd_addr_type;
+! 	else
+! 	    ea.addr_type = ADDR_LINES;
+! 
+! #ifdef FEAT_WINDOWS
+! 	/* :wincmd range depends on the argument. */
+! 	if (ea.cmdidx == CMD_wincmd)
+! 	    get_wincmd_addr_type(p, &ea);
+! #endif
+!     }
+  
+      /* repeat for all ',' or ';' separated addresses */
++     ea.cmd = cmd;
+      for (;;)
+      {
+  	ea.line1 = ea.line2;
+***************
+*** 2181,2187 ****
+  	{
+  	    if (*ea.cmd == '%')		    /* '%' - all lines */
+  	    {
+- 		buf_T	*buf;
+  		++ea.cmd;
+  		switch (ea.addr_type)
+  		{
+--- 2182,2187 ----
+***************
+*** 2190,2204 ****
+  			ea.line2 = curbuf->b_ml.ml_line_count;
+  			break;
+  		    case ADDR_LOADED_BUFFERS:
+! 			buf = firstbuf;
+! 			while (buf->b_next != NULL && buf->b_ml.ml_mfp == NULL)
+! 			    buf = buf->b_next;
+! 			ea.line1 = buf->b_fnum;
+! 			buf = lastbuf;
+! 			while (buf->b_prev != NULL && buf->b_ml.ml_mfp == NULL)
+! 			    buf = buf->b_prev;
+! 			ea.line2 = buf->b_fnum;
+! 			break;
+  		    case ADDR_BUFFERS:
+  			ea.line1 = firstbuf->b_fnum;
+  			ea.line2 = lastbuf->b_fnum;
+--- 2190,2209 ----
+  			ea.line2 = curbuf->b_ml.ml_line_count;
+  			break;
+  		    case ADDR_LOADED_BUFFERS:
+! 			{
+! 			    buf_T	*buf = firstbuf;
+! 
+! 			    while (buf->b_next != NULL
+! 						  && buf->b_ml.ml_mfp == NULL)
+! 				buf = buf->b_next;
+! 			    ea.line1 = buf->b_fnum;
+! 			    buf = lastbuf;
+! 			    while (buf->b_prev != NULL
+! 						  && buf->b_ml.ml_mfp == NULL)
+! 				buf = buf->b_prev;
+! 			    ea.line2 = buf->b_fnum;
+! 			    break;
+! 			}
+  		    case ADDR_BUFFERS:
+  			ea.line1 = firstbuf->b_fnum;
+  			ea.line2 = lastbuf->b_fnum;
+*** ../vim-7.4.571/src/window.c	2014-12-13 03:58:03.794672546 +0100
+--- src/window.c	2015-01-14 15:17:18.543647480 +0100
+***************
+*** 624,629 ****
+--- 624,733 ----
+      }
+  }
+  
++ /*
++  * Figure out the address type for ":wnncmd".
++  */
++     void
++ get_wincmd_addr_type(arg, eap)
++     char_u	*arg;
++     exarg_T	*eap;
++ {
++     switch (*arg)
++     {
++     case 'S':
++     case Ctrl_S:
++     case 's':
++     case Ctrl_N:
++     case 'n':
++     case 'j':
++     case Ctrl_J:
++     case 'k':
++     case Ctrl_K:
++     case 'T':
++     case Ctrl_R:
++     case 'r':
++     case 'R':
++     case 'K':
++     case 'J':
++     case '+':
++     case '-':
++     case Ctrl__:
++     case '_':
++     case '|':
++     case ']':
++     case Ctrl_RSB:
++     case 'g':
++     case Ctrl_G:
++ #ifdef FEAT_VERTSPLIT
++     case Ctrl_V:
++     case 'v':
++     case 'h':
++     case Ctrl_H:
++     case 'l':
++     case Ctrl_L:
++     case 'H':
++     case 'L':
++     case '>':
++     case '<':
++ #endif
++ #if defined(FEAT_QUICKFIX)
++     case '}':
++ #endif
++ #ifdef FEAT_SEARCHPATH
++     case 'f':
++     case 'F':
++     case Ctrl_F:
++ #endif
++ #ifdef FEAT_FIND_ID
++     case 'i':
++     case Ctrl_I:
++     case 'd':
++     case Ctrl_D:
++ #endif
++ 		/* window size or any count */
++ 		eap->addr_type = ADDR_LINES;
++ 		break;
++ 
++     case Ctrl_HAT:
++     case '^':
++ 		/* buffer number */
++ 		eap->addr_type = ADDR_BUFFERS;
++ 		break;
++ 
++     case Ctrl_Q:
++     case 'q':
++     case Ctrl_C:
++     case 'c':
++     case Ctrl_O:
++     case 'o':
++     case Ctrl_W:
++     case 'w':
++     case 'W':
++     case 'x':
++     case Ctrl_X:
++ 		/* window number */
++ 		eap->addr_type = ADDR_WINDOWS;
++ 		break;
++ 
++ #if defined(FEAT_QUICKFIX)
++     case Ctrl_Z:
++     case 'z':
++     case 'P':
++ #endif
++     case 't':
++     case Ctrl_T:
++     case 'b':
++     case Ctrl_B:
++     case 'p':
++     case Ctrl_P:
++     case '=':
++     case CAR:
++ 		/* no count */
++ 		eap->addr_type = 0;
++ 		break;
++     }
++ }
++ 
+      static void
+  cmd_with_count(cmd, bufp, bufsize, Prenum)
+      char	*cmd;
+*** ../vim-7.4.571/src/proto/window.pro	2014-12-17 14:47:52.870412129 +0100
+--- src/proto/window.pro	2015-01-14 15:16:37.544092744 +0100
+***************
+*** 1,5 ****
+--- 1,6 ----
+  /* window.c */
+  void do_window __ARGS((int nchar, long Prenum, int xchar));
++ void get_wincmd_addr_type __ARGS((char_u *arg, exarg_T *eap));
+  int win_split __ARGS((int size, int flags));
+  int win_split_ins __ARGS((int size, int flags, win_T *new_wp, int dir));
+  int win_valid __ARGS((win_T *win));
+*** ../vim-7.4.571/src/version.c	2015-01-14 14:08:40.364402377 +0100
+--- src/version.c	2015-01-14 15:46:36.136651958 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     572,
+  /**/
+
+-- 
+From "know your smileys":
+ :^[/   mean-smiley-with-cigarette
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.574 b/SOURCES/7.4.574
new file mode 100644
index 0000000..8fef99b
--- /dev/null
+++ b/SOURCES/7.4.574
@@ -0,0 +1,89 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.574
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.574
+Problem:    No error for eval('$').
+Solution:   Check for empty name. (Yasuhiro Matsumoto)
+Files:	    src/eval.c
+
+
+*** ../vim-7.4.573/src/eval.c	2014-12-13 21:00:52.059036480 +0100
+--- src/eval.c	2015-01-14 17:11:38.633570761 +0100
+***************
+*** 7867,7873 ****
+      if (evaluate)
+      {
+  	if (len == 0)
+!            return FAIL; /* can't be an environment variable */
+  
+  	cc = name[len];
+  	name[len] = NUL;
+--- 7867,7873 ----
+      if (evaluate)
+      {
+  	if (len == 0)
+! 	    return FAIL; /* invalid empty name */
+  
+  	cc = name[len];
+  	name[len] = NUL;
+***************
+*** 10117,10130 ****
+      typval_T	*argvars;
+      typval_T	*rettv;
+  {
+!     char_u	*s;
+  
+      s = get_tv_string_chk(&argvars[0]);
+      if (s != NULL)
+  	s = skipwhite(s);
+  
+      if (s == NULL || eval1(&s, rettv, TRUE) == FAIL)
+      {
+  	rettv->v_type = VAR_NUMBER;
+  	rettv->vval.v_number = 0;
+      }
+--- 10117,10134 ----
+      typval_T	*argvars;
+      typval_T	*rettv;
+  {
+!     char_u	*s, *p;
+  
+      s = get_tv_string_chk(&argvars[0]);
+      if (s != NULL)
+  	s = skipwhite(s);
+  
++     p = s;
+      if (s == NULL || eval1(&s, rettv, TRUE) == FAIL)
+      {
++ 	if (p != NULL && !aborting())
++ 	    EMSG2(_(e_invexpr2), p);
++ 	need_clr_eos = FALSE;
+  	rettv->v_type = VAR_NUMBER;
+  	rettv->vval.v_number = 0;
+      }
+*** ../vim-7.4.573/src/version.c	2015-01-14 16:08:29.210474234 +0100
+--- src/version.c	2015-01-14 17:05:25.357601603 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     574,
+  /**/
+
+-- 
+From "know your smileys":
+ :-)	Funny
+ |-)	Funny Oriental
+ (-:	Funny Australian
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.575 b/SOURCES/7.4.575
new file mode 100644
index 0000000..e5f67bb
--- /dev/null
+++ b/SOURCES/7.4.575
@@ -0,0 +1,737 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.575
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.575
+Problem:    Unicode character properties are outdated.
+Solution:   Update the tables with the latest version.
+Files:	    src/mbyte.c
+
+
+*** ../vim-7.4.574/src/mbyte.c	2014-11-19 17:05:52.209648533 +0100
+--- src/mbyte.c	2015-01-14 17:23:56.509597627 +0100
+***************
+*** 1244,1263 ****
+      static struct interval doublewidth[] =
+      {
+  	{0x1100, 0x115f},
+- 	{0x11a3, 0x11a7},
+- 	{0x11fa, 0x11ff},
+  	{0x2329, 0x232a},
+  	{0x2e80, 0x2e99},
+  	{0x2e9b, 0x2ef3},
+  	{0x2f00, 0x2fd5},
+  	{0x2ff0, 0x2ffb},
+! 	{0x3000, 0x3029},
+! 	{0x3030, 0x303e},
+  	{0x3041, 0x3096},
+! 	{0x309b, 0x30ff},
+  	{0x3105, 0x312d},
+  	{0x3131, 0x318e},
+! 	{0x3190, 0x31b7},
+  	{0x31c0, 0x31e3},
+  	{0x31f0, 0x321e},
+  	{0x3220, 0x3247},
+--- 1244,1260 ----
+      static struct interval doublewidth[] =
+      {
+  	{0x1100, 0x115f},
+  	{0x2329, 0x232a},
+  	{0x2e80, 0x2e99},
+  	{0x2e9b, 0x2ef3},
+  	{0x2f00, 0x2fd5},
+  	{0x2ff0, 0x2ffb},
+! 	{0x3000, 0x303e},
+  	{0x3041, 0x3096},
+! 	{0x3099, 0x30ff},
+  	{0x3105, 0x312d},
+  	{0x3131, 0x318e},
+! 	{0x3190, 0x31ba},
+  	{0x31c0, 0x31e3},
+  	{0x31f0, 0x321e},
+  	{0x3220, 0x3247},
+***************
+*** 1267,1274 ****
+  	{0xa490, 0xa4c6},
+  	{0xa960, 0xa97c},
+  	{0xac00, 0xd7a3},
+- 	{0xd7b0, 0xd7c6},
+- 	{0xd7cb, 0xd7fb},
+  	{0xf900, 0xfaff},
+  	{0xfe10, 0xfe19},
+  	{0xfe30, 0xfe52},
+--- 1264,1269 ----
+***************
+*** 1276,1287 ****
+  	{0xfe68, 0xfe6b},
+  	{0xff01, 0xff60},
+  	{0xffe0, 0xffe6},
+! 	{0x1f200, 0x1f200},
+! 	{0x1f210, 0x1f231},
+  	{0x1f240, 0x1f248},
+  	{0x20000, 0x2fffd},
+  	{0x30000, 0x3fffd}
+      };
+      /* Sorted list of non-overlapping intervals of East Asian Ambiguous
+       * characters, generated with ../runtime/tools/unicode.vim. */
+      static struct interval ambiguous[] =
+--- 1271,1285 ----
+  	{0xfe68, 0xfe6b},
+  	{0xff01, 0xff60},
+  	{0xffe0, 0xffe6},
+! 	{0x1b000, 0x1b001},
+! 	{0x1f200, 0x1f202},
+! 	{0x1f210, 0x1f23a},
+  	{0x1f240, 0x1f248},
++ 	{0x1f250, 0x1f251},
+  	{0x20000, 0x2fffd},
+  	{0x30000, 0x3fffd}
+      };
++ 
+      /* Sorted list of non-overlapping intervals of East Asian Ambiguous
+       * characters, generated with ../runtime/tools/unicode.vim. */
+      static struct interval ambiguous[] =
+***************
+*** 1339,1344 ****
+--- 1337,1343 ----
+  	{0x02d8, 0x02db},
+  	{0x02dd, 0x02dd},
+  	{0x02df, 0x02df},
++ 	{0x0300, 0x036f},
+  	{0x0391, 0x03a1},
+  	{0x03a3, 0x03a9},
+  	{0x03b1, 0x03c1},
+***************
+*** 1449,1470 ****
+  	{0x2b55, 0x2b59},
+  	{0x3248, 0x324f},
+  	{0xe000, 0xf8ff},
+  	{0xfffd, 0xfffd},
+  	{0x1f100, 0x1f10a},
+  	{0x1f110, 0x1f12d},
+! 	{0x1f131, 0x1f131},
+! 	{0x1f13d, 0x1f13d},
+! 	{0x1f13f, 0x1f13f},
+! 	{0x1f142, 0x1f142},
+! 	{0x1f146, 0x1f146},
+! 	{0x1f14a, 0x1f14e},
+! 	{0x1f157, 0x1f157},
+! 	{0x1f15f, 0x1f15f},
+! 	{0x1f179, 0x1f179},
+! 	{0x1f17b, 0x1f17c},
+! 	{0x1f17f, 0x1f17f},
+! 	{0x1f18a, 0x1f18d},
+! 	{0x1f190, 0x1f190},
+  	{0xf0000, 0xffffd},
+  	{0x100000, 0x10fffd}
+      };
+--- 1448,1460 ----
+  	{0x2b55, 0x2b59},
+  	{0x3248, 0x324f},
+  	{0xe000, 0xf8ff},
++ 	{0xfe00, 0xfe0f},
+  	{0xfffd, 0xfffd},
+  	{0x1f100, 0x1f10a},
+  	{0x1f110, 0x1f12d},
+! 	{0x1f130, 0x1f169},
+! 	{0x1f170, 0x1f19a},
+! 	{0xe0100, 0xe01ef},
+  	{0xf0000, 0xffffd},
+  	{0x100000, 0x10fffd}
+      };
+***************
+*** 2261,2270 ****
+  	{0x05c4, 0x05c5},
+  	{0x05c7, 0x05c7},
+  	{0x0610, 0x061a},
+! 	{0x064b, 0x065e},
+  	{0x0670, 0x0670},
+  	{0x06d6, 0x06dc},
+! 	{0x06de, 0x06e4},
+  	{0x06e7, 0x06e8},
+  	{0x06ea, 0x06ed},
+  	{0x0711, 0x0711},
+--- 2251,2260 ----
+  	{0x05c4, 0x05c5},
+  	{0x05c7, 0x05c7},
+  	{0x0610, 0x061a},
+! 	{0x064b, 0x065f},
+  	{0x0670, 0x0670},
+  	{0x06d6, 0x06dc},
+! 	{0x06df, 0x06e4},
+  	{0x06e7, 0x06e8},
+  	{0x06ea, 0x06ed},
+  	{0x0711, 0x0711},
+***************
+*** 2275,2284 ****
+  	{0x081b, 0x0823},
+  	{0x0825, 0x0827},
+  	{0x0829, 0x082d},
+! 	{0x0900, 0x0903},
+! 	{0x093c, 0x093c},
+! 	{0x093e, 0x094e},
+! 	{0x0951, 0x0955},
+  	{0x0962, 0x0963},
+  	{0x0981, 0x0983},
+  	{0x09bc, 0x09bc},
+--- 2265,2275 ----
+  	{0x081b, 0x0823},
+  	{0x0825, 0x0827},
+  	{0x0829, 0x082d},
+! 	{0x0859, 0x085b},
+! 	{0x08e4, 0x0903},
+! 	{0x093a, 0x093c},
+! 	{0x093e, 0x094f},
+! 	{0x0951, 0x0957},
+  	{0x0962, 0x0963},
+  	{0x0981, 0x0983},
+  	{0x09bc, 0x09bc},
+***************
+*** 2313,2332 ****
+  	{0x0bc6, 0x0bc8},
+  	{0x0bca, 0x0bcd},
+  	{0x0bd7, 0x0bd7},
+! 	{0x0c01, 0x0c03},
+  	{0x0c3e, 0x0c44},
+  	{0x0c46, 0x0c48},
+  	{0x0c4a, 0x0c4d},
+  	{0x0c55, 0x0c56},
+  	{0x0c62, 0x0c63},
+! 	{0x0c82, 0x0c83},
+  	{0x0cbc, 0x0cbc},
+  	{0x0cbe, 0x0cc4},
+  	{0x0cc6, 0x0cc8},
+  	{0x0cca, 0x0ccd},
+  	{0x0cd5, 0x0cd6},
+  	{0x0ce2, 0x0ce3},
+! 	{0x0d02, 0x0d03},
+  	{0x0d3e, 0x0d44},
+  	{0x0d46, 0x0d48},
+  	{0x0d4a, 0x0d4d},
+--- 2304,2323 ----
+  	{0x0bc6, 0x0bc8},
+  	{0x0bca, 0x0bcd},
+  	{0x0bd7, 0x0bd7},
+! 	{0x0c00, 0x0c03},
+  	{0x0c3e, 0x0c44},
+  	{0x0c46, 0x0c48},
+  	{0x0c4a, 0x0c4d},
+  	{0x0c55, 0x0c56},
+  	{0x0c62, 0x0c63},
+! 	{0x0c81, 0x0c83},
+  	{0x0cbc, 0x0cbc},
+  	{0x0cbe, 0x0cc4},
+  	{0x0cc6, 0x0cc8},
+  	{0x0cca, 0x0ccd},
+  	{0x0cd5, 0x0cd6},
+  	{0x0ce2, 0x0ce3},
+! 	{0x0d01, 0x0d03},
+  	{0x0d3e, 0x0d44},
+  	{0x0d46, 0x0d48},
+  	{0x0d4a, 0x0d4d},
+***************
+*** 2352,2358 ****
+  	{0x0f3e, 0x0f3f},
+  	{0x0f71, 0x0f84},
+  	{0x0f86, 0x0f87},
+! 	{0x0f90, 0x0f97},
+  	{0x0f99, 0x0fbc},
+  	{0x0fc6, 0x0fc6},
+  	{0x102b, 0x103e},
+--- 2343,2349 ----
+  	{0x0f3e, 0x0f3f},
+  	{0x0f71, 0x0f84},
+  	{0x0f86, 0x0f87},
+! 	{0x0f8d, 0x0f97},
+  	{0x0f99, 0x0fbc},
+  	{0x0fc6, 0x0fc6},
+  	{0x102b, 0x103e},
+***************
+*** 2364,2375 ****
+  	{0x1082, 0x108d},
+  	{0x108f, 0x108f},
+  	{0x109a, 0x109d},
+! 	{0x135f, 0x135f},
+  	{0x1712, 0x1714},
+  	{0x1732, 0x1734},
+  	{0x1752, 0x1753},
+  	{0x1772, 0x1773},
+! 	{0x17b6, 0x17d3},
+  	{0x17dd, 0x17dd},
+  	{0x180b, 0x180d},
+  	{0x18a9, 0x18a9},
+--- 2355,2366 ----
+  	{0x1082, 0x108d},
+  	{0x108f, 0x108f},
+  	{0x109a, 0x109d},
+! 	{0x135d, 0x135f},
+  	{0x1712, 0x1714},
+  	{0x1732, 0x1734},
+  	{0x1752, 0x1753},
+  	{0x1772, 0x1773},
+! 	{0x17b4, 0x17d3},
+  	{0x17dd, 0x17dd},
+  	{0x180b, 0x180d},
+  	{0x18a9, 0x18a9},
+***************
+*** 2381,2405 ****
+  	{0x1a55, 0x1a5e},
+  	{0x1a60, 0x1a7c},
+  	{0x1a7f, 0x1a7f},
+  	{0x1b00, 0x1b04},
+  	{0x1b34, 0x1b44},
+  	{0x1b6b, 0x1b73},
+  	{0x1b80, 0x1b82},
+! 	{0x1ba1, 0x1baa},
+  	{0x1c24, 0x1c37},
+  	{0x1cd0, 0x1cd2},
+  	{0x1cd4, 0x1ce8},
+  	{0x1ced, 0x1ced},
+! 	{0x1cf2, 0x1cf2},
+! 	{0x1dc0, 0x1de6},
+! 	{0x1dfd, 0x1dff},
+  	{0x20d0, 0x20f0},
+  	{0x2cef, 0x2cf1},
+  	{0x2de0, 0x2dff},
+  	{0x302a, 0x302f},
+  	{0x3099, 0x309a},
+  	{0xa66f, 0xa672},
+! 	{0xa67c, 0xa67d},
+  	{0xa6f0, 0xa6f1},
+  	{0xa802, 0xa802},
+  	{0xa806, 0xa806},
+--- 2372,2401 ----
+  	{0x1a55, 0x1a5e},
+  	{0x1a60, 0x1a7c},
+  	{0x1a7f, 0x1a7f},
++ 	{0x1ab0, 0x1abe},
+  	{0x1b00, 0x1b04},
+  	{0x1b34, 0x1b44},
+  	{0x1b6b, 0x1b73},
+  	{0x1b80, 0x1b82},
+! 	{0x1ba1, 0x1bad},
+! 	{0x1be6, 0x1bf3},
+  	{0x1c24, 0x1c37},
+  	{0x1cd0, 0x1cd2},
+  	{0x1cd4, 0x1ce8},
+  	{0x1ced, 0x1ced},
+! 	{0x1cf2, 0x1cf4},
+! 	{0x1cf8, 0x1cf9},
+! 	{0x1dc0, 0x1df5},
+! 	{0x1dfc, 0x1dff},
+  	{0x20d0, 0x20f0},
+  	{0x2cef, 0x2cf1},
++ 	{0x2d7f, 0x2d7f},
+  	{0x2de0, 0x2dff},
+  	{0x302a, 0x302f},
+  	{0x3099, 0x309a},
+  	{0xa66f, 0xa672},
+! 	{0xa674, 0xa67d},
+! 	{0xa69f, 0xa69f},
+  	{0xa6f0, 0xa6f1},
+  	{0xa802, 0xa802},
+  	{0xa806, 0xa806},
+***************
+*** 2412,2445 ****
+  	{0xa947, 0xa953},
+  	{0xa980, 0xa983},
+  	{0xa9b3, 0xa9c0},
+  	{0xaa29, 0xaa36},
+  	{0xaa43, 0xaa43},
+  	{0xaa4c, 0xaa4d},
+! 	{0xaa7b, 0xaa7b},
+  	{0xaab0, 0xaab0},
+  	{0xaab2, 0xaab4},
+  	{0xaab7, 0xaab8},
+  	{0xaabe, 0xaabf},
+  	{0xaac1, 0xaac1},
+  	{0xabe3, 0xabea},
+  	{0xabec, 0xabed},
+  	{0xfb1e, 0xfb1e},
+  	{0xfe00, 0xfe0f},
+! 	{0xfe20, 0xfe26},
+  	{0x101fd, 0x101fd},
+  	{0x10a01, 0x10a03},
+  	{0x10a05, 0x10a06},
+  	{0x10a0c, 0x10a0f},
+  	{0x10a38, 0x10a3a},
+  	{0x10a3f, 0x10a3f},
+! 	{0x11080, 0x11082},
+  	{0x110b0, 0x110ba},
+  	{0x1d165, 0x1d169},
+  	{0x1d16d, 0x1d172},
+  	{0x1d17b, 0x1d182},
+  	{0x1d185, 0x1d18b},
+  	{0x1d1aa, 0x1d1ad},
+  	{0x1d242, 0x1d244},
+  	{0xe0100, 0xe01ef}
+      };
+  
+--- 2408,2476 ----
+  	{0xa947, 0xa953},
+  	{0xa980, 0xa983},
+  	{0xa9b3, 0xa9c0},
++ 	{0xa9e5, 0xa9e5},
+  	{0xaa29, 0xaa36},
+  	{0xaa43, 0xaa43},
+  	{0xaa4c, 0xaa4d},
+! 	{0xaa7b, 0xaa7d},
+  	{0xaab0, 0xaab0},
+  	{0xaab2, 0xaab4},
+  	{0xaab7, 0xaab8},
+  	{0xaabe, 0xaabf},
+  	{0xaac1, 0xaac1},
++ 	{0xaaeb, 0xaaef},
++ 	{0xaaf5, 0xaaf6},
+  	{0xabe3, 0xabea},
+  	{0xabec, 0xabed},
+  	{0xfb1e, 0xfb1e},
+  	{0xfe00, 0xfe0f},
+! 	{0xfe20, 0xfe2d},
+  	{0x101fd, 0x101fd},
++ 	{0x102e0, 0x102e0},
++ 	{0x10376, 0x1037a},
+  	{0x10a01, 0x10a03},
+  	{0x10a05, 0x10a06},
+  	{0x10a0c, 0x10a0f},
+  	{0x10a38, 0x10a3a},
+  	{0x10a3f, 0x10a3f},
+! 	{0x10ae5, 0x10ae6},
+! 	{0x11000, 0x11002},
+! 	{0x11038, 0x11046},
+! 	{0x1107f, 0x11082},
+  	{0x110b0, 0x110ba},
++ 	{0x11100, 0x11102},
++ 	{0x11127, 0x11134},
++ 	{0x11173, 0x11173},
++ 	{0x11180, 0x11182},
++ 	{0x111b3, 0x111c0},
++ 	{0x1122c, 0x11237},
++ 	{0x112df, 0x112ea},
++ 	{0x11301, 0x11303},
++ 	{0x1133c, 0x1133c},
++ 	{0x1133e, 0x11344},
++ 	{0x11347, 0x11348},
++ 	{0x1134b, 0x1134d},
++ 	{0x11357, 0x11357},
++ 	{0x11362, 0x11363},
++ 	{0x11366, 0x1136c},
++ 	{0x11370, 0x11374},
++ 	{0x114b0, 0x114c3},
++ 	{0x115af, 0x115b5},
++ 	{0x115b8, 0x115c0},
++ 	{0x11630, 0x11640},
++ 	{0x116ab, 0x116b7},
++ 	{0x16af0, 0x16af4},
++ 	{0x16b30, 0x16b36},
++ 	{0x16f51, 0x16f7e},
++ 	{0x16f8f, 0x16f92},
++ 	{0x1bc9d, 0x1bc9e},
+  	{0x1d165, 0x1d169},
+  	{0x1d16d, 0x1d172},
+  	{0x1d17b, 0x1d182},
+  	{0x1d185, 0x1d18b},
+  	{0x1d1aa, 0x1d1ad},
+  	{0x1d242, 0x1d244},
++ 	{0x1e8d0, 0x1e8d6},
+  	{0xe0100, 0xe01ef}
+      };
+  
+***************
+*** 2679,2684 ****
+--- 2710,2716 ----
+  	{0x345,0x345,-1,116},
+  	{0x370,0x372,2,1},
+  	{0x376,0x376,-1,1},
++ 	{0x37f,0x37f,-1,116},
+  	{0x386,0x386,-1,38},
+  	{0x388,0x38a,1,37},
+  	{0x38c,0x38c,-1,64},
+***************
+*** 2706,2714 ****
+  	{0x48a,0x4be,2,1},
+  	{0x4c0,0x4c0,-1,15},
+  	{0x4c1,0x4cd,2,1},
+! 	{0x4d0,0x524,2,1},
+  	{0x531,0x556,1,48},
+  	{0x10a0,0x10c5,1,7264},
+  	{0x1e00,0x1e94,2,1},
+  	{0x1e9b,0x1e9b,-1,-58},
+  	{0x1e9e,0x1e9e,-1,-7615},
+--- 2738,2747 ----
+  	{0x48a,0x4be,2,1},
+  	{0x4c0,0x4c0,-1,15},
+  	{0x4c1,0x4cd,2,1},
+! 	{0x4d0,0x52e,2,1},
+  	{0x531,0x556,1,48},
+  	{0x10a0,0x10c5,1,7264},
++ 	{0x10c7,0x10cd,6,7264},
+  	{0x1e00,0x1e94,2,1},
+  	{0x1e9b,0x1e9b,-1,-58},
+  	{0x1e9e,0x1e9e,-1,-7615},
+***************
+*** 2758,2774 ****
+  	{0x2c7e,0x2c7f,1,-10815},
+  	{0x2c80,0x2ce2,2,1},
+  	{0x2ceb,0x2ced,2,1},
+! 	{0xa640,0xa65e,2,1},
+! 	{0xa662,0xa66c,2,1},
+! 	{0xa680,0xa696,2,1},
+  	{0xa722,0xa72e,2,1},
+  	{0xa732,0xa76e,2,1},
+  	{0xa779,0xa77b,2,1},
+  	{0xa77d,0xa77d,-1,-35332},
+  	{0xa77e,0xa786,2,1},
+  	{0xa78b,0xa78b,-1,1},
+  	{0xff21,0xff3a,1,32},
+! 	{0x10400,0x10427,1,40}
+  };
+  
+  static int utf_convert __ARGS((int a, convertStruct table[], int tableSize));
+--- 2791,2817 ----
+  	{0x2c7e,0x2c7f,1,-10815},
+  	{0x2c80,0x2ce2,2,1},
+  	{0x2ceb,0x2ced,2,1},
+! 	{0x2cf2,0xa640,31054,1},
+! 	{0xa642,0xa66c,2,1},
+! 	{0xa680,0xa69a,2,1},
+  	{0xa722,0xa72e,2,1},
+  	{0xa732,0xa76e,2,1},
+  	{0xa779,0xa77b,2,1},
+  	{0xa77d,0xa77d,-1,-35332},
+  	{0xa77e,0xa786,2,1},
+  	{0xa78b,0xa78b,-1,1},
++ 	{0xa78d,0xa78d,-1,-42280},
++ 	{0xa790,0xa792,2,1},
++ 	{0xa796,0xa7a8,2,1},
++ 	{0xa7aa,0xa7aa,-1,-42308},
++ 	{0xa7ab,0xa7ab,-1,-42319},
++ 	{0xa7ac,0xa7ac,-1,-42315},
++ 	{0xa7ad,0xa7ad,-1,-42305},
++ 	{0xa7b0,0xa7b0,-1,-42258},
++ 	{0xa7b1,0xa7b1,-1,-42282},
+  	{0xff21,0xff3a,1,32},
+! 	{0x10400,0x10427,1,40},
+! 	{0x118a0,0x118bf,1,32}
+  };
+  
+  static int utf_convert __ARGS((int a, convertStruct table[], int tableSize));
+***************
+*** 2885,2890 ****
+--- 2928,2934 ----
+  	{0x246,0x24e,2,1},
+  	{0x370,0x372,2,1},
+  	{0x376,0x376,-1,1},
++ 	{0x37f,0x37f,-1,116},
+  	{0x386,0x386,-1,38},
+  	{0x388,0x38a,1,37},
+  	{0x38c,0x38c,-1,64},
+***************
+*** 2904,2912 ****
+  	{0x48a,0x4be,2,1},
+  	{0x4c0,0x4c0,-1,15},
+  	{0x4c1,0x4cd,2,1},
+! 	{0x4d0,0x524,2,1},
+  	{0x531,0x556,1,48},
+  	{0x10a0,0x10c5,1,7264},
+  	{0x1e00,0x1e94,2,1},
+  	{0x1e9e,0x1e9e,-1,-7615},
+  	{0x1ea0,0x1efe,2,1},
+--- 2948,2957 ----
+  	{0x48a,0x4be,2,1},
+  	{0x4c0,0x4c0,-1,15},
+  	{0x4c1,0x4cd,2,1},
+! 	{0x4d0,0x52e,2,1},
+  	{0x531,0x556,1,48},
+  	{0x10a0,0x10c5,1,7264},
++ 	{0x10c7,0x10cd,6,7264},
+  	{0x1e00,0x1e94,2,1},
+  	{0x1e9e,0x1e9e,-1,-7615},
+  	{0x1ea0,0x1efe,2,1},
+***************
+*** 2954,2977 ****
+  	{0x2c7e,0x2c7f,1,-10815},
+  	{0x2c80,0x2ce2,2,1},
+  	{0x2ceb,0x2ced,2,1},
+! 	{0xa640,0xa65e,2,1},
+! 	{0xa662,0xa66c,2,1},
+! 	{0xa680,0xa696,2,1},
+  	{0xa722,0xa72e,2,1},
+  	{0xa732,0xa76e,2,1},
+  	{0xa779,0xa77b,2,1},
+  	{0xa77d,0xa77d,-1,-35332},
+  	{0xa77e,0xa786,2,1},
+  	{0xa78b,0xa78b,-1,1},
+  	{0xff21,0xff3a,1,32},
+! 	{0x10400,0x10427,1,40}
+  };
+  
+  static convertStruct toUpper[] =
+  {
+  	{0x61,0x7a,1,-32},
+  	{0xb5,0xb5,-1,743},
+! 	{0xe0,0xf6,1,-32},  /* 0xdf (German sharp s) is not upper-cased */
+  	{0xf8,0xfe,1,-32},
+  	{0xff,0xff,-1,121},
+  	{0x101,0x12f,2,-1},
+--- 2999,3032 ----
+  	{0x2c7e,0x2c7f,1,-10815},
+  	{0x2c80,0x2ce2,2,1},
+  	{0x2ceb,0x2ced,2,1},
+! 	{0x2cf2,0xa640,31054,1},
+! 	{0xa642,0xa66c,2,1},
+! 	{0xa680,0xa69a,2,1},
+  	{0xa722,0xa72e,2,1},
+  	{0xa732,0xa76e,2,1},
+  	{0xa779,0xa77b,2,1},
+  	{0xa77d,0xa77d,-1,-35332},
+  	{0xa77e,0xa786,2,1},
+  	{0xa78b,0xa78b,-1,1},
++ 	{0xa78d,0xa78d,-1,-42280},
++ 	{0xa790,0xa792,2,1},
++ 	{0xa796,0xa7a8,2,1},
++ 	{0xa7aa,0xa7aa,-1,-42308},
++ 	{0xa7ab,0xa7ab,-1,-42319},
++ 	{0xa7ac,0xa7ac,-1,-42315},
++ 	{0xa7ad,0xa7ad,-1,-42305},
++ 	{0xa7b0,0xa7b0,-1,-42258},
++ 	{0xa7b1,0xa7b1,-1,-42282},
+  	{0xff21,0xff3a,1,32},
+! 	{0x10400,0x10427,1,40},
+! 	{0x118a0,0x118bf,1,32}
+  };
+  
+  static convertStruct toUpper[] =
+  {
+  	{0x61,0x7a,1,-32},
+  	{0xb5,0xb5,-1,743},
+! 	{0xe0,0xf6,1,-32},
+  	{0xf8,0xfe,1,-32},
+  	{0xff,0xff,-1,121},
+  	{0x101,0x12f,2,-1},
+***************
+*** 3021,3042 ****
+--- 3076,3104 ----
+  	{0x256,0x257,1,-205},
+  	{0x259,0x259,-1,-202},
+  	{0x25b,0x25b,-1,-203},
++ 	{0x25c,0x25c,-1,42319},
+  	{0x260,0x260,-1,-205},
++ 	{0x261,0x261,-1,42315},
+  	{0x263,0x263,-1,-207},
++ 	{0x265,0x265,-1,42280},
++ 	{0x266,0x266,-1,42308},
+  	{0x268,0x268,-1,-209},
+  	{0x269,0x269,-1,-211},
+  	{0x26b,0x26b,-1,10743},
++ 	{0x26c,0x26c,-1,42305},
+  	{0x26f,0x26f,-1,-211},
+  	{0x271,0x271,-1,10749},
+  	{0x272,0x272,-1,-213},
+  	{0x275,0x275,-1,-214},
+  	{0x27d,0x27d,-1,10727},
+  	{0x280,0x283,3,-218},
++ 	{0x287,0x287,-1,42282},
+  	{0x288,0x288,-1,-218},
+  	{0x289,0x289,-1,-69},
+  	{0x28a,0x28b,1,-217},
+  	{0x28c,0x28c,-1,-71},
+  	{0x292,0x292,-1,-219},
++ 	{0x29e,0x29e,-1,42258},
+  	{0x345,0x345,-1,84},
+  	{0x371,0x373,2,-1},
+  	{0x377,0x377,-1,-1},
+***************
+*** 3057,3062 ****
+--- 3119,3125 ----
+  	{0x3f0,0x3f0,-1,-86},
+  	{0x3f1,0x3f1,-1,-80},
+  	{0x3f2,0x3f2,-1,7},
++ 	{0x3f3,0x3f3,-1,-116},
+  	{0x3f5,0x3f5,-1,-96},
+  	{0x3f8,0x3fb,3,-1},
+  	{0x430,0x44f,1,-32},
+***************
+*** 3065,3071 ****
+  	{0x48b,0x4bf,2,-1},
+  	{0x4c2,0x4ce,2,-1},
+  	{0x4cf,0x4cf,-1,-15},
+! 	{0x4d1,0x525,2,-1},
+  	{0x561,0x586,1,-48},
+  	{0x1d79,0x1d79,-1,35332},
+  	{0x1d7d,0x1d7d,-1,3814},
+--- 3128,3134 ----
+  	{0x48b,0x4bf,2,-1},
+  	{0x4c2,0x4ce,2,-1},
+  	{0x4cf,0x4cf,-1,-15},
+! 	{0x4d1,0x52f,2,-1},
+  	{0x561,0x586,1,-48},
+  	{0x1d79,0x1d79,-1,35332},
+  	{0x1d7d,0x1d7d,-1,3814},
+***************
+*** 3108,3126 ****
+  	{0x2c73,0x2c76,3,-1},
+  	{0x2c81,0x2ce3,2,-1},
+  	{0x2cec,0x2cee,2,-1},
+  	{0x2d00,0x2d25,1,-7264},
+! 	{0xa641,0xa65f,2,-1},
+! 	{0xa663,0xa66d,2,-1},
+! 	{0xa681,0xa697,2,-1},
+  	{0xa723,0xa72f,2,-1},
+  	{0xa733,0xa76f,2,-1},
+  	{0xa77a,0xa77c,2,-1},
+  	{0xa77f,0xa787,2,-1},
+! 	{0xa78c,0xa78c,-1,-1},
+  	{0xff41,0xff5a,1,-32},
+! 	{0x10428,0x1044f,1,-40}
+  };
+- 
+  /*
+   * Return the upper-case equivalent of "a", which is a UCS-4 character.  Use
+   * simple case folding.
+--- 3171,3192 ----
+  	{0x2c73,0x2c76,3,-1},
+  	{0x2c81,0x2ce3,2,-1},
+  	{0x2cec,0x2cee,2,-1},
++ 	{0x2cf3,0x2cf3,-1,-1},
+  	{0x2d00,0x2d25,1,-7264},
+! 	{0x2d27,0x2d2d,6,-7264},
+! 	{0xa641,0xa66d,2,-1},
+! 	{0xa681,0xa69b,2,-1},
+  	{0xa723,0xa72f,2,-1},
+  	{0xa733,0xa76f,2,-1},
+  	{0xa77a,0xa77c,2,-1},
+  	{0xa77f,0xa787,2,-1},
+! 	{0xa78c,0xa791,5,-1},
+! 	{0xa793,0xa797,4,-1},
+! 	{0xa799,0xa7a9,2,-1},
+  	{0xff41,0xff5a,1,-32},
+! 	{0x10428,0x1044f,1,-40},
+! 	{0x118c0,0x118df,1,-32}
+  };
+  /*
+   * Return the upper-case equivalent of "a", which is a UCS-4 character.  Use
+   * simple case folding.
+*** ../vim-7.4.574/src/version.c	2015-01-14 17:14:57.351424263 +0100
+--- src/version.c	2015-01-14 17:25:39.336485325 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     575,
+  /**/
+
+-- 
+From "know your smileys":
+ :~)	A man with a tape recorder up his nose
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.576 b/SOURCES/7.4.576
new file mode 100644
index 0000000..b5bc665
--- /dev/null
+++ b/SOURCES/7.4.576
@@ -0,0 +1,181 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.576
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.576
+Problem:    Redrawing problem with 'relativenumber' and 'linebreak'.
+Solution:   Temporarily reset 'linebreak' and restore it in more places.
+	    (Christian Brabandt)
+Files:	    src/normal.c
+
+
+*** ../vim-7.4.575/src/normal.c	2014-10-31 13:54:21.843214469 +0100
+--- src/normal.c	2015-01-14 17:49:38.320915425 +0100
+***************
+*** 1393,1402 ****
+      int		    include_line_break = FALSE;
+  #endif
+  
+- #ifdef FEAT_LINEBREAK
+-     curwin->w_p_lbr = FALSE;	/* Avoid a problem with unwanted linebreaks in
+- 				 * block mode. */
+- #endif
+  #if defined(FEAT_CLIPBOARD)
+      /*
+       * Yank the visual area into the GUI selection register before we operate
+--- 1393,1398 ----
+***************
+*** 1420,1425 ****
+--- 1416,1425 ----
+       */
+      if ((finish_op || VIsual_active) && oap->op_type != OP_NOP)
+      {
++ #ifdef FEAT_LINEBREAK
++ 	/* Avoid a problem with unwanted linebreaks in block mode. */
++ 	curwin->w_p_lbr = FALSE;
++ #endif
+  	oap->is_VIsual = VIsual_active;
+  	if (oap->motion_force == 'V')
+  	    oap->motion_type = MLINE;
+***************
+*** 1819,1825 ****
+--- 1819,1831 ----
+  			    || oap->op_type == OP_FUNCTION
+  			    || oap->op_type == OP_FILTER)
+  			&& oap->motion_force == NUL)
++ 		{
++ #ifdef FEAT_LINEBREAK
++ 		    /* make sure redrawing is correct */
++ 		    curwin->w_p_lbr = lbr_saved;
++ #endif
+  		    redraw_curbuf_later(INVERTED);
++ 		}
+  	    }
+  	}
+  
+***************
+*** 1863,1869 ****
+--- 1869,1880 ----
+  		    || oap->op_type == OP_FOLD
+  #endif
+  		    ))
++ 	{
++ #ifdef FEAT_LINEBREAK
++ 	    curwin->w_p_lbr = lbr_saved;
++ #endif
+  	    redraw_curbuf_later(INVERTED);
++ 	}
+  
+  	/*
+  	 * If the end of an operator is in column one while oap->motion_type
+***************
+*** 1947,1953 ****
+--- 1958,1969 ----
+  		}
+  	    }
+  	    else
++ 	    {
++ #ifdef FEAT_LINEBREAK
++ 		curwin->w_p_lbr = lbr_saved;
++ #endif
+  		(void)op_yank(oap, FALSE, !gui_yank);
++ 	    }
+  	    check_cursor_col();
+  	    break;
+  
+***************
+*** 1969,1974 ****
+--- 1985,1995 ----
+  		else
+  		    restart_edit_save = 0;
+  		restart_edit = 0;
++ #ifdef FEAT_LINEBREAK
++ 		/* Restore linebreak, so that when the user edits it looks as
++ 		 * before. */
++ 		curwin->w_p_lbr = lbr_saved;
++ #endif
+  		/* Reset finish_op now, don't want it set inside edit(). */
+  		finish_op = FALSE;
+  		if (op_change(oap))	/* will call edit() */
+***************
+*** 2064,2071 ****
+  		 * Visual mode.  But do this only once. */
+  		restart_edit_save = restart_edit;
+  		restart_edit = 0;
+! 
+  		op_insert(oap, cap->count1);
+  
+  		/* TODO: when inserting in several lines, should format all
+  		 * the lines. */
+--- 2085,2100 ----
+  		 * Visual mode.  But do this only once. */
+  		restart_edit_save = restart_edit;
+  		restart_edit = 0;
+! #ifdef FEAT_LINEBREAK
+! 		/* Restore linebreak, so that when the user edits it looks as
+! 		 * before. */
+! 		curwin->w_p_lbr = lbr_saved;
+! #endif
+  		op_insert(oap, cap->count1);
++ #ifdef FEAT_LINEBREAK
++ 		/* Reset linebreak, so that formatting works correctly. */
++ 		curwin->w_p_lbr = FALSE;
++ #endif
+  
+  		/* TODO: when inserting in several lines, should format all
+  		 * the lines. */
+***************
+*** 2090,2096 ****
+--- 2119,2132 ----
+  	    }
+  #ifdef FEAT_VISUALEXTRA
+  	    else
++ 	    {
++ #ifdef FEAT_LINEBREAK
++ 		/* Restore linebreak, so that when the user edits it looks as
++ 		 * before. */
++ 		curwin->w_p_lbr = lbr_saved;
++ #endif
+  		op_replace(oap, cap->nchar);
++ 	    }
+  #endif
+  	    break;
+  
+***************
+*** 2134,2140 ****
+--- 2170,2181 ----
+  	    if (!p_sol && oap->motion_type == MLINE && !oap->end_adjusted
+  		    && (oap->op_type == OP_LSHIFT || oap->op_type == OP_RSHIFT
+  						|| oap->op_type == OP_DELETE))
++ 	    {
++ #ifdef FEAT_LINEBREAK
++ 		curwin->w_p_lbr = FALSE;
++ #endif
+  		coladvance(curwin->w_curswant = old_col);
++ 	    }
+  	}
+  	else
+  	{
+*** ../vim-7.4.575/src/version.c	2015-01-14 17:40:04.407125696 +0100
+--- src/version.c	2015-01-14 17:47:45.898132017 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     576,
+  /**/
+
+-- 
+From "know your smileys":
+ :-H	Is missing teeth
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.577 b/SOURCES/7.4.577
new file mode 100644
index 0000000..dd15f02
--- /dev/null
+++ b/SOURCES/7.4.577
@@ -0,0 +1,92 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.577
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.577
+Problem:    Matching with a virtual column has a lot of overhead on very long
+	    lines. (Issue 310)
+Solution:   Bail out early if there can't be a match. (Christian Brabandt)
+	    Also check for CTRL-C at every position.
+Files:	    src/regexp_nfa.c
+
+
+*** ../vim-7.4.576/src/regexp_nfa.c	2014-11-23 15:57:45.568009419 +0100
+--- src/regexp_nfa.c	2015-01-14 18:40:12.263887756 +0100
+***************
+*** 6438,6451 ****
+  	    case NFA_VCOL:
+  	    case NFA_VCOL_GT:
+  	    case NFA_VCOL_LT:
+- 		result = nfa_re_num_cmp(t->state->val, t->state->c - NFA_VCOL,
+- 		    (long_u)win_linetabsize(
+- 			    reg_win == NULL ? curwin : reg_win,
+- 			    regline, (colnr_T)(reginput - regline)) + 1);
+- 		if (result)
+  		{
+! 		    add_here = TRUE;
+! 		    add_state = t->state->out;
+  		}
+  		break;
+  
+--- 6438,6461 ----
+  	    case NFA_VCOL:
+  	    case NFA_VCOL_GT:
+  	    case NFA_VCOL_LT:
+  		{
+! 		    int     op = t->state->c - NFA_VCOL;
+! 		    colnr_T col = (colnr_T)(reginput - regline);
+! 
+! 		    /* Bail out quickly when there can't be a match, avoid the
+! 		     * overhead of win_linetabsize() on long lines. */
+! 		    if ((col > t->state->val && op != 1)
+! 			    || (col - 1 > t->state->val && op == 1))
+! 			break;
+! 		    result = nfa_re_num_cmp(t->state->val, op,
+! 			(long_u)win_linetabsize(
+! 				reg_win == NULL ? curwin : reg_win,
+! 							   regline, col) + 1);
+! 		    if (result)
+! 		    {
+! 			add_here = TRUE;
+! 			add_state = t->state->out;
+! 		    }
+  		}
+  		break;
+  
+***************
+*** 6744,6749 ****
+--- 6754,6764 ----
+  	    reg_nextline();
+  	else
+  	    break;
++ 
++ 	/* Allow interrupting with CTRL-C. */
++ 	fast_breakcheck();
++ 	if (got_int)
++ 	    break;
+      }
+  
+  #ifdef ENABLE_LOG
+*** ../vim-7.4.576/src/version.c	2015-01-14 17:52:26.603094340 +0100
+--- src/version.c	2015-01-14 18:34:10.375843602 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     577,
+  /**/
+
+-- 
+From "know your smileys":
+ !-|	I-am-a-Cylon-Centurian-with-one-red-eye-bouncing-back-and-forth
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.578 b/SOURCES/7.4.578
new file mode 100644
index 0000000..49fdd7f
--- /dev/null
+++ b/SOURCES/7.4.578
@@ -0,0 +1,54 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.578
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.578
+Problem:    Using getcurpos() after "$" in an empty line returns a negative
+	    number.
+Solution:   Don't add one when this would overflow. (Hirohito Higashi)
+Files:	    src/eval.c
+
+
+*** ../vim-7.4.577/src/eval.c	2015-01-14 17:14:57.351424263 +0100
+--- src/eval.c	2015-01-14 18:55:46.945664363 +0100
+***************
+*** 11941,11947 ****
+  #endif
+  							      (varnumber_T)0);
+  	if (getcurpos)
+! 	    list_append_number(l, (varnumber_T)curwin->w_curswant + 1);
+      }
+      else
+  	rettv->vval.v_number = FALSE;
+--- 11941,11948 ----
+  #endif
+  							      (varnumber_T)0);
+  	if (getcurpos)
+! 	    list_append_number(l, curwin->w_curswant == MAXCOL ?
+! 		    (varnumber_T)MAXCOL : (varnumber_T)curwin->w_curswant + 1);
+      }
+      else
+  	rettv->vval.v_number = FALSE;
+*** ../vim-7.4.577/src/version.c	2015-01-14 18:40:23.087769463 +0100
+--- src/version.c	2015-01-14 18:54:47.734312885 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     578,
+  /**/
+
+-- 
+From "know your smileys":
+ ~#:-(	I just washed my hair, and I can't do nuthin' with it.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.579 b/SOURCES/7.4.579
new file mode 100644
index 0000000..daf7f65
--- /dev/null
+++ b/SOURCES/7.4.579
@@ -0,0 +1,169 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.579
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.579
+Problem:    Wrong cursor positioning when 'linebreak' is set and lines wrap.
+Solution:   Solve it. (Christian Brabandt)
+Files:	    src/charset.c, src/screen.c
+
+
+*** ../vim-7.4.578/src/charset.c	2014-10-31 12:41:57.427319153 +0100
+--- src/charset.c	2015-01-14 19:34:38.916109031 +0100
+***************
+*** 1178,1205 ****
+      added = 0;
+      if ((*p_sbr != NUL || wp->w_p_bri) && wp->w_p_wrap && col != 0)
+      {
+! 	numberextra = win_col_off(wp);
+  	col += numberextra + mb_added;
+  	if (col >= (colnr_T)W_WIDTH(wp))
+  	{
+  	    col -= W_WIDTH(wp);
+  	    numberextra = W_WIDTH(wp) - (numberextra - win_col_off2(wp));
+! 	    if (numberextra > 0)
+  		col %= numberextra;
+  	    if (*p_sbr != NUL)
+  	    {
+! 		colnr_T sbrlen = (colnr_T)MB_CHARLEN(p_sbr);
+  		if (col >= sbrlen)
+  		    col -= sbrlen;
+  	    }
+! 	    if (numberextra > 0)
+  		col = col % numberextra;
+  	}
+! 	if (col == 0 || col + size > (colnr_T)W_WIDTH(wp))
+  	{
+  	    added = 0;
+  	    if (*p_sbr != NUL)
+! 		added += vim_strsize(p_sbr);
+  	    if (wp->w_p_bri)
+  		added += get_breakindent_win(wp, line);
+  
+--- 1178,1227 ----
+      added = 0;
+      if ((*p_sbr != NUL || wp->w_p_bri) && wp->w_p_wrap && col != 0)
+      {
+! 	colnr_T sbrlen = 0;
+! 	int	numberwidth = win_col_off(wp);
+! 
+! 	numberextra = numberwidth;
+  	col += numberextra + mb_added;
+  	if (col >= (colnr_T)W_WIDTH(wp))
+  	{
+  	    col -= W_WIDTH(wp);
+  	    numberextra = W_WIDTH(wp) - (numberextra - win_col_off2(wp));
+! 	    if (col >= numberextra && numberextra > 0)
+  		col %= numberextra;
+  	    if (*p_sbr != NUL)
+  	    {
+! 		sbrlen = (colnr_T)MB_CHARLEN(p_sbr);
+  		if (col >= sbrlen)
+  		    col -= sbrlen;
+  	    }
+! 	    if (col >= numberextra && numberextra > 0)
+  		col = col % numberextra;
++ 	    else if (col > 0 && numberextra > 0)
++ 		col += numberwidth - win_col_off2(wp);
++ 
++ 	    numberwidth -= win_col_off2(wp);
+  	}
+! 	if (col == 0 || col + size + sbrlen > (colnr_T)W_WIDTH(wp))
+  	{
+  	    added = 0;
+  	    if (*p_sbr != NUL)
+! 	    {
+! 		if (size + sbrlen + numberwidth > (colnr_T)W_WIDTH(wp))
+! 		{
+! 		    /* calculate effective window width */
+! 		    int width = (colnr_T)W_WIDTH(wp) - sbrlen - numberwidth;
+! 		    int prev_width = col ? ((colnr_T)W_WIDTH(wp) - (sbrlen + col)) : 0;
+! 		    if (width == 0)
+! 			width = (colnr_T)W_WIDTH(wp);
+! 		    added += ((size - prev_width) / width) * vim_strsize(p_sbr);
+! 		    if ((size - prev_width) % width)
+! 			/* wrapped, add another length of 'sbr' */
+! 			added += vim_strsize(p_sbr);
+! 		}
+! 		else
+! 		    added += vim_strsize(p_sbr);
+! 	    }
+  	    if (wp->w_p_bri)
+  		added += get_breakindent_win(wp, line);
+  
+*** ../vim-7.4.578/src/screen.c	2015-01-07 19:04:25.299934570 +0100
+--- src/screen.c	2015-01-14 19:27:46.428652958 +0100
+***************
+*** 2842,2847 ****
+--- 2842,2850 ----
+      unsigned	off;			/* offset in ScreenLines/ScreenAttrs */
+      int		c = 0;			/* init for GCC */
+      long	vcol = 0;		/* virtual column (for tabs) */
++ #ifdef FEAT_LINEBREAK
++     long	vcol_sbr = -1;		/* virtual column after showbreak */
++ #endif
+      long	vcol_prev = -1;		/* "vcol" of previous character */
+      char_u	*line;			/* current line */
+      char_u	*ptr;			/* current position in "line" */
+***************
+*** 3759,3764 ****
+--- 3762,3768 ----
+  		    n_extra = (int)STRLEN(p_sbr);
+  		    char_attr = hl_attr(HLF_AT);
+  		    need_showbreak = FALSE;
++ 		    vcol_sbr = vcol + MB_CHARLEN(p_sbr);
+  		    /* Correct end of highlighted area for 'showbreak',
+  		     * required when 'linebreak' is also set. */
+  		    if (tocol == vcol)
+***************
+*** 4516,4524 ****
+  		if (c == TAB && (!wp->w_p_list || lcs_tab1))
+  		{
+  		    int tab_len = 0;
+  		    /* tab amount depends on current column */
+  		    tab_len = (int)wp->w_buffer->b_p_ts
+! 					- vcol % (int)wp->w_buffer->b_p_ts - 1;
+  #ifdef FEAT_LINEBREAK
+  		    if (!wp->w_p_lbr || !wp->w_p_list)
+  #endif
+--- 4520,4536 ----
+  		if (c == TAB && (!wp->w_p_list || lcs_tab1))
+  		{
+  		    int tab_len = 0;
++ 		    long vcol_adjusted = vcol; /* removed showbreak length */
++ #ifdef FEAT_LINEBREAK
++ 		    /* only adjust the tab_len, when at the first column
++ 		     * after the showbreak value was drawn */
++ 		    if (*p_sbr != NUL && vcol == vcol_sbr && wp->w_p_wrap)
++ 			vcol_adjusted = vcol - MB_CHARLEN(p_sbr);
++ #endif
+  		    /* tab amount depends on current column */
+  		    tab_len = (int)wp->w_buffer->b_p_ts
+! 					- vcol_adjusted % (int)wp->w_buffer->b_p_ts - 1;
+! 
+  #ifdef FEAT_LINEBREAK
+  		    if (!wp->w_p_lbr || !wp->w_p_list)
+  #endif
+*** ../vim-7.4.578/src/version.c	2015-01-14 19:00:33.842522901 +0100
+--- src/version.c	2015-01-14 19:28:47.291982266 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     579,
+  /**/
+
+-- 
+From "know your smileys":
+ O:-)	Saint
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.580 b/SOURCES/7.4.580
new file mode 100644
index 0000000..50675f8
--- /dev/null
+++ b/SOURCES/7.4.580
@@ -0,0 +1,54 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.580
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.580
+Problem:    ":52wincmd v" still gives an invalid range error. (Charles
+	    Campbell)
+Solution:   Skip over white space.
+Files:	    src/ex_docmd.c
+
+
+*** ../vim-7.4.579/src/ex_docmd.c	2015-01-14 15:47:33.076036876 +0100
+--- src/ex_docmd.c	2015-01-14 21:17:20.831813232 +0100
+***************
+*** 2140,2147 ****
+  
+  #ifdef FEAT_WINDOWS
+  	/* :wincmd range depends on the argument. */
+! 	if (ea.cmdidx == CMD_wincmd)
+! 	    get_wincmd_addr_type(p, &ea);
+  #endif
+      }
+  
+--- 2140,2147 ----
+  
+  #ifdef FEAT_WINDOWS
+  	/* :wincmd range depends on the argument. */
+! 	if (ea.cmdidx == CMD_wincmd && p != NULL)
+! 	    get_wincmd_addr_type(skipwhite(p), &ea);
+  #endif
+      }
+  
+*** ../vim-7.4.579/src/version.c	2015-01-14 19:35:10.967756099 +0100
+--- src/version.c	2015-01-14 21:19:22.418461266 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     580,
+  /**/
+
+-- 
+How many light bulbs does it take to change a person?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.581 b/SOURCES/7.4.581
new file mode 100644
index 0000000..390f840
--- /dev/null
+++ b/SOURCES/7.4.581
@@ -0,0 +1,64 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.581
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.581
+Problem:    Compiler warnings for unitinialized variables. (John Little)
+Solution:   Initialize the variables.
+Files:	    src/ops.c
+
+
+*** ../vim-7.4.580/src/ops.c	2014-12-17 21:00:44.989871256 +0100
+--- src/ops.c	2015-01-18 14:06:49.480786101 +0100
+***************
+*** 5663,5670 ****
+      int		set_prev = FALSE;
+      char_u	*str;
+      char_u	**array = NULL;
+!     int		new_type;
+!     colnr_T	new_width;
+  
+      /* We only get here (hopefully) if line[0] == '"' */
+      str = virp->vir_line + 1;
+--- 5663,5670 ----
+      int		set_prev = FALSE;
+      char_u	*str;
+      char_u	**array = NULL;
+!     int		new_type = MCHAR; /* init to shut up compiler */
+!     colnr_T	new_width = 0; /* init to shut up compiler */
+  
+      /* We only get here (hopefully) if line[0] == '"' */
+      str = virp->vir_line + 1;
+***************
+*** 5747,5752 ****
+--- 5747,5753 ----
+  		do_it = FALSE;
+  	}
+      }
++ 
+      if (do_it)
+      {
+  	/* free y_array[] */
+*** ../vim-7.4.580/src/version.c	2015-01-14 21:21:56.924743601 +0100
+--- src/version.c	2015-01-18 14:07:36.712268926 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     581,
+  /**/
+
+-- 
+From "know your smileys":
+ :-D	Big smile
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.582 b/SOURCES/7.4.582
new file mode 100644
index 0000000..cf66c48
--- /dev/null
+++ b/SOURCES/7.4.582
@@ -0,0 +1,117 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.582
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.582 (after 7.4.577)
+Problem:    Can't match "%>80v" properly. (Axel Bender)
+Solution:   Correctly handle ">". (Christian Brabandt)
+Files:	    src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok
+
+
+*** ../vim-7.4.581/src/regexp_nfa.c	2015-01-14 18:40:23.083769507 +0100
+--- src/regexp_nfa.c	2015-01-18 16:38:05.437339384 +0100
+***************
+*** 6441,6456 ****
+  		{
+  		    int     op = t->state->c - NFA_VCOL;
+  		    colnr_T col = (colnr_T)(reginput - regline);
+  
+  		    /* Bail out quickly when there can't be a match, avoid the
+  		     * overhead of win_linetabsize() on long lines. */
+! 		    if ((col > t->state->val && op != 1)
+! 			    || (col - 1 > t->state->val && op == 1))
+  			break;
+! 		    result = nfa_re_num_cmp(t->state->val, op,
+! 			(long_u)win_linetabsize(
+! 				reg_win == NULL ? curwin : reg_win,
+! 							   regline, col) + 1);
+  		    if (result)
+  		    {
+  			add_here = TRUE;
+--- 6441,6466 ----
+  		{
+  		    int     op = t->state->c - NFA_VCOL;
+  		    colnr_T col = (colnr_T)(reginput - regline);
++ 		    win_T   *wp = reg_win == NULL ? curwin : reg_win;
+  
+  		    /* Bail out quickly when there can't be a match, avoid the
+  		     * overhead of win_linetabsize() on long lines. */
+! 		    if (op != 1 && col > t->state->val)
+  			break;
+! 		    result = FALSE;
+! 		    if (op == 1 && col - 1 > t->state->val && col > 100)
+! 		    {
+! 			int ts = wp->w_buffer->b_p_ts;
+! 
+! 			/* Guess that a character won't use more columns than
+! 			 * 'tabstop', with a minimum of 4. */
+! 			if (ts < 4)
+! 			    ts = 4;
+! 			result = col > t->state->val * ts;
+! 		    }
+! 		    if (!result)
+! 			result = nfa_re_num_cmp(t->state->val, op,
+! 				(long_u)win_linetabsize(wp, regline, col) + 1);
+  		    if (result)
+  		    {
+  			add_here = TRUE;
+*** ../vim-7.4.581/src/testdir/test64.in	2014-08-29 11:56:21.350422045 +0200
+--- src/testdir/test64.in	2015-01-18 16:09:31.852099488 +0100
+***************
+*** 7,12 ****
+--- 7,13 ----
+  STARTTEST
+  :so small.vim
+  :" tl is a List of Lists with:
++ :"    regexp engine
+  :"    regexp pattern
+  :"    text to test the pattern on
+  :"    expected match (optional)
+***************
+*** 451,456 ****
+--- 452,460 ----
+  :"""" Skip adding state twice
+  :call add(tl, [2, '^\%(\%(^\s*#\s*if\>\|#\s*if\)\)\(\%>1c.*$\)\@=', "#if FOO", "#if", ' FOO'])
+  :"
++ :""" Test \%V atom
++ :call add(tl, [2, '\%>70vGesamt', 'Jean-Michel Charlier & Victor Hubinon\Gesamtausgabe [Salleck]    Buck Danny {Jean-Michel Charlier & Victor Hubinon}\Gesamtausgabe', 'Gesamt'])
++ :"
+  :"""" Run the tests
+  :"
+  :for t in tl
+*** ../vim-7.4.581/src/testdir/test64.ok	2014-08-29 11:56:21.350422045 +0200
+--- src/testdir/test64.ok	2015-01-18 16:09:31.852099488 +0100
+***************
+*** 1030,1035 ****
+--- 1030,1038 ----
+  OK 0 - ^\%(\%(^\s*#\s*if\>\|#\s*if\)\)\(\%>1c.*$\)\@=
+  OK 1 - ^\%(\%(^\s*#\s*if\>\|#\s*if\)\)\(\%>1c.*$\)\@=
+  OK 2 - ^\%(\%(^\s*#\s*if\>\|#\s*if\)\)\(\%>1c.*$\)\@=
++ OK 0 - \%>70vGesamt
++ OK 1 - \%>70vGesamt
++ OK 2 - \%>70vGesamt
+  multi-line tests
+  OK 0 - ^.\(.\).\_..\1.
+  OK 1 - ^.\(.\).\_..\1.
+*** ../vim-7.4.581/src/version.c	2015-01-18 14:08:52.699436994 +0100
+--- src/version.c	2015-01-18 16:12:32.682119256 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     582,
+  /**/
+
+-- 
+There's no place like $(HOME)!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.583 b/SOURCES/7.4.583
new file mode 100644
index 0000000..037e77b
--- /dev/null
+++ b/SOURCES/7.4.583
@@ -0,0 +1,46 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.583
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.583
+Problem:    With tiny features test 16 may fail.
+Solution:   Source small.vim. (Christian Brabandt)
+Files:	    src/testdir/test16.in
+
+
+*** ../vim-7.4.582/src/testdir/test16.in	2012-10-11 04:02:11.000000000 +0200
+--- src/testdir/test16.in	2015-01-20 12:01:28.895462263 +0100
+***************
+*** 2,7 ****
+--- 2,8 ----
+  For KDE set a font, empty 'guifont' may cause a hang.
+  
+  STARTTEST
++ :so small.vim
+  :if $DISPLAY == "" | e! test.ok | wq! test.out | endif
+  :set exrc secure
+  :if has("gui_kde")
+*** ../vim-7.4.582/src/version.c	2015-01-18 16:46:28.987828395 +0100
+--- src/version.c	2015-01-20 12:02:13.234978619 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     583,
+  /**/
+
+-- 
+I AM THANKFUL...
+...for the mess to clean after a party because it means I have
+been surrounded by friends.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.584 b/SOURCES/7.4.584
new file mode 100644
index 0000000..3e116e2
--- /dev/null
+++ b/SOURCES/7.4.584
@@ -0,0 +1,56 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.584
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.584
+Problem:    With tiny features test_command_count may fail.
+Solution:   Source small.vim. (Christian Brabandt)
+Files:	    src/testdir/test_command_count.in
+
+
+*** ../vim-7.4.583/src/testdir/test_command_count.in	2015-01-07 16:52:53.506792420 +0100
+--- src/testdir/test_command_count.in	2015-01-20 12:39:27.630490602 +0100
+***************
+*** 1,7 ****
+  Test for user command counts	    vim: set ft=vim :
+  
+  STARTTEST
+! :so tiny.vim
+  :let g:lines = []
+  :com -range=% RangeLines :call add(g:lines, 'RangeLines '.<line1>.' '.<line2>)
+  :com -range -addr=arguments RangeArguments :call add(g:lines, 'RangeArguments '.<line1>.' '.<line2>)
+--- 1,7 ----
+  Test for user command counts	    vim: set ft=vim :
+  
+  STARTTEST
+! :so small.vim
+  :let g:lines = []
+  :com -range=% RangeLines :call add(g:lines, 'RangeLines '.<line1>.' '.<line2>)
+  :com -range -addr=arguments RangeArguments :call add(g:lines, 'RangeArguments '.<line1>.' '.<line2>)
+*** ../vim-7.4.583/src/version.c	2015-01-20 12:13:56.975270382 +0100
+--- src/version.c	2015-01-20 12:36:04.068720526 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     584,
+  /**/
+
+-- 
+The primary purpose of the DATA statement is to give names to constants;
+instead of referring to pi as 3.141592653589793 at every appearance, the
+variable PI can be given that value with a DATA statement and used instead
+of the longer form of the constant.  This also simplifies modifying the
+program, should the value of pi change.
+	-- FORTRAN manual for Xerox Computers
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.585 b/SOURCES/7.4.585
new file mode 100644
index 0000000..d28714c
--- /dev/null
+++ b/SOURCES/7.4.585
@@ -0,0 +1,131 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.585
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.585
+Problem:    Range for :bdelete does not work. (Ronald Schild)
+Solution:   Also allow unloaded buffers.
+Files:	    src/ex_cmds.h, src/testdir/test_command_count.in,
+	    src/testdir/test_command_count.ok
+
+
+*** ../vim-7.4.584/src/ex_cmds.h	2015-01-07 16:52:53.506792420 +0100
+--- src/ex_cmds.h	2015-01-20 13:22:16.778245812 +0100
+***************
+*** 173,179 ****
+  			ADDR_LINES),
+  EX(CMD_bdelete,		"bdelete",	ex_bunload,
+  			BANG|RANGE|NOTADR|BUFNAME|COUNT|EXTRA|TRLBAR,
+! 			ADDR_LOADED_BUFFERS),
+  EX(CMD_behave,		"behave",	ex_behave,
+  			NEEDARG|WORD1|TRLBAR|CMDWIN,
+  			ADDR_LINES),
+--- 173,179 ----
+  			ADDR_LINES),
+  EX(CMD_bdelete,		"bdelete",	ex_bunload,
+  			BANG|RANGE|NOTADR|BUFNAME|COUNT|EXTRA|TRLBAR,
+! 			ADDR_BUFFERS),
+  EX(CMD_behave,		"behave",	ex_behave,
+  			NEEDARG|WORD1|TRLBAR|CMDWIN,
+  			ADDR_LINES),
+*** ../vim-7.4.584/src/testdir/test_command_count.in	2015-01-20 12:39:35.918399822 +0100
+--- src/testdir/test_command_count.in	2015-01-20 13:21:55.510479070 +0100
+***************
+*** 92,102 ****
+  :call append(0, g:lines)
+  :unlet g:lines
+  :w|bd
+- :se hidden
+  :b1
+  ENDTEST
+  
+  STARTTEST
+  :only!
+  :let g:lines = []
+  :%argd
+--- 92,128 ----
+  :call append(0, g:lines)
+  :unlet g:lines
+  :w|bd
+  :b1
+  ENDTEST
+  
+  STARTTEST
++ :let g:lines = []
++ :func BufStatus()
++ :  call add(g:lines, 'aaa: ' . buflisted(g:buf_aaa) . ' bbb: ' . buflisted(g:buf_bbb) . ' ccc: ' . buflisted(g:buf_ccc))
++ :endfunc
++ :se nohidden
++ :e aaa
++ :let buf_aaa = bufnr('%')
++ :e bbb
++ :let buf_bbb = bufnr('%')
++ :e ccc
++ :let buf_ccc = bufnr('%')
++ :b1
++ :call BufStatus()
++ :exe buf_bbb . "," . buf_ccc . "bdelete"
++ :call BufStatus()
++ :exe buf_aaa . "bdelete"
++ :call BufStatus()
++ :e! test.out
++ :call append('$', g:lines)
++ :unlet g:lines
++ :delfunc BufStatus
++ :w|bd
++ :b1
++ ENDTEST
++ 
++ STARTTEST
++ :se hidden
+  :only!
+  :let g:lines = []
+  :%argd
+*** ../vim-7.4.584/src/testdir/test_command_count.ok	2015-01-14 11:24:51.851582151 +0100
+--- src/testdir/test_command_count.ok	2015-01-20 13:16:03.358341733 +0100
+***************
+*** 28,35 ****
+  $+tabe E16: Invalid range
+  0tabm x
+  
+  argdo: c d e
+  windo: 2 3 4
+! bufdo: 2 3 4 5 6 7 8 9 10 12
+  bufdo: 3 4 5 6 7
+  tabdo: 2 3 4
+--- 28,38 ----
+  $+tabe E16: Invalid range
+  0tabm x
+  
++ aaa: 1 bbb: 1 ccc: 1
++ aaa: 1 bbb: 0 ccc: 0
++ aaa: 0 bbb: 0 ccc: 0
+  argdo: c d e
+  windo: 2 3 4
+! bufdo: 2 3 4 5 6 7 8 9 10 15
+  bufdo: 3 4 5 6 7
+  tabdo: 2 3 4
+*** ../vim-7.4.584/src/version.c	2015-01-20 12:39:35.918399822 +0100
+--- src/version.c	2015-01-20 13:27:49.438597595 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     585,
+  /**/
+
+-- 
+I AM THANKFUL...
+...for a lawn that needs mowing, windows that need cleaning
+and gutters that need fixing because it means I have a home.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.586 b/SOURCES/7.4.586
new file mode 100644
index 0000000..3fb001f
--- /dev/null
+++ b/SOURCES/7.4.586
@@ -0,0 +1,45 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.586
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.586
+Problem:    Parallel building of the documentation html files is not reliable. 
+Solution:   Remove a cyclic dependency. (Reiner Herrmann)
+Files:	    runtime/doc/Makefile
+
+
+*** ../vim-7.4.585/runtime/doc/Makefile	2010-07-21 20:38:06.000000000 +0200
+--- runtime/doc/Makefile	2015-01-20 17:24:26.743888063 +0100
+***************
+*** 229,235 ****
+  	starting.html \
+  	syntax.html \
+  	tabpage.html \
+- 	tags.html \
+  	tagsrch.html \
+  	term.html \
+  	tips.html \
+--- 229,234 ----
+*** ../vim-7.4.585/src/version.c	2015-01-20 13:29:46.397315064 +0100
+--- src/version.c	2015-01-20 17:25:55.974918912 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     586,
+  /**/
+
+-- 
+From "know your smileys":
+ |-(	Contact lenses, but has lost them
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.587 b/SOURCES/7.4.587
new file mode 100644
index 0000000..ff97be1
--- /dev/null
+++ b/SOURCES/7.4.587
@@ -0,0 +1,225 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.587
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.587
+Problem:    Conceal does not work properly with 'linebreak'. (cs86661)
+Solution:   Save and restore boguscols. (Christian Brabandt)
+Files:	    src/screen.c, src/testdir/test_listlbr_utf8.in,
+	    src/testdir/test_listlbr_utf8.ok
+
+
+*** ../vim-7.4.586/src/screen.c	2015-01-14 19:35:10.967756099 +0100
+--- src/screen.c	2015-01-20 18:57:39.114986010 +0100
+***************
+*** 3003,3008 ****
+--- 3003,3009 ----
+  					   wrapping */
+      int		vcol_off	= 0;	/* offset for concealed characters */
+      int		did_wcol	= FALSE;
++     int		old_boguscols   = 0;
+  # define VCOL_HLC (vcol - vcol_off)
+  # define FIX_FOR_BOGUSCOLS \
+      { \
+***************
+*** 3010,3015 ****
+--- 3011,3017 ----
+  	vcol -= vcol_off; \
+  	vcol_off = 0; \
+  	col -= boguscols; \
++ 	old_boguscols = boguscols; \
+  	boguscols = 0; \
+      }
+  #else
+***************
+*** 4545,4554 ****
+  			int	saved_nextra = n_extra;
+  
+  #ifdef FEAT_CONCEAL
+! 			if (is_concealing && vcol_off > 0)
+  			    /* there are characters to conceal */
+  			    tab_len += vcol_off;
+  #endif
+  			/* if n_extra > 0, it gives the number of chars, to
+  			 * use for a tab, else we need to calculate the width
+  			 * for a tab */
+--- 4547,4562 ----
+  			int	saved_nextra = n_extra;
+  
+  #ifdef FEAT_CONCEAL
+! 			if ((is_concealing || boguscols > 0) && vcol_off > 0)
+  			    /* there are characters to conceal */
+  			    tab_len += vcol_off;
++ 			/* boguscols before FIX_FOR_BOGUSCOLS macro from above
++ 			 */
++ 			if (wp->w_p_list && lcs_tab1 && old_boguscols > 0
++ 							 && n_extra > tab_len)
++ 			    tab_len += n_extra - tab_len;
+  #endif
++ 
+  			/* if n_extra > 0, it gives the number of chars, to
+  			 * use for a tab, else we need to calculate the width
+  			 * for a tab */
+***************
+*** 4577,4583 ****
+  #ifdef FEAT_CONCEAL
+  			/* n_extra will be increased by FIX_FOX_BOGUSCOLS
+  			 * macro below, so need to adjust for that here */
+! 			if (is_concealing && vcol_off > 0)
+  			    n_extra -= vcol_off;
+  #endif
+  		    }
+--- 4585,4591 ----
+  #ifdef FEAT_CONCEAL
+  			/* n_extra will be increased by FIX_FOX_BOGUSCOLS
+  			 * macro below, so need to adjust for that here */
+! 			if ((is_concealing || boguscols > 0) && vcol_off > 0)
+  			    n_extra -= vcol_off;
+  #endif
+  		    }
+***************
+*** 4590,4595 ****
+--- 4598,4609 ----
+  		     * the tab can be longer than 'tabstop' when there
+  		     * are concealed characters. */
+  		    FIX_FOR_BOGUSCOLS;
++ 		    /* Make sure, the highlighting for the tab char will be
++ 		     * correctly set further below (effectively reverts the
++ 		     * FIX_FOR_BOGSUCOLS macro */
++ 		    if (old_boguscols > 0 && n_extra > tab_len && wp->w_p_list
++ 								  && lcs_tab1)
++ 			tab_len += n_extra - tab_len;
+  #endif
+  #ifdef FEAT_MBYTE
+  		    mb_utf8 = FALSE;	/* don't draw as UTF-8 */
+*** ../vim-7.4.586/src/testdir/test_listlbr_utf8.in	2014-07-30 16:44:17.499534723 +0200
+--- src/testdir/test_listlbr_utf8.in	2015-01-20 18:55:32.060370459 +0100
+***************
+*** 9,17 ****
+  :put =\"\tabcdef hijklmn\tpqrstuvwxyz\u00a01060ABCDEFGHIJKLMNOP \"
+  :norm! zt
+  :set ts=4 sw=4 sts=4 linebreak sbr=+ wrap
+! :fu! ScreenChar(width)
+  :	let c=''
+! :	for j in range(1,4)
+  :	    for i in range(1,a:width)
+  :	    	let c.=nr2char(screenchar(j, i))
+  :	    endfor
+--- 9,17 ----
+  :put =\"\tabcdef hijklmn\tpqrstuvwxyz\u00a01060ABCDEFGHIJKLMNOP \"
+  :norm! zt
+  :set ts=4 sw=4 sts=4 linebreak sbr=+ wrap
+! :fu! ScreenChar(width, lines)
+  :	let c=''
+! :	for j in range(1,a:lines)
+  :	    for i in range(1,a:width)
+  :	    	let c.=nr2char(screenchar(j, i))
+  :	    endfor
+***************
+*** 28,40 ****
+  :let g:test ="Test 1: set linebreak + set list + fancy listchars"
+  :exe "set linebreak list listchars=nbsp:\u2423,tab:\u2595\u2014,trail:\u02d1,eol:\ub6"
+  :redraw!
+! :let line=ScreenChar(winwidth(0))
+  :call DoRecordScreen()
+  :"
+  :let g:test ="Test 2: set nolinebreak list"
+  :set list nolinebreak
+  :redraw!
+! :let line=ScreenChar(winwidth(0))
+  :call DoRecordScreen()
+  :"
+  :let g:test ="Test 3: set linebreak nolist"
+--- 28,40 ----
+  :let g:test ="Test 1: set linebreak + set list + fancy listchars"
+  :exe "set linebreak list listchars=nbsp:\u2423,tab:\u2595\u2014,trail:\u02d1,eol:\ub6"
+  :redraw!
+! :let line=ScreenChar(winwidth(0),4)
+  :call DoRecordScreen()
+  :"
+  :let g:test ="Test 2: set nolinebreak list"
+  :set list nolinebreak
+  :redraw!
+! :let line=ScreenChar(winwidth(0),4)
+  :call DoRecordScreen()
+  :"
+  :let g:test ="Test 3: set linebreak nolist"
+***************
+*** 43,51 ****
+  :norm! zt
+  :set nolist linebreak
+  :redraw!
+! :let line=ScreenChar(winwidth(0))
+  :call DoRecordScreen()
+- :"
+  :%w! test.out
+  :qa!
+  ENDTEST
+--- 43,61 ----
+  :norm! zt
+  :set nolist linebreak
+  :redraw!
+! :let line=ScreenChar(winwidth(0),4)
+! :call DoRecordScreen()
+! :let g:test ="Test 4: set linebreak list listchars and concealing"
+! :let c_defines=['#define ABCDE		1','#define ABCDEF		1','#define ABCDEFG		1','#define ABCDEFGH	1', '#define MSG_MODE_FILE			1','#define MSG_MODE_CONSOLE		2','#define MSG_MODE_FILE_AND_CONSOLE	3','#define MSG_MODE_FILE_THEN_CONSOLE	4']
+! :call append('$', c_defines)
+! :vert resize 40
+! :$-7
+! :norm! zt
+! :set list linebreak listchars=tab:>- cole=1
+! :syn match Conceal conceal cchar=>'AB\|MSG_MODE'
+! :redraw!
+! :let line=ScreenChar(winwidth(0),7)
+  :call DoRecordScreen()
+  :%w! test.out
+  :qa!
+  ENDTEST
+*** ../vim-7.4.586/src/testdir/test_listlbr_utf8.ok	2014-07-30 16:44:17.499534723 +0200
+--- src/testdir/test_listlbr_utf8.ok	2015-01-20 18:55:32.060370459 +0100
+***************
+*** 19,21 ****
+--- 19,38 ----
+  ~                   
+  ~                   
+  ~                   
++ #define ABCDE		1
++ #define ABCDEF		1
++ #define ABCDEFG		1
++ #define ABCDEFGH	1
++ #define MSG_MODE_FILE			1
++ #define MSG_MODE_CONSOLE		2
++ #define MSG_MODE_FILE_AND_CONSOLE	3
++ #define MSG_MODE_FILE_THEN_CONSOLE	4
++ 
++ Test 4: set linebreak list listchars and concealing
++ #define ABCDE>-->---1                   
++ #define >CDEF>-->---1                   
++ #define >CDEFG>->---1                   
++ #define >CDEFGH>----1                   
++ #define >_FILE>--------->--->---1       
++ #define >_CONSOLE>---------->---2       
++ #define >_FILE_AND_CONSOLE>---------3   
+*** ../vim-7.4.586/src/version.c	2015-01-20 17:27:18.154026317 +0100
+--- src/version.c	2015-01-20 19:01:11.448672365 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     587,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+93. New mail alarm on your palmtop annoys other churchgoers.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.588 b/SOURCES/7.4.588
new file mode 100644
index 0000000..10448c8
--- /dev/null
+++ b/SOURCES/7.4.588
@@ -0,0 +1,183 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.588
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.588
+Problem:    ":0argedit foo" puts the new argument in the second place instead
+	    of the first.
+Solution:   Adjust the range type. (Ingo Karkat)
+Files:	    src/ex_cmds.h, src/testdir/Make_amiga.mak,
+	    src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+	    src/testdir/Make_os2.mak, src/testdir/Make_vms.mms,
+	    src/testdir/Makefile, src/testdir/test_argument_0count.in,
+	    src/testdir/test_argument_0count.ok
+
+
+*** ../vim-7.4.587/src/ex_cmds.h	2015-01-20 13:29:46.397315064 +0100
+--- src/ex_cmds.h	2015-01-20 19:23:58.901739397 +0100
+***************
+*** 136,142 ****
+  			BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL,
+  			ADDR_ARGUMENTS),
+  EX(CMD_argedit,		"argedit",	ex_argedit,
+! 			BANG|NEEDARG|RANGE|NOTADR|FILE1|EDITCMD|ARGOPT|TRLBAR,
+  			ADDR_ARGUMENTS),
+  EX(CMD_argglobal,	"argglobal",	ex_args,
+  			BANG|FILES|EDITCMD|ARGOPT|TRLBAR,
+--- 136,142 ----
+  			BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL,
+  			ADDR_ARGUMENTS),
+  EX(CMD_argedit,		"argedit",	ex_argedit,
+! 			BANG|NEEDARG|RANGE|NOTADR|ZEROR|FILE1|EDITCMD|ARGOPT|TRLBAR,
+  			ADDR_ARGUMENTS),
+  EX(CMD_argglobal,	"argglobal",	ex_args,
+  			BANG|FILES|EDITCMD|ARGOPT|TRLBAR,
+*** ../vim-7.4.587/src/testdir/Make_amiga.mak	2014-12-13 21:00:52.059036480 +0100
+--- src/testdir/Make_amiga.mak	2015-01-20 19:22:46.050535656 +0100
+***************
+*** 36,41 ****
+--- 36,42 ----
+  		test94.out test95.out test96.out test97.out test98.out \
+  		test99.out test100.out test101.out test102.out test103.out \
+  		test104.out test105.out test106.out test107.out \
++ 		test_argument_0count.out \
+  		test_argument_count.out \
+  		test_autoformat_join.out \
+  		test_breakindent.out \
+***************
+*** 175,180 ****
+--- 176,182 ----
+  test105.out: test105.in
+  test106.out: test106.in
+  test107.out: test107.in
++ test_argument_0count.out: test_argument_0count.in
+  test_argument_count.out: test_argument_count.in
+  test_autoformat_join.out: test_autoformat_join.in
+  test_breakindent.out: test_breakindent.in
+*** ../vim-7.4.587/src/testdir/Make_dos.mak	2014-12-13 21:00:52.059036480 +0100
+--- src/testdir/Make_dos.mak	2015-01-20 19:22:46.050535656 +0100
+***************
+*** 35,40 ****
+--- 35,41 ----
+  		test94.out test95.out test96.out test98.out test99.out \
+  		test100.out test101.out test102.out test103.out test104.out \
+  		test105.out test106.out  test107.out\
++ 		test_argument_0count.out \
+  		test_argument_count.out \
+  		test_autoformat_join.out \
+  		test_breakindent.out \
+*** ../vim-7.4.587/src/testdir/Make_ming.mak	2014-12-13 21:00:52.059036480 +0100
+--- src/testdir/Make_ming.mak	2015-01-20 19:22:46.050535656 +0100
+***************
+*** 57,62 ****
+--- 57,63 ----
+  		test94.out test95.out test96.out test98.out test99.out \
+  		test100.out test101.out test102.out test103.out test104.out \
+  		test105.out test106.out test107.out \
++ 		test_argument_0count.out \
+  		test_argument_count.out \
+  		test_autoformat_join.out \
+  		test_breakindent.out \
+*** ../vim-7.4.587/src/testdir/Make_os2.mak	2014-12-13 21:00:52.059036480 +0100
+--- src/testdir/Make_os2.mak	2015-01-20 19:22:46.050535656 +0100
+***************
+*** 37,42 ****
+--- 37,43 ----
+  		test94.out test95.out test96.out test98.out test99.out \
+  		test100.out test101.out test102.out test103.out test104.out \
+  		test105.out test106.out test107.out \
++ 		test_argument_0count.out \
+  		test_argument_count.out \
+  		test_autoformat_join.out \
+  		test_breakindent.out \
+*** ../vim-7.4.587/src/testdir/Make_vms.mms	2014-12-13 21:00:52.059036480 +0100
+--- src/testdir/Make_vms.mms	2015-01-20 19:22:46.050535656 +0100
+***************
+*** 96,101 ****
+--- 96,102 ----
+  	 test95.out test96.out test98.out test99.out \
+  	 test100.out test101.out test103.out test104.out \
+  	 test105.out test106.out test107.out \
++ 	 test_argument_0count.out \
+  	 test_argument_count.out \
+  	 test_autoformat_join.out \
+  	 test_breakindent.out \
+*** ../vim-7.4.587/src/testdir/Makefile	2014-12-13 21:00:52.059036480 +0100
+--- src/testdir/Makefile	2015-01-20 19:22:46.050535656 +0100
+***************
+*** 33,38 ****
+--- 33,39 ----
+  		test94.out test95.out test96.out test97.out test98.out \
+  		test99.out test100.out test101.out test102.out test103.out \
+  		test104.out test105.out test106.out test107.out \
++ 		test_argument_0count.out \
+  		test_argument_count.out \
+  		test_autoformat_join.out \
+  		test_breakindent.out \
+*** ../vim-7.4.587/src/testdir/test_argument_0count.in	2015-01-20 19:30:28.969469550 +0100
+--- src/testdir/test_argument_0count.in	2015-01-20 19:22:46.050535656 +0100
+***************
+*** 0 ****
+--- 1,28 ----
++ Tests for :0argadd and :0argedit     vim: set ft=vim :
++ 
++ STARTTEST
++ :so small.vim
++ :let arglists = []
++ :%argd
++ :arga a b c d
++ :2argu
++ :0arga added
++ :call add(arglists, argv())
++ :2argu
++ :arga third
++ :call add(arglists, argv())
++ :%argd
++ :arga a b c d
++ :2argu
++ :0arge edited
++ :call add(arglists, argv())
++ :2argu
++ :arga third
++ :call add(arglists, argv())
++ :e! test.out
++ :call append(0, map(copy(arglists), 'join(v:val, " ")'))
++ :w
++ :qa!
++ ENDTEST
++ 
++ 
+*** ../vim-7.4.587/src/testdir/test_argument_0count.ok	2015-01-20 19:30:28.973469506 +0100
+--- src/testdir/test_argument_0count.ok	2015-01-20 19:22:46.050535656 +0100
+***************
+*** 0 ****
+--- 1,5 ----
++ added a b c d
++ added a third b c d
++ edited a b c d
++ edited a third b c d
++ 
+*** ../vim-7.4.587/src/version.c	2015-01-20 19:01:32.384444246 +0100
+--- src/version.c	2015-01-20 19:21:15.335527208 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     588,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+94. Now admit it... How many of you have made "modem noises" into
+    the phone just to see if it was possible? :-)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.589 b/SOURCES/7.4.589
new file mode 100644
index 0000000..f869902
--- /dev/null
+++ b/SOURCES/7.4.589
@@ -0,0 +1,79 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.589
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.589
+Problem:    In the MS-Windows console Vim can't handle greek characters when
+	    encoding is utf-8.
+Solution:   Escape K_NUL. (Yasuhiro Matsumoto)
+Files:	    src/os_win32.c
+
+
+*** ../vim-7.4.588/src/os_win32.c	2014-11-12 16:10:44.254085193 +0100
+--- src/os_win32.c	2015-01-20 19:36:59.725188180 +0100
+***************
+*** 1814,1831 ****
+  		if (conv)
+  		{
+  		    char_u *p = typeahead + typeaheadlen;
+- 		    char_u *e = typeahead + TYPEAHEADLEN;
+  
+! 		    while (*p && p < e)
+  		    {
+! 			if (*p == K_NUL)
+  			{
+  			    ++p;
+- 			    mch_memmove(p + 1, p, ((size_t)(e - p)) - 1);
+- 			    *p = 3;
+- 			    ++n;
+  			}
+- 			++p;
+  		    }
+  		}
+  
+--- 1814,1835 ----
+  		if (conv)
+  		{
+  		    char_u *p = typeahead + typeaheadlen;
+  
+! 		    if (*p != K_NUL)
+  		    {
+! 			char_u *e = typeahead + TYPEAHEADLEN;
+! 
+! 			while (*p && p < e)
+  			{
++ 			    if (*p == K_NUL)
++ 			    {
++ 				++p;
++ 				mch_memmove(p + 1, p, ((size_t)(e - p)) - 1);
++ 				*p = 3;
++ 				++n;
++ 			    }
+  			    ++p;
+  			}
+  		    }
+  		}
+  
+*** ../vim-7.4.588/src/version.c	2015-01-20 19:30:46.669275579 +0100
+--- src/version.c	2015-01-20 19:35:35.774107846 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     589,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+95. Only communication in your household is through email.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.590 b/SOURCES/7.4.590
new file mode 100644
index 0000000..b8afcf9
--- /dev/null
+++ b/SOURCES/7.4.590
@@ -0,0 +1,51 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.590
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.590
+Problem:    Using ctrl_x_mode as if it contains flags.
+Solution:   Don't use AND with CTRL_X_OMNI. (Hirohito Higashi)
+Files:	    src/edit.c
+
+
+*** ../vim-7.4.589/src/edit.c	2014-11-12 18:59:17.602000656 +0100
+--- src/edit.c	2015-01-20 19:43:45.376745467 +0100
+***************
+*** 3394,3400 ****
+       * allow the word to be deleted, we won't match everything. */
+      if ((int)(p - line) - (int)compl_col < 0
+  	    || ((int)(p - line) - (int)compl_col == 0
+! 		&& (ctrl_x_mode & CTRL_X_OMNI) == 0))
+  	return K_BS;
+  
+      /* Deleted more than what was used to find matches or didn't finish
+--- 3394,3400 ----
+       * allow the word to be deleted, we won't match everything. */
+      if ((int)(p - line) - (int)compl_col < 0
+  	    || ((int)(p - line) - (int)compl_col == 0
+! 		&& ctrl_x_mode != CTRL_X_OMNI))
+  	return K_BS;
+  
+      /* Deleted more than what was used to find matches or didn't finish
+*** ../vim-7.4.589/src/version.c	2015-01-20 19:39:31.655524020 +0100
+--- src/version.c	2015-01-22 22:40:04.297786215 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     590,
+  /**/
+
+-- 
+Laughing helps. It's like jogging on the inside.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.591 b/SOURCES/7.4.591
new file mode 100644
index 0000000..ab6871a
--- /dev/null
+++ b/SOURCES/7.4.591
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.591
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.591 (after 7.4.587)
+Problem:    test_listlbr_utf8 fails when the conceal feature is not available.
+Solution:   Check for the conceal feature. (Kazunobu Kuriyama)
+Files:	    src/testdir/test_listlbr_utf8.in
+
+
+*** ../vim-7.4.590/src/testdir/test_listlbr_utf8.in	2015-01-20 19:01:32.380444290 +0100
+--- src/testdir/test_listlbr_utf8.in	2015-01-22 22:37:43.523361845 +0100
+***************
+*** 2,8 ****
+  
+  STARTTEST
+  :so small.vim
+! :if !exists("+linebreak") | e! test.ok | w! test.out | qa! | endif
+  :so mbyte.vim
+  :if &enc !=? 'utf-8'|:e! test.ok|:w! test.out|qa!|endif
+  :10new|:vsp|:vert resize 20
+--- 2,8 ----
+  
+  STARTTEST
+  :so small.vim
+! :if !exists("+linebreak") || !has("conceal") | e! test.ok | w! test.out | qa! | endif
+  :so mbyte.vim
+  :if &enc !=? 'utf-8'|:e! test.ok|:w! test.out|qa!|endif
+  :10new|:vsp|:vert resize 20
+*** ../vim-7.4.590/src/version.c	2015-01-22 22:40:16.345651420 +0100
+--- src/version.c	2015-01-22 22:41:26.464867079 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     591,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+107. When using your phone you forget that you don't have to use your
+     keyboard.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.592 b/SOURCES/7.4.592
new file mode 100644
index 0000000..39e4cd0
--- /dev/null
+++ b/SOURCES/7.4.592
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.592
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.592
+Problem:    When doing ":e foobar" when already editing "foobar" and 'buftype'
+	    is "nofile" the buffer is cleared. (Xavier de Gaye)
+Solution:   Do no clear the buffer.
+Files:	    src/ex_cmds.c
+
+
+*** ../vim-7.4.591/src/ex_cmds.c	2014-12-13 03:17:07.461046575 +0100
+--- src/ex_cmds.c	2015-01-27 11:21:14.752434647 +0100
+***************
+*** 3529,3534 ****
+--- 3529,3541 ----
+  #endif
+  		check_fname() == FAIL)
+  	    goto theend;
++ 
++ 	/* ":e foobar" when already editing "foobar" will reload the file.
++ 	 * But when 'buftype' is "nofile" there is no file to load, so don't
++ 	 * do anything. */
++ 	if (curbuf->b_p_bt[0] == 'n' && curbuf->b_p_bt[2] == 'f')
++ 	    goto theend;
++ 
+  	oldbuf = (flags & ECMD_OLDBUF);
+      }
+  
+*** ../vim-7.4.591/src/version.c	2015-01-22 22:41:51.864583029 +0100
+--- src/version.c	2015-01-27 11:24:32.466265106 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     592,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+120. You ask a friend, "What's that big shiny thing?" He says, "It's the sun."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.593 b/SOURCES/7.4.593
new file mode 100644
index 0000000..e30ef06
--- /dev/null
+++ b/SOURCES/7.4.593
@@ -0,0 +1,161 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.593
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.593
+Problem:    Crash when searching for "x\{0,90000}". (Dominique Pelle)
+Solution:   Bail out from the NFA engine when the max limit is much higher
+	    than the min limit.
+Files:	    src/regexp_nfa.c, src/regexp.c, src/vim.h
+
+
+*** ../vim-7.4.592/src/regexp_nfa.c	2015-01-18 16:46:28.983828439 +0100
+--- src/regexp_nfa.c	2015-01-27 12:47:42.515592198 +0100
+***************
+*** 244,249 ****
+--- 244,252 ----
+  static char_u e_misplaced[] = N_("E866: (NFA regexp) Misplaced %c");
+  static char_u e_ill_char_class[] = N_("E877: (NFA regexp) Invalid character class: %ld");
+  
++ /* re_flags passed to nfa_regcomp() */
++ static int nfa_re_flags;
++ 
+  /* NFA regexp \ze operator encountered. */
+  static int nfa_has_zend;
+  
+***************
+*** 2011,2020 ****
+  	     *  <atom>*  */
+  	    if (minval == 0 && maxval == MAX_LIMIT)
+  	    {
+! 		if (greedy)
+  		    /* \{}, \{0,} */
+  		    EMIT(NFA_STAR);
+! 		else
+  		    /* \{-}, \{-0,} */
+  		    EMIT(NFA_STAR_NONGREEDY);
+  		break;
+--- 2014,2023 ----
+  	     *  <atom>*  */
+  	    if (minval == 0 && maxval == MAX_LIMIT)
+  	    {
+! 		if (greedy)		/* { { (match the braces) */
+  		    /* \{}, \{0,} */
+  		    EMIT(NFA_STAR);
+! 		else			/* { { (match the braces) */
+  		    /* \{-}, \{-0,} */
+  		    EMIT(NFA_STAR_NONGREEDY);
+  		break;
+***************
+*** 2030,2035 ****
+--- 2033,2044 ----
+  		return OK;
+  	    }
+  
++ 	    /* The engine is very inefficient (uses too many states) when the
++ 	     * maximum is much larger than the minimum.  Bail out if we can
++ 	     * use the other engine. */
++ 	    if ((nfa_re_flags & RE_AUTO) && maxval > minval + 200)
++ 		return FAIL;
++ 
+  	    /* Ignore previous call to nfa_regatom() */
+  	    post_ptr = post_start + my_post_start;
+  	    /* Save parse state after the repeated atom and the \{} */
+***************
+*** 7046,7051 ****
+--- 7055,7061 ----
+  	return NULL;
+  
+      nfa_regengine.expr = expr;
++     nfa_re_flags = re_flags;
+  
+      init_class_tab();
+  
+*** ../vim-7.4.592/src/regexp.c	2014-11-20 23:07:00.515474686 +0100
+--- src/regexp.c	2015-01-27 12:49:02.170719494 +0100
+***************
+*** 8081,8087 ****
+       * First try the NFA engine, unless backtracking was requested.
+       */
+      if (regexp_engine != BACKTRACKING_ENGINE)
+!         prog = nfa_regengine.regcomp(expr, re_flags);
+      else
+  	prog = bt_regengine.regcomp(expr, re_flags);
+  
+--- 8081,8088 ----
+       * First try the NFA engine, unless backtracking was requested.
+       */
+      if (regexp_engine != BACKTRACKING_ENGINE)
+!         prog = nfa_regengine.regcomp(expr,
+! 		re_flags + (regexp_engine == AUTOMATIC_ENGINE ? RE_AUTO : 0));
+      else
+  	prog = bt_regengine.regcomp(expr, re_flags);
+  
+***************
+*** 8105,8120 ****
+  #endif
+  	/*
+  	 * If the NFA engine failed, try the backtracking engine.
+! 	 * Disabled for now, both engines fail on the same patterns.
+! 	 * Re-enable when regcomp() fails when the pattern would work better
+! 	 * with the other engine.
+! 	 *
+  	if (regexp_engine == AUTOMATIC_ENGINE)
+  	{
+  	    prog = bt_regengine.regcomp(expr, re_flags);
+- 	    regexp_engine == BACKTRACKING_ENGINE;
+  	}
+- 	 */
+      }
+  
+      if (prog != NULL)
+--- 8106,8119 ----
+  #endif
+  	/*
+  	 * If the NFA engine failed, try the backtracking engine.
+! 	 * The NFA engine also fails for patterns that it can't handle well
+! 	 * but are still valid patterns, thus a retry should work.
+! 	 */
+  	if (regexp_engine == AUTOMATIC_ENGINE)
+  	{
++ 	    regexp_engine = BACKTRACKING_ENGINE;
+  	    prog = bt_regengine.regcomp(expr, re_flags);
+  	}
+      }
+  
+      if (prog != NULL)
+*** ../vim-7.4.592/src/vim.h	2014-12-08 04:16:26.269702835 +0100
+--- src/vim.h	2015-01-27 12:41:57.483371986 +0100
+***************
+*** 1020,1025 ****
+--- 1020,1026 ----
+  #define RE_MAGIC	1	/* 'magic' option */
+  #define RE_STRING	2	/* match in string instead of buffer text */
+  #define RE_STRICT	4	/* don't allow [abc] without ] */
++ #define RE_AUTO		8	/* automatic engine selection */
+  
+  #ifdef FEAT_SYN_HL
+  /* values for reg_do_extmatch */
+*** ../vim-7.4.592/src/version.c	2015-01-27 11:26:11.041183653 +0100
+--- src/version.c	2015-01-27 12:52:44.720281369 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     593,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+121. You ask for e-mail adresses instead of telephone numbers.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.594 b/SOURCES/7.4.594
new file mode 100644
index 0000000..65bab4c
--- /dev/null
+++ b/SOURCES/7.4.594
@@ -0,0 +1,105 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.594
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.594
+Problem:    Using a block delete while 'breakindent' is set does not work
+	    properly.
+Solution:   Use "line" instead of "prev_pend" as the first argument to
+	    lbr_chartabsize_adv().  (Hirohito Higashi)
+Files:	    src/ops.c, src/testdir/test_breakindent.in,
+	    src/testdir/test_breakindent.ok
+
+
+*** ../vim-7.4.593/src/ops.c	2015-01-18 14:08:52.699436994 +0100
+--- src/ops.c	2015-01-27 13:07:11.518790582 +0100
+***************
+*** 5308,5317 ****
+  	    {
+  		/* Count a tab for what it's worth (if list mode not on) */
+  		prev_pend = pend;
+! 		/* TODO: is passing prev_pend for start of the line OK?
+! 		 * perhaps it should be "line". */
+! 		incr = lbr_chartabsize_adv(prev_pend, &pend,
+! 						      (colnr_T)bdp->end_vcol);
+  		bdp->end_vcol += incr;
+  	    }
+  	    if (bdp->end_vcol <= oap->end_vcol
+--- 5308,5314 ----
+  	    {
+  		/* Count a tab for what it's worth (if list mode not on) */
+  		prev_pend = pend;
+! 		incr = lbr_chartabsize_adv(line, &pend, (colnr_T)bdp->end_vcol);
+  		bdp->end_vcol += incr;
+  	    }
+  	    if (bdp->end_vcol <= oap->end_vcol
+*** ../vim-7.4.593/src/testdir/test_breakindent.in	2014-11-27 14:09:09.490354943 +0100
+--- src/testdir/test_breakindent.in	2015-01-27 13:06:51.067014258 +0100
+***************
+*** 99,104 ****
+--- 99,121 ----
+  :$put =line1
+  :$put =line2
+  :"
++ :let g:test="Test 14: breakindent + visual blockwise delete #1"
++ :set all& breakindent
++ :30vnew
++ :normal! 3a1234567890
++ :normal! a    abcde
++ :exec "normal! 0\<C-V>tex"
++ :let line1=ScreenChar(line('.'),8)
++ :call DoRecordScreen()
++ :"
++ :let g:test="Test 15: breakindent + visual blockwise delete #2"
++ :%d
++ :normal! 4a1234567890
++ :exec "normal! >>\<C-V>3f0x"
++ :let line1=ScreenChar(line('.'),20)
++ :call DoRecordScreen()
++ :quit!
++ :"
+  :%w! test.out
+  :qa!
+  ENDTEST
+*** ../vim-7.4.593/src/testdir/test_breakindent.ok	2014-11-27 14:09:09.490354943 +0100
+--- src/testdir/test_breakindent.ok	2015-01-27 13:06:51.067014258 +0100
+***************
+*** 62,64 ****
+--- 62,74 ----
+  Test 13: breakindent with wrapping Tab
+  d
+  w
++ 
++ Test 14: breakindent + visual blockwise delete #1
++ e       
++ ~       
++ ~       
++ 
++ Test 15: breakindent + visual blockwise delete #2
++         1234567890  
++ ~                   
++ ~                   
+*** ../vim-7.4.593/src/version.c	2015-01-27 12:59:51.859602392 +0100
+--- src/version.c	2015-01-27 13:10:18.260748209 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     594,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+122. You ask if the Netaholics Anonymous t-shirt you ordered can be
+     sent to you via e-mail.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.595 b/SOURCES/7.4.595
new file mode 100644
index 0000000..39fc057
--- /dev/null
+++ b/SOURCES/7.4.595
@@ -0,0 +1,45 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.595
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.595
+Problem:    The test_command_count test fails when using Japanese.
+Solution:   Force the language to C. (Hirohito Higashi)
+Files:	    src/testdir/test_command_count.in
+
+
+*** ../vim-7.4.594/src/testdir/test_command_count.in	2015-01-20 13:29:46.397315064 +0100
+--- src/testdir/test_command_count.in	2015-01-27 13:27:02.409765684 +0100
+***************
+*** 2,7 ****
+--- 2,8 ----
+  
+  STARTTEST
+  :so small.vim
++ :lang C
+  :let g:lines = []
+  :com -range=% RangeLines :call add(g:lines, 'RangeLines '.<line1>.' '.<line2>)
+  :com -range -addr=arguments RangeArguments :call add(g:lines, 'RangeArguments '.<line1>.' '.<line2>)
+*** ../vim-7.4.594/src/version.c	2015-01-27 13:22:17.176885347 +0100
+--- src/version.c	2015-01-27 13:26:28.846132779 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     595,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+124. You begin conversations with, "Who is your internet service provider?"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.596 b/SOURCES/7.4.596
new file mode 100644
index 0000000..e7def0b
--- /dev/null
+++ b/SOURCES/7.4.596
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.596
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.596 (after 7.4.592)
+Problem:    Tiny build doesn't compile.  (Ike Devolder)
+Solution:   Add #ifdef.
+Files:	    src/ex_cmds.c
+
+
+*** ../vim-7.4.595/src/ex_cmds.c	2015-01-27 11:26:11.041183653 +0100
+--- src/ex_cmds.c	2015-01-27 13:31:22.542920506 +0100
+***************
+*** 3530,3540 ****
+--- 3530,3542 ----
+  		check_fname() == FAIL)
+  	    goto theend;
+  
++ #ifdef FEAT_QUICKFIX
+  	/* ":e foobar" when already editing "foobar" will reload the file.
+  	 * But when 'buftype' is "nofile" there is no file to load, so don't
+  	 * do anything. */
+  	if (curbuf->b_p_bt[0] == 'n' && curbuf->b_p_bt[2] == 'f')
+  	    goto theend;
++ #endif
+  
+  	oldbuf = (flags & ECMD_OLDBUF);
+      }
+*** ../vim-7.4.595/src/version.c	2015-01-27 13:28:42.472671261 +0100
+--- src/version.c	2015-01-27 13:32:15.966336190 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     596,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+125. You begin to wonder how often it REALLY is necessary to get up
+     and shower or bathe.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.597 b/SOURCES/7.4.597
new file mode 100644
index 0000000..096aa53
--- /dev/null
+++ b/SOURCES/7.4.597
@@ -0,0 +1,58 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.597
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.597
+Problem:    Cannot change the result of systemlist().
+Solution:   Initialize v_lock. (Yukihiro Nakadaira)
+Files:	    src/eval.c
+
+
+*** ../vim-7.4.596/src/eval.c	2015-01-14 19:00:33.842522901 +0100
+--- src/eval.c	2015-01-27 13:49:22.123112397 +0100
+***************
+*** 6007,6012 ****
+--- 6007,6013 ----
+  
+  /*
+   * Allocate a list item.
++  * It is not initialized, don't forget to set v_lock.
+   */
+      listitem_T *
+  listitem_alloc()
+***************
+*** 18713,18718 ****
+--- 18714,18720 ----
+  		goto errret;
+  	    }
+  	    li->li_tv.v_type = VAR_STRING;
++ 	    li->li_tv.v_lock = 0;
+  	    li->li_tv.vval.v_string = s;
+  	    list_append(list, li);
+  	}
+*** ../vim-7.4.596/src/version.c	2015-01-27 13:33:18.737649629 +0100
+--- src/version.c	2015-01-27 13:48:25.883727538 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     597,
+  /**/
+
+-- 
+"Microsoft is like Coke.  It's a secret formula, all the money is from
+distribution, and their goal is to get Coke everywhere.  Open source is like
+selling water.  There are water companies like Perrier and Poland Spring, but
+you're competing with something that's free."   -- Carl Howe
+
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.599 b/SOURCES/7.4.599
new file mode 100644
index 0000000..bf9e341
--- /dev/null
+++ b/SOURCES/7.4.599
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.599
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.599
+Problem:    Out-of-memory error.
+Solution:   Avoid trying to allocate a negative amount of memory, use size_t
+	    instead of int. (Dominique Pelle)
+Files:	    src/regexp_nfa.c
+
+
+*** ../vim-7.4.598/src/regexp_nfa.c	2015-01-27 12:59:51.855602435 +0100
+--- src/regexp_nfa.c	2015-01-27 14:33:25.798181195 +0100
+***************
+*** 5408,5414 ****
+      regsubs_T		*m;
+  {
+      int		result;
+!     int		size = 0;
+      int		flag = 0;
+      int		go_to_nextline = FALSE;
+      nfa_thread_T *t;
+--- 5408,5414 ----
+      regsubs_T		*m;
+  {
+      int		result;
+!     size_t	size = 0;
+      int		flag = 0;
+      int		go_to_nextline = FALSE;
+      nfa_thread_T *t;
+*** ../vim-7.4.598/src/version.c	2015-01-27 14:09:29.625898193 +0100
+--- src/version.c	2015-01-27 14:29:06.733017025 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     599,
+  /**/
+
+-- 
+You cannot have a baby in one month by getting nine women pregnant.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.600 b/SOURCES/7.4.600
new file mode 100644
index 0000000..96da451
--- /dev/null
+++ b/SOURCES/7.4.600
@@ -0,0 +1,546 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.600
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.600
+Problem:    Memory wasted in struct because of aligning.
+Solution:   Split pos in lnum and col. (Dominique Pelle)
+Files:	    src/regexp_nfa.c
+
+
+*** ../vim-7.4.599/src/regexp_nfa.c	2015-01-27 14:39:55.661913204 +0100
+--- src/regexp_nfa.c	2015-01-27 14:43:04.323847916 +0100
+***************
+*** 1456,1462 ****
+  			 * matched an unlimited number of times. NFA_NOPEN is
+  			 * added only once at a position, while NFA_SPLIT is
+  			 * added multiple times.  This is more efficient than
+! 			 * not allowsing NFA_SPLIT multiple times, it is used
+  			 * a lot. */
+  			EMIT(NFA_NOPEN);
+  			break;
+--- 1456,1462 ----
+  			 * matched an unlimited number of times. NFA_NOPEN is
+  			 * added only once at a position, while NFA_SPLIT is
+  			 * added multiple times.  This is more efficient than
+! 			 * not allowing NFA_SPLIT multiple times, it is used
+  			 * a lot. */
+  			EMIT(NFA_NOPEN);
+  			break;
+***************
+*** 3726,3733 ****
+      {
+  	struct multipos
+  	{
+! 	    lpos_T	start;
+! 	    lpos_T	end;
+  	} multi[NSUBEXP];
+  	struct linepos
+  	{
+--- 3726,3735 ----
+      {
+  	struct multipos
+  	{
+! 	    linenr_T	start_lnum;
+! 	    linenr_T	end_lnum;
+! 	    colnr_T	start_col;
+! 	    colnr_T	end_col;
+  	} multi[NSUBEXP];
+  	struct linepos
+  	{
+***************
+*** 3812,3821 ****
+  	if (REG_MULTI)
+  	    fprintf(log_fd, "*** group %d, start: c=%d, l=%d, end: c=%d, l=%d\n",
+  		    j,
+! 		    sub->list.multi[j].start.col,
+! 		    (int)sub->list.multi[j].start.lnum,
+! 		    sub->list.multi[j].end.col,
+! 		    (int)sub->list.multi[j].end.lnum);
+  	else
+  	{
+  	    char *s = (char *)sub->list.line[j].start;
+--- 3814,3823 ----
+  	if (REG_MULTI)
+  	    fprintf(log_fd, "*** group %d, start: c=%d, l=%d, end: c=%d, l=%d\n",
+  		    j,
+! 		    sub->list.multi[j].start_col,
+! 		    (int)sub->list.multi[j].start_lnum,
+! 		    sub->list.multi[j].end_col,
+! 		    (int)sub->list.multi[j].end_lnum);
+  	else
+  	{
+  	    char *s = (char *)sub->list.line[j].start;
+***************
+*** 3952,3959 ****
+      {
+  	if (REG_MULTI)
+  	{
+! 	    if (from->list.multi[0].end.lnum >= 0)
+! 		to->list.multi[0].end = from->list.multi[0].end;
+  	}
+  	else
+  	{
+--- 3954,3964 ----
+      {
+  	if (REG_MULTI)
+  	{
+! 	    if (from->list.multi[0].end_lnum >= 0)
+!             {
+! 		to->list.multi[0].end_lnum = from->list.multi[0].end_lnum;
+! 		to->list.multi[0].end_col = from->list.multi[0].end_col;
+!             }
+  	}
+  	else
+  	{
+***************
+*** 3985,4017 ****
+  	for (i = 0; i < todo; ++i)
+  	{
+  	    if (i < sub1->in_use)
+! 		s1 = sub1->list.multi[i].start.lnum;
+  	    else
+  		s1 = -1;
+  	    if (i < sub2->in_use)
+! 		s2 = sub2->list.multi[i].start.lnum;
+  	    else
+  		s2 = -1;
+  	    if (s1 != s2)
+  		return FALSE;
+! 	    if (s1 != -1 && sub1->list.multi[i].start.col
+! 					     != sub2->list.multi[i].start.col)
+  		return FALSE;
+  
+  	    if (nfa_has_backref)
+  	    {
+  		if (i < sub1->in_use)
+! 		    s1 = sub1->list.multi[i].end.lnum;
+  		else
+  		    s1 = -1;
+  		if (i < sub2->in_use)
+! 		    s2 = sub2->list.multi[i].end.lnum;
+  		else
+  		    s2 = -1;
+  		if (s1 != s2)
+  		    return FALSE;
+! 		if (s1 != -1 && sub1->list.multi[i].end.col
+! 					       != sub2->list.multi[i].end.col)
+  		return FALSE;
+  	    }
+  	}
+--- 3990,4022 ----
+  	for (i = 0; i < todo; ++i)
+  	{
+  	    if (i < sub1->in_use)
+! 		s1 = sub1->list.multi[i].start_lnum;
+  	    else
+  		s1 = -1;
+  	    if (i < sub2->in_use)
+! 		s2 = sub2->list.multi[i].start_lnum;
+  	    else
+  		s2 = -1;
+  	    if (s1 != s2)
+  		return FALSE;
+! 	    if (s1 != -1 && sub1->list.multi[i].start_col
+! 					     != sub2->list.multi[i].start_col)
+  		return FALSE;
+  
+  	    if (nfa_has_backref)
+  	    {
+  		if (i < sub1->in_use)
+! 		    s1 = sub1->list.multi[i].end_lnum;
+  		else
+  		    s1 = -1;
+  		if (i < sub2->in_use)
+! 		    s2 = sub2->list.multi[i].end_lnum;
+  		else
+  		    s2 = -1;
+  		if (s1 != s2)
+  		    return FALSE;
+! 		if (s1 != -1 && sub1->list.multi[i].end_col
+! 					       != sub2->list.multi[i].end_col)
+  		return FALSE;
+  	    }
+  	}
+***************
+*** 4062,4068 ****
+      if (sub->in_use <= 0)
+  	col = -1;
+      else if (REG_MULTI)
+! 	col = sub->list.multi[0].start.col;
+      else
+  	col = (int)(sub->list.line[0].start - regline);
+      nfa_set_code(state->c);
+--- 4067,4073 ----
+      if (sub->in_use <= 0)
+  	col = -1;
+      else if (REG_MULTI)
+! 	col = sub->list.multi[0].start_col;
+      else
+  	col = (int)(sub->list.line[0].start - regline);
+      nfa_set_code(state->c);
+***************
+*** 4482,4488 ****
+  	    {
+  		if (subidx < sub->in_use)
+  		{
+! 		    save_lpos = sub->list.multi[subidx].start;
+  		    save_in_use = -1;
+  		}
+  		else
+--- 4487,4494 ----
+  	    {
+  		if (subidx < sub->in_use)
+  		{
+! 		    save_lpos.lnum = sub->list.multi[subidx].start_lnum;
+! 		    save_lpos.col = sub->list.multi[subidx].start_col;
+  		    save_in_use = -1;
+  		}
+  		else
+***************
+*** 4490,4509 ****
+  		    save_in_use = sub->in_use;
+  		    for (i = sub->in_use; i < subidx; ++i)
+  		    {
+! 			sub->list.multi[i].start.lnum = -1;
+! 			sub->list.multi[i].end.lnum = -1;
+  		    }
+  		    sub->in_use = subidx + 1;
+  		}
+  		if (off == -1)
+  		{
+! 		    sub->list.multi[subidx].start.lnum = reglnum + 1;
+! 		    sub->list.multi[subidx].start.col = 0;
+  		}
+  		else
+  		{
+! 		    sub->list.multi[subidx].start.lnum = reglnum;
+! 		    sub->list.multi[subidx].start.col =
+  					  (colnr_T)(reginput - regline + off);
+  		}
+  	    }
+--- 4496,4515 ----
+  		    save_in_use = sub->in_use;
+  		    for (i = sub->in_use; i < subidx; ++i)
+  		    {
+! 			sub->list.multi[i].start_lnum = -1;
+! 			sub->list.multi[i].end_lnum = -1;
+  		    }
+  		    sub->in_use = subidx + 1;
+  		}
+  		if (off == -1)
+  		{
+! 		    sub->list.multi[subidx].start_lnum = reglnum + 1;
+! 		    sub->list.multi[subidx].start_col = 0;
+  		}
+  		else
+  		{
+! 		    sub->list.multi[subidx].start_lnum = reglnum;
+! 		    sub->list.multi[subidx].start_col =
+  					  (colnr_T)(reginput - regline + off);
+  		}
+  	    }
+***************
+*** 4539,4545 ****
+  	    if (save_in_use == -1)
+  	    {
+  		if (REG_MULTI)
+! 		    sub->list.multi[subidx].start = save_lpos;
+  		else
+  		    sub->list.line[subidx].start = save_ptr;
+  	    }
+--- 4545,4554 ----
+  	    if (save_in_use == -1)
+  	    {
+  		if (REG_MULTI)
+!                 {
+! 		    sub->list.multi[subidx].start_lnum = save_lpos.lnum;
+! 		    sub->list.multi[subidx].start_col = save_lpos.col;
+!                 }
+  		else
+  		    sub->list.line[subidx].start = save_ptr;
+  	    }
+***************
+*** 4549,4555 ****
+  
+  	case NFA_MCLOSE:
+  	    if (nfa_has_zend && (REG_MULTI
+! 			? subs->norm.list.multi[0].end.lnum >= 0
+  			: subs->norm.list.line[0].end != NULL))
+  	    {
+  		/* Do not overwrite the position set by \ze. */
+--- 4558,4564 ----
+  
+  	case NFA_MCLOSE:
+  	    if (nfa_has_zend && (REG_MULTI
+! 			? subs->norm.list.multi[0].end_lnum >= 0
+  			: subs->norm.list.line[0].end != NULL))
+  	    {
+  		/* Do not overwrite the position set by \ze. */
+***************
+*** 4603,4618 ****
+  		sub->in_use = subidx + 1;
+  	    if (REG_MULTI)
+  	    {
+! 		save_lpos = sub->list.multi[subidx].end;
+  		if (off == -1)
+  		{
+! 		    sub->list.multi[subidx].end.lnum = reglnum + 1;
+! 		    sub->list.multi[subidx].end.col = 0;
+  		}
+  		else
+  		{
+! 		    sub->list.multi[subidx].end.lnum = reglnum;
+! 		    sub->list.multi[subidx].end.col =
+  					  (colnr_T)(reginput - regline + off);
+  		}
+  		/* avoid compiler warnings */
+--- 4612,4628 ----
+  		sub->in_use = subidx + 1;
+  	    if (REG_MULTI)
+  	    {
+! 		save_lpos.lnum = sub->list.multi[subidx].end_lnum;
+! 		save_lpos.col = sub->list.multi[subidx].end_col;
+  		if (off == -1)
+  		{
+! 		    sub->list.multi[subidx].end_lnum = reglnum + 1;
+! 		    sub->list.multi[subidx].end_col = 0;
+  		}
+  		else
+  		{
+! 		    sub->list.multi[subidx].end_lnum = reglnum;
+! 		    sub->list.multi[subidx].end_col =
+  					  (colnr_T)(reginput - regline + off);
+  		}
+  		/* avoid compiler warnings */
+***************
+*** 4637,4643 ****
+  		sub = &subs->norm;
+  
+  	    if (REG_MULTI)
+! 		sub->list.multi[subidx].end = save_lpos;
+  	    else
+  		sub->list.line[subidx].end = save_ptr;
+  	    sub->in_use = save_in_use;
+--- 4647,4656 ----
+  		sub = &subs->norm;
+  
+  	    if (REG_MULTI)
+!             {
+! 		sub->list.multi[subidx].end_lnum = save_lpos.lnum;
+! 		sub->list.multi[subidx].end_col = save_lpos.col;
+!             }
+  	    else
+  		sub->list.line[subidx].end = save_ptr;
+  	    sub->in_use = save_in_use;
+***************
+*** 4825,4839 ****
+  
+      if (REG_MULTI)
+      {
+! 	if (sub->list.multi[subidx].start.lnum < 0
+! 				       || sub->list.multi[subidx].end.lnum < 0)
+  	    goto retempty;
+! 	if (sub->list.multi[subidx].start.lnum == reglnum
+! 			       && sub->list.multi[subidx].end.lnum == reglnum)
+  	{
+! 	    len = sub->list.multi[subidx].end.col
+! 					  - sub->list.multi[subidx].start.col;
+! 	    if (cstrncmp(regline + sub->list.multi[subidx].start.col,
+  							 reginput, &len) == 0)
+  	    {
+  		*bytelen = len;
+--- 4838,4852 ----
+  
+      if (REG_MULTI)
+      {
+! 	if (sub->list.multi[subidx].start_lnum < 0
+! 				       || sub->list.multi[subidx].end_lnum < 0)
+  	    goto retempty;
+! 	if (sub->list.multi[subidx].start_lnum == reglnum
+! 			       && sub->list.multi[subidx].end_lnum == reglnum)
+  	{
+! 	    len = sub->list.multi[subidx].end_col
+! 					  - sub->list.multi[subidx].start_col;
+! 	    if (cstrncmp(regline + sub->list.multi[subidx].start_col,
+  							 reginput, &len) == 0)
+  	    {
+  		*bytelen = len;
+***************
+*** 4843,4852 ****
+  	else
+  	{
+  	    if (match_with_backref(
+! 			sub->list.multi[subidx].start.lnum,
+! 			sub->list.multi[subidx].start.col,
+! 			sub->list.multi[subidx].end.lnum,
+! 			sub->list.multi[subidx].end.col,
+  			bytelen) == RA_MATCH)
+  		return TRUE;
+  	}
+--- 4856,4865 ----
+  	else
+  	{
+  	    if (match_with_backref(
+! 			sub->list.multi[subidx].start_lnum,
+! 			sub->list.multi[subidx].start_col,
+! 			sub->list.multi[subidx].end_lnum,
+! 			sub->list.multi[subidx].end_col,
+  			bytelen) == RA_MATCH)
+  		return TRUE;
+  	}
+***************
+*** 5441,5446 ****
+--- 5454,5460 ----
+  
+      /* Allocate memory for the lists of nodes. */
+      size = (nstate + 1) * sizeof(nfa_thread_T);
++ 
+      list[0].t = (nfa_thread_T *)lalloc(size, TRUE);
+      list[0].len = nstate + 1;
+      list[1].t = (nfa_thread_T *)lalloc(size, TRUE);
+***************
+*** 5482,5489 ****
+      {
+  	if (REG_MULTI)
+  	{
+! 	    m->norm.list.multi[0].start.lnum = reglnum;
+! 	    m->norm.list.multi[0].start.col = (colnr_T)(reginput - regline);
+  	}
+  	else
+  	    m->norm.list.line[0].start = reginput;
+--- 5496,5503 ----
+      {
+  	if (REG_MULTI)
+  	{
+! 	    m->norm.list.multi[0].start_lnum = reglnum;
+! 	    m->norm.list.multi[0].start_col = (colnr_T)(reginput - regline);
+  	}
+  	else
+  	    m->norm.list.line[0].start = reginput;
+***************
+*** 5580,5586 ****
+  		if (t->subs.norm.in_use <= 0)
+  		    col = -1;
+  		else if (REG_MULTI)
+! 		    col = t->subs.norm.list.multi[0].start.col;
+  		else
+  		    col = (int)(t->subs.norm.list.line[0].start - regline);
+  		nfa_set_code(t->state->c);
+--- 5594,5600 ----
+  		if (t->subs.norm.in_use <= 0)
+  		    col = -1;
+  		else if (REG_MULTI)
+! 		    col = t->subs.norm.list.multi[0].start_col;
+  		else
+  		    col = (int)(t->subs.norm.list.line[0].start - regline);
+  		nfa_set_code(t->state->c);
+***************
+*** 5861,5867 ****
+  		     * continue with what follows. */
+  		    if (REG_MULTI)
+  			/* TODO: multi-line match */
+! 			bytelen = m->norm.list.multi[0].end.col
+  						  - (int)(reginput - regline);
+  		    else
+  			bytelen = (int)(m->norm.list.line[0].end - reginput);
+--- 5875,5881 ----
+  		     * continue with what follows. */
+  		    if (REG_MULTI)
+  			/* TODO: multi-line match */
+! 			bytelen = m->norm.list.multi[0].end_col
+  						  - (int)(reginput - regline);
+  		    else
+  			bytelen = (int)(m->norm.list.line[0].end - reginput);
+***************
+*** 6741,6747 ****
+  		if (add)
+  		{
+  		    if (REG_MULTI)
+! 			m->norm.list.multi[0].start.col =
+  					 (colnr_T)(reginput - regline) + clen;
+  		    else
+  			m->norm.list.line[0].start = reginput + clen;
+--- 6755,6761 ----
+  		if (add)
+  		{
+  		    if (REG_MULTI)
+! 			m->norm.list.multi[0].start_col =
+  					 (colnr_T)(reginput - regline) + clen;
+  		    else
+  			m->norm.list.line[0].start = reginput + clen;
+***************
+*** 6854,6861 ****
+      {
+  	for (i = 0; i < subs.norm.in_use; i++)
+  	{
+! 	    reg_startpos[i] = subs.norm.list.multi[i].start;
+! 	    reg_endpos[i] = subs.norm.list.multi[i].end;
+  	}
+  
+  	if (reg_startpos[0].lnum < 0)
+--- 6868,6878 ----
+      {
+  	for (i = 0; i < subs.norm.in_use; i++)
+  	{
+! 	    reg_startpos[i].lnum = subs.norm.list.multi[i].start_lnum;
+! 	    reg_startpos[i].col = subs.norm.list.multi[i].start_col;
+! 
+! 	    reg_endpos[i].lnum = subs.norm.list.multi[i].end_lnum;
+! 	    reg_endpos[i].col = subs.norm.list.multi[i].end_col;
+  	}
+  
+  	if (reg_startpos[0].lnum < 0)
+***************
+*** 6903,6915 ****
+  		struct multipos *mpos = &subs.synt.list.multi[i];
+  
+  		/* Only accept single line matches that are valid. */
+! 		if (mpos->start.lnum >= 0
+! 			&& mpos->start.lnum == mpos->end.lnum
+! 			&& mpos->end.col >= mpos->start.col)
+  		    re_extmatch_out->matches[i] =
+! 			vim_strnsave(reg_getline(mpos->start.lnum)
+! 							    + mpos->start.col,
+! 					     mpos->end.col - mpos->start.col);
+  	    }
+  	    else
+  	    {
+--- 6920,6932 ----
+  		struct multipos *mpos = &subs.synt.list.multi[i];
+  
+  		/* Only accept single line matches that are valid. */
+! 		if (mpos->start_lnum >= 0
+! 			&& mpos->start_lnum == mpos->end_lnum
+! 			&& mpos->end_col >= mpos->start_col)
+  		    re_extmatch_out->matches[i] =
+! 			vim_strnsave(reg_getline(mpos->start_lnum)
+! 							    + mpos->start_col,
+! 					     mpos->end_col - mpos->start_col);
+  	    }
+  	    else
+  	    {
+*** ../vim-7.4.599/src/version.c	2015-01-27 14:39:55.661913204 +0100
+--- src/version.c	2015-01-27 14:44:06.739164665 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     600,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+126. You brag to all of your friends about your date Saturday night...but
+     you don't tell them it was only in a chat room.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.601 b/SOURCES/7.4.601
new file mode 100644
index 0000000..950222e
--- /dev/null
+++ b/SOURCES/7.4.601
@@ -0,0 +1,108 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.601
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.601
+Problem:    It is not possible to have feedkeys() insert characters.
+Solution:   Add the 'i' flag.
+Files:	    src/eval.c, runtime/doc/eval.txt
+
+
+*** ../vim-7.4.600/src/eval.c	2015-01-27 13:49:27.883049396 +0100
+--- src/eval.c	2015-01-27 15:13:01.928187370 +0100
+***************
+*** 10500,10505 ****
+--- 10500,10506 ----
+      typval_T    *rettv UNUSED;
+  {
+      int		remap = TRUE;
++     int		insert = FALSE;
+      char_u	*keys, *flags;
+      char_u	nbuf[NUMBUFLEN];
+      int		typed = FALSE;
+***************
+*** 10524,10529 ****
+--- 10525,10531 ----
+  		    case 'n': remap = FALSE; break;
+  		    case 'm': remap = TRUE; break;
+  		    case 't': typed = TRUE; break;
++ 		    case 'i': insert = TRUE; break;
+  		}
+  	    }
+  	}
+***************
+*** 10534,10540 ****
+  	if (keys_esc != NULL)
+  	{
+  	    ins_typebuf(keys_esc, (remap ? REMAP_YES : REMAP_NONE),
+! 					       typebuf.tb_len, !typed, FALSE);
+  	    vim_free(keys_esc);
+  	    if (vgetc_busy)
+  		typebuf_was_filled = TRUE;
+--- 10536,10542 ----
+  	if (keys_esc != NULL)
+  	{
+  	    ins_typebuf(keys_esc, (remap ? REMAP_YES : REMAP_NONE),
+! 				  insert ? 0 : typebuf.tb_len, !typed, FALSE);
+  	    vim_free(keys_esc);
+  	    if (vgetc_busy)
+  		typebuf_was_filled = TRUE;
+*** ../vim-7.4.600/runtime/doc/eval.txt	2014-11-27 19:14:45.080940970 +0100
+--- runtime/doc/eval.txt	2015-01-27 15:12:52.908285780 +0100
+***************
+*** 2957,2965 ****
+  
+  feedkeys({string} [, {mode}])				*feedkeys()*
+  		Characters in {string} are queued for processing as if they
+! 		come from a mapping or were typed by the user.	They are added
+! 		to the end of the typeahead buffer, thus if a mapping is still
+! 		being executed these characters come after them.
+  		The function does not wait for processing of keys contained in
+  		{string}.
+  		To include special keys into {string}, use double-quotes
+--- 2965,2976 ----
+  
+  feedkeys({string} [, {mode}])				*feedkeys()*
+  		Characters in {string} are queued for processing as if they
+! 		come from a mapping or were typed by the user.
+! 		By default the string is added to the end of the typeahead
+! 		buffer, thus if a mapping is still being executed the
+! 		characters come after them.  Use the 'i' flag to insert before
+! 		other characters, they will be executed next, before any
+! 		characters from a mapping.
+  		The function does not wait for processing of keys contained in
+  		{string}.
+  		To include special keys into {string}, use double-quotes
+***************
+*** 2973,2978 ****
+--- 2984,2990 ----
+  		't'	Handle keys as if typed; otherwise they are handled as
+  			if coming from a mapping.  This matters for undo,
+  			opening folds, etc.
++ 		'i'	Insert the string instead of appending (see above).
+  		Return value is always 0.
+  
+  filereadable({file})					*filereadable()*
+*** ../vim-7.4.600/src/version.c	2015-01-27 14:54:07.944583588 +0100
+--- src/version.c	2015-01-27 15:15:35.290514092 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     601,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+127. You bring your laptop and cellular phone to church.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.602 b/SOURCES/7.4.602
new file mode 100644
index 0000000..79ec89a
--- /dev/null
+++ b/SOURCES/7.4.602
@@ -0,0 +1,91 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.602
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.602
+Problem:    ":set" does not accept hex numbers as documented.
+Solution:   Use vim_str2nr(). (ZyX)
+Files:	    src/option.c, runtime/doc/options.txt
+
+
+*** ../vim-7.4.601/src/option.c	2014-11-30 13:34:16.885626772 +0100
+--- src/option.c	2015-01-27 15:51:01.455344467 +0100
+***************
+*** 4540,4560 ****
+  				goto skip;
+  			    }
+  			}
+- 				/* allow negative numbers (for 'undolevels') */
+  			else if (*arg == '-' || VIM_ISDIGIT(*arg))
+  			{
+! 			    i = 0;
+! 			    if (*arg == '-')
+! 				i = 1;
+! #ifdef HAVE_STRTOL
+! 			    value = strtol((char *)arg, NULL, 0);
+! 			    if (arg[i] == '0' && TOLOWER_ASC(arg[i + 1]) == 'x')
+! 				i += 2;
+! #else
+! 			    value = atol((char *)arg);
+! #endif
+! 			    while (VIM_ISDIGIT(arg[i]))
+! 				++i;
+  			    if (arg[i] != NUL && !vim_iswhite(arg[i]))
+  			    {
+  				errmsg = e_invarg;
+--- 4540,4550 ----
+  				goto skip;
+  			    }
+  			}
+  			else if (*arg == '-' || VIM_ISDIGIT(*arg))
+  			{
+! 			    /* Allow negative (for 'undolevels'), octal and
+! 			     * hex numbers. */
+! 			    vim_str2nr(arg, NULL, &i, TRUE, TRUE, &value, NULL);
+  			    if (arg[i] != NUL && !vim_iswhite(arg[i]))
+  			    {
+  				errmsg = e_invarg;
+*** ../vim-7.4.601/runtime/doc/options.txt	2014-11-05 17:44:47.676471691 +0100
+--- runtime/doc/options.txt	2015-01-27 15:47:53.873380762 +0100
+***************
+*** 59,67 ****
+  :se[t] {option}:{value}
+  			Set string or number option to {value}.
+  			For numeric options the value can be given in decimal,
+! 			hex (preceded with 0x) or octal (preceded with '0')
+! 			(hex and octal are only available for machines which
+! 			have the strtol() function).
+  			The old value can be inserted by typing 'wildchar' (by
+  			default this is a <Tab> or CTRL-E if 'compatible' is
+  			set).  See |cmdline-completion|.
+--- 59,65 ----
+  :se[t] {option}:{value}
+  			Set string or number option to {value}.
+  			For numeric options the value can be given in decimal,
+!  			hex (preceded with 0x) or octal (preceded with '0').
+  			The old value can be inserted by typing 'wildchar' (by
+  			default this is a <Tab> or CTRL-E if 'compatible' is
+  			set).  See |cmdline-completion|.
+*** ../vim-7.4.601/src/version.c	2015-01-27 15:18:55.156333265 +0100
+--- src/version.c	2015-01-27 15:49:28.840349899 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     602,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+128. You can access the Net -- via your portable and cellular phone.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.603 b/SOURCES/7.4.603
new file mode 100644
index 0000000..b52c8f3
--- /dev/null
+++ b/SOURCES/7.4.603
@@ -0,0 +1,262 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.603
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.603
+Problem:    'foldcolumn' may be set such that it fills the whole window, not
+	    leaving space for text.
+Solution:   Reduce the foldcolumn width when there is not sufficient room.
+	    (idea by Christian Brabandt)
+Files:	    src/srcreen.c
+
+
+*** ../vim-7.4.602/src/screen.c	2015-01-20 19:01:32.380444290 +0100
+--- src/screen.c	2015-01-27 16:25:47.264690419 +0100
+***************
+*** 109,114 ****
+--- 109,115 ----
+  
+  #ifdef FEAT_FOLDING
+  static foldinfo_T win_foldinfo;	/* info for 'foldcolumn' */
++ static int compute_foldcolumn __ARGS((win_T *wp, int col));
+  #endif
+  
+  /*
+***************
+*** 1202,1208 ****
+  			lnumb = wp->w_lines[i].wl_lnum;
+  			/* When there is a fold column it might need updating
+  			 * in the next line ("J" just above an open fold). */
+! 			if (wp->w_p_fdc > 0)
+  			    ++lnumb;
+  		    }
+  		}
+--- 1203,1209 ----
+  			lnumb = wp->w_lines[i].wl_lnum;
+  			/* When there is a fold column it might need updating
+  			 * in the next line ("J" just above an open fold). */
+! 			if (compute_foldcolumn(wp, 0) > 0)
+  			    ++lnumb;
+  		    }
+  		}
+***************
+*** 2238,2250 ****
+  #else
+  # define FDC_OFF 0
+  #endif
+  
+  #ifdef FEAT_RIGHTLEFT
+      if (wp->w_p_rl)
+      {
+  	/* No check for cmdline window: should never be right-left. */
+  # ifdef FEAT_FOLDING
+! 	n = wp->w_p_fdc;
+  
+  	if (n > 0)
+  	{
+--- 2239,2254 ----
+  #else
+  # define FDC_OFF 0
+  #endif
++ #ifdef FEAT_FOLDING
++     int		fdc = compute_foldcolumn(wp, 0);
++ #endif
+  
+  #ifdef FEAT_RIGHTLEFT
+      if (wp->w_p_rl)
+      {
+  	/* No check for cmdline window: should never be right-left. */
+  # ifdef FEAT_FOLDING
+! 	n = fdc;
+  
+  	if (n > 0)
+  	{
+***************
+*** 2293,2301 ****
+  	}
+  #endif
+  #ifdef FEAT_FOLDING
+! 	if (wp->w_p_fdc > 0)
+  	{
+! 	    int	    nn = n + wp->w_p_fdc;
+  
+  	    /* draw the fold column at the left */
+  	    if (nn > W_WIDTH(wp))
+--- 2297,2305 ----
+  	}
+  #endif
+  #ifdef FEAT_FOLDING
+! 	if (fdc > 0)
+  	{
+! 	    int	    nn = n + fdc;
+  
+  	    /* draw the fold column at the left */
+  	    if (nn > W_WIDTH(wp))
+***************
+*** 2346,2351 ****
+--- 2350,2373 ----
+  
+  #ifdef FEAT_FOLDING
+  /*
++  * Compute the width of the foldcolumn.  Based on 'foldcolumn' and how much
++  * space is available for window "wp", minus "col".
++  */
++     static int
++ compute_foldcolumn(wp, col)
++     win_T *wp;
++     int   col;
++ {
++     int fdc = wp->w_p_fdc;
++     int wmw = wp == curwin && p_wmw == 0 ? 1 : p_wmw;
++     int wwidth = W_WIDTH(wp);
++ 
++     if (fdc > wwidth - (col + wmw))
++ 	fdc = wwidth - (col + wmw);
++     return fdc;
++ }
++ 
++ /*
+   * Display one folded line.
+   */
+      static void
+***************
+*** 2396,2405 ****
+  
+      /*
+       * 2. Add the 'foldcolumn'
+       */
+!     fdc = wp->w_p_fdc;
+!     if (fdc > W_WIDTH(wp) - col)
+! 	fdc = W_WIDTH(wp) - col;
+      if (fdc > 0)
+      {
+  	fill_foldcolumn(buf, wp, TRUE, lnum);
+--- 2418,2426 ----
+  
+      /*
+       * 2. Add the 'foldcolumn'
++      *    Reduce the width when there is not enough space.
+       */
+!     fdc = compute_foldcolumn(wp, col);
+      if (fdc > 0)
+      {
+  	fill_foldcolumn(buf, wp, TRUE, lnum);
+***************
+*** 2787,2809 ****
+      int		level;
+      int		first_level;
+      int		empty;
+  
+      /* Init to all spaces. */
+!     copy_spaces(p, (size_t)wp->w_p_fdc);
+  
+      level = win_foldinfo.fi_level;
+      if (level > 0)
+      {
+  	/* If there is only one column put more info in it. */
+! 	empty = (wp->w_p_fdc == 1) ? 0 : 1;
+  
+  	/* If the column is too narrow, we start at the lowest level that
+  	 * fits and use numbers to indicated the depth. */
+! 	first_level = level - wp->w_p_fdc - closed + 1 + empty;
+  	if (first_level < 1)
+  	    first_level = 1;
+  
+! 	for (i = 0; i + empty < wp->w_p_fdc; ++i)
+  	{
+  	    if (win_foldinfo.fi_lnum == lnum
+  			      && first_level + i >= win_foldinfo.fi_low_level)
+--- 2808,2831 ----
+      int		level;
+      int		first_level;
+      int		empty;
++     int		fdc = compute_foldcolumn(wp, 0);
+  
+      /* Init to all spaces. */
+!     copy_spaces(p, (size_t)fdc);
+  
+      level = win_foldinfo.fi_level;
+      if (level > 0)
+      {
+  	/* If there is only one column put more info in it. */
+! 	empty = (fdc == 1) ? 0 : 1;
+  
+  	/* If the column is too narrow, we start at the lowest level that
+  	 * fits and use numbers to indicated the depth. */
+! 	first_level = level - fdc - closed + 1 + empty;
+  	if (first_level < 1)
+  	    first_level = 1;
+  
+! 	for (i = 0; i + empty < fdc; ++i)
+  	{
+  	    if (win_foldinfo.fi_lnum == lnum
+  			      && first_level + i >= win_foldinfo.fi_low_level)
+***************
+*** 2819,2825 ****
+  	}
+      }
+      if (closed)
+! 	p[i >= wp->w_p_fdc ? i - 1 : i] = '+';
+  }
+  #endif /* FEAT_FOLDING */
+  
+--- 2841,2847 ----
+  	}
+      }
+      if (closed)
+! 	p[i >= fdc ? i - 1 : i] = '+';
+  }
+  #endif /* FEAT_FOLDING */
+  
+***************
+*** 3556,3567 ****
+  #ifdef FEAT_FOLDING
+  	    if (draw_state == WL_FOLD - 1 && n_extra == 0)
+  	    {
+  		draw_state = WL_FOLD;
+! 		if (wp->w_p_fdc > 0)
+  		{
+  		    /* Draw the 'foldcolumn'. */
+  		    fill_foldcolumn(extra, wp, FALSE, lnum);
+! 		    n_extra = wp->w_p_fdc;
+  		    p_extra = extra;
+  		    p_extra[n_extra] = NUL;
+  		    c_extra = NUL;
+--- 3578,3591 ----
+  #ifdef FEAT_FOLDING
+  	    if (draw_state == WL_FOLD - 1 && n_extra == 0)
+  	    {
++ 		int fdc = compute_foldcolumn(wp, 0);
++ 
+  		draw_state = WL_FOLD;
+! 		if (fdc > 0)
+  		{
+  		    /* Draw the 'foldcolumn'. */
+  		    fill_foldcolumn(extra, wp, FALSE, lnum);
+! 		    n_extra = fdc;
+  		    p_extra = extra;
+  		    p_extra[n_extra] = NUL;
+  		    c_extra = NUL;
+*** ../vim-7.4.602/src/version.c	2015-01-27 15:58:37.202395482 +0100
+--- src/version.c	2015-01-27 16:14:45.703878550 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     603,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+129. You cancel your newspaper subscription.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.604 b/SOURCES/7.4.604
new file mode 100644
index 0000000..ad8ba50
--- /dev/null
+++ b/SOURCES/7.4.604
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.604
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.604
+Problem:    Running tests changes viminfo.
+Solution:   Disable viminfo.
+Files:	    src/testdir/test_breakindent.in
+
+
+*** ../vim-7.4.603/src/testdir/test_breakindent.in	2015-01-27 13:22:17.176885347 +0100
+--- src/testdir/test_breakindent.in	2015-01-27 17:07:20.549557451 +0100
+***************
+*** 100,106 ****
+  :$put =line2
+  :"
+  :let g:test="Test 14: breakindent + visual blockwise delete #1"
+! :set all& breakindent
+  :30vnew
+  :normal! 3a1234567890
+  :normal! a    abcde
+--- 100,106 ----
+  :$put =line2
+  :"
+  :let g:test="Test 14: breakindent + visual blockwise delete #1"
+! :set all& breakindent viminfo+=nviminfo
+  :30vnew
+  :normal! 3a1234567890
+  :normal! a    abcde
+*** ../vim-7.4.603/src/version.c	2015-01-27 16:39:24.691804113 +0100
+--- src/version.c	2015-01-27 17:11:46.746656291 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     604,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+130. You can't get out of your desk even if it's time to eat or time
+     to go to the bathroom.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.605 b/SOURCES/7.4.605
new file mode 100644
index 0000000..89f472f
--- /dev/null
+++ b/SOURCES/7.4.605
@@ -0,0 +1,267 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.605
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.605
+Problem:    The # register is not writable, it cannot be restored after
+	    jumping around.
+Solution:   Make the # register writable. (Marcin Szamotulski)
+Files:	    runtime/doc/change.txt, src/ops.c, src/buffer.c, src/globals.h
+
+
+*** ../vim-7.4.604/runtime/doc/change.txt	2014-03-25 18:23:27.046087691 +0100
+--- runtime/doc/change.txt	2015-01-27 18:41:27.840005417 +0100
+***************
+*** 1100,1110 ****
+  2. 10 numbered registers "0 to "9
+  3. The small delete register "-
+  4. 26 named registers "a to "z or "A to "Z
+! 5. four read-only registers ":, "., "% and "#
+! 6. the expression register "=
+! 7. The selection and drop registers "*, "+ and "~ 
+! 8. The black hole register "_
+! 9. Last search pattern register "/
+  
+  1. Unnamed register ""				*quote_quote* *quotequote*
+  Vim fills this register with text deleted with the "d", "c", "s", "x" commands
+--- 1103,1114 ----
+  2. 10 numbered registers "0 to "9
+  3. The small delete register "-
+  4. 26 named registers "a to "z or "A to "Z
+! 5. three read-only registers ":, "., "%
+! 7. alternate buffer register "#
+! 7. the expression register "=
+! 8. The selection and drop registers "*, "+ and "~ 
+! 9. The black hole register "_
+! 10. Last search pattern register "/
+  
+  1. Unnamed register ""				*quote_quote* *quotequote*
+  Vim fills this register with text deleted with the "d", "c", "s", "x" commands
+***************
+*** 1131,1136 ****
+--- 1135,1142 ----
+  made for the delete operator with these movement commands: |%|, |(|, |)|, |`|,
+  |/|, |?|, |n|, |N|, |{| and |}|.  Register "1 is always used then (this is Vi
+  compatible).  The "- register is used as well if the delete is within a line.
++ Note that these characters may be mapped.  E.g. |%| is mapped by the matchit
++ plugin.
+     With each successive deletion or change, Vim shifts the previous contents
+  of register 1 into register 2, 2 into 3, and so forth, losing the previous
+  contents of register 9.
+***************
+*** 1148,1154 ****
+  to their previous contents.  When the '>' flag is present in 'cpoptions' then
+  a line break is inserted before the appended text.
+  
+! 5. Read-only registers ":, "., "% and "#
+  These are '%', '#', ':' and '.'.  You can use them only with the "p", "P",
+  and ":put" commands and with CTRL-R.  {not in Vi}
+  						*quote_.* *quote.* *E29*
+--- 1154,1160 ----
+  to their previous contents.  When the '>' flag is present in 'cpoptions' then
+  a line break is inserted before the appended text.
+  
+! 5. Read-only registers ":, ". and "%
+  These are '%', '#', ':' and '.'.  You can use them only with the "p", "P",
+  and ":put" commands and with CTRL-R.  {not in Vi}
+  						*quote_.* *quote.* *E29*
+***************
+*** 1159,1166 ****
+  		('textwidth' and other options affect what is inserted).
+  							*quote_%* *quote%*
+  	"%	Contains the name of the current file.
+- 							*quote_#* *quote#*
+- 	"#	Contains the name of the alternate file.
+  						*quote_:* *quote:* *E30*
+  	":	Contains the most recent executed command-line.  Example: Use
+  		"@:" to repeat the previous command-line command.
+--- 1165,1170 ----
+***************
+*** 1169,1176 ****
+  		the command was completely from a mapping.
+  		{not available when compiled without the |+cmdline_hist|
+  		feature}
+  
+! 6. Expression register "=			*quote_=* *quote=* *@=*
+  This is not really a register that stores text, but is a way to use an
+  expression in commands which use a register.  The expression register is
+  read-only; you cannot put text into it.  After the '=', the cursor moves to
+--- 1173,1195 ----
+  		the command was completely from a mapping.
+  		{not available when compiled without the |+cmdline_hist|
+  		feature}
++ 							*quote_#* *quote#*
++ 6. Alternate file register "#
++ Contains the name of the alternate file for the current window.  It will
++ change how the |CTRL-^| command works.
++ This register is writable, mainly to allow for restoring it after a plugin has
++ changed it.  It accepts buffer number: >
++     let altbuf = bufnr(@#)
++     ...
++     let @# = altbuf
++ It will give error |E86| if you pass buffer number and this buffer does not
++ exist.
++ It can also accept a match with an existing buffer name: >
++     let @# = 'buffer_name'
++ Error |E93| if there is more than one buffer matching the given name or |E94|
++ if none of buffers matches the given name.
+  
+! 7. Expression register "=			*quote_=* *quote=* *@=*
+  This is not really a register that stores text, but is a way to use an
+  expression in commands which use a register.  The expression register is
+  read-only; you cannot put text into it.  After the '=', the cursor moves to
+***************
+*** 1191,1197 ****
+  characters.  If the String ends in a <NL>, it is regarded as a linewise
+  register.  {not in Vi}
+  
+! 7. Selection and drop registers "*, "+ and "~ 
+  Use these registers for storing and retrieving the selected text for the GUI.
+  See |quotestar| and |quoteplus|.  When the clipboard is not available or not
+  working, the unnamed register is used instead.  For Unix systems the clipboard
+--- 1210,1216 ----
+  characters.  If the String ends in a <NL>, it is regarded as a linewise
+  register.  {not in Vi}
+  
+! 8. Selection and drop registers "*, "+ and "~ 
+  Use these registers for storing and retrieving the selected text for the GUI.
+  See |quotestar| and |quoteplus|.  When the clipboard is not available or not
+  working, the unnamed register is used instead.  For Unix systems the clipboard
+***************
+*** 1213,1224 ****
+  Note: The "~ register is only used when dropping plain text onto Vim.
+  Drag'n'drop of URI lists is handled internally.
+  
+! 8. Black hole register "_				*quote_*
+  When writing to this register, nothing happens.  This can be used to delete
+  text without affecting the normal registers.  When reading from this register,
+  nothing is returned.  {not in Vi}
+  
+! 9. Last search pattern register	"/			*quote_/* *quote/*
+  Contains the most recent search-pattern.  This is used for "n" and 'hlsearch'.
+  It is writable with `:let`, you can change it to have 'hlsearch' highlight
+  other matches without actually searching.  You can't yank or delete into this
+--- 1232,1243 ----
+  Note: The "~ register is only used when dropping plain text onto Vim.
+  Drag'n'drop of URI lists is handled internally.
+  
+! 9. Black hole register "_				*quote_*
+  When writing to this register, nothing happens.  This can be used to delete
+  text without affecting the normal registers.  When reading from this register,
+  nothing is returned.  {not in Vi}
+  
+! 10. Last search pattern register	"/			*quote_/* *quote/*
+  Contains the most recent search-pattern.  This is used for "n" and 'hlsearch'.
+  It is writable with `:let`, you can change it to have 'hlsearch' highlight
+  other matches without actually searching.  You can't yank or delete into this
+*** ../vim-7.4.604/src/ops.c	2015-01-27 13:22:17.176885347 +0100
+--- src/ops.c	2015-01-27 18:33:06.813476985 +0100
+***************
+*** 856,866 ****
+      if (       (regname > 0 && ASCII_ISALNUM(regname))
+  	    || (!writing && vim_strchr((char_u *)
+  #ifdef FEAT_EVAL
+! 				    "/.%#:="
+  #else
+! 				    "/.%#:"
+  #endif
+  					, regname) != NULL)
+  	    || regname == '"'
+  	    || regname == '-'
+  	    || regname == '_'
+--- 856,867 ----
+      if (       (regname > 0 && ASCII_ISALNUM(regname))
+  	    || (!writing && vim_strchr((char_u *)
+  #ifdef FEAT_EVAL
+! 				    "/.%:="
+  #else
+! 				    "/.%:"
+  #endif
+  					, regname) != NULL)
++ 	    || regname == '#'
+  	    || regname == '"'
+  	    || regname == '-'
+  	    || regname == '_'
+***************
+*** 6514,6519 ****
+--- 6515,6541 ----
+  	return;
+      }
+  
++     if (name == '#')
++     {
++ 	buf_T	*buf;
++ 
++ 	if (VIM_ISDIGIT(*str))
++ 	{
++ 	    int	num = atoi((char *)str);
++ 
++ 	    buf = buflist_findnr(num);
++ 	    if (buf == NULL)
++ 		EMSGN(_(e_nobufnr), (long)num);
++ 	}
++ 	else
++ 	    buf = buflist_findnr(buflist_findpat(str, str + STRLEN(str),
++ 							 TRUE, FALSE, FALSE));
++ 	if (buf == NULL)
++ 	    return;
++ 	curwin->w_alt_fnum = buf->b_fnum;
++ 	return;
++     }
++ 
+  #ifdef FEAT_EVAL
+      if (name == '=')
+      {
+*** ../vim-7.4.604/src/buffer.c	2015-01-07 13:31:48.886661739 +0100
+--- src/buffer.c	2015-01-27 18:19:29.334392632 +0100
+***************
+*** 1150,1156 ****
+  	{
+  	    /* don't warn when deleting */
+  	    if (!unload)
+! 		EMSGN(_("E86: Buffer %ld does not exist"), count);
+  	}
+  	else if (dir == FORWARD)
+  	    EMSG(_("E87: Cannot go beyond last buffer"));
+--- 1150,1156 ----
+  	{
+  	    /* don't warn when deleting */
+  	    if (!unload)
+! 		EMSGN(_(e_nobufnr), count);
+  	}
+  	else if (dir == FORWARD)
+  	    EMSG(_("E87: Cannot go beyond last buffer"));
+*** ../vim-7.4.604/src/globals.h	2015-01-14 12:44:38.407422077 +0100
+--- src/globals.h	2015-01-27 18:19:24.294447531 +0100
+***************
+*** 1571,1576 ****
+--- 1571,1577 ----
+  EXTERN char_u e_intern2[]	INIT(= N_("E685: Internal error: %s"));
+  EXTERN char_u e_maxmempat[]	INIT(= N_("E363: pattern uses more memory than 'maxmempattern'"));
+  EXTERN char_u e_emptybuf[]	INIT(= N_("E749: empty buffer"));
++ EXTERN char_u e_nobufnr[]	INIT(= N_("E86: Buffer %ld does not exist"));
+  
+  #ifdef FEAT_EX_EXTRA
+  EXTERN char_u e_invalpat[]	INIT(= N_("E682: Invalid search pattern or delimiter"));
+*** ../vim-7.4.604/src/version.c	2015-01-27 17:11:55.690558815 +0100
+--- src/version.c	2015-01-27 17:15:24.132287083 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     605,
+  /**/
+
+-- 
+All true wisdom is found on T-shirts.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.606 b/SOURCES/7.4.606
new file mode 100644
index 0000000..e5315c3
--- /dev/null
+++ b/SOURCES/7.4.606
@@ -0,0 +1,46 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.606
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.606
+Problem:    May crash when using a small window.
+Solution:   Avoid dividing by zero. (Christian Brabandt)
+Files:	    src/normal.c
+
+
+*** ../vim-7.4.605/src/normal.c	2015-01-14 17:52:26.603094340 +0100
+--- src/normal.c	2015-01-27 20:59:18.721057793 +0100
+***************
+*** 4457,4462 ****
+--- 4457,4464 ----
+      col_off2 = col_off1 - curwin_col_off2();
+      width1 = W_WIDTH(curwin) - col_off1;
+      width2 = W_WIDTH(curwin) - col_off2;
++     if (width2 == 0)
++ 	width2 = 1; /* avoid divide by zero */
+  
+  #ifdef FEAT_VERTSPLIT
+      if (curwin->w_width != 0)
+*** ../vim-7.4.605/src/version.c	2015-01-27 18:43:42.138535469 +0100
+--- src/version.c	2015-01-27 20:41:07.697066323 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     606,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+132. You come back and check this list every half-hour.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.607 b/SOURCES/7.4.607
new file mode 100644
index 0000000..357124a
--- /dev/null
+++ b/SOURCES/7.4.607
@@ -0,0 +1,56 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.607
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.607 (after 7.4.598)
+Problem:    Compiler warnings for unused variables.
+Solution:   Move them inside #ifdef. (Kazunobu Kuriyama)
+Files:	    src/ui.c
+
+
+*** ../vim-7.4.606/src/ui.c	2015-01-27 14:09:29.625898193 +0100
+--- src/ui.c	2015-01-27 21:29:44.528861744 +0100
+***************
+*** 73,80 ****
+  static char_u *ta_str = NULL;
+  static int ta_off;	/* offset for next char to use when ta_str != NULL */
+  static int ta_len;	/* length of ta_str when it's not NULL*/
+- static int clipboard_needs_update; /* clipboard needs to be updated */
+- static int global_change_count = 0; /* if set, inside a start_global_changes */
+  
+      void
+  ui_inchar_undo(s, len)
+--- 73,78 ----
+***************
+*** 564,569 ****
+--- 562,569 ----
+   * prevents accessing the clipboard very often which might slow down Vim
+   * considerably.
+   */
++ static int global_change_count = 0; /* if set, inside a start_global_changes */
++ static int clipboard_needs_update; /* clipboard needs to be updated */
+  
+  /*
+   * Save clip_unnamed and reset it.
+*** ../vim-7.4.606/src/version.c	2015-01-27 20:59:26.496971751 +0100
+--- src/version.c	2015-01-27 21:31:22.247780991 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     607,
+  /**/
+
+-- 
+Never eat yellow snow.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.609 b/SOURCES/7.4.609
new file mode 100644
index 0000000..bd96014
--- /dev/null
+++ b/SOURCES/7.4.609
@@ -0,0 +1,782 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.609
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.609
+Problem:    For complicated list and dict use the garbage collector can run
+	    out of stack space.
+Solution:   Use a stack of dicts and lists to be marked, thus making it
+	    iterative instead of recursive. (Ben Fritz)
+Files:	    src/eval.c, src/if_lua.c, src/if_py_both.h, src/if_python.c,
+	    src/if_python3.c, src/proto/eval.pro, src/proto/if_lua.pro,
+	    src/proto/if_python.pro, src/proto/if_python3.pro, src/structs.h
+
+
+*** ../vim-7.4.608/src/eval.c	2015-01-27 15:18:55.152333309 +0100
+--- src/eval.c	2015-02-03 12:41:59.468525906 +0100
+***************
+*** 93,99 ****
+      char_u	*ll_newkey;	/* New key for Dict in alloc. mem or NULL. */
+  } lval_T;
+  
+- 
+  static char *e_letunexp	= N_("E18: Unexpected characters in :let");
+  static char *e_listidx = N_("E684: list index out of range: %ld");
+  static char *e_undefvar = N_("E121: Undefined variable: %s");
+--- 93,98 ----
+***************
+*** 6811,6816 ****
+--- 6810,6816 ----
+  garbage_collect()
+  {
+      int		copyID;
++     int		abort = FALSE;
+      buf_T	*buf;
+      win_T	*wp;
+      int		i;
+***************
+*** 6841,6922 ****
+       * the item is referenced elsewhere the funccal must not be freed. */
+      for (fc = previous_funccal; fc != NULL; fc = fc->caller)
+      {
+! 	set_ref_in_ht(&fc->l_vars.dv_hashtab, copyID + 1);
+! 	set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID + 1);
+      }
+  
+      /* script-local variables */
+      for (i = 1; i <= ga_scripts.ga_len; ++i)
+! 	set_ref_in_ht(&SCRIPT_VARS(i), copyID);
+  
+      /* buffer-local variables */
+      for (buf = firstbuf; buf != NULL; buf = buf->b_next)
+! 	set_ref_in_item(&buf->b_bufvar.di_tv, copyID);
+  
+      /* window-local variables */
+      FOR_ALL_TAB_WINDOWS(tp, wp)
+! 	set_ref_in_item(&wp->w_winvar.di_tv, copyID);
+  #ifdef FEAT_AUTOCMD
+      if (aucmd_win != NULL)
+! 	set_ref_in_item(&aucmd_win->w_winvar.di_tv, copyID);
+  #endif
+  
+  #ifdef FEAT_WINDOWS
+      /* tabpage-local variables */
+      for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
+! 	set_ref_in_item(&tp->tp_winvar.di_tv, copyID);
+  #endif
+  
+      /* global variables */
+!     set_ref_in_ht(&globvarht, copyID);
+  
+      /* function-local variables */
+      for (fc = current_funccal; fc != NULL; fc = fc->caller)
+      {
+! 	set_ref_in_ht(&fc->l_vars.dv_hashtab, copyID);
+! 	set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID);
+      }
+  
+      /* v: vars */
+!     set_ref_in_ht(&vimvarht, copyID);
+  
+  #ifdef FEAT_LUA
+!     set_ref_in_lua(copyID);
+  #endif
+  
+  #ifdef FEAT_PYTHON
+!     set_ref_in_python(copyID);
+  #endif
+  
+  #ifdef FEAT_PYTHON3
+!     set_ref_in_python3(copyID);
+  #endif
+  
+!     /*
+!      * 2. Free lists and dictionaries that are not referenced.
+!      */
+!     did_free = free_unref_items(copyID);
+! 
+!     /*
+!      * 3. Check if any funccal can be freed now.
+!      */
+!     for (pfc = &previous_funccal; *pfc != NULL; )
+      {
+! 	if (can_free_funccal(*pfc, copyID))
+  	{
+! 	    fc = *pfc;
+! 	    *pfc = fc->caller;
+! 	    free_funccal(fc, TRUE);
+! 	    did_free = TRUE;
+! 	    did_free_funccal = TRUE;
+  	}
+! 	else
+! 	    pfc = &(*pfc)->caller;
+      }
+-     if (did_free_funccal)
+- 	/* When a funccal was freed some more items might be garbage
+- 	 * collected, so run again. */
+- 	(void)garbage_collect();
+  
+      return did_free;
+  }
+--- 6841,6935 ----
+       * the item is referenced elsewhere the funccal must not be freed. */
+      for (fc = previous_funccal; fc != NULL; fc = fc->caller)
+      {
+! 	abort = abort || set_ref_in_ht(&fc->l_vars.dv_hashtab, copyID + 1,
+! 									NULL);
+! 	abort = abort || set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID + 1,
+! 									NULL);
+      }
+  
+      /* script-local variables */
+      for (i = 1; i <= ga_scripts.ga_len; ++i)
+! 	abort = abort || set_ref_in_ht(&SCRIPT_VARS(i), copyID, NULL);
+  
+      /* buffer-local variables */
+      for (buf = firstbuf; buf != NULL; buf = buf->b_next)
+! 	abort = abort || set_ref_in_item(&buf->b_bufvar.di_tv, copyID,
+! 								  NULL, NULL);
+  
+      /* window-local variables */
+      FOR_ALL_TAB_WINDOWS(tp, wp)
+! 	abort = abort || set_ref_in_item(&wp->w_winvar.di_tv, copyID,
+! 								  NULL, NULL);
+  #ifdef FEAT_AUTOCMD
+      if (aucmd_win != NULL)
+! 	abort = abort || set_ref_in_item(&aucmd_win->w_winvar.di_tv, copyID,
+! 								  NULL, NULL);
+  #endif
+  
+  #ifdef FEAT_WINDOWS
+      /* tabpage-local variables */
+      for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
+! 	abort = abort || set_ref_in_item(&tp->tp_winvar.di_tv, copyID,
+! 								  NULL, NULL);
+  #endif
+  
+      /* global variables */
+!     abort = abort || set_ref_in_ht(&globvarht, copyID, NULL);
+  
+      /* function-local variables */
+      for (fc = current_funccal; fc != NULL; fc = fc->caller)
+      {
+! 	abort = abort || set_ref_in_ht(&fc->l_vars.dv_hashtab, copyID, NULL);
+! 	abort = abort || set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID, NULL);
+      }
+  
+      /* v: vars */
+!     abort = abort || set_ref_in_ht(&vimvarht, copyID, NULL);
+  
+  #ifdef FEAT_LUA
+!     abort = abort || set_ref_in_lua(copyID);
+  #endif
+  
+  #ifdef FEAT_PYTHON
+!     abort = abort || set_ref_in_python(copyID);
+  #endif
+  
+  #ifdef FEAT_PYTHON3
+!     abort = abort || set_ref_in_python3(copyID);
+  #endif
+  
+!     if (!abort)
+      {
+! 	/*
+! 	 * 2. Free lists and dictionaries that are not referenced.
+! 	 */
+! 	did_free = free_unref_items(copyID);
+! 
+! 	/*
+! 	 * 3. Check if any funccal can be freed now.
+! 	 */
+! 	for (pfc = &previous_funccal; *pfc != NULL; )
+  	{
+! 	    if (can_free_funccal(*pfc, copyID))
+! 	    {
+! 		fc = *pfc;
+! 		*pfc = fc->caller;
+! 		free_funccal(fc, TRUE);
+! 		did_free = TRUE;
+! 		did_free_funccal = TRUE;
+! 	    }
+! 	    else
+! 		pfc = &(*pfc)->caller;
+  	}
+! 	if (did_free_funccal)
+! 	    /* When a funccal was freed some more items might be garbage
+! 	     * collected, so run again. */
+! 	    (void)garbage_collect();
+!     }
+!     else if (p_verbose > 0)
+!     {
+! 	verb_msg((char_u *)_("Not enough memory to set references, garbage collection aborted!"));
+      }
+  
+      return did_free;
+  }
+***************
+*** 6976,7023 ****
+  
+  /*
+   * Mark all lists and dicts referenced through hashtab "ht" with "copyID".
+   */
+!     void
+! set_ref_in_ht(ht, copyID)
+!     hashtab_T	*ht;
+!     int		copyID;
+  {
+      int		todo;
+      hashitem_T	*hi;
+  
+!     todo = (int)ht->ht_used;
+!     for (hi = ht->ht_array; todo > 0; ++hi)
+! 	if (!HASHITEM_EMPTY(hi))
+  	{
+! 	    --todo;
+! 	    set_ref_in_item(&HI2DI(hi)->di_tv, copyID);
+  	}
+  }
+  
+  /*
+   * Mark all lists and dicts referenced through list "l" with "copyID".
+   */
+!     void
+! set_ref_in_list(l, copyID)
+      list_T	*l;
+      int		copyID;
+  {
+!     listitem_T *li;
+  
+!     for (li = l->lv_first; li != NULL; li = li->li_next)
+! 	set_ref_in_item(&li->li_tv, copyID);
+  }
+  
+  /*
+   * Mark all lists and dicts referenced through typval "tv" with "copyID".
+   */
+!     void
+! set_ref_in_item(tv, copyID)
+!     typval_T	*tv;
+!     int		copyID;
+  {
+      dict_T	*dd;
+      list_T	*ll;
+  
+      switch (tv->v_type)
+      {
+--- 6989,7100 ----
+  
+  /*
+   * Mark all lists and dicts referenced through hashtab "ht" with "copyID".
++  * "list_stack" is used to add lists to be marked.  Can be NULL.
++  *
++  * Returns TRUE if setting references failed somehow.
+   */
+!     int
+! set_ref_in_ht(ht, copyID, list_stack)
+!     hashtab_T	    *ht;
+!     int		    copyID;
+!     list_stack_T    **list_stack;
+  {
+      int		todo;
++     int		abort = FALSE;
+      hashitem_T	*hi;
++     hashtab_T	*cur_ht;
++     ht_stack_T	*ht_stack = NULL;
++     ht_stack_T	*tempitem;
+  
+!     cur_ht = ht;
+!     for (;;)
+!     {
+! 	if (!abort)
+  	{
+! 	    /* Mark each item in the hashtab.  If the item contains a hashtab
+! 	     * it is added to ht_stack, if it contains a list it is added to
+! 	     * list_stack. */
+! 	    todo = (int)cur_ht->ht_used;
+! 	    for (hi = cur_ht->ht_array; todo > 0; ++hi)
+! 		if (!HASHITEM_EMPTY(hi))
+! 		{
+! 		    --todo;
+! 		    abort = abort || set_ref_in_item(&HI2DI(hi)->di_tv, copyID,
+! 						       &ht_stack, list_stack);
+! 		}
+  	}
++ 
++ 	if (ht_stack == NULL)
++ 	    break;
++ 
++ 	/* take an item from the stack */
++ 	cur_ht = ht_stack->ht;
++ 	tempitem = ht_stack;
++ 	ht_stack = ht_stack->prev;
++ 	free(tempitem);
++     }
++ 
++     return abort;
+  }
+  
+  /*
+   * Mark all lists and dicts referenced through list "l" with "copyID".
++  * "ht_stack" is used to add hashtabs to be marked.  Can be NULL.
++  *
++  * Returns TRUE if setting references failed somehow.
+   */
+!     int
+! set_ref_in_list(l, copyID, ht_stack)
+      list_T	*l;
+      int		copyID;
++     ht_stack_T	**ht_stack;
+  {
+!     listitem_T	 *li;
+!     int		 abort = FALSE;
+!     list_T	 *cur_l;
+!     list_stack_T *list_stack = NULL;
+!     list_stack_T *tempitem;
+! 
+!     cur_l = l;
+!     for (;;)
+!     {
+! 	if (!abort)
+! 	    /* Mark each item in the list.  If the item contains a hashtab
+! 	     * it is added to ht_stack, if it contains a list it is added to
+! 	     * list_stack. */
+! 	    for (li = cur_l->lv_first; !abort && li != NULL; li = li->li_next)
+! 		abort = abort || set_ref_in_item(&li->li_tv, copyID,
+! 						       ht_stack, &list_stack);
+! 	if (list_stack == NULL)
+! 	    break;
+! 
+! 	/* take an item from the stack */
+! 	cur_l = list_stack->list;
+! 	tempitem = list_stack;
+! 	list_stack = list_stack->prev;
+! 	free(tempitem);
+!     }
+  
+!     return abort;
+  }
+  
+  /*
+   * Mark all lists and dicts referenced through typval "tv" with "copyID".
++  * "list_stack" is used to add lists to be marked.  Can be NULL.
++  * "ht_stack" is used to add hashtabs to be marked.  Can be NULL.
++  *
++  * Returns TRUE if setting references failed somehow.
+   */
+!     int
+! set_ref_in_item(tv, copyID, ht_stack, list_stack)
+!     typval_T	    *tv;
+!     int		    copyID;
+!     ht_stack_T	    **ht_stack;
+!     list_stack_T    **list_stack;
+  {
+      dict_T	*dd;
+      list_T	*ll;
++     int		abort = FALSE;
+  
+      switch (tv->v_type)
+      {
+***************
+*** 7027,7033 ****
+  	    {
+  		/* Didn't see this dict yet. */
+  		dd->dv_copyID = copyID;
+! 		set_ref_in_ht(&dd->dv_hashtab, copyID);
+  	    }
+  	    break;
+  
+--- 7104,7126 ----
+  	    {
+  		/* Didn't see this dict yet. */
+  		dd->dv_copyID = copyID;
+! 		if (ht_stack == NULL)
+! 		{
+! 		    abort = set_ref_in_ht(&dd->dv_hashtab, copyID, list_stack);
+! 		}
+! 		else
+! 		{
+! 		    ht_stack_T *newitem = (ht_stack_T*)malloc(
+! 							  sizeof(ht_stack_T));
+! 		    if (newitem == NULL)
+! 			abort = TRUE;
+! 		    else
+! 		    {
+! 			newitem->ht = &dd->dv_hashtab;
+! 			newitem->prev = *ht_stack;
+! 			*ht_stack = newitem;
+! 		    }
+! 		}
+  	    }
+  	    break;
+  
+***************
+*** 7037,7047 ****
+  	    {
+  		/* Didn't see this list yet. */
+  		ll->lv_copyID = copyID;
+! 		set_ref_in_list(ll, copyID);
+  	    }
+  	    break;
+      }
+!     return;
+  }
+  
+  /*
+--- 7130,7156 ----
+  	    {
+  		/* Didn't see this list yet. */
+  		ll->lv_copyID = copyID;
+! 		if (list_stack == NULL)
+! 		{
+! 		    abort = set_ref_in_list(ll, copyID, ht_stack);
+! 		}
+! 		else
+! 		{
+! 		    list_stack_T *newitem = (list_stack_T*)malloc(
+! 							sizeof(list_stack_T));
+! 		    if (newitem == NULL)
+! 			abort = TRUE;
+! 		    else
+! 		    {
+! 			newitem->list = ll;
+! 			newitem->prev = *list_stack;
+! 			*list_stack = newitem;
+! 		    }
+! 		}
+  	    }
+  	    break;
+      }
+!     return abort;
+  }
+  
+  /*
+*** ../vim-7.4.608/src/if_lua.c	2014-05-07 17:31:32.473182497 +0200
+--- src/if_lua.c	2015-02-03 12:45:41.978204997 +0100
+***************
+*** 1523,1534 ****
+      static int
+  luaV_setref (lua_State *L)
+  {
+!     int copyID = lua_tointeger(L, 1);
+!     typval_T tv;
+      luaV_getfield(L, LUAVIM_LIST);
+      luaV_getfield(L, LUAVIM_DICT);
+      lua_pushnil(L);
+!     while (lua_next(L, lua_upvalueindex(1)) != 0) /* traverse cache table */
+      {
+  	lua_getmetatable(L, -1);
+  	if (lua_rawequal(L, -1, 2)) /* list? */
+--- 1523,1536 ----
+      static int
+  luaV_setref (lua_State *L)
+  {
+!     int		copyID = lua_tointeger(L, 1);
+!     int		abort = FALSE;
+!     typval_T	tv;
+! 
+      luaV_getfield(L, LUAVIM_LIST);
+      luaV_getfield(L, LUAVIM_DICT);
+      lua_pushnil(L);
+!     while (!abort && lua_next(L, lua_upvalueindex(1)) != 0) /* traverse cache table */
+      {
+  	lua_getmetatable(L, -1);
+  	if (lua_rawequal(L, -1, 2)) /* list? */
+***************
+*** 1542,1550 ****
+  	    tv.vval.v_dict = (dict_T *) lua_touserdata(L, 4); /* key */
+  	}
+  	lua_pop(L, 2); /* metatable and value */
+! 	set_ref_in_item(&tv, copyID);
+      }
+!     return 0;
+  }
+  
+      static int
+--- 1544,1552 ----
+  	    tv.vval.v_dict = (dict_T *) lua_touserdata(L, 4); /* key */
+  	}
+  	lua_pop(L, 2); /* metatable and value */
+! 	abort = set_ref_in_item(&tv, copyID, NULL, NULL);
+      }
+!     lua_pushinteger(L, abort);
+  }
+  
+      static int
+***************
+*** 1770,1782 ****
+      lua_call(L, 3, 0);
+  }
+  
+!     void
+  set_ref_in_lua (int copyID)
+  {
+!     if (!lua_isopen()) return;
+!     luaV_getfield(L, LUAVIM_SETREF);
+!     lua_pushinteger(L, copyID);
+!     lua_call(L, 1, 0);
+  }
+  
+  #endif
+--- 1772,1794 ----
+      lua_call(L, 3, 0);
+  }
+  
+!     int
+  set_ref_in_lua (int copyID)
+  {
+!     int aborted = 0;
+! 
+!     if (lua_isopen())
+!     {
+! 	luaV_getfield(L, LUAVIM_SETREF);
+! 	/* call the function with 1 arg, getting 1 result back */
+! 	lua_pushinteger(L, copyID);
+! 	lua_call(L, 1, 1);
+! 	/* get the result */
+! 	aborted = lua_tointeger(L, -1);
+! 	/* pop result off the stack */
+! 	lua_pop(L, 1);
+!     }
+!     return aborted;
+  }
+  
+  #endif
+*** ../vim-7.4.608/src/if_py_both.h	2014-12-17 14:45:56.095854545 +0100
+--- src/if_py_both.h	2015-02-03 12:46:46.629530177 +0100
+***************
+*** 5502,5535 ****
+      PyErr_Clear();
+  }
+  
+!     static void
+  set_ref_in_py(const int copyID)
+  {
+      pylinkedlist_T	*cur;
+      dict_T	*dd;
+      list_T	*ll;
+  
+      if (lastdict != NULL)
+! 	for(cur = lastdict ; cur != NULL ; cur = cur->pll_prev)
+  	{
+  	    dd = ((DictionaryObject *) (cur->pll_obj))->dict;
+  	    if (dd->dv_copyID != copyID)
+  	    {
+  		dd->dv_copyID = copyID;
+! 		set_ref_in_ht(&dd->dv_hashtab, copyID);
+  	    }
+  	}
+  
+      if (lastlist != NULL)
+! 	for(cur = lastlist ; cur != NULL ; cur = cur->pll_prev)
+  	{
+  	    ll = ((ListObject *) (cur->pll_obj))->list;
+  	    if (ll->lv_copyID != copyID)
+  	    {
+  		ll->lv_copyID = copyID;
+! 		set_ref_in_list(ll, copyID);
+  	    }
+  	}
+  }
+  
+      static int
+--- 5502,5542 ----
+      PyErr_Clear();
+  }
+  
+!     static int
+  set_ref_in_py(const int copyID)
+  {
+      pylinkedlist_T	*cur;
+      dict_T	*dd;
+      list_T	*ll;
++     int		abort = FALSE;
+  
+      if (lastdict != NULL)
+!     {
+! 	for(cur = lastdict ; !abort && cur != NULL ; cur = cur->pll_prev)
+  	{
+  	    dd = ((DictionaryObject *) (cur->pll_obj))->dict;
+  	    if (dd->dv_copyID != copyID)
+  	    {
+  		dd->dv_copyID = copyID;
+! 		abort = abort || set_ref_in_ht(&dd->dv_hashtab, copyID, NULL);
+  	    }
+  	}
++     }
+  
+      if (lastlist != NULL)
+!     {
+! 	for(cur = lastlist ; !abort && cur != NULL ; cur = cur->pll_prev)
+  	{
+  	    ll = ((ListObject *) (cur->pll_obj))->list;
+  	    if (ll->lv_copyID != copyID)
+  	    {
+  		ll->lv_copyID = copyID;
+! 		abort = abort || set_ref_in_list(ll, copyID, NULL);
+  	    }
+  	}
++     }
++ 
++     return abort;
+  }
+  
+      static int
+*** ../vim-7.4.608/src/if_python.c	2014-07-23 16:56:56.587876204 +0200
+--- src/if_python.c	2015-02-03 12:05:13.471422753 +0100
+***************
+*** 1567,1574 ****
+  }
+  #endif /* Python 1.4 */
+  
+!     void
+  set_ref_in_python (int copyID)
+  {
+!     set_ref_in_py(copyID);
+  }
+--- 1567,1574 ----
+  }
+  #endif /* Python 1.4 */
+  
+!     int
+  set_ref_in_python (int copyID)
+  {
+!     return set_ref_in_py(copyID);
+  }
+*** ../vim-7.4.608/src/if_python3.c	2014-03-30 16:11:37.180530823 +0200
+--- src/if_python3.c	2015-02-03 12:05:13.471422753 +0100
+***************
+*** 1649,1656 ****
+      }
+  }
+  
+!     void
+  set_ref_in_python3 (int copyID)
+  {
+!     set_ref_in_py(copyID);
+  }
+--- 1649,1656 ----
+      }
+  }
+  
+!     int
+  set_ref_in_python3 (int copyID)
+  {
+!     int set_ref_in_py(copyID);
+  }
+*** ../vim-7.4.608/src/proto/eval.pro	2014-12-17 14:36:10.363090985 +0100
+--- src/proto/eval.pro	2015-02-03 12:47:58.472780049 +0100
+***************
+*** 62,70 ****
+  void list_insert __ARGS((list_T *l, listitem_T *ni, listitem_T *item));
+  void vimlist_remove __ARGS((list_T *l, listitem_T *item, listitem_T *item2));
+  int garbage_collect __ARGS((void));
+! void set_ref_in_ht __ARGS((hashtab_T *ht, int copyID));
+! void set_ref_in_list __ARGS((list_T *l, int copyID));
+! void set_ref_in_item __ARGS((typval_T *tv, int copyID));
+  dict_T *dict_alloc __ARGS((void));
+  void dict_unref __ARGS((dict_T *d));
+  void dict_free __ARGS((dict_T *d, int recurse));
+--- 62,70 ----
+  void list_insert __ARGS((list_T *l, listitem_T *ni, listitem_T *item));
+  void vimlist_remove __ARGS((list_T *l, listitem_T *item, listitem_T *item2));
+  int garbage_collect __ARGS((void));
+! int set_ref_in_ht __ARGS((hashtab_T *ht, int copyID, list_stack_T **list_stack));
+! int set_ref_in_list __ARGS((list_T *l, int copyID, ht_stack_T **ht_stack));
+! int set_ref_in_item __ARGS((typval_T *tv, int copyID, ht_stack_T **ht_stack, list_stack_T **list_stack));
+  dict_T *dict_alloc __ARGS((void));
+  void dict_unref __ARGS((dict_T *d));
+  void dict_free __ARGS((dict_T *d, int recurse));
+*** ../vim-7.4.608/src/proto/if_lua.pro	2012-04-05 16:41:35.000000000 +0200
+--- src/proto/if_lua.pro	2015-02-03 12:05:13.475422711 +0100
+***************
+*** 7,11 ****
+  void lua_buffer_free __ARGS((buf_T *buf));
+  void lua_window_free __ARGS((win_T *win));
+  void do_luaeval __ARGS((char_u *str, typval_T *arg, typval_T *rettv));
+! void set_ref_in_lua __ARGS((int copyID));
+  /* vim: set ft=c : */
+--- 7,11 ----
+  void lua_buffer_free __ARGS((buf_T *buf));
+  void lua_window_free __ARGS((win_T *win));
+  void do_luaeval __ARGS((char_u *str, typval_T *arg, typval_T *rettv));
+! int set_ref_in_lua __ARGS((int copyID));
+  /* vim: set ft=c : */
+*** ../vim-7.4.608/src/proto/if_python.pro	2013-08-10 13:37:15.000000000 +0200
+--- src/proto/if_python.pro	2015-02-03 12:48:02.936733431 +0100
+***************
+*** 9,13 ****
+  void python_window_free __ARGS((win_T *win));
+  void python_tabpage_free __ARGS((tabpage_T *tab));
+  void do_pyeval __ARGS((char_u *str, typval_T *rettv));
+! void set_ref_in_python __ARGS((int copyID));
+  /* vim: set ft=c : */
+--- 9,13 ----
+  void python_window_free __ARGS((win_T *win));
+  void python_tabpage_free __ARGS((tabpage_T *tab));
+  void do_pyeval __ARGS((char_u *str, typval_T *rettv));
+! int set_ref_in_python __ARGS((int copyID));
+  /* vim: set ft=c : */
+*** ../vim-7.4.608/src/proto/if_python3.pro	2013-08-10 13:37:16.000000000 +0200
+--- src/proto/if_python3.pro	2015-02-03 12:48:03.292729714 +0100
+***************
+*** 9,13 ****
+  void python3_window_free __ARGS((win_T *win));
+  void python3_tabpage_free __ARGS((tabpage_T *tab));
+  void do_py3eval __ARGS((char_u *str, typval_T *rettv));
+! void set_ref_in_python3 __ARGS((int copyID));
+  /* vim: set ft=c : */
+--- 9,13 ----
+  void python3_window_free __ARGS((win_T *win));
+  void python3_tabpage_free __ARGS((tabpage_T *tab));
+  void do_py3eval __ARGS((char_u *str, typval_T *rettv));
+! int set_ref_in_python3 __ARGS((int copyID));
+  /* vim: set ft=c : */
+*** ../vim-7.4.608/src/structs.h	2015-01-14 12:44:38.407422077 +0100
+--- src/structs.h	2015-02-03 12:05:13.475422711 +0100
+***************
+*** 1223,1228 ****
+--- 1223,1242 ----
+      dict_T	*dv_used_prev;	/* previous dict in used dicts list */
+  };
+  
++ /* structure used for explicit stack while garbage collecting hash tables */
++ typedef struct ht_stack_S
++ {
++     hashtab_T		*ht;
++     struct ht_stack_S	*prev;
++ } ht_stack_T;
++ 
++ /* structure used for explicit stack while garbage collecting lists */
++ typedef struct list_stack_S
++ {
++     list_T		*list;
++     struct list_stack_S	*prev;
++ } list_stack_T;
++ 
+  /* values for b_syn_spell: what to do with toplevel text */
+  #define SYNSPL_DEFAULT	0	/* spell check if @Spell not defined */
+  #define SYNSPL_TOP	1	/* spell check toplevel text */
+*** ../vim-7.4.608/src/version.c	2015-01-27 22:52:10.713524965 +0100
+--- src/version.c	2015-02-03 12:09:19.324876918 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     609,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+167. You have more than 200 websites bookmarked.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.610 b/SOURCES/7.4.610
new file mode 100644
index 0000000..7609402
--- /dev/null
+++ b/SOURCES/7.4.610
@@ -0,0 +1,89 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.610
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.610
+Problem:    Some function headers may be missing from generated .pro files.
+Solution:   Add PROTO to the #ifdef.
+Files:	    src/option.c, src/syntax.c
+
+
+*** ../vim-7.4.609/src/option.c	2015-01-27 15:58:37.198395525 +0100
+--- src/option.c	2015-02-03 12:57:39.718500650 +0100
+***************
+*** 11212,11218 ****
+      return FALSE;
+  }
+  
+! #ifdef FEAT_LANGMAP
+  /*
+   * Any character has an equivalent 'langmap' character.  This is used for
+   * keyboards that have a special language mode that sends characters above
+--- 11212,11218 ----
+      return FALSE;
+  }
+  
+! #if defined(FEAT_LANGMAP) || defined(PROTO)
+  /*
+   * Any character has an equivalent 'langmap' character.  This is used for
+   * keyboards that have a special language mode that sends characters above
+***************
+*** 11226,11232 ****
+   * langmap_entry_T.  This does the same as langmap_mapchar[] for characters >=
+   * 256.
+   */
+! # ifdef FEAT_MBYTE
+  /*
+   * With multi-byte support use growarray for 'langmap' chars >= 256
+   */
+--- 11226,11232 ----
+   * langmap_entry_T.  This does the same as langmap_mapchar[] for characters >=
+   * 256.
+   */
+! # if defined(FEAT_MBYTE) || defined(PROTO)
+  /*
+   * With multi-byte support use growarray for 'langmap' chars >= 256
+   */
+*** ../vim-7.4.609/src/syntax.c	2014-11-19 19:33:13.369532180 +0100
+--- src/syntax.c	2015-02-03 12:59:13.377443499 +0100
+***************
+*** 6537,6543 ****
+  }
+  #endif
+  
+! #ifdef FEAT_PROFILE
+  /*
+   * ":syntime".
+   */
+--- 6537,6543 ----
+  }
+  #endif
+  
+! #if defined(FEAT_PROFILE) || defined(PROTO)
+  /*
+   * ":syntime".
+   */
+*** ../vim-7.4.609/src/version.c	2015-02-03 12:55:11.140179551 +0100
+--- src/version.c	2015-02-03 12:58:24.829991354 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     610,
+  /**/
+
+-- 
+Microsoft says that MS-Windows is much better for you than Linux.
+That's like the Pope saying that catholicism is much better for
+you than protestantism.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.611 b/SOURCES/7.4.611
new file mode 100644
index 0000000..667d322
--- /dev/null
+++ b/SOURCES/7.4.611
@@ -0,0 +1,48 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.611
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.611 (after 7.4.609)
+Problem:    Syntax error.
+Solution:   Change statement to return.
+Files:	    src/if_python3.c
+
+
+*** ../vim-7.4.610/src/if_python3.c	2015-02-03 12:55:11.140179551 +0100
+--- src/if_python3.c	2015-02-03 13:13:34.407743645 +0100
+***************
+*** 1652,1656 ****
+      int
+  set_ref_in_python3 (int copyID)
+  {
+!     int set_ref_in_py(copyID);
+  }
+--- 1652,1656 ----
+      int
+  set_ref_in_python3 (int copyID)
+  {
+!     return set_ref_in_py(copyID);
+  }
+*** ../vim-7.4.610/src/version.c	2015-02-03 13:00:34.404529640 +0100
+--- src/version.c	2015-02-03 13:14:20.463222408 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     611,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+168. You have your own domain name.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.613 b/SOURCES/7.4.613
new file mode 100644
index 0000000..f6b52e8
--- /dev/null
+++ b/SOURCES/7.4.613
@@ -0,0 +1,236 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.613
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.613
+Problem:    The NFA engine does not implement the 'redrawtime' time limit.
+Solution:   Implement the time limit.
+Files:	    src/regexp_nfa.c
+
+
+*** ../vim-7.4.612/src/regexp_nfa.c	2015-01-27 14:54:07.944583588 +0100
+--- src/regexp_nfa.c	2015-02-03 16:25:58.681726505 +0100
+***************
+*** 311,318 ****
+  static void nfa_save_listids __ARGS((nfa_regprog_T *prog, int *list));
+  static void nfa_restore_listids __ARGS((nfa_regprog_T *prog, int *list));
+  static int nfa_re_num_cmp __ARGS((long_u val, int op, long_u pos));
+! static long nfa_regtry __ARGS((nfa_regprog_T *prog, colnr_T col));
+! static long nfa_regexec_both __ARGS((char_u *line, colnr_T col));
+  static regprog_T *nfa_regcomp __ARGS((char_u *expr, int re_flags));
+  static void nfa_regfree __ARGS((regprog_T *prog));
+  static int  nfa_regexec_nl __ARGS((regmatch_T *rmp, char_u *line, colnr_T col, int line_lbr));
+--- 311,318 ----
+  static void nfa_save_listids __ARGS((nfa_regprog_T *prog, int *list));
+  static void nfa_restore_listids __ARGS((nfa_regprog_T *prog, int *list));
+  static int nfa_re_num_cmp __ARGS((long_u val, int op, long_u pos));
+! static long nfa_regtry __ARGS((nfa_regprog_T *prog, colnr_T col, proftime_T *tm));
+! static long nfa_regexec_both __ARGS((char_u *line, colnr_T col, proftime_T *tm));
+  static regprog_T *nfa_regcomp __ARGS((char_u *expr, int re_flags));
+  static void nfa_regfree __ARGS((regprog_T *prog));
+  static int  nfa_regexec_nl __ARGS((regmatch_T *rmp, char_u *line, colnr_T col, int line_lbr));
+***************
+*** 3850,3855 ****
+--- 3850,3859 ----
+  
+  /* Used during execution: whether a match has been found. */
+  static int nfa_match;
++ #ifdef FEAT_RELTIME
++ static proftime_T  *nfa_time_limit;
++ static int         nfa_time_count;
++ #endif
+  
+  static void copy_pim __ARGS((nfa_pim_T *to, nfa_pim_T *from));
+  static void clear_sub __ARGS((regsub_T *sub));
+***************
+*** 5449,5454 ****
+--- 5453,5462 ----
+      fast_breakcheck();
+      if (got_int)
+  	return FALSE;
++ #ifdef FEAT_RELTIME
++     if (nfa_time_limit != NULL && profile_passed_limit(nfa_time_limit))
++ 	return FALSE;
++ #endif
+  
+      nfa_match = FALSE;
+  
+***************
+*** 6789,6797 ****
+  	    break;
+  
+  	/* Allow interrupting with CTRL-C. */
+! 	fast_breakcheck();
+  	if (got_int)
+  	    break;
+      }
+  
+  #ifdef ENABLE_LOG
+--- 6797,6814 ----
+  	    break;
+  
+  	/* Allow interrupting with CTRL-C. */
+! 	line_breakcheck();
+  	if (got_int)
+  	    break;
++ #ifdef FEAT_RELTIME
++ 	/* Check for timeout once in a twenty times to avoid overhead. */
++ 	if (nfa_time_limit != NULL && ++nfa_time_count == 20)
++ 	{
++ 	    nfa_time_count = 0;
++ 	    if (profile_passed_limit(nfa_time_limit))
++ 		break;
++ 	}
++ #endif
+      }
+  
+  #ifdef ENABLE_LOG
+***************
+*** 6818,6826 ****
+   * Returns <= 0 for failure, number of lines contained in the match otherwise.
+   */
+      static long
+! nfa_regtry(prog, col)
+      nfa_regprog_T   *prog;
+      colnr_T	    col;
+  {
+      int		i;
+      regsubs_T	subs, m;
+--- 6835,6844 ----
+   * Returns <= 0 for failure, number of lines contained in the match otherwise.
+   */
+      static long
+! nfa_regtry(prog, col, tm)
+      nfa_regprog_T   *prog;
+      colnr_T	    col;
++     proftime_T	    *tm;	/* timeout limit or NULL */
+  {
+      int		i;
+      regsubs_T	subs, m;
+***************
+*** 6831,6836 ****
+--- 6849,6858 ----
+  #endif
+  
+      reginput = regline + col;
++ #ifdef FEAT_RELTIME
++     nfa_time_limit = tm;
++     nfa_time_count = 0;
++ #endif
+  
+  #ifdef ENABLE_LOG
+      f = fopen(NFA_REGEXP_RUN_LOG, "a");
+***************
+*** 6951,6959 ****
+   * Returns <= 0 for failure, number of lines contained in the match otherwise.
+   */
+      static long
+! nfa_regexec_both(line, startcol)
+      char_u	*line;
+      colnr_T	startcol;	/* column to start looking for match */
+  {
+      nfa_regprog_T   *prog;
+      long	    retval = 0L;
+--- 6973,6982 ----
+   * Returns <= 0 for failure, number of lines contained in the match otherwise.
+   */
+      static long
+! nfa_regexec_both(line, startcol, tm)
+      char_u	*line;
+      colnr_T	startcol;	/* column to start looking for match */
++     proftime_T	*tm;		/* timeout limit or NULL */
+  {
+      nfa_regprog_T   *prog;
+      long	    retval = 0L;
+***************
+*** 7047,7053 ****
+  	prog->state[i].lastlist[1] = 0;
+      }
+  
+!     retval = nfa_regtry(prog, col);
+  
+      nfa_regengine.expr = NULL;
+  
+--- 7070,7076 ----
+  	prog->state[i].lastlist[1] = 0;
+      }
+  
+!     retval = nfa_regtry(prog, col, tm);
+  
+      nfa_regengine.expr = NULL;
+  
+***************
+*** 7209,7215 ****
+      ireg_icombine = FALSE;
+  #endif
+      ireg_maxcol = 0;
+!     return nfa_regexec_both(line, col);
+  }
+  
+  
+--- 7232,7238 ----
+      ireg_icombine = FALSE;
+  #endif
+      ireg_maxcol = 0;
+!     return nfa_regexec_both(line, col, NULL);
+  }
+  
+  
+***************
+*** 7245,7251 ****
+      buf_T	*buf;		/* buffer in which to search */
+      linenr_T	lnum;		/* nr of line to start looking for match */
+      colnr_T	col;		/* column to start looking for match */
+!     proftime_T	*tm UNUSED;	/* timeout limit or NULL */
+  {
+      reg_match = NULL;
+      reg_mmatch = rmp;
+--- 7268,7274 ----
+      buf_T	*buf;		/* buffer in which to search */
+      linenr_T	lnum;		/* nr of line to start looking for match */
+      colnr_T	col;		/* column to start looking for match */
+!     proftime_T	*tm;		/* timeout limit or NULL */
+  {
+      reg_match = NULL;
+      reg_mmatch = rmp;
+***************
+*** 7260,7266 ****
+  #endif
+      ireg_maxcol = rmp->rmm_maxcol;
+  
+!     return nfa_regexec_both(NULL, col);
+  }
+  
+  #ifdef DEBUG
+--- 7283,7289 ----
+  #endif
+      ireg_maxcol = rmp->rmm_maxcol;
+  
+!     return nfa_regexec_both(NULL, col, tm);
+  }
+  
+  #ifdef DEBUG
+*** ../vim-7.4.612/src/version.c	2015-02-03 16:07:44.193584399 +0100
+--- src/version.c	2015-02-03 16:48:54.770821421 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     613,
+  /**/
+
+-- 
+In Joseph Heller's novel "Catch-22", the main character tries to get out of a
+war by proving he is crazy.  But the mere fact he wants to get out of the war
+only shows he isn't crazy -- creating the original "Catch-22".
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.614 b/SOURCES/7.4.614
new file mode 100644
index 0000000..89b2a96
--- /dev/null
+++ b/SOURCES/7.4.614
@@ -0,0 +1,70 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.614
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.614
+Problem:    There is no test for what patch 7.4.601 fixes.
+Solution:   Add a test. (Christian Brabandt)
+Files:	    src/testdir/test_mapping.in, src/testdir/test_mapping.ok
+
+
+*** ../vim-7.4.613/src/testdir/test_mapping.in	2015-01-14 16:08:29.210474234 +0100
+--- src/testdir/test_mapping.in	2015-02-03 16:52:28.828510717 +0100
+***************
+*** 31,36 ****
+--- 31,41 ----
+  : " expr mapping with langmap
+  :inoremap <expr> { "FAIL_iexplangmap"
+  o+
++ :" issue #212 (feedkeys insert mapping at current position)
++ :nnoremap . :call feedkeys(".", "in")<cr>
++ :/^a b
++ 0qqdw.ifooqj0@q:unmap .
++ 
+  
+  :/^test/,$w! test.out
+  :qa!
+***************
+*** 38,40 ****
+--- 43,48 ----
+  
+  test starts here:
+  
++ a b c d
++ a b c d
++ 
+*** ../vim-7.4.613/src/testdir/test_mapping.ok	2015-01-14 16:08:29.210474234 +0100
+--- src/testdir/test_mapping.ok	2015-02-03 16:52:28.828510717 +0100
+***************
+*** 1,4 ****
+--- 1,7 ----
+  test starts here:
++ 
++ fooc d
++ fooc d
+  vim
+  TEST2: CTRL-C |<ctrl-c>A|
+  
+*** ../vim-7.4.613/src/version.c	2015-02-03 16:49:20.242545503 +0100
+--- src/version.c	2015-02-03 16:52:21.200592637 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     614,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+169. You hire a housekeeper for your home page.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.615 b/SOURCES/7.4.615
new file mode 100644
index 0000000..fffeeb1
--- /dev/null
+++ b/SOURCES/7.4.615
@@ -0,0 +1,164 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.615
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.615
+Problem:    Vim hangs when freeing a lot of objects.
+Solution:   Do not go back to the start of the list every time.  (Yasuhiro
+	    Matsumoto and Ariya Mizutani)
+Files:	    src/eval.c
+
+
+*** ../vim-7.4.614/src/eval.c	2015-02-03 12:55:11.136179596 +0100
+--- src/eval.c	2015-02-03 17:02:59.497727303 +0100
+***************
+*** 5974,5980 ****
+  }
+  
+  /*
+!  * Free a list, including all items it points to.
+   * Ignores the reference count.
+   */
+      void
+--- 5974,5980 ----
+  }
+  
+  /*
+!  * Free a list, including all non-container items it points to.
+   * Ignores the reference count.
+   */
+      void
+***************
+*** 6941,6954 ****
+  free_unref_items(copyID)
+      int copyID;
+  {
+!     dict_T	*dd;
+!     list_T	*ll;
+      int		did_free = FALSE;
+  
+      /*
+       * Go through the list of dicts and free items without the copyID.
+       */
+      for (dd = first_dict; dd != NULL; )
+  	if ((dd->dv_copyID & COPYID_MASK) != (copyID & COPYID_MASK))
+  	{
+  	    /* Free the Dictionary and ordinary items it contains, but don't
+--- 6941,6956 ----
+  free_unref_items(copyID)
+      int copyID;
+  {
+!     dict_T	*dd, *dd_next;
+!     list_T	*ll, *ll_next;
+      int		did_free = FALSE;
+  
+      /*
+       * Go through the list of dicts and free items without the copyID.
+       */
+      for (dd = first_dict; dd != NULL; )
++     {
++ 	dd_next = dd->dv_used_next;
+  	if ((dd->dv_copyID & COPYID_MASK) != (copyID & COPYID_MASK))
+  	{
+  	    /* Free the Dictionary and ordinary items it contains, but don't
+***************
+*** 6956,6967 ****
+  	     * of dicts or list of lists. */
+  	    dict_free(dd, FALSE);
+  	    did_free = TRUE;
+- 
+- 	    /* restart, next dict may also have been freed */
+- 	    dd = first_dict;
+  	}
+! 	else
+! 	    dd = dd->dv_used_next;
+  
+      /*
+       * Go through the list of lists and free items without the copyID.
+--- 6958,6966 ----
+  	     * of dicts or list of lists. */
+  	    dict_free(dd, FALSE);
+  	    did_free = TRUE;
+  	}
+! 	dd = dd_next;
+!     }
+  
+      /*
+       * Go through the list of lists and free items without the copyID.
+***************
+*** 6969,6974 ****
+--- 6968,6975 ----
+       * are not referenced anywhere.
+       */
+      for (ll = first_list; ll != NULL; )
++     {
++ 	ll_next = ll->lv_used_next;
+  	if ((ll->lv_copyID & COPYID_MASK) != (copyID & COPYID_MASK)
+  						      && ll->lv_watch == NULL)
+  	{
+***************
+*** 6977,6989 ****
+  	     * or list of lists. */
+  	    list_free(ll, FALSE);
+  	    did_free = TRUE;
+- 
+- 	    /* restart, next list may also have been freed */
+- 	    ll = first_list;
+  	}
+! 	else
+! 	    ll = ll->lv_used_next;
+! 
+      return did_free;
+  }
+  
+--- 6978,6986 ----
+  	     * or list of lists. */
+  	    list_free(ll, FALSE);
+  	    did_free = TRUE;
+  	}
+! 	ll = ll_next;
+!     }
+      return did_free;
+  }
+  
+***************
+*** 7213,7219 ****
+  }
+  
+  /*
+!  * Free a Dictionary, including all items it contains.
+   * Ignores the reference count.
+   */
+      void
+--- 7210,7216 ----
+  }
+  
+  /*
+!  * Free a Dictionary, including all non-container items it contains.
+   * Ignores the reference count.
+   */
+      void
+*** ../vim-7.4.614/src/version.c	2015-02-03 16:53:47.155669292 +0100
+--- src/version.c	2015-02-03 16:56:07.790157478 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     615,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+170. You introduce your wife as "my_lady@home.wife" and refer to your
+     children as "forked processes."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.617 b/SOURCES/7.4.617
new file mode 100644
index 0000000..ce5da27
--- /dev/null
+++ b/SOURCES/7.4.617
@@ -0,0 +1,101 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.617
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.617
+Problem:    Wrong ":argdo" range does not cause an error.
+Solution:   Reset "cmd" to NULL. (Marcin Szamotulski, Ingo Karkat)
+Files:	    src/ex_docmd.c
+
+
+*** ../vim-7.4.616/src/ex_docmd.c	2015-01-14 21:21:56.920743646 +0100
+--- src/ex_docmd.c	2015-02-03 18:50:19.036177579 +0100
+***************
+*** 4405,4410 ****
+--- 4405,4411 ----
+  		if (addr_type != ADDR_LINES)
+  		{
+  		    EMSG(_(e_invaddr));
++ 		    cmd = NULL;
+  		    goto error;
+  		}
+  		if (skip)
+***************
+*** 4436,4441 ****
+--- 4437,4443 ----
+  		if (addr_type != ADDR_LINES)
+  		{
+  		    EMSG(_(e_invaddr));
++ 		    cmd = NULL;
+  		    goto error;
+  		}
+  		if (skip)	/* skip "/pat/" */
+***************
+*** 4484,4489 ****
+--- 4486,4492 ----
+  		if (addr_type != ADDR_LINES)
+  		{
+  		    EMSG(_(e_invaddr));
++ 		    cmd = NULL;
+  		    goto error;
+  		}
+  		if (*cmd == '&')
+***************
+*** 4575,4581 ****
+  		n = getdigits(&cmd);
+  	    if (addr_type == ADDR_LOADED_BUFFERS
+  		    || addr_type == ADDR_BUFFERS)
+! 		lnum = compute_buffer_local_count(addr_type, lnum, (i == '-') ? -1 * n : n);
+  	    else if (i == '-')
+  		lnum -= n;
+  	    else
+--- 4578,4585 ----
+  		n = getdigits(&cmd);
+  	    if (addr_type == ADDR_LOADED_BUFFERS
+  		    || addr_type == ADDR_BUFFERS)
+! 		lnum = compute_buffer_local_count(
+! 				    addr_type, lnum, (i == '-') ? -1 * n : n);
+  	    else if (i == '-')
+  		lnum -= n;
+  	    else
+***************
+*** 4662,4668 ****
+  		    return (char_u *)_(e_invrange);
+  		break;
+  	    case ADDR_ARGUMENTS:
+! 		if (eap->line2 > ARGCOUNT + (!ARGCOUNT))    // add 1 if ARCOUNT is 0
+  		    return (char_u *)_(e_invrange);
+  		break;
+  	    case ADDR_BUFFERS:
+--- 4666,4673 ----
+  		    return (char_u *)_(e_invrange);
+  		break;
+  	    case ADDR_ARGUMENTS:
+! 		/* add 1 if ARGCOUNT is 0 */
+! 		if (eap->line2 > ARGCOUNT + (!ARGCOUNT))
+  		    return (char_u *)_(e_invrange);
+  		break;
+  	    case ADDR_BUFFERS:
+*** ../vim-7.4.616/src/version.c	2015-02-03 18:36:40.401033677 +0100
+--- src/version.c	2015-02-03 18:51:44.571251706 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     617,
+  /**/
+
+-- 
+Living in Hollywood is like living in a bowl of granola.  What ain't
+fruits and nuts is flakes.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.618 b/SOURCES/7.4.618
new file mode 100644
index 0000000..5731568
--- /dev/null
+++ b/SOURCES/7.4.618
@@ -0,0 +1,45 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.619
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.618 (after 7.4.609)
+Problem:    luaV_setref() is missing a return statement. (Ozaki Kiichi)
+Solution:   Put the return statement back.
+Files:	    src/if_lua.c
+
+
+*** ../vim-7.4.617/src/if_lua.c	2015-02-03 12:55:11.136179596 +0100
+--- src/if_lua.c	2015-02-03 23:07:59.892636921 +0100
+***************
+*** 1547,1552 ****
+--- 1547,1553 ----
+  	abort = set_ref_in_item(&tv, copyID, NULL, NULL);
+      }
+      lua_pushinteger(L, abort);
++     return 0;
+  }
+  
+      static int
+*** ../vim-7.4.617/src/version.c	2015-02-03 19:10:45.978888772 +0100
+--- src/version.c	2015-02-03 23:09:15.267493945 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     618,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+174. You know what a listserv is.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.619 b/SOURCES/7.4.619
new file mode 100644
index 0000000..b315609
--- /dev/null
+++ b/SOURCES/7.4.619
@@ -0,0 +1,69 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.619
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.619 (after 7.4.618)
+Problem:    luaV_setref() not returning the correct value.
+Solution:   Return one.
+Files:	    src/if_lua.c
+
+
+*** ../vim-7.4.618/src/if_lua.c	2015-02-03 23:10:41.574348921 +0100
+--- src/if_lua.c	2015-02-04 22:01:19.649852981 +0100
+***************
+*** 1517,1523 ****
+  	return 0;
+      }
+      luaV_totypval(L, -1, rettv);
+!     return 0;
+  }
+  
+      static int
+--- 1517,1523 ----
+  	return 0;
+      }
+      luaV_totypval(L, -1, rettv);
+!     return 1;
+  }
+  
+      static int
+***************
+*** 1530,1536 ****
+      luaV_getfield(L, LUAVIM_LIST);
+      luaV_getfield(L, LUAVIM_DICT);
+      lua_pushnil(L);
+!     while (!abort && lua_next(L, lua_upvalueindex(1)) != 0) /* traverse cache table */
+      {
+  	lua_getmetatable(L, -1);
+  	if (lua_rawequal(L, -1, 2)) /* list? */
+--- 1530,1537 ----
+      luaV_getfield(L, LUAVIM_LIST);
+      luaV_getfield(L, LUAVIM_DICT);
+      lua_pushnil(L);
+!     /* traverse cache table */
+!     while (!abort && lua_next(L, lua_upvalueindex(1)) != 0)
+      {
+  	lua_getmetatable(L, -1);
+  	if (lua_rawequal(L, -1, 2)) /* list? */
+*** ../vim-7.4.618/src/version.c	2015-02-03 23:10:41.574348921 +0100
+--- src/version.c	2015-02-04 22:02:02.317286761 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     619,
+  /**/
+
+-- 
+I'm so disorganized my keyboard isn't even in alphabetical order!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.620 b/SOURCES/7.4.620
new file mode 100644
index 0000000..23f1df7
--- /dev/null
+++ b/SOURCES/7.4.620
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.620
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.620
+Problem:    Compiler warning for unitinialized variable. (Tony Mechelynck)
+Solution:   Initialize "did_free". (Ben Fritz)
+Files:	    src/eval.c
+
+
+*** ../vim-7.4.619/src/eval.c	2015-02-03 17:10:02.149172883 +0100
+--- src/eval.c	2015-02-04 22:28:33.244066584 +0100
+***************
+*** 6815,6821 ****
+      win_T	*wp;
+      int		i;
+      funccall_T	*fc, **pfc;
+!     int		did_free;
+      int		did_free_funccal = FALSE;
+  #ifdef FEAT_WINDOWS
+      tabpage_T	*tp;
+--- 6815,6821 ----
+      win_T	*wp;
+      int		i;
+      funccall_T	*fc, **pfc;
+!     int		did_free = FALSE;
+      int		did_free_funccal = FALSE;
+  #ifdef FEAT_WINDOWS
+      tabpage_T	*tp;
+*** ../vim-7.4.619/src/version.c	2015-02-04 22:02:33.184877183 +0100
+--- src/version.c	2015-02-04 23:06:08.637946730 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     620,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+177. You log off of your system because it's time to go to work.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.621 b/SOURCES/7.4.621
new file mode 100644
index 0000000..4415521
--- /dev/null
+++ b/SOURCES/7.4.621
@@ -0,0 +1,69 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.621
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.621 (after 7.4.619)
+Problem:    Returning 1 in the wrong function. (Raymond Ko)
+Solution:   Return 1 in the right function (hopefully).
+Files:	    src/if_lua.c
+
+
+*** ../vim-7.4.620/src/if_lua.c	2015-02-04 22:02:33.184877183 +0100
+--- src/if_lua.c	2015-02-04 23:01:52.189364426 +0100
+***************
+*** 1517,1523 ****
+  	return 0;
+      }
+      luaV_totypval(L, -1, rettv);
+!     return 1;
+  }
+  
+      static int
+--- 1517,1523 ----
+  	return 0;
+      }
+      luaV_totypval(L, -1, rettv);
+!     return 0;
+  }
+  
+      static int
+***************
+*** 1548,1554 ****
+  	abort = set_ref_in_item(&tv, copyID, NULL, NULL);
+      }
+      lua_pushinteger(L, abort);
+!     return 0;
+  }
+  
+      static int
+--- 1548,1554 ----
+  	abort = set_ref_in_item(&tv, copyID, NULL, NULL);
+      }
+      lua_pushinteger(L, abort);
+!     return 1;
+  }
+  
+      static int
+*** ../vim-7.4.620/src/version.c	2015-02-04 23:06:39.453536117 +0100
+--- src/version.c	2015-02-04 23:07:28.484882812 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     621,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+178. You look for an icon to double-click to open your bedroom window.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.622 b/SOURCES/7.4.622
new file mode 100644
index 0000000..db99935
--- /dev/null
+++ b/SOURCES/7.4.622
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.622
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.622
+Problem:    Compiler warning for unused argument.
+Solution:   Add UNUSED.
+Files:	    src/regexp_nfa.c
+
+
+*** ../vim-7.4.621/src/regexp_nfa.c	2015-02-03 16:49:20.242545503 +0100
+--- src/regexp_nfa.c	2015-02-05 20:28:28.268349950 +0100
+***************
+*** 6838,6844 ****
+  nfa_regtry(prog, col, tm)
+      nfa_regprog_T   *prog;
+      colnr_T	    col;
+!     proftime_T	    *tm;	/* timeout limit or NULL */
+  {
+      int		i;
+      regsubs_T	subs, m;
+--- 6838,6844 ----
+  nfa_regtry(prog, col, tm)
+      nfa_regprog_T   *prog;
+      colnr_T	    col;
+!     proftime_T	    *tm UNUSED;	/* timeout limit or NULL */
+  {
+      int		i;
+      regsubs_T	subs, m;
+*** ../vim-7.4.621/src/version.c	2015-02-04 23:07:55.932517109 +0100
+--- src/version.c	2015-02-05 20:29:00.379932874 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     622,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+181. You make up words that go with the "happy tune" your modem makes
+     while dialing your ISP.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.623 b/SOURCES/7.4.623
new file mode 100644
index 0000000..269202e
--- /dev/null
+++ b/SOURCES/7.4.623
@@ -0,0 +1,78 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.623
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.623
+Problem:    Crash with pattern: \(\)\{80000}  (Dominique Pelle)
+Solution:   When the max limit is large fall back to the old engine.
+Files:	    src/regexp_nfa.c
+
+
+*** ../vim-7.4.622/src/regexp_nfa.c	2015-02-05 20:29:55.071222529 +0100
+--- src/regexp_nfa.c	2015-02-10 18:09:53.878896813 +0100
+***************
+*** 2034,2042 ****
+  	    }
+  
+  	    /* The engine is very inefficient (uses too many states) when the
+! 	     * maximum is much larger than the minimum.  Bail out if we can
+! 	     * use the other engine. */
+! 	    if ((nfa_re_flags & RE_AUTO) && maxval > minval + 200)
+  		return FAIL;
+  
+  	    /* Ignore previous call to nfa_regatom() */
+--- 2034,2043 ----
+  	    }
+  
+  	    /* The engine is very inefficient (uses too many states) when the
+! 	     * maximum is much larger than the minimum and when the maximum is
+! 	     * large.  Bail out if we can use the other engine. */
+! 	    if ((nfa_re_flags & RE_AUTO)
+! 				   && (maxval > minval + 200 || maxval > 500))
+  		return FAIL;
+  
+  	    /* Ignore previous call to nfa_regatom() */
+***************
+*** 4254,4260 ****
+   * Add "state" and possibly what follows to state list ".".
+   * Returns "subs_arg", possibly copied into temp_subs.
+   */
+- 
+      static regsubs_T *
+  addstate(l, state, subs_arg, pim, off)
+      nfa_list_T		*l;	    /* runtime state list */
+--- 4255,4260 ----
+***************
+*** 4392,4397 ****
+--- 4392,4398 ----
+  		    subs = &temp_subs;
+  		}
+  
++ 		/* TODO: check for vim_realloc() returning NULL. */
+  		l->t = vim_realloc(l->t, newlen * sizeof(nfa_thread_T));
+  		l->len = newlen;
+  	    }
+*** ../vim-7.4.622/src/version.c	2015-02-05 20:29:55.071222529 +0100
+--- src/version.c	2015-02-10 18:14:05.287650419 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     623,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+210. When you get a divorce, you don't care about who gets the children,
+     but discuss endlessly who can use the email address.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.624 b/SOURCES/7.4.624
new file mode 100644
index 0000000..38efc8c
--- /dev/null
+++ b/SOURCES/7.4.624
@@ -0,0 +1,204 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.624
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.624
+Problem:    May leak memory or crash when vim_realloc() returns NULL.
+Solution:   Handle a NULL value properly. (Mike Williams)
+Files:	    src/if_cscope.c, src/memline.c, src/misc1.c, src/netbeans.c
+
+
+*** ../vim-7.4.623/src/if_cscope.c	2014-12-13 03:20:10.539067382 +0100
+--- src/if_cscope.c	2015-02-10 18:33:14.764816257 +0100
+***************
+*** 1507,1515 ****
+--- 1507,1522 ----
+  	}
+  	else
+  	{
++ 	    csinfo_T *t_csinfo = csinfo;
++ 
+  	    /* Reallocate space for more connections. */
+  	    csinfo_size *= 2;
+  	    csinfo = vim_realloc(csinfo, sizeof(csinfo_T)*csinfo_size);
++ 	    if (csinfo == NULL)
++ 	    {
++ 		vim_free(t_csinfo);
++ 		csinfo_size = 0;
++ 	    }
+  	}
+  	if (csinfo == NULL)
+  	    return -1;
+***************
+*** 2059,2064 ****
+--- 2066,2072 ----
+      int num_matches;
+  {
+      char	*buf = NULL;
++     char	*t_buf;
+      int		bufsize = 0; /* Track available bufsize */
+      int		newsize = 0;
+      char	*ptag;
+***************
+*** 2120,2128 ****
+--- 2128,2140 ----
+  	newsize = (int)(strlen(csfmt_str) + 16 + strlen(lno));
+  	if (bufsize < newsize)
+  	{
++ 	    t_buf = buf;
+  	    buf = (char *)vim_realloc(buf, newsize);
+  	    if (buf == NULL)
++ 	    {
+  		bufsize = 0;
++ 		vim_free(t_buf);
++ 	    }
+  	    else
+  		bufsize = newsize;
+  	}
+***************
+*** 2143,2151 ****
+--- 2155,2167 ----
+  
+  	if (bufsize < newsize)
+  	{
++ 	    t_buf = buf;
+  	    buf = (char *)vim_realloc(buf, newsize);
+  	    if (buf == NULL)
++ 	    {
+  		bufsize = 0;
++ 		vim_free(t_buf);
++ 	    }
+  	    else
+  		bufsize = newsize;
+  	}
+*** ../vim-7.4.623/src/memline.c	2014-08-13 21:58:24.824885492 +0200
+--- src/memline.c	2015-02-10 18:26:23.158126542 +0100
+***************
+*** 5057,5062 ****
+--- 5057,5064 ----
+  	/* May resize here so we don't have to do it in both cases below */
+  	if (buf->b_ml.ml_usedchunks + 1 >= buf->b_ml.ml_numchunks)
+  	{
++ 	    chunksize_T *t_chunksize = buf->b_ml.ml_chunksize;
++ 
+  	    buf->b_ml.ml_numchunks = buf->b_ml.ml_numchunks * 3 / 2;
+  	    buf->b_ml.ml_chunksize = (chunksize_T *)
+  		vim_realloc(buf->b_ml.ml_chunksize,
+***************
+*** 5064,5069 ****
+--- 5066,5072 ----
+  	    if (buf->b_ml.ml_chunksize == NULL)
+  	    {
+  		/* Hmmmm, Give up on offset for this buffer */
++ 		vim_free(t_chunksize);
+  		buf->b_ml.ml_usedchunks = -1;
+  		return;
+  	    }
+*** ../vim-7.4.623/src/misc1.c	2014-08-29 12:58:38.246430208 +0200
+--- src/misc1.c	2015-02-10 18:26:35.405968505 +0100
+***************
+*** 3431,3440 ****
+--- 3431,3444 ----
+  	    buf = alloc(buflen);
+  	else if (maxlen < 10)
+  	{
++ 	    char_u  *t_buf = buf;
++ 
+  	    /* Need some more space. This might happen when receiving a long
+  	     * escape sequence. */
+  	    buflen += 100;
+  	    buf = vim_realloc(buf, buflen);
++ 	    if (buf == NULL)
++ 		vim_free(t_buf);
+  	    maxlen = (buflen - 6 - len) / 3;
+  	}
+  	if (buf == NULL)
+*** ../vim-7.4.623/src/netbeans.c	2014-03-23 15:12:29.927264336 +0100
+--- src/netbeans.c	2015-02-10 18:27:18.693409965 +0100
+***************
+*** 1080,1089 ****
+--- 1080,1097 ----
+      {
+  	if (bufno >= buf_list_size) /* grow list */
+  	{
++ 	    nbbuf_T *t_buf_list = buf_list;
++ 
+  	    incr = bufno - buf_list_size + 90;
+  	    buf_list_size += incr;
+  	    buf_list = (nbbuf_T *)vim_realloc(
+  				   buf_list, buf_list_size * sizeof(nbbuf_T));
++ 	    if (buf_list == NULL)
++ 	    {
++ 		vim_free(t_buf_list);
++ 		buf_list_size = 0;
++ 		return NULL;
++ 	    }
+  	    vim_memset(buf_list + buf_list_size - incr, 0,
+  						      incr * sizeof(nbbuf_T));
+  	}
+***************
+*** 3678,3688 ****
+--- 3686,3703 ----
+  	    {
+  		int incr;
+  		int oldlen = globalsignmaplen;
++ 		char **t_globalsignmap = globalsignmap;
+  
+  		globalsignmaplen *= 2;
+  		incr = globalsignmaplen - oldlen;
+  		globalsignmap = (char **)vim_realloc(globalsignmap,
+  					   globalsignmaplen * sizeof(char *));
++ 		if (globalsignmap == NULL)
++ 		{
++ 		    vim_free(t_globalsignmap);
++ 		    globalsignmaplen = 0;
++ 		    return;
++ 		}
+  		vim_memset(globalsignmap + oldlen, 0, incr * sizeof(char *));
+  	    }
+  	}
+***************
+*** 3708,3718 ****
+--- 3723,3740 ----
+  	{
+  	    int incr;
+  	    int oldlen = buf->signmaplen;
++ 	    int *t_signmap = buf->signmap;
+  
+  	    buf->signmaplen *= 2;
+  	    incr = buf->signmaplen - oldlen;
+  	    buf->signmap = (int *)vim_realloc(buf->signmap,
+  					       buf->signmaplen * sizeof(int));
++ 	    if (buf->signmap == NULL)
++ 	    {
++ 		vim_free(t_signmap);
++ 		buf->signmaplen = 0;
++ 		return;
++ 	    }
+  	    vim_memset(buf->signmap + oldlen, 0, incr * sizeof(int));
+  	}
+      }
+*** ../vim-7.4.623/src/version.c	2015-02-10 18:18:13.004452406 +0100
+--- src/version.c	2015-02-10 18:21:29.697913596 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     624,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+211. Your husband leaves you...taking the computer with him and you
+     call him crying, and beg him to bring the computer back.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.625 b/SOURCES/7.4.625
new file mode 100644
index 0000000..0267302
--- /dev/null
+++ b/SOURCES/7.4.625
@@ -0,0 +1,74 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.625
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.625
+Problem:    Possible NULL pointer dereference.
+Solution:   Check for NULL before using it. (Mike Williams)
+Files:	    src/if_py_both.h
+
+
+*** ../vim-7.4.624/src/if_py_both.h	2015-02-03 12:55:11.136179596 +0100
+--- src/if_py_both.h	2015-02-10 18:39:40.531839555 +0100
+***************
+*** 747,758 ****
+      else if (our_tv->v_type == VAR_DICT)
+      {
+  
+! 	hashtab_T	*ht = &our_tv->vval.v_dict->dv_hashtab;
+! 	long_u	todo = ht->ht_used;
+  	hashitem_T	*hi;
+  	dictitem_T	*di;
+  	if (our_tv->vval.v_dict == NULL)
+  	    return NULL;
+  
+  	if (!(ret = PyDict_New()))
+  	    return NULL;
+--- 747,760 ----
+      else if (our_tv->v_type == VAR_DICT)
+      {
+  
+! 	hashtab_T	*ht;
+! 	long_u		todo;
+  	hashitem_T	*hi;
+  	dictitem_T	*di;
++ 
+  	if (our_tv->vval.v_dict == NULL)
+  	    return NULL;
++ 	ht = &our_tv->vval.v_dict->dv_hashtab;
+  
+  	if (!(ret = PyDict_New()))
+  	    return NULL;
+***************
+*** 763,768 ****
+--- 765,771 ----
+  	    return NULL;
+  	}
+  
++ 	todo = ht->ht_used;
+  	for (hi = ht->ht_array; todo > 0; ++hi)
+  	{
+  	    if (!HASHITEM_EMPTY(hi))
+*** ../vim-7.4.624/src/version.c	2015-02-10 18:33:53.240319951 +0100
+--- src/version.c	2015-02-10 18:38:37.364655345 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     625,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+212. Your Internet group window has more icons than your Accessories window.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.626 b/SOURCES/7.4.626
new file mode 100644
index 0000000..a0298fd
--- /dev/null
+++ b/SOURCES/7.4.626
@@ -0,0 +1,58 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.626
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.626
+Problem:    MSVC with W4 gives useless warnings.
+Solution:   Disable more warnings. (Mike Williams)
+Files:	    src/vim.h
+
+
+*** ../vim-7.4.625/src/vim.h	2015-01-27 12:59:51.859602392 +0100
+--- src/vim.h	2015-02-10 18:46:02.294862211 +0100
+***************
+*** 2044,2049 ****
+--- 2044,2063 ----
+  #ifdef _MSC_VER
+  /* Avoid useless warning "conversion from X to Y of greater size". */
+   #pragma warning(disable : 4312)
++ /* Avoid warning for old style function declarators */
++  #pragma warning(disable : 4131)
++ /* Avoid warning for conversion to type with smaller range */
++  #pragma warning(disable : 4244)
++ /* Avoid warning for conversion to larger size */
++  #pragma warning(disable : 4306)
++ /* Avoid warning for unreferenced formal parameter */
++  #pragma warning(disable : 4100)
++ /* Avoid warning for differs in indirection to slightly different base type */
++  #pragma warning(disable : 4057)
++ /* Avoid warning for constant conditional expression */
++  #pragma warning(disable : 4127)
++ /* Avoid warning for assignment within conditional */
++  #pragma warning(disable : 4706)
+  #endif
+  
+  /* Note: a NULL argument for vim_realloc() is not portable, don't use it. */
+*** ../vim-7.4.625/src/version.c	2015-02-10 18:41:53.010111874 +0100
+--- src/version.c	2015-02-10 18:45:09.087555683 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     626,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+213. Your kids start referring to you as "that guy in front of the monitor."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.627 b/SOURCES/7.4.627
new file mode 100644
index 0000000..5410c8e
--- /dev/null
+++ b/SOURCES/7.4.627
@@ -0,0 +1,186 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.627
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.627
+Problem:    The last screen cell is not updated.
+Solution:   Respect the "tn" termcap feature. (Hayaki Saito)
+Files:	    runtime/doc/term.txt, src/option.c, src/screen.c, src/term.c,
+	    src/term.h
+
+
+*** ../vim-7.4.626/runtime/doc/term.txt	2013-08-10 13:25:02.000000000 +0200
+--- runtime/doc/term.txt	2015-02-10 19:11:54.110597132 +0100
+***************
+*** 224,233 ****
+  the last two characters of the option name.  Only one termcap code is
+  required: Cursor motion, 't_cm'.
+  
+! The options 't_da', 't_db', 't_ms', 't_xs' represent flags in the termcap.
+! When the termcap flag is present, the option will be set to "y".  But any
+! non-empty string means that the flag is set.  An empty string means that the
+! flag is not set.  't_CS' works like this too, but it isn't a termcap flag.
+  
+  OUTPUT CODES
+  	option	meaning	~
+--- 224,234 ----
+  the last two characters of the option name.  Only one termcap code is
+  required: Cursor motion, 't_cm'.
+  
+! The options 't_da', 't_db', 't_ms', 't_xs', 't_xn' represent flags in the
+! termcap.  When the termcap flag is present, the option will be set to "y".
+! But any non-empty string means that the flag is set.  An empty string means
+! that the flag is not set.  't_CS' works like this too, but it isn't a termcap
+! flag.
+  
+  OUTPUT CODES
+  	option	meaning	~
+***************
+*** 281,286 ****
+--- 282,290 ----
+  	t_vs	cursor very visible				*t_vs* *'t_vs'*
+  								*t_xs* *'t_xs'*
+  	t_xs	if non-empty, standout not erased by overwriting (hpterm)
++ 								*t_xn* *'t_xn'*
++ 	t_xn	if non-empty, character writing at the last cell of screen
++ 		didn't causes scrolling
+  	t_ZH	italics mode					*t_ZH* *'t_ZH'*
+  	t_ZR	italics end					*t_ZR* *'t_ZR'*
+  
+*** ../vim-7.4.626/src/option.c	2015-02-03 13:00:34.400529686 +0100
+--- src/option.c	2015-02-10 19:13:36.997250501 +0100
+***************
+*** 2978,2983 ****
+--- 2978,2984 ----
+      p_term("t_WS", T_CWS)
+      p_term("t_SI", T_CSI)
+      p_term("t_EI", T_CEI)
++     p_term("t_xn", T_XN)
+      p_term("t_xs", T_XS)
+      p_term("t_ZH", T_CZH)
+      p_term("t_ZR", T_CZR)
+*** ../vim-7.4.626/src/screen.c	2015-01-27 16:39:24.691804113 +0100
+--- src/screen.c	2015-02-10 19:18:43.913231114 +0100
+***************
+*** 7968,7976 ****
+      if (row >= screen_Rows || col >= screen_Columns)
+  	return;
+  
+!     /* Outputting the last character on the screen may scrollup the screen.
+!      * Don't to it!  Mark the character invalid (update it when scrolled up) */
+!     if (row == screen_Rows - 1 && col == screen_Columns - 1
+  #ifdef FEAT_RIGHTLEFT
+  	    /* account for first command-line character in rightleft mode */
+  	    && !cmdmsg_rl
+--- 7968,7978 ----
+      if (row >= screen_Rows || col >= screen_Columns)
+  	return;
+  
+!     /* Outputting a character in the last cell on the screen may scroll the
+!      * screen up.  Only do it when the "xn" termcap property is set, otherwise
+!      * mark the character invalid (update it when scrolled up). */
+!     if (*T_XN == NUL
+! 	    && row == screen_Rows - 1 && col == screen_Columns - 1
+  #ifdef FEAT_RIGHTLEFT
+  	    /* account for first command-line character in rightleft mode */
+  	    && !cmdmsg_rl
+*** ../vim-7.4.626/src/term.c	2014-07-30 17:21:53.819518506 +0200
+--- src/term.c	2015-02-10 19:11:54.118597027 +0100
+***************
+*** 200,205 ****
+--- 200,206 ----
+      {(int)KS_VB,	IF_EB("\033|f", ESC_STR "|f")},
+      {(int)KS_MS,	"y"},
+      {(int)KS_UT,	"y"},
++     {(int)KS_XN,	"y"},
+      {(int)KS_LE,	"\b"},		/* cursor-left = BS */
+      {(int)KS_ND,	"\014"},	/* cursor-right = CTRL-L */
+  # ifdef TERMINFO
+***************
+*** 658,663 ****
+--- 659,665 ----
+  
+      {(int)KS_MS,	"y"},		/* save to move cur in reverse mode */
+      {(int)KS_UT,	"y"},
++     {(int)KS_XN,	"y"},
+      {(int)KS_LE,	"\b"},
+  #  ifdef TERMINFO
+      {(int)KS_CM,	"\033|%i%p1%d;%p2%dH"},/* cursor motion */
+***************
+*** 772,777 ****
+--- 774,780 ----
+      {(int)KS_CSF,	IF_EB("\033[101;%dm", ESC_STR "[101;%dm")},	/* set screen foreground color */
+      {(int)KS_MS,	"y"},
+      {(int)KS_UT,	"y"},
++     {(int)KS_XN,	"y"},
+      {(int)KS_LE,	"\b"},
+  #  ifdef TERMINFO
+      {(int)KS_CM,	IF_EB("\033[%i%p1%d;%p2%dH",
+***************
+*** 1207,1212 ****
+--- 1210,1216 ----
+      {(int)KS_UCS,	"[UCS]"},
+      {(int)KS_MS,	"[MS]"},
+      {(int)KS_UT,	"[UT]"},
++     {(int)KS_XN,	"[XN]"},
+  #  ifdef TERMINFO
+      {(int)KS_CM,	"[%p1%dCM%p2%d]"},
+  #  else
+***************
+*** 1645,1650 ****
+--- 1649,1657 ----
+  		if ((T_XS == NULL || T_XS == empty_option)
+  							&& tgetflag("xs") > 0)
+  		    T_XS = (char_u *)"y";
++ 		if ((T_XN == NULL || T_XN == empty_option)
++ 							&& tgetflag("xn") > 0)
++ 		    T_XN = (char_u *)"y";
+  		if ((T_DB == NULL || T_DB == empty_option)
+  							&& tgetflag("db") > 0)
+  		    T_DB = (char_u *)"y";
+*** ../vim-7.4.626/src/term.h	2013-03-13 19:09:03.000000000 +0100
+--- src/term.h	2015-02-10 19:11:54.118597027 +0100
+***************
+*** 66,71 ****
+--- 66,72 ----
+      KS_CSF,	/* set foreground color */
+      KS_CSB,	/* set background color */
+      KS_XS,	/* standout not erased by overwriting (hpterm) */
++     KS_XN,	/* newline glitch */
+      KS_MB,	/* blink mode */
+      KS_CAF,	/* set foreground color (ANSI) */
+      KS_CAB,	/* set background color (ANSI) */
+***************
+*** 144,149 ****
+--- 145,151 ----
+  #define T_CSF	(term_str(KS_CSF))	/* set foreground color */
+  #define T_CSB	(term_str(KS_CSB))	/* set background color */
+  #define T_XS	(term_str(KS_XS))	/* standout not erased by overwriting */
++ #define T_XN	(term_str(KS_XN))	/* newline glitch */
+  #define T_MB	(term_str(KS_MB))	/* blink mode */
+  #define T_CAF	(term_str(KS_CAF))	/* set foreground color (ANSI) */
+  #define T_CAB	(term_str(KS_CAB))	/* set background color (ANSI) */
+*** ../vim-7.4.626/src/version.c	2015-02-10 18:47:55.225390610 +0100
+--- src/version.c	2015-02-10 19:12:50.525858691 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     627,
+  /**/
+
+-- 
+msdn.microsoft.com:
+ERROR_SUCCESS 0 (0x0) The operation completed successfully.
+I have always suspected that for Microsoft success is an error.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.628 b/SOURCES/7.4.628
new file mode 100644
index 0000000..d11b724
--- /dev/null
+++ b/SOURCES/7.4.628
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.628
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.628
+Problem:    Compiler warning for variable might be clobbered by longjmp.
+Solution:   Add volatile. (Michael Jarvis)
+Files:	    src/main.c
+
+
+*** ../vim-7.4.627/src/main.c	2015-01-27 14:09:29.621898236 +0100
+--- src/main.c	2015-02-10 19:24:34.032644963 +0100
+***************
+*** 1051,1057 ****
+      int		noexmode;   /* TRUE when return on entering Ex mode */
+  {
+      oparg_T	oa;				/* operator arguments */
+!     int		previous_got_int = FALSE;	/* "got_int" was TRUE */
+  #ifdef FEAT_CONCEAL
+      linenr_T	conceal_old_cursor_line = 0;
+      linenr_T	conceal_new_cursor_line = 0;
+--- 1051,1057 ----
+      int		noexmode;   /* TRUE when return on entering Ex mode */
+  {
+      oparg_T	oa;				/* operator arguments */
+!     volatile int previous_got_int = FALSE;	/* "got_int" was TRUE */
+  #ifdef FEAT_CONCEAL
+      linenr_T	conceal_old_cursor_line = 0;
+      linenr_T	conceal_new_cursor_line = 0;
+*** ../vim-7.4.627/src/version.c	2015-02-10 19:20:33.739791972 +0100
+--- src/version.c	2015-02-10 19:26:06.067440234 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     628,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+215. Your mouse-clicking forearm rivals Popeye's.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/7.4.629 b/SOURCES/7.4.629
new file mode 100644
index 0000000..dcbe5bc
--- /dev/null
+++ b/SOURCES/7.4.629
@@ -0,0 +1,58 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.629
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.629
+Problem:    Coverity warning for Out-of-bounds read.
+Solution:   Increase MAXWLEN to 254. (Eliseo Martínez)
+Files:	    src/spell.c
+
+
+*** ../vim-7.4.628/src/spell.c	2014-11-19 16:38:01.512679964 +0100
+--- src/spell.c	2015-02-10 20:00:22.188514910 +0100
+***************
+*** 311,319 ****
+  # include <time.h>	/* for time_t */
+  #endif
+  
+! #define MAXWLEN 250		/* Assume max. word len is this many bytes.
+  				   Some places assume a word length fits in a
+! 				   byte, thus it can't be above 255. */
+  
+  /* Type used for indexes in the word tree need to be at least 4 bytes.  If int
+   * is 8 bytes we could use something smaller, but what? */
+--- 311,320 ----
+  # include <time.h>	/* for time_t */
+  #endif
+  
+! #define MAXWLEN 254		/* Assume max. word len is this many bytes.
+  				   Some places assume a word length fits in a
+! 				   byte, thus it can't be above 255.
+! 				   Must be >= PFD_NOTSPECIAL. */
+  
+  /* Type used for indexes in the word tree need to be at least 4 bytes.  If int
+   * is 8 bytes we could use something smaller, but what? */
+*** ../vim-7.4.628/src/version.c	2015-02-10 19:26:58.918748560 +0100
+--- src/version.c	2015-02-10 20:01:27.475662030 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     629,
+  /**/
+
+-- 
+I noticed my daughter's Disney-net password on a sticky note:
+"MickeyMinnieGoofyPluto".  I asked her why it was so long.
+"Because they say it has to have at least four characters."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/SOURCES/cpp.vim b/SOURCES/cpp.vim
new file mode 100644
index 0000000..0b6d77e
--- /dev/null
+++ b/SOURCES/cpp.vim
@@ -0,0 +1,72 @@
+" Vim syntax file
+" Language: C++
+" Current Maintainer: vim-jp (https://github.com/vim-jp/vim-cpp)
+" Previous Maintainer: Ken Shan <ccshan@post.harvard.edu>
+" Last Change: 2015 Mar 1
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+syntax clear
+elseif exists("b:current_syntax")
+finish
+endif
+" Read the C syntax to start with
+if version < 600
+so <sfile>:p:h/c.vim
+else
+runtime! syntax/c.vim
+unlet b:current_syntax
+endif
+" C++ extensions
+syn keyword cppStatement new delete this friend using
+syn keyword cppAccess public protected private
+syn keyword cppType inline virtual explicit export bool wchar_t
+syn keyword cppExceptions throw try catch
+syn keyword cppOperator operator typeid
+syn keyword cppOperator and bitor or xor compl bitand and_eq or_eq xor_eq not not_eq
+syn match cppCast "\<\(const\|static\|dynamic\|reinterpret\)_cast\s*<"me=e-1
+syn match cppCast "\<\(const\|static\|dynamic\|reinterpret\)_cast\s*$"
+syn keyword cppStorageClass mutable
+syn keyword cppStructure class typename template namespace
+syn keyword cppBoolean true false
+syn keyword cppConstant __cplusplus
+" C++ 11 extensions
+if !exists("cpp_no_cpp11")
+syn keyword cppType override final
+syn keyword cppExceptions noexcept
+syn keyword cppStorageClass constexpr decltype thread_local
+syn keyword cppConstant nullptr
+syn keyword cppConstant ATOMIC_FLAG_INIT ATOMIC_VAR_INIT
+syn keyword cppConstant ATOMIC_BOOL_LOCK_FREE ATOMIC_CHAR_LOCK_FREE
+syn keyword cppConstant ATOMIC_CHAR16_T_LOCK_FREE ATOMIC_CHAR32_T_LOCK_FREE
+syn keyword cppConstant ATOMIC_WCHAR_T_LOCK_FREE ATOMIC_SHORT_LOCK_FREE
+syn keyword cppConstant ATOMIC_INT_LOCK_FREE ATOMIC_LONG_LOCK_FREE
+syn keyword cppConstant ATOMIC_LLONG_LOCK_FREE ATOMIC_POINTER_LOCK_FREE
+syn region cppRawString matchgroup=cppRawDelimiter start=+\%(u8\|[uLU]\)\=R"\z([[:alnum:]_{}[\]#<>%:;.?*\+\-/\^&|~!=,"']\{,16}\)(+ end=+)\z1"+ contains=@Spell
+endif
+" The minimum and maximum operators in GNU C++
+syn match cppMinMax "[<>]?"
+" Default highlighting
+if version >= 508 || !exists("did_cpp_syntax_inits")
+if version < 508
+let did_cpp_syntax_inits = 1
+command -nargs=+ HiLink hi link <args>
+else
+command -nargs=+ HiLink hi def link <args>
+endif
+HiLink cppAccess cppStatement
+HiLink cppCast cppStatement
+HiLink cppExceptions Exception
+HiLink cppOperator Operator
+HiLink cppStatement Statement
+HiLink cppType Type
+HiLink cppStorageClass StorageClass
+HiLink cppStructure Structure
+HiLink cppBoolean Boolean
+HiLink cppConstant Constant
+HiLink cppRawDelimiter Delimiter
+HiLink cppRawString String
+delcommand HiLink
+endif
+let b:current_syntax = "cpp"
+" vim: ts=8
diff --git a/SOURCES/gvim.desktop b/SOURCES/gvim.desktop
index 97bf6ac..675357d 100644
--- a/SOURCES/gvim.desktop
+++ b/SOURCES/gvim.desktop
@@ -60,5 +60,4 @@ Icon=gvim
 Type=Application
 Terminal=false
 X-XClassHintResName=VIM
-MapNotify=false
 Categories=Utility;TextEditor;
diff --git a/SOURCES/vim-7.0-syncolor.patch b/SOURCES/vim-7.0-syncolor.patch
deleted file mode 100644
index 5471075..0000000
--- a/SOURCES/vim-7.0-syncolor.patch
+++ /dev/null
@@ -1,24 +0,0 @@
---- vim70/src/syntax.c.syn1	2006-04-26 14:49:45.000000000 +0200
-+++ vim70/src/syntax.c	2006-09-19 13:15:41.000000000 +0200
-@@ -6176,8 +6176,8 @@
- 	     "Visual term=reverse guibg=LightGrey"),
- #endif
- #ifdef FEAT_DIFF
--	CENT("DiffAdd term=bold ctermbg=LightBlue",
--	     "DiffAdd term=bold ctermbg=LightBlue guibg=LightBlue"),
-+	CENT("DiffAdd term=bold ctermbg=LightRed",
-+	     "DiffAdd term=bold ctermbg=LightRed guibg=LightBlue"),
- 	CENT("DiffChange term=bold ctermbg=LightMagenta",
- 	     "DiffChange term=bold ctermbg=LightMagenta guibg=LightMagenta"),
- 	CENT("DiffDelete term=bold ctermfg=Blue ctermbg=LightCyan",
-@@ -6256,8 +6256,8 @@
- 	     "Visual term=reverse guibg=DarkGrey"),
- #endif
- #ifdef FEAT_DIFF
--	CENT("DiffAdd term=bold ctermbg=DarkBlue",
--	     "DiffAdd term=bold ctermbg=DarkBlue guibg=DarkBlue"),
-+	CENT("DiffAdd term=bold ctermbg=DarkRed",
-+	     "DiffAdd term=bold ctermbg=DarkRed guibg=DarkBlue"),
- 	CENT("DiffChange term=bold ctermbg=DarkMagenta",
- 	     "DiffChange term=bold ctermbg=DarkMagenta guibg=DarkMagenta"),
- 	CENT("DiffDelete term=bold ctermfg=Blue ctermbg=DarkCyan",
diff --git a/SOURCES/vim-7.3-xsubpp-path.patch b/SOURCES/vim-7.3-xsubpp-path.patch
deleted file mode 100644
index 971b10a..0000000
--- a/SOURCES/vim-7.3-xsubpp-path.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up vim73/src/Makefile.xsubpp vim73/src/Makefile
---- vim73/src/Makefile.xsubpp	2013-05-13 15:02:15.894805644 +0200
-+++ vim73/src/Makefile	2013-05-13 15:07:03.922821257 +0200
-@@ -2416,7 +2416,7 @@ lintinstall:
- 
- auto/if_perl.c: if_perl.xs
- 	$(PERL) -e 'unless ( $$] >= 5.005 ) { for (qw(na defgv errgv)) { print "#define PL_$$_ $$_\n" }}' > $@
--	$(PERL) $(PERLLIB)/ExtUtils/xsubpp -prototypes -typemap \
-+	$(PERL) $(PERLLIB)/vendor_perl/ExtUtils/xsubpp -prototypes -typemap \
- 	    $(PERLLIB)/ExtUtils/typemap if_perl.xs >> $@
- 
- auto/osdef.h: auto/config.h osdef.sh osdef1.h.in osdef2.h.in
diff --git a/SOURCES/vim-7.4-blowfish2.patch b/SOURCES/vim-7.4-blowfish2.patch
deleted file mode 100644
index 08dab82..0000000
--- a/SOURCES/vim-7.4-blowfish2.patch
+++ /dev/null
@@ -1,4045 +0,0 @@
-diff -up vim74/runtime/doc/editing.txt.blowfish2 vim74/runtime/doc/editing.txt
---- vim74/runtime/doc/editing.txt.blowfish2	2013-08-10 13:24:53.000000000 +0200
-+++ vim74/runtime/doc/editing.txt	2017-09-05 14:47:34.915912305 +0200
-@@ -1364,8 +1364,13 @@ The text in the swap file and the undo f
- 
- Note: The text in memory is not encrypted.  A system administrator may be able
- to see your text while you are editing it.  When filtering text with
--":!filter" or using ":w !command" the text is not encrypted, this may reveal
--it to others.  The 'viminfo' file is not encrypted.
-+":!filter" or using ":w !command" the text is also not encrypted, this may
-+reveal it to others.  The 'viminfo' file is not encrypted.
-+
-+You could do this to edit very secret text: >
-+       :set noundofile viminfo=
-+       :noswapfile edit secrets.txt
-+Keep in mind that without a swap file you risk loosing your work in a crash.
- 
- WARNING: If you make a typo when entering the key and then write the file and
- exit, the text will be lost!
-@@ -1392,18 +1397,24 @@ To disable the encryption, reset the 'ke
- 	:set key=
- 
- You can use the 'cryptmethod' option to select the type of encryption, use one
--of these two: >
--	:setlocal cm=zip       " weak method, backwards compatible
--	:setlocal cm=blowfish  " strong method
-+of these: >
-+       :setlocal cm=zip        " weak method, backwards compatible
-+       :setlocal cm=blowfish   " method with flaws
-+       :setlocal cm=blowfish2  " medium strong method
-+
- Do this before writing the file.  When reading an encrypted file it will be
- set automatically to the method used when that file was written.  You can
- change 'cryptmethod' before writing that file to change the method.
- To set the default method, used for new files, use one of these in your
- |vimrc| file: >
- 	set cm=zip
--	set cm=blowfish
-+        set cm=blowfish2
-+Use the first one if you need to be compatible with Vim 7.2 and older.  Using
-+"blowfish2" is highly recommended if you can use a Vim version that supports
-+it.
-+
- The message given for reading and writing a file will show "[crypted]" when
--using zip, "[blowfish]" when using blowfish.
-+using zip, "[blowfish]" when using blowfish, etc.
- 
- When writing an undo file, the same key and method will be used for the text
- in the undo file. |persistent-undo|.
-@@ -1438,7 +1449,7 @@ lines to "/etc/magic", "/usr/share/misc/
-      0	string	VimCrypt~	Vim encrypted file
-      >9	string	01	- "zip" cryptmethod
-      >9	string	02	- "blowfish" cryptmethod
--
-+     >9        string  03      - "blowfish2" cryptmethod
- 
- Notes:
- - Encryption is not possible when doing conversion with 'charconvert'.
-@@ -1462,6 +1473,10 @@ Notes:
- - Pkzip uses the same encryption as 'cryptmethod' "zip", and US Govt has no
-   objection to its export.  Pkzip's public file APPNOTE.TXT describes this
-   algorithm in detail.
-+- The implementation of 'cryptmethod' "blowfish" has a flaw.  It is possible to
-+  crack the first 64 bytes of a file and in some circumstances more of the
-+  file. Use of it is not recommended, but it's still the strongest method
-+  supported by Vim 7.3 and 7.4.  The "zip" method is even weaker.
- - Vim originates from the Netherlands.  That is where the sources come from.
-   Thus the encryption code is not exported from the USA.
- 
-diff -up vim74/runtime/doc/options.txt.blowfish2 vim74/runtime/doc/options.txt
---- vim74/runtime/doc/options.txt.blowfish2	2017-09-05 14:47:33.976919884 +0200
-+++ vim74/runtime/doc/options.txt	2017-09-05 14:47:34.925912224 +0200
-@@ -2197,10 +2197,18 @@ A jump table for the options with a shor
- 	   zip		PkZip compatible method.  A weak kind of encryption.
- 			Backwards compatible with Vim 7.2 and older.
- 							*blowfish*
--	   blowfish	Blowfish method.  Strong encryption.  Requires Vim 7.3
--			or later, files can NOT be read by Vim 7.2 and older.
--			This adds a "seed" to the file, every time you write
--			the file the encrypted bytes will be different.
-+          blowfish     Blowfish method.  Medium strong encryption but it has
-+                       an implementation flaw.  Requires Vim 7.3 or later,
-+                       files can NOT be read by Vim 7.2 and older.  This adds
-+                       a "seed" to the file, every time you write the file
-+                       the encrypted bytes will be different.
-+                                                       *blowfish2*
-+          blowfish2    Blowfish method.  Medium strong encryption.  Requires
-+                       Vim 7.4.399 or later, files can NOT be read by Vim 7.3
-+                       and older.  This adds a "seed" to the file, every time
-+                       you write the file the encrypted bytes will be
-+                       different.  The whole undo file is encrypted, not just
-+                       the pieces of text.
- 
- 	When reading an encrypted file 'cryptmethod' will be set automatically
- 	to the detected method of the file being read.  Thus if you write it
-diff -up vim74/src/blowfish.c.blowfish2 vim74/src/blowfish.c
---- vim74/src/blowfish.c.blowfish2	2010-12-17 19:58:18.000000000 +0100
-+++ vim74/src/blowfish.c	2017-09-05 14:47:34.926912216 +0200
-@@ -9,17 +9,25 @@
-  * Blowfish encryption for Vim; in Blowfish output feedback mode.
-  * Contributed by Mohsin Ahmed, http://www.cs.albany.edu/~mosh
-  * Based on http://www.schneier.com/blowfish.html by Bruce Schneier.
-+ *
-+ * There are two variants:
-+ * - The old one "blowfish" has a flaw which makes it much easier to crack the
-+ *   key.  To see this, make a text file with one line of 1000 "x" characters
-+ *   and write it encrypted.  Use "xxd" to inspect the bytes in the file.  You
-+ *   will see that a block of 8 bytes repeats 8 times.
-+ * - The new one "blowfish2" is better.  It uses an 8 byte CFB to avoid the
-+ *   repeats.
-  */
- 
- #include "vim.h"
- 
--#if defined(FEAT_CRYPT)
-+#if defined(FEAT_CRYPT) || defined(PROTO)
- 
- #define ARRAY_LENGTH(A)      (sizeof(A)/sizeof(A[0]))
- 
- #define BF_BLOCK    8
- #define BF_BLOCK_MASK 7
--#define BF_OFB_LEN  (8*(BF_BLOCK))
-+#define BF_MAX_CFB_LEN  (8 * BF_BLOCK)
- 
- typedef union {
-     UINT32_T ul[2];
-@@ -37,14 +45,26 @@ typedef union {
- # endif
- #endif
- 
--static void bf_e_block __ARGS((UINT32_T *p_xl, UINT32_T *p_xr));
--static void bf_e_cblock __ARGS((char_u *block));
--static int bf_check_tables __ARGS((UINT32_T a_ipa[18], UINT32_T a_sbi[4][256], UINT32_T val));
-+/* The state of encryption, referenced by cryptstate_T. */
-+typedef struct {
-+    UINT32_T	pax[18];	    /* P-array */
-+    UINT32_T	sbx[4][256];	    /* S-boxes */
-+    int		randbyte_offset;
-+    int		update_offset;
-+    char_u	cfb_buffer[BF_MAX_CFB_LEN]; /* up to 64 bytes used */
-+    int		cfb_len;	    /* size of cfb_buffer actually used */
-+} bf_state_T;
-+
-+
-+static void bf_e_block __ARGS((bf_state_T *state, UINT32_T *p_xl, UINT32_T *p_xr));
-+static void bf_e_cblock __ARGS((bf_state_T *state, char_u *block));
-+static int bf_check_tables __ARGS((UINT32_T pax[18], UINT32_T sbx[4][256], UINT32_T val));
- static int bf_self_test __ARGS((void));
-+static void bf_key_init __ARGS((bf_state_T *state, char_u *password, char_u *salt, int salt_len));
-+static void bf_cfb_init __ARGS((bf_state_T *state, char_u *seed, int seed_len));
- 
- /* Blowfish code */
--static UINT32_T pax[18];
--static UINT32_T ipa[18] = {
-+static UINT32_T pax_init[18] = {
-     0x243f6a88u, 0x85a308d3u, 0x13198a2eu,
-     0x03707344u, 0xa4093822u, 0x299f31d0u,
-     0x082efa98u, 0xec4e6c89u, 0x452821e6u,
-@@ -53,8 +73,7 @@ static UINT32_T ipa[18] = {
-     0xb5470917u, 0x9216d5d9u, 0x8979fb1bu
- };
- 
--static UINT32_T sbx[4][256];
--static UINT32_T sbi[4][256] = {
-+static UINT32_T sbx_init[4][256] = {
-    {0xd1310ba6u, 0x98dfb5acu, 0x2ffd72dbu, 0xd01adfb7u,
-     0xb8e1afedu, 0x6a267e96u, 0xba7c9045u, 0xf12c7f99u,
-     0x24a19947u, 0xb3916cf7u, 0x0801f2e2u, 0x858efc16u,
-@@ -314,33 +333,40 @@ static UINT32_T sbi[4][256] = {
-  }
- };
- 
--
- #define F1(i) \
--    xl ^= pax[i]; \
--    xr ^= ((sbx[0][xl >> 24] + \
--    sbx[1][(xl & 0xFF0000) >> 16]) ^ \
--    sbx[2][(xl & 0xFF00) >> 8]) + \
--    sbx[3][xl & 0xFF];
-+    xl ^= bfs->pax[i]; \
-+    xr ^= ((bfs->sbx[0][xl >> 24] + \
-+    bfs->sbx[1][(xl & 0xFF0000) >> 16]) ^ \
-+    bfs->sbx[2][(xl & 0xFF00) >> 8]) + \
-+    bfs->sbx[3][xl & 0xFF];
- 
- #define F2(i) \
--    xr ^= pax[i]; \
--    xl ^= ((sbx[0][xr >> 24] + \
--    sbx[1][(xr & 0xFF0000) >> 16]) ^ \
--    sbx[2][(xr & 0xFF00) >> 8]) + \
--    sbx[3][xr & 0xFF];
--
-+    xr ^= bfs->pax[i]; \
-+    xl ^= ((bfs->sbx[0][xr >> 24] + \
-+    bfs->sbx[1][(xr & 0xFF0000) >> 16]) ^ \
-+    bfs->sbx[2][(xr & 0xFF00) >> 8]) + \
-+    bfs->sbx[3][xr & 0xFF];
- 
-     static void
--bf_e_block(p_xl, p_xr)
-+bf_e_block(bfs, p_xl, p_xr)
-+    bf_state_T *bfs;
-     UINT32_T *p_xl;
-     UINT32_T *p_xr;
- {
--    UINT32_T temp, xl = *p_xl, xr = *p_xr;
--
--    F1(0) F2(1) F1(2) F2(3) F1(4) F2(5) F1(6) F2(7)
--    F1(8) F2(9) F1(10) F2(11) F1(12) F2(13) F1(14) F2(15)
--    xl ^= pax[16];
--    xr ^= pax[17];
-+    UINT32_T temp;
-+    UINT32_T xl = *p_xl;
-+    UINT32_T xr = *p_xr;
-+
-+    F1(0) F2(1)
-+    F1(2) F2(3)
-+    F1(4) F2(5)
-+    F1(6) F2(7)
-+    F1(8) F2(9)
-+    F1(10) F2(11)
-+    F1(12) F2(13)
-+    F1(14) F2(15)
-+    xl ^= bfs->pax[16];
-+    xr ^= bfs->pax[17];
-     temp = xl;
-     xl = xr;
-     xr = temp;
-@@ -348,23 +374,6 @@ bf_e_block(p_xl, p_xr)
-     *p_xr = xr;
- }
- 
--#if 0  /* not used */
--    static void
--bf_d_block(p_xl, p_xr)
--    UINT32_T *p_xl;
--    UINT32_T *p_xr;
--{
--    UINT32_T temp, xl = *p_xl, xr = *p_xr;
--    F1(17) F2(16) F1(15) F2(14) F1(13) F2(12) F1(11) F2(10)
--    F1(9) F2(8) F1(7) F2(6) F1(5) F2(4) F1(3) F2(2)
--    xl ^= pax[1];
--    xr ^= pax[0];
--    temp = xl; xl = xr; xr = temp;
--    *p_xl = xl; *p_xr = xr;
--}
--#endif
--
--
- #ifdef WORDS_BIGENDIAN
- # define htonl2(x) \
-     x = ((((x) &     0xffL) << 24) | (((x) & 0xff00L)     <<  8) | \
-@@ -374,7 +383,8 @@ bf_d_block(p_xl, p_xr)
- #endif
- 
-     static void
--bf_e_cblock(block)
-+bf_e_cblock(bfs, block)
-+    bf_state_T *bfs;
-     char_u *block;
- {
-     block8	bk;
-@@ -382,35 +392,22 @@ bf_e_cblock(block)
-     memcpy(bk.uc, block, 8);
-     htonl2(bk.ul[0]);
-     htonl2(bk.ul[1]);
--    bf_e_block(&bk.ul[0], &bk.ul[1]);
-+    bf_e_block(bfs, &bk.ul[0], &bk.ul[1]);
-     htonl2(bk.ul[0]);
-     htonl2(bk.ul[1]);
-     memcpy(block, bk.uc, 8);
- }
- 
--#if 0  /* not used */
--    void
--bf_d_cblock(block)
--    char_u *block;
--{
--    block8 bk;
--    memcpy(bk.uc, block, 8);
--    htonl2(bk.ul[0]); htonl2(bk.ul[1]);
--    bf_d_block(&bk.ul[0], &bk.ul[1]);
--    htonl2(bk.ul[0]); htonl2(bk.ul[1]);
--    memcpy(block, bk.uc, 8);
--}
--#endif
--
- /*
-  * Initialize the crypt method using "password" as the encryption key and
-  * "salt[salt_len]" as the salt.
-  */
--    void
--bf_key_init(password, salt, salt_len)
--    char_u *password;
--    char_u *salt;
--    int    salt_len;
-+    static void
-+bf_key_init(bfs, password, salt, salt_len)
-+    bf_state_T	*bfs;
-+    char_u	*password;
-+    char_u	*salt;
-+    int		salt_len;
- {
-     int      i, j, keypos = 0;
-     unsigned u;
-@@ -418,7 +415,7 @@ bf_key_init(password, salt, salt_len)
-     char_u   *key;
-     int      keylen;
- 
--    /* Process the key 1000 times.
-+    /* Process the key 1001 times.
-      * See http://en.wikipedia.org/wiki/Key_strengthening. */
-     key = sha256_key(password, salt, salt_len);
-     for (i = 0; i < 1000; i++)
-@@ -437,52 +434,54 @@ bf_key_init(password, salt, salt_len)
- 	key[i] = u;
-     }
- 
--    mch_memmove(sbx, sbi, 4 * 4 * 256);
-+    /* Use "key" to initialize the P-array ("pax") and S-boxes ("sbx") of
-+     * Blowfish. */
-+    mch_memmove(bfs->sbx, sbx_init, 4 * 4 * 256);
- 
-     for (i = 0; i < 18; ++i)
-     {
- 	val = 0;
- 	for (j = 0; j < 4; ++j)
- 	    val = (val << 8) | key[keypos++ % keylen];
--	pax[i] = ipa[i] ^ val;
-+	bfs->pax[i] = pax_init[i] ^ val;
-     }
- 
-     data_l = data_r = 0;
-     for (i = 0; i < 18; i += 2)
-     {
--	bf_e_block(&data_l, &data_r);
--	pax[i + 0] = data_l;
--	pax[i + 1] = data_r;
-+	bf_e_block(bfs, &data_l, &data_r);
-+	bfs->pax[i + 0] = data_l;
-+	bfs->pax[i + 1] = data_r;
-     }
- 
-     for (i = 0; i < 4; ++i)
-     {
- 	for (j = 0; j < 256; j += 2)
- 	{
--	    bf_e_block(&data_l, &data_r);
--	    sbx[i][j + 0] = data_l;
--	    sbx[i][j + 1] = data_r;
-+	    bf_e_block(bfs, &data_l, &data_r);
-+	    bfs->sbx[i][j + 0] = data_l;
-+	    bfs->sbx[i][j + 1] = data_r;
- 	}
-     }
- }
- 
- /*
-- * BF Self test for corrupted tables or instructions
-+ * Blowfish self-test for corrupted tables or instructions.
-  */
-     static int
--bf_check_tables(a_ipa, a_sbi, val)
--    UINT32_T a_ipa[18];
--    UINT32_T a_sbi[4][256];
-+bf_check_tables(pax, sbx, val)
-+    UINT32_T pax[18];
-+    UINT32_T sbx[4][256];
-     UINT32_T val;
- {
-     int i, j;
-     UINT32_T c = 0;
- 
-     for (i = 0; i < 18; i++)
--	c ^= a_ipa[i];
-+	c ^= pax[i];
-     for (i = 0; i < 4; i++)
- 	for (j = 0; j < 256; j++)
--	    c ^= a_sbi[i][j];
-+	    c ^= sbx[i][j];
-     return c == val;
- }
- 
-@@ -520,6 +519,10 @@ bf_self_test()
-     int    err = 0;
-     block8 bk;
-     UINT32_T ui = 0xffffffffUL;
-+    bf_state_T state;
-+
-+    vim_memset(&state, 0, sizeof(bf_state_T));
-+    state.cfb_len = BF_MAX_CFB_LEN;
- 
-     /* We can't simply use sizeof(UINT32_T), it would generate a compiler
-      * warning. */
-@@ -528,21 +531,21 @@ bf_self_test()
- 	EMSG(_("E820: sizeof(uint32_t) != 4"));
-     }
- 
--    if (!bf_check_tables(ipa, sbi, 0x6ffa520a))
-+    if (!bf_check_tables(pax_init, sbx_init, 0x6ffa520a))
- 	err++;
- 
-     bn = ARRAY_LENGTH(bf_test_data);
-     for (i = 0; i < bn; i++)
-     {
--	bf_key_init((char_u *)(bf_test_data[i].password),
-+	bf_key_init(&state, (char_u *)(bf_test_data[i].password),
- 		    bf_test_data[i].salt,
- 		    (int)STRLEN(bf_test_data[i].salt));
--	if (!bf_check_tables(pax, sbx, bf_test_data[i].keysum))
-+	if (!bf_check_tables(state.pax, state.sbx, bf_test_data[i].keysum))
- 	    err++;
- 
- 	/* Don't modify bf_test_data[i].plaintxt, self test is idempotent. */
- 	memcpy(bk.uc, bf_test_data[i].plaintxt, 8);
--	bf_e_cblock(bk.uc);
-+	bf_e_cblock(&state, bk.uc);
- 	if (memcmp(bk.uc, bf_test_data[i].cryptxt, 8) != 0)
- 	{
- 	    if (err == 0 && memcmp(bk.uc, bf_test_data[i].badcryptxt, 8) == 0)
-@@ -554,43 +557,43 @@ bf_self_test()
-     return err > 0 ? FAIL : OK;
- }
- 
--/* Output feedback mode. */
--static int randbyte_offset = 0;
--static int update_offset = 0;
--static char_u ofb_buffer[BF_OFB_LEN]; /* 64 bytes */
-+/*
-+ * CFB: Cipher Feedback Mode.
-+ */
- 
- /*
-- * Initialize with seed "iv[iv_len]".
-+ * Initialize with seed "seed[seed_len]".
-  */
--    void
--bf_ofb_init(iv, iv_len)
--    char_u *iv;
--    int    iv_len;
-+    static void
-+bf_cfb_init(bfs, seed, seed_len)
-+    bf_state_T	*bfs;
-+    char_u	*seed;
-+    int		seed_len;
- {
-     int i, mi;
- 
--    randbyte_offset = update_offset = 0;
--    vim_memset(ofb_buffer, 0, BF_OFB_LEN);
--    if (iv_len > 0)
-+    bfs->randbyte_offset = bfs->update_offset = 0;
-+    vim_memset(bfs->cfb_buffer, 0, bfs->cfb_len);
-+    if (seed_len > 0)
-     {
--	mi = iv_len > BF_OFB_LEN ? iv_len : BF_OFB_LEN;
-+	mi = seed_len > bfs->cfb_len ? seed_len : bfs->cfb_len;
- 	for (i = 0; i < mi; i++)
--	    ofb_buffer[i % BF_OFB_LEN] ^= iv[i % iv_len];
-+	    bfs->cfb_buffer[i % bfs->cfb_len] ^= seed[i % seed_len];
-     }
- }
- 
--#define BF_OFB_UPDATE(c) { \
--    ofb_buffer[update_offset] ^= (char_u)c; \
--    if (++update_offset == BF_OFB_LEN) \
--	update_offset = 0; \
-+#define BF_CFB_UPDATE(bfs, c) { \
-+    bfs->cfb_buffer[bfs->update_offset] ^= (char_u)c; \
-+    if (++bfs->update_offset == bfs->cfb_len) \
-+	bfs->update_offset = 0; \
- }
- 
--#define BF_RANBYTE(t) { \
--    if ((randbyte_offset & BF_BLOCK_MASK) == 0) \
--	bf_e_cblock(&ofb_buffer[randbyte_offset]); \
--    t = ofb_buffer[randbyte_offset]; \
--    if (++randbyte_offset == BF_OFB_LEN) \
--	randbyte_offset = 0; \
-+#define BF_RANBYTE(bfs, t) { \
-+    if ((bfs->randbyte_offset & BF_BLOCK_MASK) == 0) \
-+	bf_e_cblock(bfs, &(bfs->cfb_buffer[bfs->randbyte_offset])); \
-+    t = bfs->cfb_buffer[bfs->randbyte_offset]; \
-+    if (++bfs->randbyte_offset == bfs->cfb_len) \
-+	bfs->randbyte_offset = 0; \
- }
- 
- /*
-@@ -598,90 +601,69 @@ bf_ofb_init(iv, iv_len)
-  * "from" and "to" can be equal to encrypt in place.
-  */
-     void
--bf_crypt_encode(from, len, to)
-+crypt_blowfish_encode(state, from, len, to)
-+    cryptstate_T *state;
-     char_u	*from;
-     size_t	len;
-     char_u	*to;
- {
-+    bf_state_T *bfs = state->method_state;
-     size_t	i;
-     int		ztemp, t;
- 
-     for (i = 0; i < len; ++i)
-     {
- 	ztemp = from[i];
--	BF_RANBYTE(t);
--	BF_OFB_UPDATE(ztemp);
-+	BF_RANBYTE(bfs, t);
-+	BF_CFB_UPDATE(bfs, ztemp);
- 	to[i] = t ^ ztemp;
-     }
- }
- 
- /*
-- * Decrypt "ptr[len]" in place.
-+ * Decrypt "from[len]" into "to[len]".
-  */
-     void
--bf_crypt_decode(ptr, len)
--    char_u	*ptr;
--    long	len;
-+crypt_blowfish_decode(state, from, len, to)
-+    cryptstate_T *state;
-+    char_u	*from;
-+    size_t	len;
-+    char_u	*to;
- {
--    char_u	*p;
-+    bf_state_T *bfs = state->method_state;
-+    size_t	i;
-     int		t;
- 
--    for (p = ptr; p < ptr + len; ++p)
-+    for (i = 0; i < len; ++i)
-     {
--	BF_RANBYTE(t);
--	*p ^= t;
--	BF_OFB_UPDATE(*p);
-+	BF_RANBYTE(bfs, t);
-+	to[i] = from[i] ^ t;
-+	BF_CFB_UPDATE(bfs, to[i]);
-     }
- }
- 
--/*
-- * Initialize the encryption keys and the random header according to
-- * the given password.
-- */
-     void
--bf_crypt_init_keys(passwd)
--    char_u *passwd;		/* password string with which to modify keys */
--{
--    char_u *p;
--
--    for (p = passwd; *p != NUL; ++p)
--    {
--	BF_OFB_UPDATE(*p);
--    }
--}
-+crypt_blowfish_init(state, key, salt, salt_len, seed, seed_len)
-+    cryptstate_T	*state;
-+    char_u*		key;
-+    char_u*		salt;
-+    int			salt_len;
-+    char_u*		seed;
-+    int			seed_len;
-+{
-+    bf_state_T	*bfs = (bf_state_T *)alloc_clear(sizeof(bf_state_T));
-+
-+    state->method_state = bfs;
-+
-+    /* "blowfish" uses a 64 byte buffer, causing it to repeat 8 byte groups 8
-+     * times.  "blowfish2" uses a 8 byte buffer to avoid repeating. */
-+    bfs->cfb_len = state->method_nr == CRYPT_M_BF ? BF_MAX_CFB_LEN : BF_BLOCK;
- 
--static int save_randbyte_offset;
--static int save_update_offset;
--static char_u save_ofb_buffer[BF_OFB_LEN];
--static UINT32_T save_pax[18];
--static UINT32_T save_sbx[4][256];
--
--/*
-- * Save the current crypt state.  Can only be used once before
-- * bf_crypt_restore().
-- */
--    void
--bf_crypt_save()
--{
--    save_randbyte_offset = randbyte_offset;
--    save_update_offset = update_offset;
--    mch_memmove(save_ofb_buffer, ofb_buffer, BF_OFB_LEN);
--    mch_memmove(save_pax, pax, 4 * 18);
--    mch_memmove(save_sbx, sbx, 4 * 4 * 256);
--}
-+    if (blowfish_self_test() == FAIL)
-+	return;
- 
--/*
-- * Restore the current crypt state.  Can only be used after
-- * bf_crypt_save().
-- */
--    void
--bf_crypt_restore()
--{
--    randbyte_offset = save_randbyte_offset;
--    update_offset = save_update_offset;
--    mch_memmove(ofb_buffer, save_ofb_buffer, BF_OFB_LEN);
--    mch_memmove(pax, save_pax, 4 * 18);
--    mch_memmove(sbx, save_sbx, 4 * 4 * 256);
-+    bf_key_init(bfs, key, salt, salt_len);
-+    bf_cfb_init(bfs, seed, seed_len);
- }
- 
- /*
-diff -up vim74/src/crypt.c.blowfish2 vim74/src/crypt.c
---- vim74/src/crypt.c.blowfish2	2017-09-05 14:47:34.933912159 +0200
-+++ vim74/src/crypt.c	2017-09-05 14:47:34.933912159 +0200
-@@ -0,0 +1,585 @@
-+/* vi:set ts=8 sts=4 sw=4:
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ * crypt.c: Generic encryption support.
-+ */
-+#include "vim.h"
-+
-+#if defined(FEAT_CRYPT) || defined(PROTO)
-+/*
-+ * Optional encryption support.
-+ * Mohsin Ahmed, mosh@sasi.com, 1998-09-24
-+ * Based on zip/crypt sources.
-+ * Refactored by David Leadbeater, 2014.
-+ *
-+ * NOTE FOR USA: Since 2000 exporting this code from the USA is allowed to
-+ * most countries.  There are a few exceptions, but that still should not be a
-+ * problem since this code was originally created in Europe and India.
-+ *
-+ * Blowfish addition originally made by Mohsin Ahmed,
-+ * http://www.cs.albany.edu/~mosh 2010-03-14
-+ * Based on blowfish by Bruce Schneier (http://www.schneier.com/blowfish.html)
-+ * and sha256 by Christophe Devine.
-+ */
-+
-+typedef struct {
-+    char    *name;	/* encryption name as used in 'cryptmethod' */
-+    char    *magic;	/* magic bytes stored in file header */
-+    int	    salt_len;	/* length of salt, or 0 when not using salt */
-+    int	    seed_len;	/* length of seed, or 0 when not using salt */
-+    int	    works_inplace; /* encryption/decryption can be done in-place */
-+    int	    whole_undofile; /* whole undo file is encrypted */
-+
-+    /* Optional function pointer for a self-test. */
-+    int (* self_test_fn)();
-+
-+    /* Function pointer for initializing encryption/decription. */
-+    void (* init_fn)(cryptstate_T *state, char_u *key,
-+		      char_u *salt, int salt_len, char_u *seed, int seed_len);
-+
-+    /* Function pointers for encoding/decoding from one buffer into another.
-+     * Optional, however, these or the _buffer ones should be configured. */
-+    void (*encode_fn)(cryptstate_T *state, char_u *from, size_t len,
-+								  char_u *to);
-+    void (*decode_fn)(cryptstate_T *state, char_u *from, size_t len,
-+								  char_u *to);
-+
-+    /* Function pointers for encoding and decoding, can buffer data if needed.
-+     * Optional (however, these or the above should be configured). */
-+    long (*encode_buffer_fn)(cryptstate_T *state, char_u *from, size_t len,
-+							     char_u **newptr);
-+    long (*decode_buffer_fn)(cryptstate_T *state, char_u *from, size_t len,
-+							     char_u **newptr);
-+
-+    /* Function pointers for in-place encoding and decoding, used for
-+     * crypt_*_inplace(). "from" and "to" arguments will be equal.
-+     * These may be the same as decode_fn and encode_fn above, however an
-+     * algorithm may implement them in a way that is not interchangeable with
-+     * the crypt_(en|de)code() interface (for example because it wishes to add
-+     * padding to files).
-+     * This method is used for swap and undo files which have a rigid format.
-+     */
-+    void (*encode_inplace_fn)(cryptstate_T *state, char_u *p1, size_t len,
-+								  char_u *p2);
-+    void (*decode_inplace_fn)(cryptstate_T *state, char_u *p1, size_t len,
-+								  char_u *p2);
-+} cryptmethod_T;
-+
-+/* index is method_nr of cryptstate_T, CRYPT_M_* */
-+static cryptmethod_T cryptmethods[CRYPT_M_COUNT] = {
-+    /* PK_Zip; very weak */
-+    {
-+	"zip",
-+	"VimCrypt~01!",
-+	0,
-+	0,
-+	TRUE,
-+	FALSE,
-+	NULL,
-+	crypt_zip_init,
-+	crypt_zip_encode, crypt_zip_decode,
-+	NULL, NULL,
-+	crypt_zip_encode, crypt_zip_decode,
-+    },
-+
-+    /* Blowfish/CFB + SHA-256 custom key derivation; implementation issues. */
-+    {
-+	"blowfish",
-+	"VimCrypt~02!",
-+	8,
-+	8,
-+	TRUE,
-+	FALSE,
-+	blowfish_self_test,
-+	crypt_blowfish_init,
-+	crypt_blowfish_encode, crypt_blowfish_decode,
-+	NULL, NULL,
-+	crypt_blowfish_encode, crypt_blowfish_decode,
-+    },
-+
-+    /* Blowfish/CFB + SHA-256 custom key derivation; fixed. */
-+    {
-+	"blowfish2",
-+	"VimCrypt~03!",
-+	8,
-+	8,
-+	TRUE,
-+	TRUE,
-+	blowfish_self_test,
-+	crypt_blowfish_init,
-+	crypt_blowfish_encode, crypt_blowfish_decode,
-+	NULL, NULL,
-+	crypt_blowfish_encode, crypt_blowfish_decode,
-+    },
-+};
-+
-+#define CRYPT_MAGIC_LEN	12	/* cannot change */
-+static char	crypt_magic_head[] = "VimCrypt~";
-+
-+/*
-+ * Return int value for crypt method name.
-+ * 0 for "zip", the old method.  Also for any non-valid value.
-+ * 1 for "blowfish".
-+ * 2 for "blowfish2".
-+ */
-+    int
-+crypt_method_nr_from_name(name)
-+    char_u  *name;
-+{
-+    int i;
-+
-+    for (i = 0; i < CRYPT_M_COUNT; ++i)
-+	if (STRCMP(name, cryptmethods[i].name) == 0)
-+	    return i;
-+    return 0;
-+}
-+
-+/*
-+ * Get the crypt method used for a file from "ptr[len]", the magic text at the
-+ * start of the file.
-+ * Returns -1 when no encryption used.
-+ */
-+    int
-+crypt_method_nr_from_magic(ptr, len)
-+    char  *ptr;
-+    int   len;
-+{
-+    int i;
-+
-+    if (len < CRYPT_MAGIC_LEN)
-+	return -1;
-+
-+    for (i = 0; i < CRYPT_M_COUNT; i++)
-+	if (memcmp(ptr, cryptmethods[i].magic, CRYPT_MAGIC_LEN) == 0)
-+	    return i;
-+
-+    i = (int)STRLEN(crypt_magic_head);
-+    if (len >= i && memcmp(ptr, crypt_magic_head, i) == 0)
-+	EMSG(_("E821: File is encrypted with unknown method"));
-+
-+    return -1;
-+}
-+
-+/*
-+ * Return TRUE if the crypt method for "method_nr" can be done in-place.
-+ */
-+    int
-+crypt_works_inplace(state)
-+    cryptstate_T *state;
-+{
-+    return cryptmethods[state->method_nr].works_inplace;
-+}
-+
-+/*
-+ * Get the crypt method for buffer "buf" as a number.
-+ */
-+    int
-+crypt_get_method_nr(buf)
-+    buf_T *buf;
-+{
-+    return crypt_method_nr_from_name(*buf->b_p_cm == NUL ? p_cm : buf->b_p_cm);
-+}
-+
-+/*
-+ * Return TRUE when the buffer uses an encryption method that encrypts the
-+ * whole undo file, not only the text.
-+ */
-+    int
-+crypt_whole_undofile(method_nr)
-+    int method_nr;
-+{
-+    return cryptmethods[method_nr].whole_undofile;
-+}
-+
-+/*
-+ * Get crypt method specifc length of the file header in bytes.
-+ */
-+    int
-+crypt_get_header_len(method_nr)
-+    int method_nr;
-+{
-+    return CRYPT_MAGIC_LEN
-+	+ cryptmethods[method_nr].salt_len
-+	+ cryptmethods[method_nr].seed_len;
-+}
-+
-+/*
-+ * Set the crypt method for buffer "buf" to "method_nr" using the int value as
-+ * returned by crypt_method_nr_from_name().
-+ */
-+    void
-+crypt_set_cm_option(buf, method_nr)
-+    buf_T   *buf;
-+    int	    method_nr;
-+{
-+    free_string_option(buf->b_p_cm);
-+    buf->b_p_cm = vim_strsave((char_u *)cryptmethods[method_nr].name);
-+}
-+
-+/*
-+ * If the crypt method for the current buffer has a self-test, run it and
-+ * return OK/FAIL.
-+ */
-+    int
-+crypt_self_test()
-+{
-+    int method_nr = crypt_get_method_nr(curbuf);
-+
-+    if (cryptmethods[method_nr].self_test_fn == NULL)
-+	return OK;
-+    return cryptmethods[method_nr].self_test_fn();
-+}
-+
-+/*
-+ * Allocate a crypt state and initialize it.
-+ */
-+    cryptstate_T *
-+crypt_create(method_nr, key, salt, salt_len, seed, seed_len)
-+    int		method_nr;
-+    char_u	*key;
-+    char_u	*salt;
-+    int		salt_len;
-+    char_u	*seed;
-+    int		seed_len;
-+{
-+    cryptstate_T *state = (cryptstate_T *)alloc((int)sizeof(cryptstate_T));
-+
-+    state->method_nr = method_nr;
-+    cryptmethods[method_nr].init_fn(state, key, salt, salt_len, seed, seed_len);
-+    return state;
-+}
-+
-+/*
-+ * Allocate a crypt state from a file header and initialize it.
-+ * Assumes that header contains at least the number of bytes that
-+ * crypt_get_header_len() returns for "method_nr".
-+ */
-+    cryptstate_T *
-+crypt_create_from_header(method_nr, key, header)
-+    int		method_nr;
-+    char_u	*key;
-+    char_u	*header;
-+{
-+    char_u	*salt = NULL;
-+    char_u	*seed = NULL;
-+    int		salt_len = cryptmethods[method_nr].salt_len;
-+    int		seed_len = cryptmethods[method_nr].seed_len;
-+
-+    if (salt_len > 0)
-+	salt = header + CRYPT_MAGIC_LEN;
-+    if (seed_len > 0)
-+	seed = header + CRYPT_MAGIC_LEN + salt_len;
-+
-+    return crypt_create(method_nr, key, salt, salt_len, seed, seed_len);
-+}
-+
-+/*
-+ * Read the crypt method specific header data from "fp".
-+ * Return an allocated cryptstate_T or NULL on error.
-+ */
-+    cryptstate_T *
-+crypt_create_from_file(fp, key)
-+    FILE    *fp;
-+    char_u  *key;
-+{
-+    int		method_nr;
-+    int		header_len;
-+    char	magic_buffer[CRYPT_MAGIC_LEN];
-+    char_u	*buffer;
-+    cryptstate_T *state;
-+
-+    if (fread(magic_buffer, CRYPT_MAGIC_LEN, 1, fp) != 1)
-+	return NULL;
-+    method_nr = crypt_method_nr_from_magic(magic_buffer, CRYPT_MAGIC_LEN);
-+    if (method_nr < 0)
-+	return NULL;
-+
-+    header_len = crypt_get_header_len(method_nr);
-+    if ((buffer = alloc(header_len)) == NULL)
-+	return NULL;
-+    mch_memmove(buffer, magic_buffer, CRYPT_MAGIC_LEN);
-+    if (header_len > CRYPT_MAGIC_LEN
-+	    && fread(buffer + CRYPT_MAGIC_LEN,
-+				    header_len - CRYPT_MAGIC_LEN, 1, fp) != 1)
-+    {
-+	vim_free(buffer);
-+	return NULL;
-+    }
-+
-+    state = crypt_create_from_header(method_nr, key, buffer);
-+    vim_free(buffer);
-+    return state;
-+}
-+
-+/*
-+ * Allocate a cryptstate_T for writing and initialize it with "key".
-+ * Allocates and fills in the header and stores it in "header", setting
-+ * "header_len".  The header may include salt and seed, depending on
-+ * cryptmethod.  Caller must free header.
-+ * Returns the state or NULL on failure.
-+ */
-+    cryptstate_T *
-+crypt_create_for_writing(method_nr, key, header, header_len)
-+    int	    method_nr;
-+    char_u  *key;
-+    char_u  **header;
-+    int	    *header_len;
-+{
-+    int	    len = crypt_get_header_len(method_nr);
-+    char_u  *salt = NULL;
-+    char_u  *seed = NULL;
-+    int	    salt_len = cryptmethods[method_nr].salt_len;
-+    int	    seed_len = cryptmethods[method_nr].seed_len;
-+    cryptstate_T *state;
-+
-+    *header_len = len;
-+    *header = alloc(len);
-+    if (*header == NULL)
-+	return NULL;
-+
-+    mch_memmove(*header, cryptmethods[method_nr].magic, CRYPT_MAGIC_LEN);
-+    if (salt_len > 0 || seed_len > 0)
-+    {
-+	if (salt_len > 0)
-+	    salt = *header + CRYPT_MAGIC_LEN;
-+	if (seed_len > 0)
-+	    seed = *header + CRYPT_MAGIC_LEN + salt_len;
-+
-+	/* TODO: Should this be crypt method specific? (Probably not worth
-+	 * it).  sha2_seed is pretty bad for large amounts of entropy, so make
-+	 * that into something which is suitable for anything. */
-+	sha2_seed(salt, salt_len, seed, seed_len);
-+    }
-+
-+    state = crypt_create(method_nr, key, salt, salt_len, seed, seed_len);
-+    if (state == NULL)
-+    {
-+	vim_free(*header);
-+	*header = NULL;
-+    }
-+    return state;
-+}
-+
-+/*
-+ * Free the crypt state.
-+ */
-+    void
-+crypt_free_state(state)
-+    cryptstate_T	*state;
-+{
-+    vim_free(state->method_state);
-+    vim_free(state);
-+}
-+
-+/*
-+ * Encode "from[len]" and store the result in a newly allocated buffer, which
-+ * is stored in "newptr".
-+ * Return number of bytes in "newptr", 0 for need more or -1 on error.
-+ */
-+    long
-+crypt_encode_alloc(state, from, len, newptr)
-+    cryptstate_T *state;
-+    char_u	*from;
-+    size_t	len;
-+    char_u	**newptr;
-+{
-+    cryptmethod_T *method = &cryptmethods[state->method_nr];
-+
-+    if (method->encode_buffer_fn != NULL)
-+	/* Has buffer function, pass through. */
-+	return method->encode_buffer_fn(state, from, len, newptr);
-+    if (len == 0)
-+	/* Not buffering, just return EOF. */
-+	return len;
-+
-+    *newptr = alloc(len);
-+    if (*newptr == NULL)
-+	return -1;
-+    method->encode_fn(state, from, len, *newptr);
-+    return len;
-+}
-+
-+/*
-+ * Decrypt "ptr[len]" and store the result in a newly allocated buffer, which
-+ * is stored in "newptr".
-+ * Return number of bytes in "newptr", 0 for need more or -1 on error.
-+ */
-+    long
-+crypt_decode_alloc(state, ptr, len, newptr)
-+    cryptstate_T *state;
-+    char_u	*ptr;
-+    long	len;
-+    char_u      **newptr;
-+{
-+    cryptmethod_T *method = &cryptmethods[state->method_nr];
-+
-+    if (method->decode_buffer_fn != NULL)
-+	/* Has buffer function, pass through. */
-+	return method->decode_buffer_fn(state, ptr, len, newptr);
-+
-+    if (len == 0)
-+	/* Not buffering, just return EOF. */
-+	return len;
-+
-+    *newptr = alloc(len);
-+    if (*newptr == NULL)
-+	return -1;
-+    method->decode_fn(state, ptr, len, *newptr);
-+    return len;
-+}
-+
-+/*
-+ * Encrypting "from[len]" into "to[len]".
-+ */
-+    void
-+crypt_encode(state, from, len, to)
-+    cryptstate_T *state;
-+    char_u	*from;
-+    size_t	len;
-+    char_u	*to;
-+{
-+    cryptmethods[state->method_nr].encode_fn(state, from, len, to);
-+}
-+
-+/*
-+ * decrypting "from[len]" into "to[len]".
-+ */
-+    void
-+crypt_decode(state, from, len, to)
-+    cryptstate_T *state;
-+    char_u	*from;
-+    size_t	len;
-+    char_u	*to;
-+{
-+    cryptmethods[state->method_nr].decode_fn(state, from, len, to);
-+}
-+
-+/*
-+ * Simple inplace encryption, modifies "buf[len]" in place.
-+ */
-+    void
-+crypt_encode_inplace(state, buf, len)
-+    cryptstate_T *state;
-+    char_u	*buf;
-+    size_t	len;
-+{
-+    cryptmethods[state->method_nr].encode_inplace_fn(state, buf, len, buf);
-+}
-+
-+/*
-+ * Simple inplace decryption, modifies "buf[len]" in place.
-+ */
-+    void
-+crypt_decode_inplace(state, buf, len)
-+    cryptstate_T *state;
-+    char_u	*buf;
-+    size_t	len;
-+{
-+    cryptmethods[state->method_nr].decode_inplace_fn(state, buf, len, buf);
-+}
-+
-+/*
-+ * Free an allocated crypt key.  Clear the text to make sure it doesn't stay
-+ * in memory anywhere.
-+ */
-+    void
-+crypt_free_key(key)
-+    char_u *key;
-+{
-+    char_u *p;
-+
-+    if (key != NULL)
-+    {
-+	for (p = key; *p != NUL; ++p)
-+	    *p = 0;
-+	vim_free(key);
-+    }
-+}
-+
-+/*
-+ * Ask the user for a crypt key.
-+ * When "store" is TRUE, the new key is stored in the 'key' option, and the
-+ * 'key' option value is returned: Don't free it.
-+ * When "store" is FALSE, the typed key is returned in allocated memory.
-+ * Returns NULL on failure.
-+ */
-+    char_u *
-+crypt_get_key(store, twice)
-+    int		store;
-+    int		twice;	    /* Ask for the key twice. */
-+{
-+    char_u	*p1, *p2 = NULL;
-+    int		round;
-+
-+    for (round = 0; ; ++round)
-+    {
-+	cmdline_star = TRUE;
-+	cmdline_row = msg_row;
-+	p1 = getcmdline_prompt(NUL, round == 0
-+		? (char_u *)_("Enter encryption key: ")
-+		: (char_u *)_("Enter same key again: "), 0, EXPAND_NOTHING,
-+		NULL);
-+	cmdline_star = FALSE;
-+
-+	if (p1 == NULL)
-+	    break;
-+
-+	if (round == twice)
-+	{
-+	    if (p2 != NULL && STRCMP(p1, p2) != 0)
-+	    {
-+		MSG(_("Keys don't match!"));
-+		crypt_free_key(p1);
-+		crypt_free_key(p2);
-+		p2 = NULL;
-+		round = -1;		/* do it again */
-+		continue;
-+	    }
-+
-+	    if (store)
-+	    {
-+		set_option_value((char_u *)"key", 0L, p1, OPT_LOCAL);
-+		crypt_free_key(p1);
-+		p1 = curbuf->b_p_key;
-+	    }
-+	    break;
-+	}
-+	p2 = p1;
-+    }
-+
-+    /* since the user typed this, no need to wait for return */
-+    if (msg_didout)
-+	msg_putchar('\n');
-+    need_wait_return = FALSE;
-+    msg_didout = FALSE;
-+
-+    crypt_free_key(p2);
-+    return p1;
-+}
-+
-+
-+/*
-+ * Append a message to IObuff for the encryption/decryption method being used.
-+ */
-+    void
-+crypt_append_msg(buf)
-+    buf_T *buf;
-+{
-+    if (crypt_get_method_nr(buf) == 0)
-+	STRCAT(IObuff, _("[crypted]"));
-+    else
-+    {
-+	STRCAT(IObuff, "[");
-+	STRCAT(IObuff, *buf->b_p_cm == NUL ? p_cm : buf->b_p_cm);
-+	STRCAT(IObuff, "]");
-+    }
-+}
-+
-+#endif /* FEAT_CRYPT */
-diff -up vim74/src/crypt_zip.c.blowfish2 vim74/src/crypt_zip.c
---- vim74/src/crypt_zip.c.blowfish2	2017-09-05 14:47:34.934912151 +0200
-+++ vim74/src/crypt_zip.c	2017-09-05 14:47:34.934912151 +0200
-@@ -0,0 +1,158 @@
-+/* vi:set ts=8 sts=4 sw=4:
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ * crypt_zip.c: Zip encryption support.
-+ */
-+#include "vim.h"
-+
-+#if defined(FEAT_CRYPT) || defined(PROTO)
-+/*
-+ * Optional encryption support.
-+ * Mohsin Ahmed, mosh@sasi.com, 98-09-24
-+ * Based on zip/crypt sources.
-+ *
-+ * NOTE FOR USA: Since 2000 exporting this code from the USA is allowed to
-+ * most countries.  There are a few exceptions, but that still should not be a
-+ * problem since this code was originally created in Europe and India.
-+ */
-+
-+/* Need a type that should be 32 bits. 64 also works but wastes space. */
-+# if VIM_SIZEOF_INT >= 4
-+typedef unsigned int u32_T;	/* int is at least 32 bits */
-+# else
-+typedef unsigned long u32_T;	/* long should be 32 bits or more */
-+# endif
-+
-+/* The state of encryption, referenced by cryptstate_T. */
-+typedef struct {
-+    u32_T keys[3];
-+} zip_state_T;
-+
-+
-+static void make_crc_tab __ARGS((void));
-+
-+static u32_T crc_32_table[256];
-+
-+/*
-+ * Fill the CRC table, if not done already.
-+ */
-+    static void
-+make_crc_tab()
-+{
-+    u32_T	s, t, v;
-+    static int	done = FALSE;
-+
-+    if (done)
-+	return;
-+    for (t = 0; t < 256; t++)
-+    {
-+	v = t;
-+	for (s = 0; s < 8; s++)
-+	    v = (v >> 1) ^ ((v & 1) * (u32_T)0xedb88320L);
-+	crc_32_table[t] = v;
-+    }
-+    done = TRUE;
-+}
-+
-+#define CRC32(c, b) (crc_32_table[((int)(c) ^ (b)) & 0xff] ^ ((c) >> 8))
-+
-+/*
-+ * Return the next byte in the pseudo-random sequence.
-+ */
-+#define DECRYPT_BYTE_ZIP(keys, t) { \
-+    short_u temp = (short_u)keys[2] | 2; \
-+    t = (int)(((unsigned)(temp * (temp ^ 1U)) >> 8) & 0xff); \
-+}
-+
-+/*
-+ * Update the encryption keys with the next byte of plain text.
-+ */
-+#define UPDATE_KEYS_ZIP(keys, c) { \
-+    keys[0] = CRC32(keys[0], (c)); \
-+    keys[1] += keys[0] & 0xff; \
-+    keys[1] = keys[1] * 134775813L + 1; \
-+    keys[2] = CRC32(keys[2], (int)(keys[1] >> 24)); \
-+}
-+
-+/*
-+ * Initialize for encryption/decryption.
-+ */
-+    void
-+crypt_zip_init(state, key, salt, salt_len, seed, seed_len)
-+    cryptstate_T    *state;
-+    char_u	    *key;
-+    char_u	    *salt UNUSED;
-+    int		    salt_len UNUSED;
-+    char_u	    *seed UNUSED;
-+    int		    seed_len UNUSED;
-+{
-+    char_u	*p;
-+    zip_state_T	*zs;
-+
-+    zs = (zip_state_T *)alloc(sizeof(zip_state_T));
-+    state->method_state = zs;
-+
-+    make_crc_tab();
-+    zs->keys[0] = 305419896L;
-+    zs->keys[1] = 591751049L;
-+    zs->keys[2] = 878082192L;
-+    for (p = key; *p != NUL; ++p)
-+    {
-+	UPDATE_KEYS_ZIP(zs->keys, (int)*p);
-+    }
-+}
-+
-+/*
-+ * Encrypt "from[len]" into "to[len]".
-+ * "from" and "to" can be equal to encrypt in place.
-+ */
-+    void
-+crypt_zip_encode(state, from, len, to)
-+    cryptstate_T *state;
-+    char_u	*from;
-+    size_t	len;
-+    char_u	*to;
-+{
-+    zip_state_T *zs = state->method_state;
-+    size_t	i;
-+    int		ztemp, t;
-+
-+    for (i = 0; i < len; ++i)
-+    {
-+	ztemp = from[i];
-+	DECRYPT_BYTE_ZIP(zs->keys, t);
-+	UPDATE_KEYS_ZIP(zs->keys, ztemp);
-+	to[i] = t ^ ztemp;
-+    }
-+}
-+
-+/*
-+ * Decrypt "from[len]" into "to[len]".
-+ */
-+    void
-+crypt_zip_decode(state, from, len, to)
-+    cryptstate_T *state;
-+    char_u	*from;
-+    size_t	len;
-+    char_u	*to;
-+{
-+    zip_state_T *zs = state->method_state;
-+    size_t	i;
-+    short_u	temp;
-+
-+    for (i = 0; i < len; ++i)
-+    {
-+	temp = (short_u)zs->keys[2] | 2;
-+	temp = (int)(((unsigned)(temp * (temp ^ 1U)) >> 8) & 0xff);
-+	UPDATE_KEYS_ZIP(zs->keys, to[i] = from[i] ^ temp);
-+    }
-+}
-+
-+#endif /* FEAT_CRYPT */
-diff -up vim74/src/eval.c.blowfish2 vim74/src/eval.c
---- vim74/src/eval.c.blowfish2	2017-09-05 14:47:34.837912934 +0200
-+++ vim74/src/eval.c	2017-09-05 14:47:34.939912111 +0200
-@@ -12228,6 +12228,8 @@ f_has(argvars, rettv)
- #endif
- #ifdef FEAT_CRYPT
- 	"cryptv",
-+	"crypt-blowfish",
-+	"crypt-blowfish2",
- #endif
- #ifdef FEAT_CSCOPE
- 	"cscope",
-diff -up vim74/src/ex_docmd.c.blowfish2 vim74/src/ex_docmd.c
---- vim74/src/ex_docmd.c.blowfish2	2017-09-05 14:47:34.782913378 +0200
-+++ vim74/src/ex_docmd.c	2017-09-05 14:47:34.945912063 +0200
-@@ -11497,8 +11497,7 @@ ex_match(eap)
- ex_X(eap)
-     exarg_T	*eap UNUSED;
- {
--    if (get_crypt_method(curbuf) == 0 || blowfish_self_test() == OK)
--	(void)get_crypt_key(TRUE, TRUE);
-+    (void)crypt_get_key(TRUE, TRUE);
- }
- #endif
- 
-diff -up vim74/src/fileio.c.blowfish2 vim74/src/fileio.c
---- vim74/src/fileio.c.blowfish2	2017-09-05 14:47:34.245917713 +0200
-+++ vim74/src/fileio.c	2017-09-05 14:47:34.947912046 +0200
-@@ -24,20 +24,6 @@
- #define BUFSIZE		8192	/* size of normal write buffer */
- #define SMBUFSIZE	256	/* size of emergency write buffer */
- 
--#ifdef FEAT_CRYPT
--/* crypt_magic[0] is pkzip crypt, crypt_magic[1] is sha2+blowfish */
--static char	*crypt_magic[] = {"VimCrypt~01!", "VimCrypt~02!"};
--static char	crypt_magic_head[] = "VimCrypt~";
--# define CRYPT_MAGIC_LEN	12		/* must be multiple of 4! */
--
--/* For blowfish, after the magic header, we store 8 bytes of salt and then 8
-- * bytes of seed (initialisation vector). */
--static int	crypt_salt_len[] = {0, 8};
--static int	crypt_seed_len[] = {0, 8};
--#define CRYPT_SALT_LEN_MAX 8
--#define CRYPT_SEED_LEN_MAX 8
--#endif
--
- /* Is there any system that doesn't have access()? */
- #define USE_MCH_ACCESS
- 
-@@ -55,7 +41,6 @@ static char_u *readfile_charconvert __AR
- static void check_marks_read __ARGS((void));
- #endif
- #ifdef FEAT_CRYPT
--static int crypt_method_from_magic __ARGS((char *ptr, int len));
- static char_u *check_for_cryptkey __ARGS((char_u *cryptkey, char_u *ptr, long *sizep, off_t *filesizep, int newfile, char_u *fname, int *did_ask));
- #endif
- #ifdef UNIX
-@@ -116,6 +101,9 @@ struct bw_info
- #ifdef HAS_BW_FLAGS
-     int		bw_flags;	/* FIO_ flags */
- #endif
-+#ifdef FEAT_CRYPT
-+    buf_T	*bw_buffer;	/* buffer being written */
-+#endif
- #ifdef FEAT_MBYTE
-     char_u	bw_rest[CONV_RESTLEN]; /* not converted bytes */
-     int		bw_restlen;	/* nr of bytes in bw_rest[] */
-@@ -250,7 +238,6 @@ readfile(fname, sfname, from, lines_to_s
- #ifdef FEAT_CRYPT
-     char_u	*cryptkey = NULL;
-     int		did_ask_for_key = FALSE;
--    int		crypt_method_used;
- #endif
- #ifdef FEAT_PERSISTENT_UNDO
-     context_sha256_T sha_ctx;
-@@ -966,13 +953,6 @@ retry:
- #endif
-     }
- 
--#ifdef FEAT_CRYPT
--    if (cryptkey != NULL)
--	/* Need to reset the state, but keep the key, don't want to ask for it
--	 * again. */
--	crypt_pop_state();
--#endif
--
-     /*
-      * When retrying with another "fenc" and the first time "fileformat"
-      * will be reset.
-@@ -1175,6 +1155,15 @@ retry:
- 	if (read_undo_file)
- 	    sha256_start(&sha_ctx);
- #endif
-+#ifdef FEAT_CRYPT
-+	if (curbuf->b_cryptstate != NULL)
-+	{
-+	    /* Need to free the state, but keep the key, don't want to ask for
-+	     * it again. */
-+	    crypt_free_state(curbuf->b_cryptstate);
-+	    curbuf->b_cryptstate = NULL;
-+	}
-+#endif
-     }
- 
-     while (!error && !got_int)
-@@ -1339,6 +1328,76 @@ retry:
- 		    size = read_eintr(fd, ptr, size);
- 		}
- 
-+#ifdef FEAT_CRYPT
-+		/*
-+		 * At start of file: Check for magic number of encryption.
-+		 */
-+		if (filesize == 0 && size > 0)
-+		    cryptkey = check_for_cryptkey(cryptkey, ptr, &size,
-+						  &filesize, newfile, sfname,
-+						  &did_ask_for_key);
-+		/*
-+		 * Decrypt the read bytes.  This is done before checking for
-+		 * EOF because the crypt layer may be buffering.
-+		 */
-+		if (cryptkey != NULL && curbuf->b_cryptstate != NULL && size > 0)
-+		{
-+		    if (crypt_works_inplace(curbuf->b_cryptstate))
-+		    {
-+			crypt_decode_inplace(curbuf->b_cryptstate, ptr, size);
-+		    }
-+		    else
-+		    {
-+			char_u	*newptr = NULL;
-+			int	decrypted_size;
-+
-+			decrypted_size = crypt_decode_alloc(
-+				    curbuf->b_cryptstate, ptr, size, &newptr);
-+
-+			/* If the crypt layer is buffering, not producing
-+			 * anything yet, need to read more. */
-+			if (size > 0 && decrypted_size == 0)
-+			    continue;
-+
-+			if (linerest == 0)
-+			{
-+			    /* Simple case: reuse returned buffer (may be
-+			     * NULL, checked later). */
-+			    new_buffer = newptr;
-+			}
-+			else
-+			{
-+			    long_u	new_size;
-+
-+			    /* Need new buffer to add bytes carried over. */
-+			    new_size = (long_u)(decrypted_size + linerest + 1);
-+			    new_buffer = lalloc(new_size, FALSE);
-+			    if (new_buffer == NULL)
-+			    {
-+				do_outofmem_msg(new_size);
-+				error = TRUE;
-+				break;
-+			    }
-+
-+			    mch_memmove(new_buffer, buffer, linerest);
-+			    if (newptr != NULL)
-+				mch_memmove(new_buffer + linerest, newptr,
-+							      decrypted_size);
-+			}
-+
-+			if (new_buffer != NULL)
-+			{
-+			    vim_free(buffer);
-+			    buffer = new_buffer;
-+			    new_buffer = NULL;
-+			    line_start = buffer;
-+			    ptr = buffer + linerest;
-+			}
-+			size = decrypted_size;
-+		    }
-+		}
-+#endif
-+
- 		if (size <= 0)
- 		{
- 		    if (size < 0)		    /* read error */
-@@ -1403,21 +1462,6 @@ retry:
- 		    }
- #endif
- 		}
--
--#ifdef FEAT_CRYPT
--		/*
--		 * At start of file: Check for magic number of encryption.
--		 */
--		if (filesize == 0)
--		    cryptkey = check_for_cryptkey(cryptkey, ptr, &size,
--					&filesize, newfile, sfname,
--					&did_ask_for_key);
--		/*
--		 * Decrypt the read bytes.
--		 */
--		if (cryptkey != NULL && size > 0)
--		    crypt_decode(ptr, size);
--#endif
- 	    }
- 	    skip_read = FALSE;
- 
-@@ -1430,10 +1474,9 @@ retry:
- 	     */
- 	    if ((filesize == 0
- # ifdef FEAT_CRYPT
--		   || (filesize == (CRYPT_MAGIC_LEN
--					   + crypt_salt_len[use_crypt_method]
--					   + crypt_seed_len[use_crypt_method])
--							  && cryptkey != NULL)
-+		   || (cryptkey != NULL
-+			&& filesize == crypt_get_header_len(
-+						 crypt_get_method_nr(curbuf)))
- # endif
- 		       )
- 		    && (fio_flags == FIO_UCSBOM
-@@ -2262,15 +2305,15 @@ failed:
- 	save_file_ff(curbuf);		/* remember the current file format */
- 
- #ifdef FEAT_CRYPT
--    crypt_method_used = use_crypt_method;
--    if (cryptkey != NULL)
-+    if (curbuf->b_cryptstate != NULL)
-     {
--	crypt_pop_state();
--	if (cryptkey != curbuf->b_p_key)
--	    free_crypt_key(cryptkey);
--	/* don't set cryptkey to NULL, it's used below as a flag that
--	 * encryption was used */
-+	crypt_free_state(curbuf->b_cryptstate);
-+	curbuf->b_cryptstate = NULL;
-     }
-+    if (cryptkey != NULL && cryptkey != curbuf->b_p_key)
-+	crypt_free_key(cryptkey);
-+    /* Don't set cryptkey to NULL, it's used below as a flag that
-+     * encryption was used. */
- #endif
- 
- #ifdef FEAT_MBYTE
-@@ -2457,10 +2500,7 @@ failed:
- #ifdef FEAT_CRYPT
- 	    if (cryptkey != NULL)
- 	    {
--		if (crypt_method_used == 1)
--		    STRCAT(IObuff, _("[blowfish]"));
--		else
--		    STRCAT(IObuff, _("[crypted]"));
-+		crypt_append_msg(curbuf);
- 		c = TRUE;
- 	    }
- #endif
-@@ -2489,9 +2529,7 @@ failed:
- #ifdef FEAT_CRYPT
- 	    if (cryptkey != NULL)
- 		msg_add_lines(c, (long)linecnt, filesize
--			- CRYPT_MAGIC_LEN
--			- crypt_salt_len[use_crypt_method]
--			- crypt_seed_len[use_crypt_method]);
-+			 - crypt_get_header_len(crypt_get_method_nr(curbuf)));
- 	    else
- #endif
- 		msg_add_lines(c, (long)linecnt, filesize);
-@@ -2882,33 +2920,6 @@ check_marks_read()
- 
- #if defined(FEAT_CRYPT) || defined(PROTO)
- /*
-- * Get the crypt method used for a file from "ptr[len]", the magic text at the
-- * start of the file.
-- * Returns -1 when no encryption used.
-- */
--    static int
--crypt_method_from_magic(ptr, len)
--    char  *ptr;
--    int   len;
--{
--    int i;
--
--    for (i = 0; i < (int)(sizeof(crypt_magic) / sizeof(crypt_magic[0])); i++)
--    {
--	if (len < (CRYPT_MAGIC_LEN + crypt_salt_len[i] + crypt_seed_len[i]))
--	    continue;
--	if (memcmp(ptr, crypt_magic[i], CRYPT_MAGIC_LEN) == 0)
--	    return i;
--    }
--
--    i = (int)STRLEN(crypt_magic_head);
--    if (len >= i && memcmp(ptr, crypt_magic_head, i) == 0)
--	EMSG(_("E821: File is encrypted with unknown method"));
--
--    return -1;
--}
--
--/*
-  * Check for magic number used for encryption.  Applies to the current buffer.
-  * If found, the magic number is removed from ptr[*sizep] and *sizep and
-  * *filesizep are updated.
-@@ -2924,7 +2935,7 @@ check_for_cryptkey(cryptkey, ptr, sizep,
-     char_u	*fname;		/* file name to display */
-     int		*did_ask;	/* flag: whether already asked for key */
- {
--    int method = crypt_method_from_magic((char *)ptr, *sizep);
-+    int method = crypt_method_nr_from_magic((char *)ptr, *sizep);
-     int b_p_ro = curbuf->b_p_ro;
- 
-     if (method >= 0)
-@@ -2933,9 +2944,8 @@ check_for_cryptkey(cryptkey, ptr, sizep,
- 	 * Avoids accidentally overwriting the file with garbage. */
- 	curbuf->b_p_ro = TRUE;
- 
--	set_crypt_method(curbuf, method);
--	if (method > 0)
--	    (void)blowfish_self_test();
-+        /* Set the cryptmethod local to the buffer. */
-+	crypt_set_cm_option(curbuf, method);
- 	if (cryptkey == NULL && !*did_ask)
- 	{
- 	    if (*curbuf->b_p_key)
-@@ -2948,7 +2958,7 @@ check_for_cryptkey(cryptkey, ptr, sizep,
- 		 * Happens when retrying to detect encoding. */
- 		smsg((char_u *)_(need_key_msg), fname);
- 		msg_scroll = TRUE;
--		cryptkey = get_crypt_key(newfile, FALSE);
-+		cryptkey = crypt_get_key(newfile, FALSE);
- 		*did_ask = TRUE;
- 
- 		/* check if empty key entered */
-@@ -2963,24 +2973,18 @@ check_for_cryptkey(cryptkey, ptr, sizep,
- 
- 	if (cryptkey != NULL)
- 	{
--	    int seed_len = crypt_seed_len[method];
--	    int salt_len = crypt_salt_len[method];
-+	    int header_len;
- 
--	    crypt_push_state();
--	    use_crypt_method = method;
--	    if (method == 0)
--		crypt_init_keys(cryptkey);
--	    else
--	    {
--		bf_key_init(cryptkey, ptr + CRYPT_MAGIC_LEN, salt_len);
--		bf_ofb_init(ptr + CRYPT_MAGIC_LEN + salt_len, seed_len);
--	    }
-+	    curbuf->b_cryptstate = crypt_create_from_header(
-+						       method, cryptkey, ptr);
-+	    crypt_set_cm_option(curbuf, method);
-+
-+	    /* Remove cryptmethod specific header from the text. */
-+	    header_len = crypt_get_header_len(method);
-+	    *filesizep += header_len;
-+	    *sizep -= header_len;
-+	    mch_memmove(ptr, ptr + header_len, (size_t)*sizep);
- 
--	    /* Remove magic number from the text */
--	    *filesizep += CRYPT_MAGIC_LEN + salt_len + seed_len;
--	    *sizep -= CRYPT_MAGIC_LEN + salt_len + seed_len;
--	    mch_memmove(ptr, ptr + CRYPT_MAGIC_LEN + salt_len + seed_len,
--							      (size_t)*sizep);
- 	    /* Restore the read-only flag. */
- 	    curbuf->b_p_ro = b_p_ro;
- 	}
-@@ -2992,85 +2996,6 @@ check_for_cryptkey(cryptkey, ptr, sizep,
- 
-     return cryptkey;
- }
--
--/*
-- * Check for magic number used for encryption.  Applies to the current buffer.
-- * If found and decryption is possible returns OK;
-- */
--    int
--prepare_crypt_read(fp)
--    FILE	*fp;
--{
--    int		method;
--    char_u	buffer[CRYPT_MAGIC_LEN + CRYPT_SALT_LEN_MAX
--						    + CRYPT_SEED_LEN_MAX + 2];
--
--    if (fread(buffer, CRYPT_MAGIC_LEN, 1, fp) != 1)
--	return FAIL;
--    method = crypt_method_from_magic((char *)buffer,
--					CRYPT_MAGIC_LEN +
--					CRYPT_SEED_LEN_MAX +
--					CRYPT_SALT_LEN_MAX);
--    if (method < 0 || method != get_crypt_method(curbuf))
--	return FAIL;
--
--    crypt_push_state();
--    if (method == 0)
--	crypt_init_keys(curbuf->b_p_key);
--    else
--    {
--	int salt_len = crypt_salt_len[method];
--	int seed_len = crypt_seed_len[method];
--
--	if (fread(buffer, salt_len + seed_len, 1, fp) != 1)
--	    return FAIL;
--	bf_key_init(curbuf->b_p_key, buffer, salt_len);
--	bf_ofb_init(buffer + salt_len, seed_len);
--    }
--    return OK;
--}
--
--/*
-- * Prepare for writing encrypted bytes for buffer "buf".
-- * Returns a pointer to an allocated header of length "*lenp".
-- * When out of memory returns NULL.
-- * Otherwise calls crypt_push_state(), call crypt_pop_state() later.
-- */
--    char_u *
--prepare_crypt_write(buf, lenp)
--    buf_T *buf;
--    int   *lenp;
--{
--    char_u  *header;
--    int	    seed_len = crypt_seed_len[get_crypt_method(buf)];
--    int     salt_len = crypt_salt_len[get_crypt_method(buf)];
--    char_u  *salt;
--    char_u  *seed;
--
--    header = alloc_clear(CRYPT_MAGIC_LEN + CRYPT_SALT_LEN_MAX
--						    + CRYPT_SEED_LEN_MAX + 2);
--    if (header != NULL)
--    {
--	crypt_push_state();
--	use_crypt_method = get_crypt_method(buf);  /* select zip or blowfish */
--	vim_strncpy(header, (char_u *)crypt_magic[use_crypt_method],
--							     CRYPT_MAGIC_LEN);
--	if (use_crypt_method == 0)
--	    crypt_init_keys(buf->b_p_key);
--	else
--	{
--	    /* Using blowfish, add salt and seed. */
--	    salt = header + CRYPT_MAGIC_LEN;
--	    seed = salt + salt_len;
--	    sha2_seed(salt, salt_len, seed, seed_len);
--	    bf_key_init(buf->b_p_key, salt, salt_len);
--	    bf_ofb_init(seed, seed_len);
--	}
--    }
--    *lenp = CRYPT_MAGIC_LEN + salt_len + seed_len;
--    return header;
--}
--
- #endif  /* FEAT_CRYPT */
- 
- #ifdef UNIX
-@@ -3224,9 +3149,6 @@ buf_write(buf, fname, sfname, start, end
-     int		    write_undo_file = FALSE;
-     context_sha256_T sha_ctx;
- #endif
--#ifdef FEAT_CRYPT
--    int		    crypt_method_used;
--#endif
- 
-     if (fname == NULL || *fname == NUL)	/* safety check */
- 	return FAIL;
-@@ -3262,6 +3184,9 @@ buf_write(buf, fname, sfname, start, end
-     write_info.bw_iconv_fd = (iconv_t)-1;
- # endif
- #endif
-+#ifdef FEAT_CRYPT
-+    write_info.bw_buffer = buf;
-+#endif
- 
-     /* After writing a file changedtick changes but we don't want to display
-      * the line. */
-@@ -4505,17 +4430,17 @@ restore_backup:
- #ifdef FEAT_CRYPT
-     if (*buf->b_p_key != NUL && !filtering)
-     {
--	char_u *header;
--	int    header_len;
-+	char_u		*header;
-+	int		header_len;
- 
--	header = prepare_crypt_write(buf, &header_len);
--	if (header == NULL)
-+	buf->b_cryptstate = crypt_create_for_writing(crypt_get_method_nr(buf),
-+					  buf->b_p_key, &header, &header_len);
-+	if (buf->b_cryptstate == NULL || header == NULL)
- 	    end = 0;
- 	else
- 	{
--	    /* Write magic number, so that Vim knows that this file is
--	     * encrypted when reading it again.  This also undergoes utf-8 to
--	     * ucs-2/4 conversion when needed. */
-+	    /* Write magic number, so that Vim knows how this file is
-+	     * encrypted when reading it back. */
- 	    write_info.bw_buf = header;
- 	    write_info.bw_len = header_len;
- 	    write_info.bw_flags = FIO_NOCONVERT;
-@@ -4769,9 +4694,11 @@ restore_backup:
- 	mch_set_acl(wfname, acl);
- #endif
- #ifdef FEAT_CRYPT
--    crypt_method_used = use_crypt_method;
--    if (wb_flags & FIO_ENCRYPTED)
--	crypt_pop_state();
-+    if (buf->b_cryptstate != NULL)
-+    {
-+	crypt_free_state(buf->b_cryptstate);
-+	buf->b_cryptstate = NULL;
-+    }
- #endif
- 
- 
-@@ -4924,10 +4851,7 @@ restore_backup:
- #ifdef FEAT_CRYPT
- 	if (wb_flags & FIO_ENCRYPTED)
- 	{
--	    if (crypt_method_used == 1)
--		STRCAT(IObuff, _("[blowfish]"));
--	    else
--		STRCAT(IObuff, _("[crypted]"));
-+	    crypt_append_msg(buf);
- 	    c = TRUE;
- 	}
- #endif
-@@ -5740,8 +5664,26 @@ buf_write_bytes(ip)
- #endif /* FEAT_MBYTE */
- 
- #ifdef FEAT_CRYPT
--    if (flags & FIO_ENCRYPTED)		/* encrypt the data */
--	crypt_encode(buf, len, buf);
-+    if (flags & FIO_ENCRYPTED)
-+    {
-+	/* Encrypt the data. Do it in-place if possible, otherwise use an
-+	 * allocated buffer. */
-+	if (crypt_works_inplace(ip->bw_buffer->b_cryptstate))
-+	{
-+	    crypt_encode_inplace(ip->bw_buffer->b_cryptstate, buf, len);
-+	}
-+	else
-+	{
-+	    char_u *outbuf;
-+
-+	    len = crypt_encode_alloc(curbuf->b_cryptstate, buf, len, &outbuf);
-+	    if (len == 0)
-+		return OK;  /* Crypt layer is buffering, will flush later. */
-+	    wlen = write_eintr(ip->bw_fd, outbuf, len);
-+	    vim_free(outbuf);
-+	    return (wlen < len) ? FAIL : OK;
-+	}
-+    }
- #endif
- 
-     wlen = write_eintr(ip->bw_fd, buf, len);
-diff -up vim74/src/globals.h.blowfish2 vim74/src/globals.h
---- vim74/src/globals.h.blowfish2	2017-09-05 14:47:33.909920425 +0200
-+++ vim74/src/globals.h	2017-09-05 14:47:34.950912022 +0200
-@@ -105,10 +105,6 @@ EXTERN int	exec_from_reg INIT(= FALSE);
- 
- EXTERN int	screen_cleared INIT(= FALSE);	/* screen has been cleared */
- 
--#ifdef FEAT_CRYPT
--EXTERN int      use_crypt_method INIT(= 0);
--#endif
--
- /*
-  * When '$' is included in 'cpoptions' option set:
-  * When a change command is given that deletes only part of a line, a dollar
-diff -up vim74/src/main.c.blowfish2 vim74/src/main.c
---- vim74/src/main.c.blowfish2	2017-09-05 14:47:34.571915081 +0200
-+++ vim74/src/main.c	2017-09-05 14:47:34.955911982 +0200
-@@ -845,8 +845,7 @@ vim_main2(int argc UNUSED, char **argv U
- #ifdef FEAT_CRYPT
-     if (params.ask_for_key)
-     {
--	(void)blowfish_self_test();
--	(void)get_crypt_key(TRUE, TRUE);
-+	(void)crypt_get_key(TRUE, TRUE);
- 	TIME_MSG("getting crypt key");
-     }
- #endif
-diff -up vim74/src/Makefile.blowfish2 vim74/src/Makefile
---- vim74/src/Makefile.blowfish2	2017-09-05 14:47:34.847912854 +0200
-+++ vim74/src/Makefile	2017-09-05 14:47:34.956911974 +0200
-@@ -1427,6 +1427,8 @@ BASIC_SRC = \
- 	blowfish.c \
- 	buffer.c \
- 	charset.c \
-+	crypt.c \
-+	crypt_zip.c \
- 	diff.c \
- 	digraph.c \
- 	edit.c \
-@@ -1516,6 +1518,8 @@ OBJ_COMMON = \
- 	objects/buffer.o \
- 	objects/blowfish.o \
- 	objects/charset.o \
-+	objects/crypt.o \
-+	objects/crypt_zip.o \
- 	objects/diff.o \
- 	objects/digraph.o \
- 	objects/edit.o \
-@@ -1585,6 +1589,8 @@ PRO_AUTO = \
- 	blowfish.pro \
- 	buffer.pro \
- 	charset.pro \
-+	crypt.pro \
-+	crypt_zip.pro \
- 	diff.pro \
- 	digraph.pro \
- 	edit.pro \
-@@ -1745,10 +1751,11 @@ xxd/xxd$(EXEEXT): xxd/xxd.c
- languages:
- 	@if test -n "$(MAKEMO)" -a -f $(PODIR)/Makefile; then \
- 		cd $(PODIR); \
--		CC="$(CC)" $(MAKE) prefix=$(DESTDIR)$(prefix); \
-+		  CC="$(CC)" $(MAKE) prefix=$(DESTDIR)$(prefix); \
- 	fi
- 	-@if test -n "$(MAKEMO)" -a -f $(PODIR)/Makefile; then \
--		cd $(PODIR); CC="$(CC)" $(MAKE) prefix=$(DESTDIR)$(prefix) converted; \
-+		cd $(PODIR); \
-+		  CC="$(CC)" $(MAKE) prefix=$(DESTDIR)$(prefix) converted; \
- 	fi
- 
- # Update the *.po files for changes in the sources.  Only run manually.
-@@ -1874,6 +1881,12 @@ unittest unittests: $(UNITTEST_TARGETS)
- 
- # Run individual test, assuming that Vim was already compiled.
- test1 test2 test3 test4 test5 test6 test7 test8 test9 \
-+	test_breakindent \
-+	test_changelist \
-+	test_insertcount \
-+	test_listlbr \
-+	test_listlbr_utf8 \
-+	test_qf_title \
- 	test10 test11 test12 test13 test14 test15 test16 test17 test18 test19 \
- 	test20 test21 test22 test23 test24 test25 test26 test27 test28 test29 \
- 	test30 test31 test32 test33 test34 test35 test36 test37 test38 test39 \
-@@ -2494,6 +2507,12 @@ objects/buffer.o: buffer.c
- objects/charset.o: charset.c
- 	$(CCC) -o $@ charset.c
- 
-+objects/crypt.o: crypt.c
-+	$(CCC) -o $@ crypt.c
-+
-+objects/crypt_zip.o: crypt_zip.c
-+	$(CCC) -o $@ crypt_zip.c
-+
- objects/diff.o: diff.c
- 	$(CCC) -o $@ diff.c
- 
-@@ -2843,6 +2862,14 @@ objects/charset.o: charset.c vim.h auto/
-  ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
-  gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \
-  arabic.h
-+objects/crypt.o: crypt.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
-+ ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
-+ gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \
-+ arabic.h
-+objects/crypt_zip.o: crypt_zip.c vim.h auto/config.h feature.h os_unix.h \
-+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
-+ regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \
-+ globals.h farsi.h arabic.h
- objects/diff.o: diff.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
-  ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
-  gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \
-diff -up vim74/src/memline.c.blowfish2 vim74/src/memline.c
---- vim74/src/memline.c.blowfish2	2017-09-05 14:47:34.217917939 +0200
-+++ vim74/src/memline.c	2017-09-05 14:47:34.957911966 +0200
-@@ -63,6 +63,15 @@ typedef struct pointer_entry	PTR_EN;
- #define BLOCK0_ID1     '0'		    /* block 0 id 1 */
- #define BLOCK0_ID1_C0  'c'		    /* block 0 id 1 'cm' 0 */
- #define BLOCK0_ID1_C1  'C'		    /* block 0 id 1 'cm' 1 */
-+#define BLOCK0_ID1_C2  'd'		    /* block 0 id 1 'cm' 2 */
-+
-+#if defined(FEAT_CRYPT)
-+static int id1_codes[] = {
-+    BLOCK0_ID1_C0,  /* CRYPT_M_ZIP */
-+    BLOCK0_ID1_C1,  /* CRYPT_M_BF */
-+    BLOCK0_ID1_C2,  /* CRYPT_M_BF2 */
-+};
-+#endif
- 
- /*
-  * pointer to a block, used in a pointer block
-@@ -151,7 +160,7 @@ struct data_block
- struct block0
- {
-     char_u	b0_id[2];	/* id for block 0: BLOCK0_ID0 and BLOCK0_ID1,
--				 * BLOCK0_ID1_C0, BLOCK0_ID1_C1 */
-+				 * BLOCK0_ID1_C0, BLOCK0_ID1_C1, etc. */
-     char_u	b0_version[10];	/* Vim version string */
-     char_u	b0_page_size[4];/* number of bytes per page */
-     char_u	b0_mtime[4];	/* last modification time of file */
-@@ -226,6 +235,7 @@ typedef enum {
- } upd_block0_T;
- 
- #ifdef FEAT_CRYPT
-+static void ml_set_mfp_crypt __ARGS((buf_T *buf));
- static void ml_set_b0_crypt __ARGS((buf_T *buf, ZERO_BL *b0p));
- #endif
- static int ml_check_b0_id __ARGS((ZERO_BL *b0p));
-@@ -256,7 +266,7 @@ static long char_to_long __ARGS((char_u
- static char_u *make_percent_swname __ARGS((char_u *dir, char_u *name));
- #endif
- #ifdef FEAT_CRYPT
--static void ml_crypt_prepare __ARGS((memfile_T *mfp, off_t offset, int reading));
-+static cryptstate_T *ml_crypt_prepare __ARGS((memfile_T *mfp, off_t offset, int reading));
- #endif
- #ifdef FEAT_BYTEOFF
- static void ml_updatechunk __ARGS((buf_T *buf, long line, long len, int updtype));
-@@ -356,8 +366,7 @@ ml_open(buf)
- 	b0p->b0_hname[B0_HNAME_SIZE - 1] = NUL;
- 	long_to_char(mch_get_pid(), b0p->b0_pid);
- #ifdef FEAT_CRYPT
--	if (*buf->b_p_key != NUL)
--	    ml_set_b0_crypt(buf, b0p);
-+	ml_set_b0_crypt(buf, b0p);
- #endif
-     }
- 
-@@ -422,6 +431,25 @@ error:
- 
- #if defined(FEAT_CRYPT) || defined(PROTO)
- /*
-+ * Prepare encryption for "buf" for the current key and method.
-+ */
-+    static void
-+ml_set_mfp_crypt(buf)
-+    buf_T	*buf;
-+{
-+    if (*buf->b_p_key != NUL)
-+    {
-+	int method_nr = crypt_get_method_nr(buf);
-+
-+	if (method_nr > CRYPT_M_ZIP)
-+	{
-+	    /* Generate a seed and store it in the memfile. */
-+	    sha2_seed(buf->b_ml.ml_mfp->mf_seed, MF_SEED_LEN, NULL, 0);
-+	}
-+    }
-+}
-+
-+/*
-  * Prepare encryption for "buf" with block 0 "b0p".
-  */
-     static void
-@@ -433,11 +461,11 @@ ml_set_b0_crypt(buf, b0p)
- 	b0p->b0_id[1] = BLOCK0_ID1;
-     else
-     {
--	if (get_crypt_method(buf) == 0)
--	    b0p->b0_id[1] = BLOCK0_ID1_C0;
--	else
-+	int method_nr = crypt_get_method_nr(buf);
-+
-+	b0p->b0_id[1] = id1_codes[method_nr];
-+	if (method_nr > CRYPT_M_ZIP)
- 	{
--	    b0p->b0_id[1] = BLOCK0_ID1_C1;
- 	    /* Generate a seed and store it in block 0 and in the memfile. */
- 	    sha2_seed(&b0p->b0_seed, MF_SEED_LEN, NULL, 0);
- 	    mch_memmove(buf->b_ml.ml_mfp->mf_seed, &b0p->b0_seed, MF_SEED_LEN);
-@@ -884,7 +912,8 @@ ml_check_b0_id(b0p)
-     if (b0p->b0_id[0] != BLOCK0_ID0
- 	    || (b0p->b0_id[1] != BLOCK0_ID1
- 		&& b0p->b0_id[1] != BLOCK0_ID1_C0
--		&& b0p->b0_id[1] != BLOCK0_ID1_C1)
-+		&& b0p->b0_id[1] != BLOCK0_ID1_C1
-+		&& b0p->b0_id[1] != BLOCK0_ID1_C2)
- 	    )
- 	return FAIL;
-     return OK;
-@@ -903,8 +932,19 @@ ml_upd_block0(buf, what)
-     ZERO_BL	*b0p;
- 
-     mfp = buf->b_ml.ml_mfp;
--    if (mfp == NULL || (hp = mf_get(mfp, (blocknr_T)0, 1)) == NULL)
-+    if (mfp == NULL)
-+	return;
-+    hp = mf_get(mfp, (blocknr_T)0, 1);
-+    if (hp == NULL)
-+    {
-+#ifdef FEAT_CRYPT
-+	/* Possibly update the seed in the memfile before there is a block0. */
-+	if (what == UB_CRYPT)
-+	    ml_set_mfp_crypt(buf);
-+#endif
- 	return;
-+    }
-+
-     b0p = (ZERO_BL *)(hp->bh_data);
-     if (ml_check_b0_id(b0p) == FAIL)
- 	EMSG(_("E304: ml_upd_block0(): Didn't get block 0??"));
-@@ -1252,14 +1292,12 @@ ml_recover()
-     }
- 
- #ifdef FEAT_CRYPT
--    if (b0p->b0_id[1] == BLOCK0_ID1_C0)
--	b0_cm = 0;
--    else if (b0p->b0_id[1] == BLOCK0_ID1_C1)
--    {
--	b0_cm = 1;
-+    for (i = 0; i < (int)(sizeof(id1_codes) / sizeof(int)); ++i)
-+	if (id1_codes[i] == b0p->b0_id[1])
-+	    b0_cm = i;
-+    if (b0_cm > 0)
- 	mch_memmove(mfp->mf_seed, &b0p->b0_seed, MF_SEED_LEN);
--    }
--    set_crypt_method(buf, b0_cm);
-+    crypt_set_cm_option(buf, b0_cm < 0 ? 0 : b0_cm);
- #else
-     if (b0p->b0_id[1] != BLOCK0_ID1)
-     {
-@@ -1386,7 +1424,7 @@ ml_recover()
- 	}
- 	else
- 	    smsg((char_u *)_(need_key_msg), fname_used);
--	buf->b_p_key = get_crypt_key(FALSE, FALSE);
-+	buf->b_p_key = crypt_get_key(FALSE, FALSE);
- 	if (buf->b_p_key == NULL)
- 	    buf->b_p_key = curbuf->b_p_key;
- 	else if (*buf->b_p_key == NUL)
-@@ -4813,6 +4851,7 @@ ml_encrypt_data(mfp, data, offset, size)
-     char_u	*text_start;
-     char_u	*new_data;
-     int		text_len;
-+    cryptstate_T *state;
- 
-     if (dp->db_id != DATA_ID)
- 	return data;
-@@ -4828,10 +4867,9 @@ ml_encrypt_data(mfp, data, offset, size)
-     mch_memmove(new_data, dp, head_end - (char_u *)dp);
- 
-     /* Encrypt the text. */
--    crypt_push_state();
--    ml_crypt_prepare(mfp, offset, FALSE);
--    crypt_encode(text_start, text_len, new_data + dp->db_txt_start);
--    crypt_pop_state();
-+    state = ml_crypt_prepare(mfp, offset, FALSE);
-+    crypt_encode(state, text_start, text_len, new_data + dp->db_txt_start);
-+    crypt_free_state(state);
- 
-     /* Clear the gap. */
-     if (head_end < text_start)
-@@ -4854,6 +4892,7 @@ ml_decrypt_data(mfp, data, offset, size)
-     char_u	*head_end;
-     char_u	*text_start;
-     int		text_len;
-+    cryptstate_T *state;
- 
-     if (dp->db_id == DATA_ID)
-     {
-@@ -4866,17 +4905,17 @@ ml_decrypt_data(mfp, data, offset, size)
- 	    return;  /* data was messed up */
- 
- 	/* Decrypt the text in place. */
--	crypt_push_state();
--	ml_crypt_prepare(mfp, offset, TRUE);
--	crypt_decode(text_start, text_len);
--	crypt_pop_state();
-+	state = ml_crypt_prepare(mfp, offset, TRUE);
-+	crypt_decode_inplace(state, text_start, text_len);
-+	crypt_free_state(state);
-     }
- }
- 
- /*
-  * Prepare for encryption/decryption, using the key, seed and offset.
-+ * Return an allocated cryptstate_T *.
-  */
--    static void
-+    static cryptstate_T *
- ml_crypt_prepare(mfp, offset, reading)
-     memfile_T	*mfp;
-     off_t	offset;
-@@ -4884,38 +4923,37 @@ ml_crypt_prepare(mfp, offset, reading)
- {
-     buf_T	*buf = mfp->mf_buffer;
-     char_u	salt[50];
--    int		method;
-+    int		method_nr;
-     char_u	*key;
-     char_u	*seed;
- 
-     if (reading && mfp->mf_old_key != NULL)
-     {
- 	/* Reading back blocks with the previous key/method/seed. */
--	method = mfp->mf_old_cm;
-+	method_nr = mfp->mf_old_cm;
- 	key = mfp->mf_old_key;
- 	seed = mfp->mf_old_seed;
-     }
-     else
-     {
--	method = get_crypt_method(buf);
-+	method_nr = crypt_get_method_nr(buf);
- 	key = buf->b_p_key;
- 	seed = mfp->mf_seed;
-     }
- 
--    use_crypt_method = method;  /* select pkzip or blowfish */
--    if (method == 0)
-+    if (method_nr == CRYPT_M_ZIP)
-     {
-+	/* For PKzip: Append the offset to the key, so that we use a different
-+	 * key for every block. */
- 	vim_snprintf((char *)salt, sizeof(salt), "%s%ld", key, (long)offset);
--	crypt_init_keys(salt);
--    }
--    else
--    {
--	/* Using blowfish, add salt and seed. We use the byte offset of the
--	 * block for the salt. */
--	vim_snprintf((char *)salt, sizeof(salt), "%ld", (long)offset);
--	bf_key_init(key, salt, (int)STRLEN(salt));
--	bf_ofb_init(seed, MF_SEED_LEN);
-+	return crypt_create(method_nr, salt, NULL, 0, NULL, 0);
-     }
-+
-+    /* Using blowfish or better: add salt and seed. We use the byte offset
-+     * of the block for the salt. */
-+    vim_snprintf((char *)salt, sizeof(salt), "%ld", (long)offset);
-+    return crypt_create(method_nr, key, salt, (int)STRLEN(salt),
-+							   seed, MF_SEED_LEN);
- }
- 
- #endif
-diff -up vim74/src/misc2.c.blowfish2 vim74/src/misc2.c
---- vim74/src/misc2.c.blowfish2	2017-09-05 14:47:34.461915969 +0200
-+++ vim74/src/misc2.c	2017-09-05 14:47:34.959911949 +0200
-@@ -3803,322 +3803,6 @@ update_mouseshape(shape_idx)
- #endif /* CURSOR_SHAPE */
- 
- 
--#ifdef FEAT_CRYPT
--/*
-- * Optional encryption support.
-- * Mohsin Ahmed, mosh@sasi.com, 98-09-24
-- * Based on zip/crypt sources.
-- *
-- * NOTE FOR USA: Since 2000 exporting this code from the USA is allowed to
-- * most countries.  There are a few exceptions, but that still should not be a
-- * problem since this code was originally created in Europe and India.
-- *
-- * Blowfish addition originally made by Mohsin Ahmed,
-- * http://www.cs.albany.edu/~mosh 2010-03-14
-- * Based on blowfish by Bruce Schneier (http://www.schneier.com/blowfish.html)
-- * and sha256 by Christophe Devine.
-- */
--
--/* from zip.h */
--
--typedef unsigned short ush;	/* unsigned 16-bit value */
--typedef unsigned long  ulg;	/* unsigned 32-bit value */
--
--static void make_crc_tab __ARGS((void));
--
--static ulg crc_32_tab[256];
--
--/*
-- * Fill the CRC table.
-- */
--    static void
--make_crc_tab()
--{
--    ulg		s,t,v;
--    static int	done = FALSE;
--
--    if (done)
--	return;
--    for (t = 0; t < 256; t++)
--    {
--	v = t;
--	for (s = 0; s < 8; s++)
--	    v = (v >> 1) ^ ((v & 1) * (ulg)0xedb88320L);
--	crc_32_tab[t] = v;
--    }
--    done = TRUE;
--}
--
--#define CRC32(c, b) (crc_32_tab[((int)(c) ^ (b)) & 0xff] ^ ((c) >> 8))
--
--static ulg keys[3]; /* keys defining the pseudo-random sequence */
--
--/*
-- * Return the next byte in the pseudo-random sequence.
-- */
--#define DECRYPT_BYTE_ZIP(t) { \
--    ush temp; \
-- \
--    temp = (ush)keys[2] | 2; \
--    t = (int)(((unsigned)(temp * (temp ^ 1U)) >> 8) & 0xff); \
--}
--
--/*
-- * Update the encryption keys with the next byte of plain text.
-- */
--#define UPDATE_KEYS_ZIP(c) { \
--    keys[0] = CRC32(keys[0], (c)); \
--    keys[1] += keys[0] & 0xff; \
--    keys[1] = keys[1] * 134775813L + 1; \
--    keys[2] = CRC32(keys[2], (int)(keys[1] >> 24)); \
--}
--
--static int crypt_busy = 0;
--static ulg saved_keys[3];
--static int saved_crypt_method;
--
--/*
-- * Return int value for crypt method string:
-- * 0 for "zip", the old method.  Also for any non-valid value.
-- * 1 for "blowfish".
-- */
--    int
--crypt_method_from_string(s)
--    char_u  *s;
--{
--    return *s == 'b' ? 1 : 0;
--}
--
--/*
-- * Get the crypt method for buffer "buf" as a number.
-- */
--    int
--get_crypt_method(buf)
--    buf_T *buf;
--{
--    return crypt_method_from_string(*buf->b_p_cm == NUL ? p_cm : buf->b_p_cm);
--}
--
--/*
-- * Set the crypt method for buffer "buf" to "method" using the int value as
-- * returned by crypt_method_from_string().
-- */
--    void
--set_crypt_method(buf, method)
--    buf_T   *buf;
--    int	    method;
--{
--    free_string_option(buf->b_p_cm);
--    buf->b_p_cm = vim_strsave((char_u *)(method == 0 ? "zip" : "blowfish"));
--}
--
--/*
-- * Prepare for initializing encryption.  If already doing encryption then save
-- * the state.
-- * Must always be called symmetrically with crypt_pop_state().
-- */
--    void
--crypt_push_state()
--{
--    if (crypt_busy == 1)
--    {
--	/* save the state */
--	if (use_crypt_method == 0)
--	{
--	    saved_keys[0] = keys[0];
--	    saved_keys[1] = keys[1];
--	    saved_keys[2] = keys[2];
--	}
--	else
--	    bf_crypt_save();
--	saved_crypt_method = use_crypt_method;
--    }
--    else if (crypt_busy > 1)
--	EMSG2(_(e_intern2), "crypt_push_state()");
--    ++crypt_busy;
--}
--
--/*
-- * End encryption.  If doing encryption before crypt_push_state() then restore
-- * the saved state.
-- * Must always be called symmetrically with crypt_push_state().
-- */
--    void
--crypt_pop_state()
--{
--    --crypt_busy;
--    if (crypt_busy == 1)
--    {
--	use_crypt_method = saved_crypt_method;
--	if (use_crypt_method == 0)
--	{
--	    keys[0] = saved_keys[0];
--	    keys[1] = saved_keys[1];
--	    keys[2] = saved_keys[2];
--	}
--	else
--	    bf_crypt_restore();
--    }
--}
--
--/*
-- * Encrypt "from[len]" into "to[len]".
-- * "from" and "to" can be equal to encrypt in place.
-- */
--    void
--crypt_encode(from, len, to)
--    char_u	*from;
--    size_t	len;
--    char_u	*to;
--{
--    size_t	i;
--    int		ztemp, t;
--
--    if (use_crypt_method == 0)
--	for (i = 0; i < len; ++i)
--	{
--	    ztemp = from[i];
--	    DECRYPT_BYTE_ZIP(t);
--	    UPDATE_KEYS_ZIP(ztemp);
--	    to[i] = t ^ ztemp;
--	}
--    else
--	bf_crypt_encode(from, len, to);
--}
--
--/*
-- * Decrypt "ptr[len]" in place.
-- */
--    void
--crypt_decode(ptr, len)
--    char_u	*ptr;
--    long	len;
--{
--    char_u *p;
--
--    if (use_crypt_method == 0)
--	for (p = ptr; p < ptr + len; ++p)
--	{
--	    ush temp;
--
--	    temp = (ush)keys[2] | 2;
--	    temp = (int)(((unsigned)(temp * (temp ^ 1U)) >> 8) & 0xff);
--	    UPDATE_KEYS_ZIP(*p ^= temp);
--	}
--    else
--	bf_crypt_decode(ptr, len);
--}
--
--/*
-- * Initialize the encryption keys and the random header according to
-- * the given password.
-- * If "passwd" is NULL or empty, don't do anything.
-- */
--    void
--crypt_init_keys(passwd)
--    char_u *passwd;		/* password string with which to modify keys */
--{
--    if (passwd != NULL && *passwd != NUL)
--    {
--	if (use_crypt_method == 0)
--	{
--	    char_u *p;
--
--	    make_crc_tab();
--	    keys[0] = 305419896L;
--	    keys[1] = 591751049L;
--	    keys[2] = 878082192L;
--	    for (p = passwd; *p!= NUL; ++p)
--	    {
--		UPDATE_KEYS_ZIP((int)*p);
--	    }
--	}
--	else
--	    bf_crypt_init_keys(passwd);
--    }
--}
--
--/*
-- * Free an allocated crypt key.  Clear the text to make sure it doesn't stay
-- * in memory anywhere.
-- */
--    void
--free_crypt_key(key)
--    char_u *key;
--{
--    char_u *p;
--
--    if (key != NULL)
--    {
--	for (p = key; *p != NUL; ++p)
--	    *p = 0;
--	vim_free(key);
--    }
--}
--
--/*
-- * Ask the user for a crypt key.
-- * When "store" is TRUE, the new key is stored in the 'key' option, and the
-- * 'key' option value is returned: Don't free it.
-- * When "store" is FALSE, the typed key is returned in allocated memory.
-- * Returns NULL on failure.
-- */
--    char_u *
--get_crypt_key(store, twice)
--    int		store;
--    int		twice;	    /* Ask for the key twice. */
--{
--    char_u	*p1, *p2 = NULL;
--    int		round;
--
--    for (round = 0; ; ++round)
--    {
--	cmdline_star = TRUE;
--	cmdline_row = msg_row;
--	p1 = getcmdline_prompt(NUL, round == 0
--		? (char_u *)_("Enter encryption key: ")
--		: (char_u *)_("Enter same key again: "), 0, EXPAND_NOTHING,
--		NULL);
--	cmdline_star = FALSE;
--
--	if (p1 == NULL)
--	    break;
--
--	if (round == twice)
--	{
--	    if (p2 != NULL && STRCMP(p1, p2) != 0)
--	    {
--		MSG(_("Keys don't match!"));
--		free_crypt_key(p1);
--		free_crypt_key(p2);
--		p2 = NULL;
--		round = -1;		/* do it again */
--		continue;
--	    }
--
--	    if (store)
--	    {
--		set_option_value((char_u *)"key", 0L, p1, OPT_LOCAL);
--		free_crypt_key(p1);
--		p1 = curbuf->b_p_key;
--	    }
--	    break;
--	}
--	p2 = p1;
--    }
--
--    /* since the user typed this, no need to wait for return */
--    if (msg_didout)
--	msg_putchar('\n');
--    need_wait_return = FALSE;
--    msg_didout = FALSE;
--
--    free_crypt_key(p2);
--    return p1;
--}
--
--#endif /* FEAT_CRYPT */
--
- /* TODO: make some #ifdef for this */
- /*--------[ file searching ]-------------------------------------------------*/
- /*
-@@ -6588,8 +6272,23 @@ put_time(fd, the_time)
-     FILE	*fd;
-     time_t	the_time;
- {
-+    char_u	buf[8];
-+
-+    time_to_bytes(the_time, buf);
-+    fwrite(buf, (size_t)8, (size_t)1, fd);
-+}
-+
-+/*
-+ * Write time_t to "buf[8]".
-+ */
-+    void
-+time_to_bytes(the_time, buf)
-+    time_t	the_time;
-+    char_u	*buf;
-+{
-     int		c;
-     int		i;
-+    int		bi = 0;
-     time_t	wtime = the_time;
- 
-     /* time_t can be up to 8 bytes in size, more than long_u, thus we
-@@ -6603,7 +6302,7 @@ put_time(fd, the_time)
-     {
- 	if (i + 1 > (int)sizeof(time_t))
- 	    /* ">>" doesn't work well when shifting more bits than avail */
--	    putc(0, fd);
-+	    buf[bi++] = 0;
- 	else
- 	{
- #if defined(SIZEOF_TIME_T) && SIZEOF_TIME_T > 4
-@@ -6611,7 +6310,7 @@ put_time(fd, the_time)
- #else
- 	    c = (int)((long_u)wtime >> (i * 8));
- #endif
--	    putc(c, fd);
-+	    buf[bi++] = c;
- 	}
-     }
- }
-diff -up vim74/src/option.c.blowfish2 vim74/src/option.c
---- vim74/src/option.c.blowfish2	2017-09-05 14:47:34.899912434 +0200
-+++ vim74/src/option.c	2017-09-05 14:47:34.961911933 +0200
-@@ -2969,7 +2969,7 @@ static char *(p_bg_values[]) = {"light",
- static char *(p_nf_values[]) = {"octal", "hex", "alpha", NULL};
- static char *(p_ff_values[]) = {FF_UNIX, FF_DOS, FF_MAC, NULL};
- #ifdef FEAT_CRYPT
--static char *(p_cm_values[]) = {"zip", "blowfish", NULL};
-+static char *(p_cm_values[]) = {"zip", "blowfish", "blowfish2", NULL};
- #endif
- #ifdef FEAT_CMDL_COMPL
- static char *(p_wop_values[]) = {"tagfile", NULL};
-@@ -6156,7 +6156,7 @@ did_set_string_option(opt_idx, varp, new
- # endif
- 	if (STRCMP(curbuf->b_p_key, oldval) != 0)
- 	    /* Need to update the swapfile. */
--	    ml_set_crypt_key(curbuf, oldval, get_crypt_method(curbuf));
-+	    ml_set_crypt_key(curbuf, oldval, crypt_get_method_nr(curbuf));
-     }
- 
-     else if (gvarp == &p_cm)
-@@ -6167,7 +6167,7 @@ did_set_string_option(opt_idx, varp, new
- 	    p = p_cm;
- 	if (check_opt_strings(p, p_cm_values, TRUE) != OK)
- 	    errmsg = e_invarg;
--	else if (get_crypt_method(curbuf) > 0 && blowfish_self_test() == FAIL)
-+	else if (crypt_self_test() == FAIL)
- 	    errmsg = e_invarg;
- 	else
- 	{
-@@ -6179,6 +6179,14 @@ did_set_string_option(opt_idx, varp, new
- 		p_cm = vim_strsave((char_u *)"zip");
- 		new_value_alloced = TRUE;
- 	    }
-+	    /* When using ":set cm=name" the local value is going to be empty.
-+	     * Do that here, otherwise the crypt functions will still use the
-+	     * local value. */
-+	    if ((opt_flags & (OPT_LOCAL | OPT_GLOBAL)) == 0)
-+	    {
-+		free_string_option(curbuf->b_p_cm);
-+		curbuf->b_p_cm = empty_option;
-+	    }
- 
- 	    /* Need to update the swapfile when the effective method changed.
- 	     * Set "s" to the effective old value, "p" to the effective new
-@@ -6193,7 +6201,7 @@ did_set_string_option(opt_idx, varp, new
- 		p = curbuf->b_p_cm;
- 	    if (STRCMP(s, p) != 0)
- 		ml_set_crypt_key(curbuf, curbuf->b_p_key,
--						 crypt_method_from_string(s));
-+						crypt_method_nr_from_name(s));
- 
- 	    /* If the global value changes need to update the swapfile for all
- 	     * buffers using that value. */
-@@ -6204,7 +6212,7 @@ did_set_string_option(opt_idx, varp, new
- 		for (buf = firstbuf; buf != NULL; buf = buf->b_next)
- 		    if (buf != curbuf && *buf->b_p_cm == NUL)
- 			ml_set_crypt_key(buf, buf->b_p_key,
--					    crypt_method_from_string(oldval));
-+					   crypt_method_nr_from_name(oldval));
- 	    }
- 	}
-     }
-diff -up vim74/src/proto/blowfish.pro.blowfish2 vim74/src/proto/blowfish.pro
---- vim74/src/proto/blowfish.pro.blowfish2	2013-08-10 13:37:06.000000000 +0200
-+++ vim74/src/proto/blowfish.pro	2017-09-05 14:47:34.964911909 +0200
-@@ -1,10 +1,6 @@
- /* blowfish.c */
--void bf_key_init __ARGS((char_u *password, char_u *salt, int salt_len));
--void bf_ofb_init __ARGS((char_u *iv, int iv_len));
--void bf_crypt_encode __ARGS((char_u *from, size_t len, char_u *to));
--void bf_crypt_decode __ARGS((char_u *ptr, long len));
--void bf_crypt_init_keys __ARGS((char_u *passwd));
--void bf_crypt_save __ARGS((void));
--void bf_crypt_restore __ARGS((void));
-+void crypt_blowfish_encode __ARGS((cryptstate_T *state, char_u *from, size_t len, char_u *to));
-+void crypt_blowfish_decode __ARGS((cryptstate_T *state, char_u *from, size_t len, char_u *to));
-+void crypt_blowfish_init __ARGS((cryptstate_T *state, char_u *key, char_u *salt, int salt_len, char_u *seed, int seed_len));
- int blowfish_self_test __ARGS((void));
- /* vim: set ft=c : */
-diff -up vim74/src/proto/crypt.pro.blowfish2 vim74/src/proto/crypt.pro
---- vim74/src/proto/crypt.pro.blowfish2	2017-09-05 14:47:34.965911901 +0200
-+++ vim74/src/proto/crypt.pro	2017-09-05 14:47:34.965911901 +0200
-@@ -0,0 +1,24 @@
-+/* crypt.c */
-+int crypt_method_nr_from_name __ARGS((char_u *name));
-+int crypt_method_nr_from_magic __ARGS((char *ptr, int len));
-+int crypt_works_inplace __ARGS((cryptstate_T *state));
-+int crypt_get_method_nr __ARGS((buf_T *buf));
-+int crypt_whole_undofile __ARGS((int method_nr));
-+int crypt_get_header_len __ARGS((int method_nr));
-+void crypt_set_cm_option __ARGS((buf_T *buf, int method_nr));
-+int crypt_self_test __ARGS((void));
-+cryptstate_T *crypt_create __ARGS((int method_nr, char_u *key, char_u *salt, int salt_len, char_u *seed, int seed_len));
-+cryptstate_T *crypt_create_from_header __ARGS((int method_nr, char_u *key, char_u *header));
-+cryptstate_T *crypt_create_from_file __ARGS((FILE *fp, char_u *key));
-+cryptstate_T *crypt_create_for_writing __ARGS((int method_nr, char_u *key, char_u **header, int *header_len));
-+void crypt_free_state __ARGS((cryptstate_T *state));
-+long crypt_encode_alloc __ARGS((cryptstate_T *state, char_u *from, size_t len, char_u **newptr));
-+long crypt_decode_alloc __ARGS((cryptstate_T *state, char_u *ptr, long len, char_u **newptr));
-+void crypt_encode __ARGS((cryptstate_T *state, char_u *from, size_t len, char_u *to));
-+void crypt_decode __ARGS((cryptstate_T *state, char_u *from, size_t len, char_u *to));
-+void crypt_encode_inplace __ARGS((cryptstate_T *state, char_u *buf, size_t len));
-+void crypt_decode_inplace __ARGS((cryptstate_T *state, char_u *buf, size_t len));
-+void crypt_free_key __ARGS((char_u *key));
-+char_u *crypt_get_key __ARGS((int store, int twice));
-+void crypt_append_msg __ARGS((buf_T *buf));
-+/* vim: set ft=c : */
-diff -up vim74/src/proto/crypt_zip.pro.blowfish2 vim74/src/proto/crypt_zip.pro
---- vim74/src/proto/crypt_zip.pro.blowfish2	2017-09-05 14:47:34.965911901 +0200
-+++ vim74/src/proto/crypt_zip.pro	2017-09-05 14:47:34.965911901 +0200
-@@ -0,0 +1,5 @@
-+/* crypt_zip.c */
-+void crypt_zip_init __ARGS((cryptstate_T *state, char_u *key, char_u *salt, int salt_len, char_u *seed, int seed_len));
-+void crypt_zip_encode __ARGS((cryptstate_T *state, char_u *from, size_t len, char_u *to));
-+void crypt_zip_decode __ARGS((cryptstate_T *state, char_u *from, size_t len, char_u *to));
-+/* vim: set ft=c : */
-diff -up vim74/src/proto/fileio.pro.blowfish2 vim74/src/proto/fileio.pro
---- vim74/src/proto/fileio.pro.blowfish2	2013-08-10 13:37:11.000000000 +0200
-+++ vim74/src/proto/fileio.pro	2017-09-05 14:47:34.965911901 +0200
-@@ -4,8 +4,6 @@ int readfile __ARGS((char_u *fname, char
- int prep_exarg __ARGS((exarg_T *eap, buf_T *buf));
- void set_file_options __ARGS((int set_options, exarg_T *eap));
- void set_forced_fenc __ARGS((exarg_T *eap));
--int prepare_crypt_read __ARGS((FILE *fp));
--char_u *prepare_crypt_write __ARGS((buf_T *buf, int *lenp));
- int check_file_readonly __ARGS((char_u *fname, int perm));
- int buf_write __ARGS((buf_T *buf, char_u *fname, char_u *sfname, linenr_T start, linenr_T end, exarg_T *eap, int append, int forceit, int reset_changed, int filtering));
- void msg_add_fname __ARGS((buf_T *buf, char_u *fname));
-diff -up vim74/src/proto.h.blowfish2 vim74/src/proto.h
---- vim74/src/proto.h.blowfish2	2013-02-26 14:18:19.000000000 +0100
-+++ vim74/src/proto.h	2017-09-05 14:47:34.966911893 +0200
-@@ -70,6 +70,8 @@ extern int _stricoll __ARGS((char *a, ch
- 
- # ifdef FEAT_CRYPT
- #  include "blowfish.pro"
-+#  include "crypt.pro"
-+#  include "crypt_zip.pro"
- # endif
- # include "buffer.pro"
- # include "charset.pro"
-diff -up vim74/src/proto/misc2.pro.blowfish2 vim74/src/proto/misc2.pro
---- vim74/src/proto/misc2.pro.blowfish2	2013-08-10 13:37:20.000000000 +0200
-+++ vim74/src/proto/misc2.pro	2017-09-05 14:47:34.966911893 +0200
-@@ -84,16 +84,6 @@ int illegal_slash __ARGS((char *name));
- char_u *parse_shape_opt __ARGS((int what));
- int get_shape_idx __ARGS((int mouse));
- void update_mouseshape __ARGS((int shape_idx));
--int crypt_method_from_string __ARGS((char_u *s));
--int get_crypt_method __ARGS((buf_T *buf));
--void set_crypt_method __ARGS((buf_T *buf, int method));
--void crypt_push_state __ARGS((void));
--void crypt_pop_state __ARGS((void));
--void crypt_encode __ARGS((char_u *from, size_t len, char_u *to));
--void crypt_decode __ARGS((char_u *ptr, long len));
--void crypt_init_keys __ARGS((char_u *passwd));
--void free_crypt_key __ARGS((char_u *key));
--char_u *get_crypt_key __ARGS((int store, int twice));
- void *vim_findfile_init __ARGS((char_u *path, char_u *filename, char_u *stopdirs, int level, int free_visited, int find_what, void *search_ctx_arg, int tagfile, char_u *rel_fname));
- char_u *vim_findfile_stopdir __ARGS((char_u *buf));
- void vim_findfile_cleanup __ARGS((void *ctx));
-@@ -116,5 +106,6 @@ time_t get8ctime __ARGS((FILE *fd));
- char_u *read_string __ARGS((FILE *fd, int cnt));
- int put_bytes __ARGS((FILE *fd, long_u nr, int len));
- void put_time __ARGS((FILE *fd, time_t the_time));
-+void time_to_bytes __ARGS((time_t the_time, char_u *buf));
- int has_non_ascii __ARGS((char_u *s));
- /* vim: set ft=c : */
-diff -up vim74/src/structs.h.blowfish2 vim74/src/structs.h
---- vim74/src/structs.h.blowfish2	2017-09-05 14:47:34.839912918 +0200
-+++ vim74/src/structs.h	2017-09-05 14:47:34.967911885 +0200
-@@ -1240,6 +1240,24 @@ typedef struct {
- } syn_time_T;
- #endif
- 
-+#ifdef FEAT_CRYPT
-+/*
-+ * Structure to hold the type of encryption and the state of encryption or
-+ * decryption.
-+ */
-+typedef struct {
-+    int	    method_nr;
-+    void    *method_state;  /* method-specific state information */
-+} cryptstate_T;
-+
-+/* values for method_nr */
-+# define CRYPT_M_ZIP	0
-+# define CRYPT_M_BF	1
-+# define CRYPT_M_BF2	2
-+# define CRYPT_M_COUNT	3 /* number of crypt methods */
-+#endif
-+
-+
- /*
-  * These are items normally related to a buffer.  But when using ":ownsyntax"
-  * a window may have its own instance.
-@@ -1765,7 +1783,12 @@ struct file_buffer
-     int		b_was_netbeans_file;/* TRUE if b_netbeans_file was once set */
- #endif
- 
--};
-+#ifdef FEAT_CRYPT
-+    cryptstate_T *b_cryptstate;	/* Encryption state while reading or writing
-+				 * the file. NULL when not using encryption. */
-+#endif
-+
-+}; /* file_buffer */
- 
- 
- #ifdef FEAT_DIFF
-diff -up vim74/src/testdir/test72.in.blowfish2 vim74/src/testdir/test72.in
---- vim74/src/testdir/test72.in.blowfish2	2012-01-04 19:04:17.000000000 +0100
-+++ vim74/src/testdir/test72.in	2017-09-05 15:23:47.590060199 +0200
-@@ -4,6 +4,7 @@ undo-able pieces.  Do that by setting 'u
- 
- STARTTEST
- :so small.vim
-+:set belloff=all
- :"
- :" Test 'undofile': first a simple one-line change.
- :set nocompatible viminfo+=nviminfo visualbell
-@@ -25,7 +26,6 @@ u:.w! test.out
- :set undofile
- :bwipe!
- :e Xtestfile
--:" TODO: this beeps
- u:.w >>test.out
- :"
- :" Test 'undofile', add 10 lines, delete 6 lines, undo 3
-@@ -81,7 +81,8 @@ uu:w >>test.out
- :"
- :" With encryption, cryptmethod=blowfish
- :e! Xtestfile
--:set undofile cm=blowfish
-+rubbish
-+:set undofile cm=blowfish ff&
- ggdGijan
- feb
- mar
-@@ -104,8 +105,38 @@ u:.w >>test.out
- u:.w >>test.out
- u:.w >>test.out
- :"
-+:" With encryption, cryptmethod=blowfish2
-+:e! Xtestfile
-+rubbish
-+:set undofile cm=blowfish2 ff&
-+ggdGijan
-+feb
-+mar
-+apr
-+jun:set ul=100
-+kk0ifoo :set ul=100
-+dd:set ul=100
-+ibar :set ul=100
-+:X
-+foo2bar
-+foo2bar
-+:w!
-+:bwipe!
-+:e Xtestfile
-+foo2bar
-+:set key=
-+/bar
-+:.w >>test.out
-+u:.w >>test.out
-+u:.w >>test.out
-+u:.w >>test.out
-+:"
- :" Rename the undo file so that it gets cleaned up.
--:call rename(".Xtestfile.un~", "Xtestundo")
-+:if has("vms")
-+: call rename("_un_Xtestfile", "Xtestundo")
-+:else
-+: call rename(".Xtestfile.un~", "Xtestundo")
-+:endif
- :qa!
- ENDTEST
- 
-diff -up vim74/src/testdir/test72.ok.blowfish2 vim74/src/testdir/test72.ok
---- vim74/src/testdir/test72.ok.blowfish2	2012-01-04 19:04:17.000000000 +0100
-+++ vim74/src/testdir/test72.ok	2017-09-05 15:23:47.596060147 +0200
-@@ -25,3 +25,7 @@ bar apr
- apr
- foo mar
- mar
-+bar apr
-+apr
-+foo mar
-+mar
-diff -up vim74/src/undo.c.blowfish2 vim74/src/undo.c
---- vim74/src/undo.c.blowfish2	2017-09-05 14:47:34.740913717 +0200
-+++ vim74/src/undo.c	2017-09-05 14:47:34.973911836 +0200
-@@ -81,8 +81,25 @@
- #define UH_MAGIC 0x18dade	/* value for uh_magic when in use */
- #define UE_MAGIC 0xabc123	/* value for ue_magic when in use */
- 
-+/* Size of buffer used for encryption. */
-+#define CRYPT_BUF_SIZE 8192
-+
- #include "vim.h"
- 
-+/* Structure passed around between functions.
-+ * Avoids passing cryptstate_T when encryption not available. */
-+typedef struct {
-+    buf_T	*bi_buf;
-+    FILE	*bi_fp;
-+#ifdef FEAT_CRYPT
-+    cryptstate_T *bi_state;
-+    char_u	*bi_buffer; /* CRYPT_BUF_SIZE, NULL when not buffering */
-+    size_t	bi_used;    /* bytes written to/read from bi_buffer */
-+    size_t	bi_avail;   /* bytes available in bi_buffer */
-+#endif
-+} bufinfo_T;
-+
-+
- static long get_undolevel __ARGS((void));
- static void u_unch_branch __ARGS((u_header_T *uhp));
- static u_entry_T *u_get_headentry __ARGS((void));
-@@ -98,18 +115,26 @@ static void u_freeentry __ARGS((u_entry_
- #ifdef FEAT_PERSISTENT_UNDO
- static void corruption_error __ARGS((char *mesg, char_u *file_name));
- static void u_free_uhp __ARGS((u_header_T *uhp));
--static size_t fwrite_crypt __ARGS((buf_T *buf UNUSED, char_u *ptr, size_t len, FILE *fp));
--static char_u *read_string_decrypt __ARGS((buf_T *buf UNUSED, FILE *fd, int len));
--static int serialize_header __ARGS((FILE *fp, buf_T *buf, char_u *hash));
--static int serialize_uhp __ARGS((FILE *fp, buf_T *buf, u_header_T *uhp));
--static u_header_T *unserialize_uhp __ARGS((FILE *fp, char_u *file_name));
--static int serialize_uep __ARGS((FILE *fp, buf_T *buf, u_entry_T *uep));
--static u_entry_T *unserialize_uep __ARGS((FILE *fp, int *error, char_u *file_name));
--static void serialize_pos __ARGS((pos_T pos, FILE *fp));
--static void unserialize_pos __ARGS((pos_T *pos, FILE *fp));
--static void serialize_visualinfo __ARGS((visualinfo_T *info, FILE *fp));
--static void unserialize_visualinfo __ARGS((visualinfo_T *info, FILE *fp));
--static void put_header_ptr __ARGS((FILE	*fp, u_header_T *uhp));
-+static int undo_write __ARGS((bufinfo_T *bi, char_u *ptr, size_t len));
-+static int undo_flush __ARGS((bufinfo_T *bi));
-+static int fwrite_crypt __ARGS((bufinfo_T *bi, char_u *ptr, size_t len));
-+static int undo_write_bytes __ARGS((bufinfo_T *bi, long_u nr, int len));
-+static void put_header_ptr __ARGS((bufinfo_T *bi, u_header_T *uhp));
-+static int undo_read_4c __ARGS((bufinfo_T *bi));
-+static int undo_read_2c __ARGS((bufinfo_T *bi));
-+static int undo_read_byte __ARGS((bufinfo_T *bi));
-+static time_t undo_read_time __ARGS((bufinfo_T *bi));
-+static int undo_read __ARGS((bufinfo_T *bi, char_u *buffer, size_t size));
-+static char_u *read_string_decrypt __ARGS((bufinfo_T *bi, int len));
-+static int serialize_header __ARGS((bufinfo_T *bi, char_u *hash));
-+static int serialize_uhp __ARGS((bufinfo_T *bi, u_header_T *uhp));
-+static u_header_T *unserialize_uhp __ARGS((bufinfo_T *bi, char_u *file_name));
-+static int serialize_uep __ARGS((bufinfo_T *bi, u_entry_T *uep));
-+static u_entry_T *unserialize_uep __ARGS((bufinfo_T *bi, int *error, char_u *file_name));
-+static void serialize_pos __ARGS((bufinfo_T *bi, pos_T pos));
-+static void unserialize_pos __ARGS((bufinfo_T *bi, pos_T *pos));
-+static void serialize_visualinfo __ARGS((bufinfo_T *bi, visualinfo_T *info));
-+static void unserialize_visualinfo __ARGS((bufinfo_T *bi, visualinfo_T *info));
- #endif
- 
- #define U_ALLOC_LINE(size) lalloc((long_u)(size), FALSE)
-@@ -850,68 +875,294 @@ u_free_uhp(uhp)
- }
- 
- /*
-- * Like fwrite() but crypt the bytes when 'key' is set.
-- * Returns 1 if successful.
-+ * Write a sequence of bytes to the undo file.
-+ * Buffers and encrypts as needed.
-+ * Returns OK or FAIL.
-  */
--    static size_t
--fwrite_crypt(buf, ptr, len, fp)
--    buf_T	*buf UNUSED;
-+    static int
-+undo_write(bi, ptr, len)
-+    bufinfo_T	*bi;
-+    char_u	*ptr;
-+    size_t	len;
-+{
-+#ifdef FEAT_CRYPT
-+    if (bi->bi_buffer != NULL)
-+    {
-+	size_t	len_todo = len;
-+	char_u  *p = ptr;
-+
-+	while (bi->bi_used + len_todo >= CRYPT_BUF_SIZE)
-+	{
-+	    size_t	n = CRYPT_BUF_SIZE - bi->bi_used;
-+
-+	    mch_memmove(bi->bi_buffer + bi->bi_used, p, n);
-+	    len_todo -= n;
-+	    p += n;
-+	    bi->bi_used = CRYPT_BUF_SIZE;
-+	    if (undo_flush(bi) == FAIL)
-+		return FAIL;
-+	}
-+	if (len_todo > 0)
-+	{
-+	    mch_memmove(bi->bi_buffer + bi->bi_used, p, len_todo);
-+	    bi->bi_used += len_todo;
-+	}
-+	return OK;
-+    }
-+#endif
-+    if (fwrite(ptr, len, (size_t)1, bi->bi_fp) != 1)
-+	return FAIL;
-+    return OK;
-+}
-+
-+#ifdef FEAT_CRYPT
-+    static int
-+undo_flush(bi)
-+    bufinfo_T	*bi;
-+{
-+    if (bi->bi_buffer != NULL && bi->bi_state != NULL && bi->bi_used > 0)
-+    {
-+	crypt_encode_inplace(bi->bi_state, bi->bi_buffer, bi->bi_used);
-+	if (fwrite(bi->bi_buffer, bi->bi_used, (size_t)1, bi->bi_fp) != 1)
-+	    return FAIL;
-+	bi->bi_used = 0;
-+    }
-+    return OK;
-+}
-+#endif
-+
-+/*
-+ * Write "ptr[len]" and crypt the bytes when needed.
-+ * Returns OK or FAIL.
-+ */
-+    static int
-+fwrite_crypt(bi, ptr, len)
-+    bufinfo_T	*bi;
-     char_u	*ptr;
-     size_t	len;
--    FILE	*fp;
- {
- #ifdef FEAT_CRYPT
-     char_u  *copy;
-     char_u  small_buf[100];
-     size_t  i;
- 
--    if (*buf->b_p_key == NUL)
--	return fwrite(ptr, len, (size_t)1, fp);
--    if (len < 100)
--	copy = small_buf;  /* no malloc()/free() for short strings */
--    else
-+    if (bi->bi_state != NULL && bi->bi_buffer == NULL)
-     {
--	copy = lalloc(len, FALSE);
--	if (copy == NULL)
--	    return 0;
--    }
--    crypt_encode(ptr, len, copy);
--    i = fwrite(copy, len, (size_t)1, fp);
--    if (copy != small_buf)
--	vim_free(copy);
--    return i;
--#else
--    return fwrite(ptr, len, (size_t)1, fp);
-+	/* crypting every piece of text separately */
-+	if (len < 100)
-+	    copy = small_buf;  /* no malloc()/free() for short strings */
-+	else
-+	{
-+	    copy = lalloc(len, FALSE);
-+	    if (copy == NULL)
-+		return 0;
-+	}
-+	crypt_encode(bi->bi_state, ptr, len, copy);
-+	i = fwrite(copy, len, (size_t)1, bi->bi_fp);
-+	if (copy != small_buf)
-+	    vim_free(copy);
-+	return i == 1 ? OK : FAIL;
-+    }
- #endif
-+    return undo_write(bi, ptr, len);
- }
- 
- /*
-- * Read a string of length "len" from "fd".
-- * When 'key' is set decrypt the bytes.
-+ * Write a number, MSB first, in "len" bytes.
-+ * Must match with undo_read_?c() functions.
-+ * Returns OK or FAIL.
-  */
--    static char_u *
--read_string_decrypt(buf, fd, len)
--    buf_T   *buf UNUSED;
--    FILE    *fd;
-+    static int
-+undo_write_bytes(bi, nr, len)
-+    bufinfo_T *bi;
-+    long_u  nr;
-     int	    len;
- {
--    char_u  *ptr;
-+    char_u  buf[8];
-+    int	    i;
-+    int	    bufi = 0;
-+
-+    for (i = len - 1; i >= 0; --i)
-+	buf[bufi++] = nr >> (i * 8);
-+    return undo_write(bi, buf, (size_t)len);
-+}
- 
--    ptr = read_string(fd, len);
-+/*
-+ * Write the pointer to an undo header.  Instead of writing the pointer itself
-+ * we use the sequence number of the header.  This is converted back to
-+ * pointers when reading. */
-+    static void
-+put_header_ptr(bi, uhp)
-+    bufinfo_T	*bi;
-+    u_header_T	*uhp;
-+{
-+    undo_write_bytes(bi, (long_u)(uhp != NULL ? uhp->uh_seq : 0), 4);
-+}
-+
-+    static int
-+undo_read_4c(bi)
-+    bufinfo_T	*bi;
-+{
- #ifdef FEAT_CRYPT
--    if (ptr != NULL && *buf->b_p_key != NUL)
--	crypt_decode(ptr, len);
-+    if (bi->bi_buffer != NULL)
-+    {
-+	char_u  buf[4];
-+	int	n;
-+
-+	undo_read(bi, buf, (size_t)4);
-+	n = (buf[0] << 24) + (buf[1] << 16) + (buf[2] << 8) + buf[3];
-+	return n;
-+    }
- #endif
-+    return get4c(bi->bi_fp);
-+}
-+
-+    static int
-+undo_read_2c(bi)
-+    bufinfo_T	*bi;
-+{
-+#ifdef FEAT_CRYPT
-+    if (bi->bi_buffer != NULL)
-+    {
-+	char_u  buf[2];
-+	int	n;
-+
-+	undo_read(bi, buf, (size_t)2);
-+	n = (buf[0] << 8) + buf[1];
-+	return n;
-+    }
-+#endif
-+    return get2c(bi->bi_fp);
-+}
-+
-+    static int
-+undo_read_byte(bi)
-+    bufinfo_T	*bi;
-+{
-+#ifdef FEAT_CRYPT
-+    if (bi->bi_buffer != NULL)
-+    {
-+	char_u  buf[1];
-+
-+	undo_read(bi, buf, (size_t)1);
-+	return buf[0];
-+    }
-+#endif
-+    return getc(bi->bi_fp);
-+}
-+
-+    static time_t
-+undo_read_time(bi)
-+    bufinfo_T	*bi;
-+{
-+#ifdef FEAT_CRYPT
-+    if (bi->bi_buffer != NULL)
-+    {
-+	char_u  buf[8];
-+	time_t	n = 0;
-+	int	i;
-+
-+	undo_read(bi, buf, (size_t)8);
-+	for (i = 0; i < 8; ++i)
-+	    n = (n << 8) + buf[i];
-+	return n;
-+    }
-+#endif
-+    return get8ctime(bi->bi_fp);
-+}
-+
-+/*
-+ * Read "buffer[size]" from the undo file.
-+ * Return OK or FAIL.
-+ */
-+    static int
-+undo_read(bi, buffer, size)
-+    bufinfo_T   *bi;
-+    char_u	*buffer;
-+    size_t	size;
-+{
-+#ifdef FEAT_CRYPT
-+    if (bi->bi_buffer != NULL)
-+    {
-+	int	size_todo = size;
-+	char_u	*p = buffer;
-+
-+	while (size_todo > 0)
-+	{
-+	    size_t n;
-+
-+	    if (bi->bi_used >= bi->bi_avail)
-+	    {
-+		n = fread(bi->bi_buffer, 1, (size_t)CRYPT_BUF_SIZE, bi->bi_fp);
-+		if (n <= 0)
-+		{
-+		    /* Error may be checked for only later.  Fill with zeros,
-+		     * so that the reader won't use garbage. */
-+		    vim_memset(p, 0, size_todo);
-+		    return FAIL;
-+		}
-+		bi->bi_avail = n;
-+		bi->bi_used = 0;
-+		crypt_decode_inplace(bi->bi_state, bi->bi_buffer, bi->bi_avail);
-+	    }
-+	    n = size_todo;
-+	    if (n > bi->bi_avail - bi->bi_used)
-+		n = bi->bi_avail - bi->bi_used;
-+	    mch_memmove(p, bi->bi_buffer + bi->bi_used, n);
-+	    bi->bi_used += n;
-+	    size_todo -= n;
-+	    p += n;
-+	}
-+	return OK;
-+    }
-+#endif
-+    if (fread(buffer, (size_t)size, 1, bi->bi_fp) != 1)
-+	return FAIL;
-+    return OK;
-+}
-+
-+/*
-+ * Read a string of length "len" from "bi->bi_fd".
-+ * "len" can be zero to allocate an empty line.
-+ * Decrypt the bytes if needed.
-+ * Append a NUL.
-+ * Returns a pointer to allocated memory or NULL for failure.
-+ */
-+    static char_u *
-+read_string_decrypt(bi, len)
-+    bufinfo_T	*bi;
-+    int		len;
-+{
-+    char_u  *ptr = alloc((unsigned)len + 1);
-+
-+    if (ptr != NULL)
-+    {
-+	if (len > 0 && undo_read(bi, ptr, len) == FAIL)
-+	{
-+	    vim_free(ptr);
-+	    return NULL;
-+	}
-+	ptr[len] = NUL;
-+#ifdef FEAT_CRYPT
-+	if (bi->bi_state != NULL && bi->bi_buffer == NULL)
-+	    crypt_decode_inplace(bi->bi_state, ptr, len);
-+#endif
-+    }
-     return ptr;
- }
- 
-+/*
-+ * Writes the (not encrypted) header and initializes encryption if needed.
-+ */
-     static int
--serialize_header(fp, buf, hash)
--    FILE	*fp;
--    buf_T	*buf;
-+serialize_header(bi, hash)
-+    bufinfo_T	*bi;
-     char_u	*hash;
- {
--    int len;
-+    int		len;
-+    buf_T	*buf = bi->bi_buf;
-+    FILE	*fp = bi->bi_fp;
-+    char_u	time_buf[8];
- 
-     /* Start writing, first the magic marker and undo info version. */
-     if (fwrite(UF_START_MAGIC, (size_t)UF_START_MAGIC_LEN, (size_t)1, fp) != 1)
-@@ -925,117 +1176,124 @@ serialize_header(fp, buf, hash)
- 	char_u *header;
- 	int    header_len;
- 
--	put_bytes(fp, (long_u)UF_VERSION_CRYPT, 2);
--	header = prepare_crypt_write(buf, &header_len);
--	if (header == NULL)
-+	undo_write_bytes(bi, (long_u)UF_VERSION_CRYPT, 2);
-+	bi->bi_state = crypt_create_for_writing(crypt_get_method_nr(buf),
-+					  buf->b_p_key, &header, &header_len);
-+	if (bi->bi_state == NULL)
- 	    return FAIL;
- 	len = (int)fwrite(header, (size_t)header_len, (size_t)1, fp);
- 	vim_free(header);
- 	if (len != 1)
- 	{
--	    crypt_pop_state();
-+	    crypt_free_state(bi->bi_state);
-+	    bi->bi_state = NULL;
- 	    return FAIL;
- 	}
-+
-+	if (crypt_whole_undofile(crypt_get_method_nr(buf)))
-+	{
-+	    bi->bi_buffer = alloc(CRYPT_BUF_SIZE);
-+	    if (bi->bi_buffer == NULL)
-+	    {
-+		crypt_free_state(bi->bi_state);
-+		bi->bi_state = NULL;
-+		return FAIL;
-+	    }
-+	    bi->bi_used = 0;
-+	}
-     }
-     else
- #endif
--	put_bytes(fp, (long_u)UF_VERSION, 2);
-+	undo_write_bytes(bi, (long_u)UF_VERSION, 2);
- 
- 
-     /* Write a hash of the buffer text, so that we can verify it is still the
-      * same when reading the buffer text. */
--    if (fwrite(hash, (size_t)UNDO_HASH_SIZE, (size_t)1, fp) != 1)
-+    if (undo_write(bi, hash, (size_t)UNDO_HASH_SIZE) == FAIL)
- 	return FAIL;
- 
-     /* buffer-specific data */
--    put_bytes(fp, (long_u)buf->b_ml.ml_line_count, 4);
-+    undo_write_bytes(bi, (long_u)buf->b_ml.ml_line_count, 4);
-     len = buf->b_u_line_ptr != NULL ? (int)STRLEN(buf->b_u_line_ptr) : 0;
--    put_bytes(fp, (long_u)len, 4);
--    if (len > 0 && fwrite_crypt(buf, buf->b_u_line_ptr, (size_t)len, fp) != 1)
-+    undo_write_bytes(bi, (long_u)len, 4);
-+    if (len > 0 && fwrite_crypt(bi, buf->b_u_line_ptr, (size_t)len) == FAIL)
- 	return FAIL;
--    put_bytes(fp, (long_u)buf->b_u_line_lnum, 4);
--    put_bytes(fp, (long_u)buf->b_u_line_colnr, 4);
-+    undo_write_bytes(bi, (long_u)buf->b_u_line_lnum, 4);
-+    undo_write_bytes(bi, (long_u)buf->b_u_line_colnr, 4);
- 
-     /* Undo structures header data */
--    put_header_ptr(fp, buf->b_u_oldhead);
--    put_header_ptr(fp, buf->b_u_newhead);
--    put_header_ptr(fp, buf->b_u_curhead);
--
--    put_bytes(fp, (long_u)buf->b_u_numhead, 4);
--    put_bytes(fp, (long_u)buf->b_u_seq_last, 4);
--    put_bytes(fp, (long_u)buf->b_u_seq_cur, 4);
--    put_time(fp, buf->b_u_time_cur);
-+    put_header_ptr(bi, buf->b_u_oldhead);
-+    put_header_ptr(bi, buf->b_u_newhead);
-+    put_header_ptr(bi, buf->b_u_curhead);
-+
-+    undo_write_bytes(bi, (long_u)buf->b_u_numhead, 4);
-+    undo_write_bytes(bi, (long_u)buf->b_u_seq_last, 4);
-+    undo_write_bytes(bi, (long_u)buf->b_u_seq_cur, 4);
-+    time_to_bytes(buf->b_u_time_cur, time_buf);
-+    undo_write(bi, time_buf, 8);
- 
-     /* Optional fields. */
--    putc(4, fp);
--    putc(UF_LAST_SAVE_NR, fp);
--    put_bytes(fp, (long_u)buf->b_u_save_nr_last, 4);
-+    undo_write_bytes(bi, 4, 1);
-+    undo_write_bytes(bi, UF_LAST_SAVE_NR, 1);
-+    undo_write_bytes(bi, (long_u)buf->b_u_save_nr_last, 4);
- 
--    putc(0, fp);  /* end marker */
-+    undo_write_bytes(bi, 0, 1);  /* end marker */
- 
-     return OK;
- }
- 
-     static int
--serialize_uhp(fp, buf, uhp)
--    FILE	*fp;
--    buf_T	*buf;
-+serialize_uhp(bi, uhp)
-+    bufinfo_T	*bi;
-     u_header_T	*uhp;
- {
-     int		i;
-     u_entry_T	*uep;
-+    char_u	time_buf[8];
- 
--    if (put_bytes(fp, (long_u)UF_HEADER_MAGIC, 2) == FAIL)
-+    if (undo_write_bytes(bi, (long_u)UF_HEADER_MAGIC, 2) == FAIL)
- 	return FAIL;
- 
--    put_header_ptr(fp, uhp->uh_next.ptr);
--    put_header_ptr(fp, uhp->uh_prev.ptr);
--    put_header_ptr(fp, uhp->uh_alt_next.ptr);
--    put_header_ptr(fp, uhp->uh_alt_prev.ptr);
--    put_bytes(fp, uhp->uh_seq, 4);
--    serialize_pos(uhp->uh_cursor, fp);
-+    put_header_ptr(bi, uhp->uh_next.ptr);
-+    put_header_ptr(bi, uhp->uh_prev.ptr);
-+    put_header_ptr(bi, uhp->uh_alt_next.ptr);
-+    put_header_ptr(bi, uhp->uh_alt_prev.ptr);
-+    undo_write_bytes(bi, uhp->uh_seq, 4);
-+    serialize_pos(bi, uhp->uh_cursor);
- #ifdef FEAT_VIRTUALEDIT
--    put_bytes(fp, (long_u)uhp->uh_cursor_vcol, 4);
-+    undo_write_bytes(bi, (long_u)uhp->uh_cursor_vcol, 4);
- #else
--    put_bytes(fp, (long_u)0, 4);
-+    undo_write_bytes(bi, (long_u)0, 4);
- #endif
--    put_bytes(fp, (long_u)uhp->uh_flags, 2);
-+    undo_write_bytes(bi, (long_u)uhp->uh_flags, 2);
-     /* Assume NMARKS will stay the same. */
-     for (i = 0; i < NMARKS; ++i)
--	serialize_pos(uhp->uh_namedm[i], fp);
--#ifdef FEAT_VISUAL
--    serialize_visualinfo(&uhp->uh_visual, fp);
--#else
--    {
--	visualinfo_T info;
--
--	memset(&info, 0, sizeof(visualinfo_T));
--	serialize_visualinfo(&info, fp);
--    }
--#endif
--    put_time(fp, uhp->uh_time);
-+	serialize_pos(bi, uhp->uh_namedm[i]);
-+    serialize_visualinfo(bi, &uhp->uh_visual);
-+    time_to_bytes(uhp->uh_time, time_buf);
-+    undo_write(bi, time_buf, 8);
- 
-     /* Optional fields. */
--    putc(4, fp);
--    putc(UHP_SAVE_NR, fp);
--    put_bytes(fp, (long_u)uhp->uh_save_nr, 4);
-+    undo_write_bytes(bi, 4, 1);
-+    undo_write_bytes(bi, UHP_SAVE_NR, 1);
-+    undo_write_bytes(bi, (long_u)uhp->uh_save_nr, 4);
- 
--    putc(0, fp);  /* end marker */
-+    undo_write_bytes(bi, 0, 1);  /* end marker */
- 
-     /* Write all the entries. */
-     for (uep = uhp->uh_entry; uep != NULL; uep = uep->ue_next)
-     {
--	put_bytes(fp, (long_u)UF_ENTRY_MAGIC, 2);
--	if (serialize_uep(fp, buf, uep) == FAIL)
-+	undo_write_bytes(bi, (long_u)UF_ENTRY_MAGIC, 2);
-+	if (serialize_uep(bi, uep) == FAIL)
- 	    return FAIL;
-     }
--    put_bytes(fp, (long_u)UF_ENTRY_END_MAGIC, 2);
-+    undo_write_bytes(bi, (long_u)UF_ENTRY_END_MAGIC, 2);
-     return OK;
- }
- 
-     static u_header_T *
--unserialize_uhp(fp, file_name)
--    FILE	*fp;
-+unserialize_uhp(bi, file_name)
-+    bufinfo_T	*bi;
-     char_u	*file_name;
- {
-     u_header_T	*uhp;
-@@ -1051,63 +1309,56 @@ unserialize_uhp(fp, file_name)
- #ifdef U_DEBUG
-     uhp->uh_magic = UH_MAGIC;
- #endif
--    uhp->uh_next.seq = get4c(fp);
--    uhp->uh_prev.seq = get4c(fp);
--    uhp->uh_alt_next.seq = get4c(fp);
--    uhp->uh_alt_prev.seq = get4c(fp);
--    uhp->uh_seq = get4c(fp);
-+    uhp->uh_next.seq = undo_read_4c(bi);
-+    uhp->uh_prev.seq = undo_read_4c(bi);
-+    uhp->uh_alt_next.seq = undo_read_4c(bi);
-+    uhp->uh_alt_prev.seq = undo_read_4c(bi);
-+    uhp->uh_seq = undo_read_4c(bi);
-     if (uhp->uh_seq <= 0)
-     {
- 	corruption_error("uh_seq", file_name);
- 	vim_free(uhp);
- 	return NULL;
-     }
--    unserialize_pos(&uhp->uh_cursor, fp);
-+    unserialize_pos(bi, &uhp->uh_cursor);
- #ifdef FEAT_VIRTUALEDIT
--    uhp->uh_cursor_vcol = get4c(fp);
-+    uhp->uh_cursor_vcol = undo_read_4c(bi);
- #else
--    (void)get4c(fp);
-+    (void)undo_read_4c(bi);
- #endif
--    uhp->uh_flags = get2c(fp);
-+    uhp->uh_flags = undo_read_2c(bi);
-     for (i = 0; i < NMARKS; ++i)
--	unserialize_pos(&uhp->uh_namedm[i], fp);
--#ifdef FEAT_VISUAL
--    unserialize_visualinfo(&uhp->uh_visual, fp);
--#else
--    {
--	visualinfo_T info;
--	unserialize_visualinfo(&info, fp);
--    }
--#endif
--    uhp->uh_time = get8ctime(fp);
-+	unserialize_pos(bi, &uhp->uh_namedm[i]);
-+    unserialize_visualinfo(bi, &uhp->uh_visual);
-+    uhp->uh_time = undo_read_time(bi);
- 
-     /* Optional fields. */
-     for (;;)
-     {
--	int len = getc(fp);
-+	int len = undo_read_byte(bi);
- 	int what;
- 
- 	if (len == 0)
- 	    break;
--	what = getc(fp);
-+	what = undo_read_byte(bi);
- 	switch (what)
- 	{
- 	    case UHP_SAVE_NR:
--		uhp->uh_save_nr = get4c(fp);
-+		uhp->uh_save_nr = undo_read_4c(bi);
- 		break;
- 	    default:
- 		/* field not supported, skip */
- 		while (--len >= 0)
--		    (void)getc(fp);
-+		    (void)undo_read_byte(bi);
- 	}
-     }
- 
-     /* Unserialize the uep list. */
-     last_uep = NULL;
--    while ((c = get2c(fp)) == UF_ENTRY_MAGIC)
-+    while ((c = undo_read_2c(bi)) == UF_ENTRY_MAGIC)
-     {
- 	error = FALSE;
--	uep = unserialize_uep(fp, &error, file_name);
-+	uep = unserialize_uep(bi, &error, file_name);
- 	if (last_uep == NULL)
- 	    uhp->uh_entry = uep;
- 	else
-@@ -1130,35 +1381,34 @@ unserialize_uhp(fp, file_name)
- }
- 
- /*
-- * Serialize "uep" to "fp".
-+ * Serialize "uep".
-  */
-     static int
--serialize_uep(fp, buf, uep)
--    FILE	*fp;
--    buf_T	*buf;
-+serialize_uep(bi, uep)
-+    bufinfo_T	*bi;
-     u_entry_T	*uep;
- {
-     int		i;
-     size_t	len;
- 
--    put_bytes(fp, (long_u)uep->ue_top, 4);
--    put_bytes(fp, (long_u)uep->ue_bot, 4);
--    put_bytes(fp, (long_u)uep->ue_lcount, 4);
--    put_bytes(fp, (long_u)uep->ue_size, 4);
-+    undo_write_bytes(bi, (long_u)uep->ue_top, 4);
-+    undo_write_bytes(bi, (long_u)uep->ue_bot, 4);
-+    undo_write_bytes(bi, (long_u)uep->ue_lcount, 4);
-+    undo_write_bytes(bi, (long_u)uep->ue_size, 4);
-     for (i = 0; i < uep->ue_size; ++i)
-     {
- 	len = STRLEN(uep->ue_array[i]);
--	if (put_bytes(fp, (long_u)len, 4) == FAIL)
-+	if (undo_write_bytes(bi, (long_u)len, 4) == FAIL)
- 	    return FAIL;
--	if (len > 0 && fwrite_crypt(buf, uep->ue_array[i], len, fp) != 1)
-+	if (len > 0 && fwrite_crypt(bi, uep->ue_array[i], len) == FAIL)
- 	    return FAIL;
-     }
-     return OK;
- }
- 
-     static u_entry_T *
--unserialize_uep(fp, error, file_name)
--    FILE	*fp;
-+unserialize_uep(bi, error, file_name)
-+    bufinfo_T	*bi;
-     int		*error;
-     char_u	*file_name;
- {
-@@ -1175,10 +1425,10 @@ unserialize_uep(fp, error, file_name)
- #ifdef U_DEBUG
-     uep->ue_magic = UE_MAGIC;
- #endif
--    uep->ue_top = get4c(fp);
--    uep->ue_bot = get4c(fp);
--    uep->ue_lcount = get4c(fp);
--    uep->ue_size = get4c(fp);
-+    uep->ue_top = undo_read_4c(bi);
-+    uep->ue_bot = undo_read_4c(bi);
-+    uep->ue_lcount = undo_read_4c(bi);
-+    uep->ue_size = undo_read_4c(bi);
-     if (uep->ue_size > 0)
-     {
- 	array = (char_u **)U_ALLOC_LINE(sizeof(char_u *) * uep->ue_size);
-@@ -1195,9 +1445,9 @@ unserialize_uep(fp, error, file_name)
- 
-     for (i = 0; i < uep->ue_size; ++i)
-     {
--	line_len = get4c(fp);
-+	line_len = undo_read_4c(bi);
- 	if (line_len >= 0)
--	    line = read_string_decrypt(curbuf, fp, line_len);
-+	    line = read_string_decrypt(bi, line_len);
- 	else
- 	{
- 	    line = NULL;
-@@ -1214,83 +1464,71 @@ unserialize_uep(fp, error, file_name)
- }
- 
- /*
-- * Serialize "pos" to "fp".
-+ * Serialize "pos".
-  */
-     static void
--serialize_pos(pos, fp)
-+serialize_pos(bi, pos)
-+    bufinfo_T *bi;
-     pos_T pos;
--    FILE  *fp;
- {
--    put_bytes(fp, (long_u)pos.lnum, 4);
--    put_bytes(fp, (long_u)pos.col, 4);
-+    undo_write_bytes(bi, (long_u)pos.lnum, 4);
-+    undo_write_bytes(bi, (long_u)pos.col, 4);
- #ifdef FEAT_VIRTUALEDIT
--    put_bytes(fp, (long_u)pos.coladd, 4);
-+    undo_write_bytes(bi, (long_u)pos.coladd, 4);
- #else
--    put_bytes(fp, (long_u)0, 4);
-+    undo_write_bytes(bi, (long_u)0, 4);
- #endif
- }
- 
- /*
-- * Unserialize the pos_T at the current position in fp.
-+ * Unserialize the pos_T at the current position.
-  */
-     static void
--unserialize_pos(pos, fp)
-+unserialize_pos(bi, pos)
-+    bufinfo_T *bi;
-     pos_T *pos;
--    FILE  *fp;
- {
--    pos->lnum = get4c(fp);
-+    pos->lnum = undo_read_4c(bi);
-     if (pos->lnum < 0)
- 	pos->lnum = 0;
--    pos->col = get4c(fp);
-+    pos->col = undo_read_4c(bi);
-     if (pos->col < 0)
- 	pos->col = 0;
- #ifdef FEAT_VIRTUALEDIT
--    pos->coladd = get4c(fp);
-+    pos->coladd = undo_read_4c(bi);
-     if (pos->coladd < 0)
- 	pos->coladd = 0;
- #else
--    (void)get4c(fp);
-+    (void)undo_read_4c(bi);
- #endif
- }
- 
- /*
-- * Serialize "info" to "fp".
-+ * Serialize "info".
-  */
-     static void
--serialize_visualinfo(info, fp)
-+serialize_visualinfo(bi, info)
-+    bufinfo_T	    *bi;
-     visualinfo_T    *info;
--    FILE	    *fp;
- {
--    serialize_pos(info->vi_start, fp);
--    serialize_pos(info->vi_end, fp);
--    put_bytes(fp, (long_u)info->vi_mode, 4);
--    put_bytes(fp, (long_u)info->vi_curswant, 4);
-+    serialize_pos(bi, info->vi_start);
-+    serialize_pos(bi, info->vi_end);
-+    undo_write_bytes(bi, (long_u)info->vi_mode, 4);
-+    undo_write_bytes(bi, (long_u)info->vi_curswant, 4);
- }
- 
- /*
-- * Unserialize the visualinfo_T at the current position in fp.
-+ * Unserialize the visualinfo_T at the current position.
-  */
-     static void
--unserialize_visualinfo(info, fp)
-+unserialize_visualinfo(bi, info)
-+    bufinfo_T	    *bi;
-     visualinfo_T    *info;
--    FILE	    *fp;
--{
--    unserialize_pos(&info->vi_start, fp);
--    unserialize_pos(&info->vi_end, fp);
--    info->vi_mode = get4c(fp);
--    info->vi_curswant = get4c(fp);
--}
--
--/*
-- * Write the pointer to an undo header.  Instead of writing the pointer itself
-- * we use the sequence number of the header.  This is converted back to
-- * pointers when reading. */
--    static void
--put_header_ptr(fp, uhp)
--    FILE	*fp;
--    u_header_T	*uhp;
- {
--    put_bytes(fp, (long_u)(uhp != NULL ? uhp->uh_seq : 0), 4);
-+    unserialize_pos(bi, &info->vi_start);
-+    unserialize_pos(bi, &info->vi_end);
-+    info->vi_mode = undo_read_4c(bi);
-+    info->vi_curswant = undo_read_4c(bi);
- }
- 
- /*
-@@ -1324,9 +1562,9 @@ u_write_undo(name, forceit, buf, hash)
-     struct stat	st_old;
-     struct stat	st_new;
- #endif
--#ifdef FEAT_CRYPT
--    int		do_crypt = FALSE;
--#endif
-+    bufinfo_T	bi;
-+
-+    vim_memset(&bi, 0, sizeof(bi));
- 
-     if (name == NULL)
-     {
-@@ -1481,14 +1719,12 @@ u_write_undo(name, forceit, buf, hash)
-     u_sync(TRUE);
- 
-     /*
--     * Write the header.
-+     * Write the header.  Initializes encryption, if enabled.
-      */
--    if (serialize_header(fp, buf, hash) == FAIL)
-+    bi.bi_buf = buf;
-+    bi.bi_fp = fp;
-+    if (serialize_header(&bi, hash) == FAIL)
- 	goto write_error;
--#ifdef FEAT_CRYPT
--    if (*buf->b_p_key != NUL)
--	do_crypt = TRUE;
--#endif
- 
-     /*
-      * Iteratively serialize UHPs and their UEPs from the top down.
-@@ -1504,7 +1740,7 @@ u_write_undo(name, forceit, buf, hash)
- #ifdef U_DEBUG
- 	    ++headers_written;
- #endif
--	    if (serialize_uhp(fp, buf, uhp) == FAIL)
-+	    if (serialize_uhp(&bi, uhp) == FAIL)
- 		goto write_error;
- 	}
- 
-@@ -1523,7 +1759,7 @@ u_write_undo(name, forceit, buf, hash)
- 	    uhp = uhp->uh_next.ptr;
-     }
- 
--    if (put_bytes(fp, (long_u)UF_HEADER_END_MAGIC, 2) == OK)
-+    if (undo_write_bytes(&bi, (long_u)UF_HEADER_END_MAGIC, 2) == OK)
- 	write_ok = TRUE;
- #ifdef U_DEBUG
-     if (headers_written != buf->b_u_numhead)
-@@ -1533,6 +1769,11 @@ u_write_undo(name, forceit, buf, hash)
-     }
- #endif
- 
-+#ifdef FEAT_CRYPT
-+    if (bi.bi_state != NULL && undo_flush(&bi) == FAIL)
-+	write_ok = FALSE;
-+#endif
-+
- write_error:
-     fclose(fp);
-     if (!write_ok)
-@@ -1558,8 +1799,9 @@ write_error:
- 
- theend:
- #ifdef FEAT_CRYPT
--    if (do_crypt)
--	crypt_pop_state();
-+    if (bi.bi_state != NULL)
-+	crypt_free_state(bi.bi_state);
-+    vim_free(bi.bi_buffer);
- #endif
-     if (file_name != name)
- 	vim_free(file_name);
-@@ -1605,10 +1847,9 @@ u_read_undo(name, hash, orig_name)
-     struct stat	st_orig;
-     struct stat	st_undo;
- #endif
--#ifdef FEAT_CRYPT
--    int		do_decrypt = FALSE;
--#endif
-+    bufinfo_T	bi;
- 
-+    vim_memset(&bi, 0, sizeof(bi));
-     if (name == NULL)
-     {
- 	file_name = u_get_undo_file_name(curbuf->b_ffname, TRUE);
-@@ -1651,6 +1892,8 @@ u_read_undo(name, hash, orig_name)
- 	    EMSG2(_("E822: Cannot open undo file for reading: %s"), file_name);
- 	goto error;
-     }
-+    bi.bi_buf = curbuf;
-+    bi.bi_fp = fp;
- 
-     /*
-      * Read the undo file header.
-@@ -1671,12 +1914,24 @@ u_read_undo(name, hash, orig_name)
- 								   file_name);
- 	    goto error;
- 	}
--	if (prepare_crypt_read(fp) == FAIL)
-+	bi.bi_state = crypt_create_from_file(fp, curbuf->b_p_key);
-+	if (bi.bi_state == NULL)
- 	{
- 	    EMSG2(_("E826: Undo file decryption failed: %s"), file_name);
- 	    goto error;
- 	}
--	do_decrypt = TRUE;
-+	if (crypt_whole_undofile(bi.bi_state->method_nr))
-+	{
-+	    bi.bi_buffer = alloc(CRYPT_BUF_SIZE);
-+	    if (bi.bi_buffer == NULL)
-+	    {
-+		crypt_free_state(bi.bi_state);
-+		bi.bi_state = NULL;
-+		goto error;
-+	    }
-+	    bi.bi_avail = 0;
-+	    bi.bi_used = 0;
-+	}
- #else
- 	EMSG2(_("E827: Undo file is encrypted: %s"), file_name);
- 	goto error;
-@@ -1688,12 +1943,12 @@ u_read_undo(name, hash, orig_name)
- 	goto error;
-     }
- 
--    if (fread(read_hash, UNDO_HASH_SIZE, 1, fp) != 1)
-+    if (undo_read(&bi, read_hash, (size_t)UNDO_HASH_SIZE) == FAIL)
-     {
- 	corruption_error("hash", file_name);
- 	goto error;
-     }
--    line_count = (linenr_T)get4c(fp);
-+    line_count = (linenr_T)undo_read_4c(&bi);
-     if (memcmp(hash, read_hash, UNDO_HASH_SIZE) != 0
- 				  || line_count != curbuf->b_ml.ml_line_count)
-     {
-@@ -1710,13 +1965,13 @@ u_read_undo(name, hash, orig_name)
-     }
- 
-     /* Read undo data for "U" command. */
--    str_len = get4c(fp);
-+    str_len = undo_read_4c(&bi);
-     if (str_len < 0)
- 	goto error;
-     if (str_len > 0)
--	line_ptr = read_string_decrypt(curbuf, fp, str_len);
--    line_lnum = (linenr_T)get4c(fp);
--    line_colnr = (colnr_T)get4c(fp);
-+	line_ptr = read_string_decrypt(&bi, str_len);
-+    line_lnum = (linenr_T)undo_read_4c(&bi);
-+    line_colnr = (colnr_T)undo_read_4c(&bi);
-     if (line_lnum < 0 || line_colnr < 0)
-     {
- 	corruption_error("line lnum/col", file_name);
-@@ -1724,32 +1979,32 @@ u_read_undo(name, hash, orig_name)
-     }
- 
-     /* Begin general undo data */
--    old_header_seq = get4c(fp);
--    new_header_seq = get4c(fp);
--    cur_header_seq = get4c(fp);
--    num_head = get4c(fp);
--    seq_last = get4c(fp);
--    seq_cur = get4c(fp);
--    seq_time = get8ctime(fp);
-+    old_header_seq = undo_read_4c(&bi);
-+    new_header_seq = undo_read_4c(&bi);
-+    cur_header_seq = undo_read_4c(&bi);
-+    num_head = undo_read_4c(&bi);
-+    seq_last = undo_read_4c(&bi);
-+    seq_cur = undo_read_4c(&bi);
-+    seq_time = undo_read_time(&bi);
- 
-     /* Optional header fields. */
-     for (;;)
-     {
--	int len = getc(fp);
-+	int len = undo_read_byte(&bi);
- 	int what;
- 
- 	if (len == 0 || len == EOF)
- 	    break;
--	what = getc(fp);
-+	what = undo_read_byte(&bi);
- 	switch (what)
- 	{
- 	    case UF_LAST_SAVE_NR:
--		last_save_nr = get4c(fp);
-+		last_save_nr = undo_read_4c(&bi);
- 		break;
- 	    default:
- 		/* field not supported, skip */
- 		while (--len >= 0)
--		    (void)getc(fp);
-+		    (void)undo_read_byte(&bi);
- 	}
-     }
- 
-@@ -1765,7 +2020,7 @@ u_read_undo(name, hash, orig_name)
- 	    goto error;
-     }
- 
--    while ((c = get2c(fp)) == UF_HEADER_MAGIC)
-+    while ((c = undo_read_2c(&bi)) == UF_HEADER_MAGIC)
-     {
- 	if (num_read_uhps >= num_head)
- 	{
-@@ -1773,7 +2028,7 @@ u_read_undo(name, hash, orig_name)
- 	    goto error;
- 	}
- 
--	uhp = unserialize_uhp(fp, file_name);
-+	uhp = unserialize_uhp(&bi, file_name);
- 	if (uhp == NULL)
- 	    goto error;
- 	uhp_table[num_read_uhps++] = uhp;
-@@ -1905,8 +2160,9 @@ error:
- 
- theend:
- #ifdef FEAT_CRYPT
--    if (do_decrypt)
--	crypt_pop_state();
-+    if (bi.bi_state != NULL)
-+	crypt_free_state(bi.bi_state);
-+    vim_free(bi.bi_buffer);
- #endif
-     if (fp != NULL)
- 	fclose(fp);
-diff -up vim74/src/version.c.blowfish2 vim74/src/version.c
---- vim74/src/version.c.blowfish2	2017-09-05 14:47:34.768913491 +0200
-+++ vim74/src/version.c	2017-09-05 14:47:34.973911836 +0200
-@@ -739,6 +739,14 @@ static char *(features[]) =
- static int included_patches[] =
- {   /* Add new patch number below this line */
- /**/
-+    1099,
-+/**/
-+    403,
-+/**/
-+    402,
-+/**/
-+    399,
-+/**/
-     160,
- /**/
-     159,
diff --git a/SOURCES/vim-7.4-licensemacro-1151450.patch b/SOURCES/vim-7.4-licensemacro-1151450.patch
new file mode 100644
index 0000000..3a6e0a7
--- /dev/null
+++ b/SOURCES/vim-7.4-licensemacro-1151450.patch
@@ -0,0 +1,15 @@
+diff -up vim74_new/runtime/syntax/spec.vim.1151450 vim74_new/runtime/syntax/spec.vim
+--- vim74_new/runtime/syntax/spec.vim.1151450	2014-10-13 10:45:07.570944538 +0200
++++ vim74_new/runtime/syntax/spec.vim	2014-10-13 10:44:09.046945965 +0200
+@@ -88,9 +88,9 @@ syn region specSectionMacroBracketArea o
+ "%% Files Section %%
+ "TODO %config valid parameters: missingok\|noreplace
+ "TODO %verify valid parameters: \(not\)\= \(md5\|atime\|...\)
+-syn region specFilesArea matchgroup=specSection start='^%[Ff][Ii][Ll][Ee][Ss]\>' skip='%\(attrib\|defattr\|attr\|dir\|config\|docdir\|doc\|lang\|verify\|ghost\)\>' end='^%[a-zA-Z]'me=e-2 contains=specFilesOpts,specFilesDirective,@specListedFiles,specComment,specCommandSpecial,specMacroIdentifier
++syn region specFilesArea matchgroup=specSection start='^%[Ff][Ii][Ll][Ee][Ss]\>' skip='%\(attrib\|defattr\|attr\|dir\|config\|docdir\|doc\|lang\|verify\|ghost\|license\)\>' end='^%[a-zA-Z]'me=e-2 contains=specFilesOpts,specFilesDirective,@specListedFiles,specComment,specCommandSpecial,specMacroIdentifier
+ "tip: remember to include new itens in specFilesArea above
+-syn match  specFilesDirective contained '%\(attrib\|defattr\|attr\|dir\|config\|docdir\|doc\|lang\|verify\|ghost\)\>'
++syn match  specFilesDirective contained '%\(attrib\|defattr\|attr\|dir\|config\|docdir\|doc\|lang\|verify\|ghost\|license\)\>'
+ 
+ "valid options for certain section headers
+ syn match specDescriptionOpts contained '\s-[ln]\s*\a'ms=s+1,me=e-1
diff --git a/SOURCES/vim-7.4-ssh-keywords.patch b/SOURCES/vim-7.4-ssh-keywords.patch
new file mode 100644
index 0000000..7d8f597
--- /dev/null
+++ b/SOURCES/vim-7.4-ssh-keywords.patch
@@ -0,0 +1,145 @@
+diff -up vim74/runtime/syntax/sshconfig.vim.sshkeywords vim74/runtime/syntax/sshconfig.vim
+--- vim74/runtime/syntax/sshconfig.vim.sshkeywords	2012-02-24 21:28:30.000000000 +0100
++++ vim74/runtime/syntax/sshconfig.vim	2015-03-31 14:56:09.749410615 +0200
+@@ -68,8 +68,8 @@ syn keyword sshconfigSysLogFacility DAEM
+ syn keyword sshconfigSysLogFacility LOCAL2 LOCAL3 LOCAL4 LOCAL5 LOCAL6 LOCAL7
+ syn keyword sshconfigAddressFamily  inet inet6
+ 
+-syn match   sshconfigIPQoS	"af1[1234]"
+-syn match   sshconfigIPQoS	"af2[23]"
++syn match   sshconfigIPQoS	"af1[123]"
++syn match   sshconfigIPQoS	"af2[123]"
+ syn match   sshconfigIPQoS	"af3[123]"
+ syn match   sshconfigIPQoS	"af4[123]"
+ syn match   sshconfigIPQoS	"cs[0-7]"
+@@ -99,10 +99,15 @@ syn case ignore
+ 
+ " Keywords
+ syn keyword sshconfigHostSect Host
++syn keyword sshconfigMatchSect Match
+ 
+ syn keyword sshconfigKeyword AddressFamily
+ syn keyword sshconfigKeyword BatchMode
+ syn keyword sshconfigKeyword BindAddress
++syn keyword sshconfigKeyword CanonicalDomains
++syn keyword sshconfigKeyword CanonicalizeFallbackLocal
++syn keyword sshconfigKeyword CanonicalizeHostname
++syn keyword sshconfigKeyword CanonicalizeMaxDots
+ syn keyword sshconfigKeyword ChallengeResponseAuthentication
+ syn keyword sshconfigKeyword CheckHostIP
+ syn keyword sshconfigKeyword Cipher
+@@ -141,6 +146,8 @@ syn keyword sshconfigKeyword HostbasedAu
+ syn keyword sshconfigKeyword IPQoS
+ syn keyword sshconfigKeyword IdentitiesOnly
+ syn keyword sshconfigKeyword IdentityFile
++syn keyword sshconfigKeyword IgnoreUnknown
++syn keyword sshconfigKeyword IPQoS
+ syn keyword sshconfigKeyword KbdInteractiveAuthentication
+ syn keyword sshconfigKeyword KbdInteractiveDevices
+ syn keyword sshconfigKeyword KexAlgorithms
+@@ -157,6 +164,7 @@ syn keyword sshconfigKeyword Port
+ syn keyword sshconfigKeyword PreferredAuthentications
+ syn keyword sshconfigKeyword Protocol
+ syn keyword sshconfigKeyword ProxyCommand
++syn keyword sshconfigKeyword ProxyUseFdpass
+ syn keyword sshconfigKeyword PubkeyAuthentication
+ syn keyword sshconfigKeyword RSAAuthentication
+ syn keyword sshconfigKeyword RekeyLimit
+@@ -211,6 +219,7 @@ if version >= 508 || !exists("did_sshcon
+   HiLink sshconfigSpecial        Special
+   HiLink sshconfigKeyword        Keyword
+   HiLink sshconfigHostSect       Type
++  HiLink sshconfigMatchSect      Type
+   delcommand HiLink
+ endif
+ 
+diff -up vim74/runtime/syntax/sshdconfig.vim.sshkeywords vim74/runtime/syntax/sshdconfig.vim
+--- vim74/runtime/syntax/sshdconfig.vim.sshkeywords	2011-11-30 12:14:42.000000000 +0100
++++ vim74/runtime/syntax/sshdconfig.vim	2015-03-31 15:04:17.283570538 +0200
+@@ -36,6 +36,7 @@ syn keyword sshdconfigTodo TODO FIXME NO
+ 
+ " Constants
+ syn keyword sshdconfigYesNo yes no none
++syn keyword sshdconfigOther delayed
+ 
+ syn keyword sshdconfigAddressFamily any inet inet6
+ 
+@@ -58,8 +59,8 @@ syn keyword sshdconfigSysLogFacility LOC
+ 
+ syn keyword sshdconfigCompression    delayed
+ 
+-syn match   sshdconfigIPQoS	"af1[1234]"
+-syn match   sshdconfigIPQoS	"af2[23]"
++syn match   sshdconfigIPQoS	"af1[123]"
++syn match   sshdconfigIPQoS	"af2[123]"
+ syn match   sshdconfigIPQoS	"af3[123]"
+ syn match   sshdconfigIPQoS	"af4[123]"
+ syn match   sshdconfigIPQoS	"cs[0-7]"
+@@ -101,6 +102,10 @@ syn keyword sshdconfigKeyword AllowAgent
+ syn keyword sshdconfigKeyword AllowGroups
+ syn keyword sshdconfigKeyword AllowTcpForwarding
+ syn keyword sshdconfigKeyword AllowUsers
++syn keyword sshdconfigKeyword AuthenticationMethods
++syn keyword sshdconfigKeyword AuthorizedKeysCommand
++syn keyword sshdconfigKeyword AuthorizedKeysCommandRunAs
++syn keyword sshdconfigKeyword AuthorizedKeysCommandUser
+ syn keyword sshdconfigKeyword AuthorizedKeysFile
+ syn keyword sshdconfigKeyword AuthorizedPrincipalsFile
+ syn keyword sshdconfigKeyword Banner
+@@ -116,12 +121,14 @@ syn keyword sshdconfigKeyword DenyUsers
+ syn keyword sshdconfigKeyword ForceCommand
+ syn keyword sshdconfigKeyword GSSAPIAuthentication
+ syn keyword sshdconfigKeyword GSSAPICleanupCredentials
++syn keyword sshdconfigKeyword GSSAPIEnablek5users
+ syn keyword sshdconfigKeyword GSSAPIKeyExchange
+ syn keyword sshdconfigKeyword GSSAPIStoreCredentialsOnRekey
+ syn keyword sshdconfigKeyword GSSAPIStrictAcceptorCheck
+ syn keyword sshdconfigKeyword GatewayPorts
+ syn keyword sshdconfigKeyword HostCertificate
+ syn keyword sshdconfigKeyword HostKey
++syn keyword sshdconfigKeyword HostKeyAgent
+ syn keyword sshdconfigKeyword HostbasedAuthentication
+ syn keyword sshdconfigKeyword HostbasedUsesNameFromPacketOnly
+ syn keyword sshdconfigKeyword IPQoS
+@@ -132,6 +139,7 @@ syn keyword sshdconfigKeyword KerberosAu
+ syn keyword sshdconfigKeyword KerberosGetAFSToken
+ syn keyword sshdconfigKeyword KerberosOrLocalPasswd
+ syn keyword sshdconfigKeyword KerberosTicketCleanup
++syn keyword sshdconfigKeyword KerberosUseKuserok
+ syn keyword sshdconfigKeyword KexAlgorithms
+ syn keyword sshdconfigKeyword KeyRegenerationInterval
+ syn keyword sshdconfigKeyword ListenAddress
+@@ -148,6 +156,7 @@ syn keyword sshdconfigKeyword PermitEmpt
+ syn keyword sshdconfigKeyword PermitOpen
+ syn keyword sshdconfigKeyword PermitRootLogin
+ syn keyword sshdconfigKeyword PermitTunnel
++syn keyword sshdconfigKeyword PermitTTY
+ syn keyword sshdconfigKeyword PermitUserEnvironment
+ syn keyword sshdconfigKeyword PidFile
+ syn keyword sshdconfigKeyword Port
+@@ -156,6 +165,9 @@ syn keyword sshdconfigKeyword PrintMotd
+ syn keyword sshdconfigKeyword Protocol
+ syn keyword sshdconfigKeyword PubkeyAuthentication
+ syn keyword sshdconfigKeyword RSAAuthentication
++syn keyword sshdconfigKeyword RekeyLimit
++syn keyword sshdconfigKeyword RequiredAuthentications1
++syn keyword sshdconfigKeyword RequiredAuthentications2
+ syn keyword sshdconfigKeyword RevokedKeys
+ syn keyword sshdconfigKeyword RhostsRSAAuthentication
+ syn keyword sshdconfigKeyword ServerKeyBits
+@@ -169,6 +181,7 @@ syn keyword sshdconfigKeyword UseDNS
+ syn keyword sshdconfigKeyword UseLogin
+ syn keyword sshdconfigKeyword UsePAM
+ syn keyword sshdconfigKeyword UsePrivilegeSeparation
++syn keyword sshdconfigKeyword VersionAddendum
+ syn keyword sshdconfigKeyword X11DisplayOffset
+ syn keyword sshdconfigKeyword X11Forwarding
+ syn keyword sshdconfigKeyword X11UseLocalhost
+@@ -191,6 +204,7 @@ if version >= 508 || !exists("did_sshdco
+   HiLink sshdconfigNumber         sshdconfigConstant
+   HiLink sshdconfigConstant       Constant
+   HiLink sshdconfigYesNo          sshdconfigEnum
++  HiLink sshdconfigOther          sshdconfigEnum
+   HiLink sshdconfigAddressFamily  sshdconfigEnum
+   HiLink sshdconfigCipher         sshdconfigEnum
+   HiLink sshdconfigMAC            sshdconfigEnum
diff --git a/SOURCES/vim-7.4-syncolor.patch b/SOURCES/vim-7.4-syncolor.patch
new file mode 100644
index 0000000..8e581fe
--- /dev/null
+++ b/SOURCES/vim-7.4-syncolor.patch
@@ -0,0 +1,25 @@
+diff -up vim74/src/syntax.c.syncolor vim74/src/syntax.c
+--- vim74/src/syntax.c.syncolor	2014-04-16 15:10:30.362287904 +0200
++++ vim74/src/syntax.c	2014-04-16 15:12:50.278229744 +0200
+@@ -6840,8 +6840,8 @@ static char *(highlight_init_light[]) =
+ 	CENT("Visual term=reverse",
+ 	     "Visual term=reverse guibg=LightGrey"),
+ #ifdef FEAT_DIFF
+-	CENT("DiffAdd term=bold ctermbg=LightBlue",
+-	     "DiffAdd term=bold ctermbg=LightBlue guibg=LightBlue"),
++	CENT("DiffAdd term=bold ctermbg=LightRed",
++	     "DiffAdd term=bold ctermbg=LightRed guibg=LightBlue"),
+ 	CENT("DiffChange term=bold ctermbg=LightMagenta",
+ 	     "DiffChange term=bold ctermbg=LightMagenta guibg=LightMagenta"),
+ 	CENT("DiffDelete term=bold ctermfg=Blue ctermbg=LightCyan",
+@@ -6928,8 +6928,8 @@ static char *(highlight_init_dark[]) =
+ 	CENT("Visual term=reverse",
+ 	     "Visual term=reverse guibg=DarkGrey"),
+ #ifdef FEAT_DIFF
+-	CENT("DiffAdd term=bold ctermbg=DarkBlue",
+-	     "DiffAdd term=bold ctermbg=DarkBlue guibg=DarkBlue"),
++	CENT("DiffAdd term=bold ctermbg=DarkRed",
++	     "DiffAdd term=bold ctermbg=DarkRed guibg=DarkBlue"),
+ 	CENT("DiffChange term=bold ctermbg=DarkMagenta",
+ 	     "DiffChange term=bold ctermbg=DarkMagenta guibg=DarkMagenta"),
+ 	CENT("DiffDelete term=bold ctermfg=Blue ctermbg=DarkCyan",
diff --git a/SOURCES/vim-set-bg.patch b/SOURCES/vim-set-bg.patch
new file mode 100644
index 0000000..14cde3d
--- /dev/null
+++ b/SOURCES/vim-set-bg.patch
@@ -0,0 +1,401 @@
+diff --git a/runtime/doc/tags b/runtime/doc/tags
+index b7e16df..f5201aa 100644
+--- a/runtime/doc/tags
++++ b/runtime/doc/tags
+@@ -920,6 +920,7 @@ $VIMRUNTIME	starting.txt	/*$VIMRUNTIME*
+ 't_KJ'	term.txt	/*'t_KJ'*
+ 't_KK'	term.txt	/*'t_KK'*
+ 't_KL'	term.txt	/*'t_KL'*
++'t_RB'	term.txt	/*'t_RB'*
+ 't_RI'	term.txt	/*'t_RI'*
+ 't_RV'	term.txt	/*'t_RV'*
+ 't_SI'	term.txt	/*'t_SI'*
+@@ -7987,6 +7988,7 @@ t_KI	term.txt	/*t_KI*
+ t_KJ	term.txt	/*t_KJ*
+ t_KK	term.txt	/*t_KK*
+ t_KL	term.txt	/*t_KL*
++t_RB	term.txt	/*t_RB*
+ t_RI	term.txt	/*t_RI*
+ t_RV	term.txt	/*t_RV*
+ t_SI	term.txt	/*t_SI*
+diff --git a/runtime/doc/term.txt b/runtime/doc/term.txt
+index c11ddea..bdd6aba 100644
+--- a/runtime/doc/term.txt
++++ b/runtime/doc/term.txt
+@@ -300,6 +300,8 @@ Added by Vim (there are no standard codes for these):
+ 		|xterm-8bit| |v:termresponse| |'ttymouse'| |xterm-codes|
+ 	t_u7	request cursor position (for xterm)		*t_u7* *'t_u7'*
+ 		see |'ambiwidth'|
++	t_RB	request terminal background color		*t_RB* *'t_RB'*
++		see |'ambiwidth'|
+ 
+ KEY CODES
+ Note: Use the <> form if possible
+diff --git a/src/ascii.h b/src/ascii.h
+index a3cfecf..7ed736a 100644
+--- a/src/ascii.h
++++ b/src/ascii.h
+@@ -34,10 +34,6 @@
+ #define ESC_STR_nc	"\033"
+ #define DEL		0x7f
+ #define DEL_STR		(char_u *)"\177"
+-#define CSI		0x9b	/* Control Sequence Introducer */
+-#define CSI_STR		"\233"
+-#define DCS		0x90	/* Device Control String */
+-#define STERM		0x9c	/* String Terminator */
+ 
+ #define POUND		0xA3
+ 
+@@ -117,11 +113,6 @@
+ #define ESC_STR_nc	"\x27"
+ #define DEL		0x07
+ #define DEL_STR		(char_u *)"\007"
+-/* TODO: EBCDIC Code page dependent (here 1047) */
+-#define CSI		0x9b	/* Control Sequence Introducer */
+-#define CSI_STR		"\233"
+-#define DCS		0x90	/* Device Control String */
+-#define STERM		0x9c	/* String Terminator */
+ 
+ #define POUND		0xB1
+ 
+@@ -173,6 +164,13 @@ extern char MetaCharTable[];
+ 
+ #endif /* defined EBCDIC */
+ 
++/* TODO: EBCDIC Code page dependent (here 1047) */
++#define CSI		0x9b	/* Control Sequence Introducer */
++#define CSI_STR		"\233"
++#define DCS		0x90	/* Device Control String */
++#define OSC		0x9d	/* Operating System Command */
++#define STERM		0x9c	/* String Terminator */
++
+ /*
+  * Character that separates dir names in a path.
+  * For MS-DOS, WIN32 and OS/2 we use a backslash.  A slash mostly works
+diff --git a/src/main.c b/src/main.c
+index 885192b..41c2c41 100644
+--- a/src/main.c
++++ b/src/main.c
+@@ -825,8 +825,11 @@ vim_main2(int argc UNUSED, char **argv UNUSED)
+ 
+     starttermcap();	    /* start termcap if not done by wait_return() */
+     TIME_MSG("start termcap");
+-#if defined(FEAT_TERMRESPONSE) && defined(FEAT_MBYTE)
++#if defined(FEAT_TERMRESPONSE)
++# if defined(FEAT_MBYTE)
+     may_req_ambiguous_char_width();
++# endif
++    may_req_bg_color();
+ #endif
+ 
+ #ifdef FEAT_MOUSE
+diff --git a/src/proto/term.pro b/src/proto/term.pro
+index b3d0df3..f0c2a01 100644
+--- a/src/proto/term.pro
++++ b/src/proto/term.pro
+@@ -36,6 +36,7 @@ void starttermcap __ARGS((void));
+ void stoptermcap __ARGS((void));
+ void may_req_termresponse __ARGS((void));
+ void may_req_ambiguous_char_width __ARGS((void));
++void may_req_bg_color __ARGS((void));
+ int swapping_screen __ARGS((void));
+ void setmouse __ARGS((void));
+ int mouse_has __ARGS((int c));
+diff --git a/src/term.c b/src/term.c
+index 46274d8..660df07 100644
+--- a/src/term.c
++++ b/src/term.c
+@@ -124,6 +124,11 @@ static int crv_status = CRV_GET;
+ #  define U7_SENT	2	/* did send T_U7, waiting for answer */
+ #  define U7_GOT	3	/* received T_U7 response */
+ static int u7_status = U7_GET;
++/* Request background color report: */
++#  define RBG_GET	1	/* send T_RBG when switched to RAW mode */
++#  define RBG_SENT	2	/* did send T_RBG, waiting for answer */
++#  define RBG_GOT	3	/* received T_RBG response */
++static int rbg_status = RBG_GET;
+ # endif
+ 
+ /*
+@@ -949,6 +954,7 @@ static struct builtin_term builtin_termcaps[] =
+     {(int)KS_CWP,	IF_EB("\033[3;%d;%dt", ESC_STR "[3;%d;%dt")},
+ #  endif
+     {(int)KS_CRV,	IF_EB("\033[>c", ESC_STR "[>c")},
++    {(int)KS_RBG,	IF_EB("\033]11;?\007", ESC_STR "]11;?\007")},
+     {(int)KS_U7,	IF_EB("\033[6n", ESC_STR "[6n")},
+ 
+     {K_UP,		IF_EB("\033O*A", ESC_STR "O*A")},
+@@ -1240,6 +1246,7 @@ static struct builtin_term builtin_termcaps[] =
+ #  endif
+     {(int)KS_CRV,	"[CRV]"},
+     {(int)KS_U7,	"[U7]"},
++    {(int)KS_RBG,	"[RBG]"},
+     {K_UP,		"[KU]"},
+     {K_DOWN,		"[KD]"},
+     {K_LEFT,		"[KL]"},
+@@ -2357,7 +2364,7 @@ term_7to8bit(p)
+ 	if (p[1] == '[')
+ 	    return CSI;
+ 	if (p[1] == ']')
+-	    return 0x9d;
++	    return OSC;
+ 	if (p[1] == 'O')
+ 	    return 0x8f;
+     }
+@@ -3224,7 +3231,8 @@ settmode(tmode)
+ 		 * doesn't work in Cooked mode, an external program may get
+ 		 * them. */
+ 		if (tmode != TMODE_RAW && (crv_status == CRV_SENT
+-					 || u7_status == U7_SENT))
++					 || u7_status == U7_SENT
++					 || rbg_status == RBG_SENT))
+ 		    (void)vpeekc_nomap();
+ 		check_for_codes_from_term();
+ 	    }
+@@ -3285,8 +3293,9 @@ stoptermcap()
+ 	if (!gui.in_use && !gui.starting)
+ # endif
+ 	{
+-	    /* May need to discard T_CRV or T_U7 response. */
+-	    if (crv_status == CRV_SENT || u7_status == U7_SENT)
++	    /* May need to discard T_CRV, T_U7 or T_RBG response. */
++	    if (crv_status == CRV_SENT || u7_status == U7_SENT
++						     || rbg_status == RBG_SENT)
+ 	    {
+ # ifdef UNIX
+ 		/* Give the terminal a chance to respond. */
+@@ -3398,6 +3407,36 @@ may_req_ambiguous_char_width()
+ }
+ # endif
+ 
++#if defined(FEAT_TERMRESPONSE) || defined(PROTO)
++/*
++ * Similar to requesting the version string: Request the terminal background
++ * color when it is the right moment.
++ */
++    void
++may_req_bg_color()
++{
++    if (rbg_status == RBG_GET
++	    && cur_tmode == TMODE_RAW
++	    && termcap_active
++	    && p_ek
++#  ifdef UNIX
++	    && isatty(1)
++	    && isatty(read_cmd_fd)
++#  endif
++	    && *T_RBG != NUL
++	    && !option_was_set((char_u *)"bg"))
++    {
++	LOG_TR("Sending BG request");
++	out_str(T_RBG);
++	rbg_status = RBG_SENT;
++	/* check for the characters now, otherwise they might be eaten by
++	 * get_keystroke() */
++	out_flush();
++	(void)vpeekc_nomap();
++    }
++}
++# endif
++
+ # ifdef DEBUG_TERMRESPONSE
+     static void
+ log_tr(char *msg)
+@@ -4204,11 +4243,12 @@ check_termcode(max_offset, buf, bufsize, buflen)
+ 	     *   The final byte must be 'R'. It is used for checking the
+ 	     *   ambiguous-width character state.
+ 	     */
+-	    p = tp[0] == CSI ? tp + 1 : tp + 2;
++	    char_u *argp = tp[0] == ESC ? tp + 2 : tp + 1;
++
+ 	    if ((*T_CRV != NUL || *T_U7 != NUL)
+-			&& ((tp[0] == ESC && tp[1] == '[' && len >= 3)
++			&& ((tp[0] == ESC && len >= 3 && tp[1] == '[')
+ 			    || (tp[0] == CSI && len >= 2))
+-			&& (VIM_ISDIGIT(*p) || *p == '>' || *p == '?'))
++			&& (VIM_ISDIGIT(*argp) || *argp == '>' || *argp == '?'))
+ 	    {
+ #ifdef FEAT_MBYTE
+ 		int col;
+@@ -4346,18 +4386,78 @@ check_termcode(max_offset, buf, bufsize, buflen)
+ 		}
+ 	    }
+ 
+-	    /* Check for '<Esc>P1+r<hex bytes><Esc>\'.  A "0" instead of the
+-	     * "1" means an invalid request. */
++	    /* Check for background color response from the terminal:
++	     *
++	     *       {lead}11;rgb:{rrrr}/{gggg}/{bbbb}{tail}
++	     *
++	     * {lead} can be <Esc>] or OSC
++	     * {tail} can be '\007', <Esc>\ or STERM.
++	     *
++	     * Consume any code that starts with "{lead}11;", it's also
++	     * possible that "rgba" is following.
++	     */
++	    else if (*T_RBG != NUL
++			&& ((tp[0] == ESC && len >= 2 && tp[1] == ']')
++			    || tp[0] == OSC))
++	    {
++		j = 1 + (tp[0] == ESC);
++		if (len >= j + 3 && (argp[0] != '1'
++					 || argp[1] != '1' || argp[2] != ';'))
++		  i = 0; /* no match */
++		else
++		  for (i = j; i < len; ++i)
++		    if (tp[i] == '\007' || (tp[0] == OSC ? tp[i] == STERM
++			: (tp[i] == ESC && i + 1 < len && tp[i + 1] == '\\')))
++		    {
++			if (i - j >= 21 && STRNCMP(tp + j + 3, "rgb:", 4) == 0
++			    && tp[j + 11] == '/' && tp[j + 16] == '/'
++			    && !option_was_set((char_u *)"bg"))
++			{/* TODO: don't set option when already the right value */
++			    LOG_TR("Received RBG");
++			    rbg_status = RBG_GOT;
++			    set_option_value((char_u *)"bg", 0L, (char_u *)(
++				    (3 * '6' < tp[j+7] + tp[j+12] + tp[j+17])
++				    ? "light" : "dark"), 0);
++			    reset_option_was_set((char_u *)"bg");
++			    redraw_asap(CLEAR);
++			}
++
++			/* got finished code: consume it */
++			key_name[0] = (int)KS_EXTRA;
++			key_name[1] = (int)KE_IGNORE;
++			slen = i + 1 + (tp[i] == ESC);
++			break;
++		    }
++		if (i == len)
++		{
++		    LOG_TR("not enough characters for RB");
++		    return -1;
++		}
++	    }
++
++	    /* Check for key code response from xterm:
++	     *
++	     * {lead}{flag}+r<hex bytes><{tail}
++	     *
++	     * {lead} can be <Esc>P or DCS
++	     * {flag} can be '0' or '1'
++	     * {tail} can be Esc>\ or STERM
++	     *
++	     * Consume any code that starts with "{lead}.+r".
++	     */
+ 	    else if (check_for_codes
+-		    && ((tp[0] == ESC && tp[1] == 'P' && len >= 2)
++		    && ((tp[0] == ESC && len >= 2 && tp[1] == 'P')
+ 			|| tp[0] == DCS))
+ 	    {
+-		j = 1 + (tp[0] != DCS);
+-		for (i = j; i < len; ++i)
+-		    if ((tp[i] == ESC && tp[i + 1] == '\\' && i + 1 < len)
++		j = 1 + (tp[0] == ESC);
++		if (len >= j + 3 && (argp[1] != '+' || argp[2] != 'r'))
++		  i = 0; /* no match */
++		else
++		  for (i = j; i < len; ++i)
++		    if ((tp[i] == ESC && i + 1 < len && tp[i + 1] == '\\')
+ 			    || tp[i] == STERM)
+ 		    {
+-			if (i - j >= 3 && tp[j + 1] == '+' && tp[j + 2] == 'r')
++			if (i - j >= 3)
+ 			    got_code_from_term(tp + j, i);
+ 			key_name[0] = (int)KS_EXTRA;
+ 			key_name[1] = (int)KE_IGNORE;
+@@ -4367,8 +4467,10 @@ check_termcode(max_offset, buf, bufsize, buflen)
+ 
+ 		if (i == len)
+ 		{
++		    /* These codes arrive many together, each code can be
++		     * truncated at any point. */
+ 		    LOG_TR("not enough characters for XT");
+-		    return -1;		/* not enough characters */
++		    return -1;
+ 		}
+ 	    }
+ 	}
+diff --git a/src/term.h b/src/term.h
+index 28390a2..4925599 100644
+--- a/src/term.h
++++ b/src/term.h
+@@ -79,6 +79,7 @@ enum SpecialKey
+     KS_CWP,	/* set window position in pixels */
+     KS_CWS,	/* set window size in characters */
+     KS_CRV,	/* request version string */
++    KS_RBG,	/* request background color */
+     KS_CSI,	/* start insert mode (bar cursor) */
+     KS_CEI,	/* end insert mode (block cursor) */
+ #ifdef FEAT_VERTSPLIT
+@@ -160,6 +161,7 @@ extern char_u *(term_strings[]);    /* current terminal strings */
+ #define T_CSI	(term_str(KS_CSI))	/* start insert mode */
+ #define T_CEI	(term_str(KS_CEI))	/* end insert mode */
+ #define T_CRV	(term_str(KS_CRV))	/* request version string */
++#define T_RBG	(term_str(KS_RBG))	/* request background RGB */
+ #define T_OP	(term_str(KS_OP))	/* original color pair */
+ #define T_U7	(term_str(KS_U7))	/* request cursor position */
+ 
+diff --git a/src/option.c b/src/option.c
+index e20efc1..7da18a5 100644
+--- a/src/option.c
++++ b/src/option.c
+@@ -2939,11 +2939,11 @@ static struct vimoption
+ #ifdef FEAT_VERTSPLIT
+     p_term("t_CV", T_CSV)
+ #endif
+-    p_term("t_ut", T_UT)
+     p_term("t_da", T_DA)
+     p_term("t_db", T_DB)
+     p_term("t_DL", T_CDL)
+     p_term("t_dl", T_DL)
++    p_term("t_EI", T_CEI)
+     p_term("t_fs", T_FS)
+     p_term("t_IE", T_CIE)
+     p_term("t_IS", T_CIS)
+@@ -2957,27 +2957,28 @@ static struct vimoption
+     p_term("t_ms", T_MS)
+     p_term("t_nd", T_ND)
+     p_term("t_op", T_OP)
++    p_term("t_RB", T_RBG)
+     p_term("t_RI", T_CRI)
+     p_term("t_RV", T_CRV)
+-    p_term("t_u7", T_U7)
+     p_term("t_Sb", T_CSB)
+-    p_term("t_Sf", T_CSF)
+     p_term("t_se", T_SE)
++    p_term("t_Sf", T_CSF)
++    p_term("t_SI", T_CSI)
+     p_term("t_so", T_SO)
+     p_term("t_sr", T_SR)
+-    p_term("t_ts", T_TS)
+     p_term("t_te", T_TE)
+     p_term("t_ti", T_TI)
++    p_term("t_ts", T_TS)
++    p_term("t_u7", T_U7)
+     p_term("t_ue", T_UE)
+     p_term("t_us", T_US)
++    p_term("t_ut", T_UT)
+     p_term("t_vb", T_VB)
+     p_term("t_ve", T_VE)
+     p_term("t_vi", T_VI)
+     p_term("t_vs", T_VS)
+     p_term("t_WP", T_CWP)
+     p_term("t_WS", T_CWS)
+-    p_term("t_SI", T_CSI)
+-    p_term("t_EI", T_CEI)
+     p_term("t_xn", T_XN)
+     p_term("t_xs", T_XS)
+     p_term("t_ZH", T_CZH)
+diff --git a/src/term.c b/src/term.c
+index 660df07..b4b0c4b 100644
+--- a/src/term.c
++++ b/src/term.c
+@@ -1622,7 +1622,7 @@ set_termname(term)
+ 				{KS_TS, "ts"}, {KS_FS, "fs"},
+ 				{KS_CWP, "WP"}, {KS_CWS, "WS"},
+ 				{KS_CSI, "SI"}, {KS_CEI, "EI"},
+-				{KS_U7, "u7"},
++				{KS_U7, "u7"}, {KS_RBG, "RB"},
+ 				{(enum SpecialKey)0, NULL}
+ 			    };
+ 
diff --git a/SOURCES/vimrc b/SOURCES/vimrc
index cf66061..dbe8cae 100644
--- a/SOURCES/vimrc
+++ b/SOURCES/vimrc
@@ -13,7 +13,7 @@ set ruler		" show the cursor position all the time
 
 " Only do this part when compiled with support for autocommands
 if has("autocmd")
-  augroup fedora
+  augroup redhat
   autocmd!
   " In text files, always limit the width of text to 78 characters
   " autocmd BufRead *.txt set tw=78
diff --git a/SPECS/vim.spec b/SPECS/vim.spec
index 263ec80..2a4486f 100644
--- a/SPECS/vim.spec
+++ b/SPECS/vim.spec
@@ -1,4 +1,4 @@
-%define patchlevel 160
+%define patchlevel 629
 %if %{?WITH_SELINUX:0}%{!?WITH_SELINUX:1}
 %define WITH_SELINUX 1
 %endif
@@ -12,6 +12,7 @@
 %define withvimspell 0
 %define withhunspell 0
 %define withruby 1
+%define withlua 0
 
 %define baseversion 7.4
 %define vimdir vim74
@@ -38,6 +39,8 @@ Source13: vim-spell-files.tar.bz2
 %endif
 Source14: spec-template
 Source15: spec-template.new
+# rhbz#1083924 https://github.com/vim-jp/vim-cpp/blob/master/syntax/cpp.vim
+Source16: cpp.vim
 
 Patch2002: vim-7.0-fixkeys.patch
 Patch2003: vim-6.2-specsyntax.patch
@@ -207,6 +210,474 @@ Patch157: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.157
 Patch158: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.158
 Patch159: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.159
 Patch160: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.160
+Patch161: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.161
+Patch162: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.162
+Patch163: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.163
+Patch164: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.164
+Patch165: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.165
+Patch166: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.166
+Patch167: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.167
+Patch168: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.168
+Patch169: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.169
+Patch170: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.170
+Patch171: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.171
+Patch172: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.172
+Patch173: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.173
+Patch174: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.174
+Patch175: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.175
+Patch176: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.176
+Patch177: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.177
+Patch178: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.178
+Patch179: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.179
+Patch180: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.180
+Patch181: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.181
+Patch182: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.182
+Patch183: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.183
+Patch184: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.184
+Patch185: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.185
+Patch186: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.186
+Patch187: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.187
+Patch188: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.188
+Patch189: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.189
+Patch190: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.190
+Patch191: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.191
+Patch192: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.192
+Patch193: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.193
+Patch194: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.194
+Patch195: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.195
+Patch196: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.196
+Patch197: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.197
+Patch198: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.198
+Patch199: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.199
+Patch200: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.200
+Patch201: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.201
+Patch202: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.202
+Patch203: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.203
+Patch204: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.204
+Patch205: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.205
+Patch206: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.206
+Patch207: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.207
+Patch209: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.209
+Patch210: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.210
+Patch211: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.211
+Patch212: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.212
+Patch213: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.213
+Patch214: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.214
+Patch215: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.215
+Patch216: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.216
+Patch217: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.217
+Patch218: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.218
+Patch219: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.219
+Patch220: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.220
+Patch221: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.221
+Patch222: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.222
+Patch223: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.223
+Patch224: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.224
+Patch225: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.225
+Patch226: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.226
+Patch227: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.227
+Patch228: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.228
+Patch229: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.229
+Patch230: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.230
+Patch231: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.231
+Patch232: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.232
+Patch233: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.233
+Patch234: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.234
+Patch235: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.235
+Patch236: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.236
+Patch237: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.237
+Patch238: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.238
+Patch239: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.239
+Patch240: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.240
+Patch241: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.241
+Patch242: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.242
+Patch243: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.243
+Patch244: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.244
+Patch245: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.245
+Patch246: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.246
+Patch247: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.247
+Patch248: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.248
+Patch249: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.249
+Patch250: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.250
+Patch251: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.251
+Patch252: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.252
+Patch253: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.253
+Patch254: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.254
+Patch255: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.255
+Patch256: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.256
+Patch257: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.257
+Patch258: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.258
+Patch259: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.259
+Patch260: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.260
+Patch261: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.261
+Patch262: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.262
+Patch263: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.263
+Patch264: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.264
+Patch265: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.265
+Patch266: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.266
+Patch267: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.267
+Patch268: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.268
+Patch269: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.269
+Patch270: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.270
+Patch271: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.271
+Patch272: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.272
+Patch273: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.273
+Patch274: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.274
+Patch275: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.275
+Patch276: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.276
+Patch277: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.277
+Patch278: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.278
+Patch279: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.279
+Patch280: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.280
+Patch281: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.281
+Patch282: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.282
+Patch283: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.283
+Patch284: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.284
+Patch285: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.285
+Patch286: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.286
+Patch287: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.287
+Patch288: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.288
+Patch289: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.289
+Patch290: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.290
+Patch291: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.291
+Patch292: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.292
+Patch293: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.293
+Patch294: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.294
+Patch295: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.295
+Patch296: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.296
+Patch297: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.297
+Patch298: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.298
+Patch299: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.299
+Patch300: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.300
+Patch301: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.301
+Patch302: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.302
+Patch303: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.303
+Patch304: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.304
+Patch305: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.305
+Patch306: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.306
+Patch307: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.307
+Patch308: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.308
+Patch309: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.309
+Patch310: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.310
+Patch311: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.311
+Patch312: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.312
+Patch313: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.313
+Patch314: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.314
+Patch315: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.315
+Patch316: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.316
+Patch317: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.317
+Patch318: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.318
+Patch319: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.319
+Patch320: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.320
+Patch321: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.321
+Patch322: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.322
+Patch323: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.323
+Patch324: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.324
+Patch325: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.325
+Patch326: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.326
+Patch327: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.327
+Patch328: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.328
+Patch329: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.329
+Patch330: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.330
+Patch331: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.331
+Patch332: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.332
+Patch333: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.333
+Patch334: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.334
+Patch335: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.335
+Patch336: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.336
+Patch337: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.337
+Patch338: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.338
+Patch339: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.339
+Patch340: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.340
+Patch341: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.341
+Patch342: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.342
+Patch343: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.343
+Patch344: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.344
+Patch345: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.345
+Patch346: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.346
+Patch347: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.347
+Patch348: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.348
+Patch349: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.349
+Patch350: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.350
+Patch351: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.351
+Patch352: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.352
+Patch353: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.353
+Patch354: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.354
+Patch355: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.355
+Patch356: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.356
+Patch357: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.357
+Patch358: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.358
+Patch359: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.359
+Patch360: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.360
+Patch361: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.361
+Patch362: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.362
+Patch363: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.363
+Patch364: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.364
+Patch365: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.365
+Patch366: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.366
+Patch367: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.367
+Patch368: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.368
+Patch369: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.369
+Patch370: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.370
+Patch371: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.371
+Patch372: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.372
+Patch373: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.373
+Patch374: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.374
+Patch375: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.375
+Patch376: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.376
+Patch377: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.377
+Patch378: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.378
+Patch379: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.379
+Patch380: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.380
+Patch381: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.381
+Patch382: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.382
+Patch383: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.383
+Patch384: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.384
+Patch385: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.385
+Patch386: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.386
+Patch387: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.387
+Patch388: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.388
+Patch389: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.389
+Patch390: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.390
+Patch391: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.391
+Patch392: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.392
+Patch393: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.393
+Patch394: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.394
+Patch395: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.395
+Patch396: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.396
+Patch397: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.397
+Patch398: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.398
+Patch399: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.399
+Patch400: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.400
+Patch401: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.401
+Patch402: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.402
+Patch403: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.403
+Patch404: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.404
+Patch405: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.405
+Patch406: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.406
+Patch407: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.407
+Patch408: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.408
+Patch409: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.409
+Patch410: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.410
+Patch411: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.411
+Patch412: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.412
+Patch413: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.413
+Patch414: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.414
+Patch415: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.415
+Patch416: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.416
+Patch417: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.417
+Patch418: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.418
+Patch419: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.419
+Patch420: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.420
+Patch421: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.421
+Patch422: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.422
+Patch423: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.423
+Patch424: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.424
+Patch425: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.425
+Patch426: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.426
+Patch427: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.427
+Patch428: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.428
+Patch429: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.429
+Patch430: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.430
+Patch431: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.431
+Patch432: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.432
+Patch433: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.433
+Patch434: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.434
+Patch435: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.435
+Patch436: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.436
+Patch437: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.437
+Patch438: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.438
+Patch439: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.439
+Patch440: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.440
+Patch441: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.441
+Patch442: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.442
+Patch443: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.443
+Patch444: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.444
+Patch445: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.445
+Patch446: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.446
+Patch447: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.447
+Patch448: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.448
+Patch449: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.449
+Patch450: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.450
+Patch451: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.451
+Patch452: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.452
+Patch453: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.453
+Patch454: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.454
+Patch455: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.455
+Patch456: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.456
+Patch457: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.457
+Patch458: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.458
+Patch459: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.459
+Patch460: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.460
+Patch461: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.461
+Patch462: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.462
+Patch463: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.463
+Patch464: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.464
+Patch465: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.465
+Patch466: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.466
+Patch467: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.467
+Patch468: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.468
+Patch469: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.469
+Patch470: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.470
+Patch471: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.471
+Patch472: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.472
+Patch473: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.473
+Patch474: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.474
+Patch475: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.475
+Patch476: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.476
+Patch477: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.477
+Patch478: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.478
+Patch479: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.479
+Patch480: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.480
+Patch481: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.481
+Patch482: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.482
+Patch483: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.483
+Patch484: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.484
+Patch485: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.485
+Patch486: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.486
+Patch487: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.487
+Patch488: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.488
+Patch489: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.489
+Patch490: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.490
+Patch491: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.491
+Patch492: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.492
+Patch493: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.493
+Patch494: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.494
+Patch495: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.495
+Patch496: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.496
+Patch497: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.497
+Patch498: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.498
+Patch499: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.499
+Patch500: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.500
+Patch501: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.501
+Patch502: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.502
+Patch503: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.503
+Patch504: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.504
+Patch505: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.505
+Patch506: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.506
+Patch507: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.507
+Patch508: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.508
+Patch509: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.509
+Patch510: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.510
+Patch511: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.511
+Patch512: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.512
+Patch513: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.513
+Patch514: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.514
+Patch515: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.515
+Patch516: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.516
+Patch517: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.517
+Patch518: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.518
+Patch519: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.519
+Patch520: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.520
+Patch521: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.521
+Patch522: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.522
+Patch523: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.523
+Patch524: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.524
+Patch525: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.525
+Patch526: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.526
+Patch527: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.527
+Patch528: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.528
+Patch529: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.529
+Patch530: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.530
+Patch531: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.531
+Patch532: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.532
+Patch533: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.533
+Patch534: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.534
+Patch535: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.535
+Patch536: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.536
+Patch537: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.537
+Patch538: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.538
+Patch539: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.539
+Patch540: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.540
+Patch541: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.541
+Patch542: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.542
+Patch543: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.543
+Patch544: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.544
+Patch545: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.545
+Patch546: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.546
+Patch547: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.547
+Patch548: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.548
+Patch549: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.549
+Patch550: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.550
+Patch551: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.551
+Patch552: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.552
+Patch553: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.553
+Patch554: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.554
+Patch555: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.555
+Patch556: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.556
+Patch557: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.557
+Patch558: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.558
+Patch559: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.559
+Patch560: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.560
+Patch561: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.561
+Patch562: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.562
+Patch563: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.563
+Patch564: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.564
+Patch565: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.565
+Patch566: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.566
+Patch567: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.567
+Patch568: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.568
+Patch569: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.569
+Patch570: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.570
+Patch571: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.571
+Patch572: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.572
+Patch573: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.573
+Patch574: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.574
+Patch575: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.575
+Patch576: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.576
+Patch577: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.577
+Patch578: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.578
+Patch579: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.579
+Patch580: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.580
+Patch581: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.581
+Patch582: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.582
+Patch583: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.583
+Patch584: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.584
+Patch585: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.585
+Patch586: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.586
+Patch587: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.587
+Patch588: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.588
+Patch589: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.589
+Patch590: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.590
+Patch591: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.591
+Patch592: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.592
+Patch593: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.593
+Patch594: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.594
+Patch595: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.595
+Patch596: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.596
+Patch597: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.597
+Patch598: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.598
+Patch599: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.599
+Patch600: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.600
+Patch601: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.601
+Patch602: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.602
+Patch603: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.603
+Patch604: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.604
+Patch605: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.605
+Patch606: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.606
+Patch607: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.607
+Patch608: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.608
+Patch609: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.609
+Patch610: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.610
+Patch611: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.611
+Patch612: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.612
+Patch613: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.613
+Patch614: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.614
+Patch615: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.615
+Patch616: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.616
+Patch617: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.617
+Patch618: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.618
+Patch619: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.619
+Patch620: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.620
+Patch621: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.621
+Patch622: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.622
+Patch623: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.623
+Patch624: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.624
+Patch625: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.625
+Patch626: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.626
+Patch627: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.627
+Patch628: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.628
+Patch629: ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.629
 
 Patch3000: vim-7.4-syntax.patch
 Patch3002: vim-7.1-nowarnings.patch
@@ -214,20 +685,22 @@ Patch3004: vim-7.0-rclocation.patch
 Patch3006: vim-6.4-checkhl.patch
 Patch3007: vim-7.4-fstabsyntax.patch
 Patch3008: vim-7.0-warning.patch
-Patch3009: vim-7.0-syncolor.patch
+Patch3009: vim-7.4-syncolor.patch
 Patch3010: vim-7.0-specedit.patch
 Patch3011: vim72-rh514717.patch
 Patch3012: vim-7.3-manpage-typo-668894-675480.patch
-Patch3013: vim-7.3-xsubpp-path.patch
 Patch3014: vim-manpagefixes-948566.patch
 Patch3015: vim-7.4-CVE-2016-1248.patch
 Patch3016: vim-7.4-yamlsyntax.patch
 # 1267826 - Include c++11 syntax highlighting in vim
 Patch3017: vim-7.4-c++11.patch
-# 1319760 - [RFE] Vim should support blowfish2, plus ensure that RHEL6 encrypted files can be opened in RHEL7
-Patch3018: vim-7.4-blowfish2.patch
-# 1719963 - CVE-2019-12735 source command allows arbitrary command execution via the modeline
-Patch3019: 0001-patch-8.1.1365-source-command-doesn-t-check-for-the-.patch
+Patch3018: vim-7.4-licensemacro-1151450.patch
+Patch3019: vim-7.4-ssh-keywords.patch
+# 1377316 - [RFE] make _remote_ vim doing the right decisions about 'set background'
+# merged patch of 7.4.{757,761,762,766,770, update-help-files} commits from upstream
+Patch3020: vim-set-bg.patch
+# 1719964 - CVE-2019-12735 arbitrary command execution in getchar.c [rhel-7.7]
+Patch3021: 0001-patch-8.1.1365-source-command-doesn-t-check-for-the-.patch
 
 Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 BuildRequires: python-devel ncurses-devel gettext perl-devel
@@ -239,6 +712,9 @@ BuildRequires: libselinux-devel
 %if "%{withruby}" == "1"
 Buildrequires: ruby-devel ruby
 %endif
+%if "%{withlua}" == "1"
+Buildrequires: lua-devel
+%endif
 %if %{desktop_file}
 # for /usr/bin/desktop-file-install
 Requires: desktop-file-utils
@@ -520,6 +996,474 @@ perl -pi -e "s,bin/nawk,bin/awk,g" runtime/tools/mve.awk
 %patch158 -p0
 %patch159 -p0
 %patch160 -p0
+%patch161 -p0
+%patch162 -p0
+%patch163 -p0
+%patch164 -p0
+%patch165 -p0
+%patch166 -p0
+%patch167 -p0
+%patch168 -p0
+%patch169 -p0
+%patch170 -p0
+%patch171 -p0
+%patch172 -p0
+%patch173 -p0
+%patch174 -p0
+%patch175 -p0
+%patch176 -p0
+%patch177 -p0
+%patch178 -p0
+%patch179 -p0
+%patch180 -p0
+%patch181 -p0
+%patch182 -p0
+%patch183 -p0
+%patch184 -p0
+%patch185 -p0
+%patch186 -p0
+%patch187 -p0
+%patch188 -p0
+%patch189 -p0
+%patch190 -p0
+%patch191 -p0
+%patch192 -p0
+%patch193 -p0
+%patch194 -p0
+%patch195 -p0
+%patch196 -p0
+%patch197 -p0
+%patch198 -p0
+%patch199 -p0
+%patch200 -p0
+%patch201 -p0
+%patch202 -p0
+%patch203 -p0
+%patch204 -p0
+%patch205 -p0
+%patch206 -p0
+%patch207 -p0
+%patch209 -p0
+%patch210 -p0
+%patch211 -p0
+%patch212 -p0
+%patch213 -p0
+%patch214 -p0
+%patch215 -p0
+%patch216 -p0
+%patch217 -p0
+%patch218 -p0
+%patch219 -p0
+%patch220 -p0
+%patch221 -p0
+%patch222 -p0
+%patch223 -p0
+%patch224 -p0
+%patch225 -p0
+%patch226 -p0
+%patch227 -p0
+%patch228 -p0
+%patch229 -p0
+%patch230 -p0
+%patch231 -p0
+%patch232 -p0
+%patch233 -p0
+%patch234 -p0
+%patch235 -p0
+%patch236 -p0
+%patch237 -p0
+%patch238 -p0
+%patch239 -p0
+%patch240 -p0
+%patch241 -p0
+%patch242 -p0
+%patch243 -p0
+%patch244 -p0
+%patch245 -p0
+%patch246 -p0
+%patch247 -p0
+%patch248 -p0
+%patch249 -p0
+%patch250 -p0
+%patch251 -p0
+%patch252 -p0
+%patch253 -p0
+%patch254 -p0
+%patch255 -p0
+%patch256 -p0
+%patch257 -p0
+%patch258 -p0
+%patch259 -p0
+%patch260 -p0
+%patch261 -p0
+%patch262 -p0
+%patch263 -p0
+%patch264 -p0
+%patch265 -p0
+%patch266 -p0
+%patch267 -p0
+%patch268 -p0
+%patch269 -p0
+%patch270 -p0
+%patch271 -p0
+%patch272 -p0
+%patch273 -p0
+%patch274 -p0
+%patch275 -p0
+%patch276 -p0
+%patch277 -p0
+%patch278 -p0
+%patch279 -p0
+%patch280 -p0
+%patch281 -p0
+%patch282 -p0
+%patch283 -p0
+%patch284 -p0
+%patch285 -p0
+%patch286 -p0
+%patch287 -p0
+%patch288 -p0
+%patch289 -p0
+%patch290 -p0
+%patch291 -p0
+%patch292 -p0
+%patch293 -p0
+%patch294 -p0
+%patch295 -p0
+%patch296 -p0
+%patch297 -p0
+%patch298 -p0
+%patch299 -p0
+%patch300 -p0
+%patch301 -p0
+%patch302 -p0
+%patch303 -p0
+%patch304 -p0
+%patch305 -p0
+%patch306 -p0
+%patch307 -p0
+%patch308 -p0
+%patch309 -p0
+%patch310 -p0
+%patch311 -p0
+%patch312 -p0
+%patch313 -p0
+%patch314 -p0
+%patch315 -p0
+%patch316 -p0
+%patch317 -p0
+%patch318 -p0
+%patch319 -p0
+%patch320 -p0
+%patch321 -p0
+%patch322 -p0
+%patch323 -p0
+%patch324 -p0
+%patch325 -p0
+%patch326 -p0
+%patch327 -p0
+%patch328 -p0
+%patch329 -p0
+%patch330 -p0
+%patch331 -p0
+%patch332 -p0
+%patch333 -p0
+%patch334 -p0
+%patch335 -p0
+%patch336 -p0
+%patch337 -p0
+%patch338 -p0
+%patch339 -p0
+%patch340 -p0
+%patch341 -p0
+%patch342 -p0
+%patch343 -p0
+%patch344 -p0
+%patch345 -p0
+%patch346 -p0
+%patch347 -p0
+%patch348 -p0
+%patch349 -p0
+%patch350 -p0
+%patch351 -p0
+%patch352 -p0
+%patch353 -p0
+%patch354 -p0
+%patch355 -p0
+%patch356 -p0
+%patch357 -p0
+%patch358 -p0
+%patch359 -p0
+%patch360 -p0
+%patch361 -p0
+%patch362 -p0
+%patch363 -p0
+%patch364 -p0
+%patch365 -p0
+%patch366 -p0
+%patch367 -p0
+%patch368 -p0
+%patch369 -p0
+%patch370 -p0
+%patch371 -p0
+%patch372 -p0
+%patch373 -p0
+%patch374 -p0
+%patch375 -p0
+%patch376 -p0
+%patch377 -p0
+%patch378 -p0
+%patch379 -p0
+%patch380 -p0
+%patch381 -p0
+%patch382 -p0
+%patch383 -p0
+%patch384 -p0
+%patch385 -p0
+%patch386 -p0
+%patch387 -p0
+%patch388 -p0
+%patch389 -p0
+%patch390 -p0
+%patch391 -p0
+%patch392 -p0
+%patch393 -p0
+%patch394 -p0
+%patch395 -p0
+%patch396 -p0
+%patch397 -p0
+%patch398 -p0
+%patch399 -p0
+%patch400 -p0
+%patch401 -p0
+%patch402 -p0
+%patch403 -p0
+%patch404 -p0
+%patch405 -p0
+%patch406 -p0
+%patch407 -p0
+%patch408 -p0
+%patch409 -p0
+%patch410 -p0
+%patch411 -p0
+%patch412 -p0
+%patch413 -p0
+%patch414 -p0
+%patch415 -p0
+%patch416 -p0
+%patch417 -p0
+%patch418 -p0
+%patch419 -p0
+%patch420 -p0
+%patch421 -p0
+%patch422 -p0
+%patch423 -p0
+%patch424 -p0
+%patch425 -p0
+%patch426 -p0
+%patch427 -p0
+%patch428 -p0
+%patch429 -p0
+%patch430 -p0
+%patch431 -p0
+%patch432 -p0
+%patch433 -p0
+%patch434 -p0
+%patch435 -p0
+%patch436 -p0
+%patch437 -p0
+%patch438 -p0
+%patch439 -p0
+%patch440 -p0
+%patch441 -p0
+%patch442 -p0
+%patch443 -p0
+%patch444 -p0
+%patch445 -p0
+%patch446 -p0
+%patch447 -p0
+%patch448 -p0
+%patch449 -p0
+%patch450 -p0
+%patch451 -p0
+%patch452 -p0
+%patch453 -p0
+%patch454 -p0
+%patch455 -p0
+%patch456 -p0
+%patch457 -p0
+%patch458 -p0
+%patch459 -p0
+%patch460 -p0
+%patch461 -p0
+%patch462 -p0
+%patch463 -p0
+%patch464 -p0
+%patch465 -p0
+%patch466 -p0
+%patch467 -p0
+%patch468 -p0
+%patch469 -p0
+%patch470 -p0
+%patch471 -p0
+%patch472 -p0
+%patch473 -p0
+%patch474 -p0
+%patch475 -p0
+%patch476 -p0
+%patch477 -p0
+%patch478 -p0
+%patch479 -p0
+%patch480 -p0
+%patch481 -p0
+%patch482 -p0
+%patch483 -p0
+%patch484 -p0
+%patch485 -p0
+%patch486 -p0
+%patch487 -p0
+%patch488 -p0
+%patch489 -p0
+%patch490 -p0
+%patch491 -p0
+%patch492 -p0
+%patch493 -p0
+%patch494 -p0
+%patch495 -p0
+%patch496 -p0
+%patch497 -p0
+%patch498 -p0
+%patch499 -p0
+%patch500 -p0
+%patch501 -p0
+%patch502 -p0
+%patch503 -p0
+%patch504 -p0
+%patch505 -p0
+%patch506 -p0
+%patch507 -p0
+%patch508 -p0
+%patch509 -p0
+%patch510 -p0
+%patch511 -p0
+%patch512 -p0
+%patch513 -p0
+%patch514 -p0
+%patch515 -p0
+%patch516 -p0
+%patch517 -p0
+%patch518 -p0
+%patch519 -p0
+%patch520 -p0
+%patch521 -p0
+%patch522 -p0
+%patch523 -p0
+%patch524 -p0
+%patch525 -p0
+%patch526 -p0
+%patch527 -p0
+%patch528 -p0
+%patch529 -p0
+%patch530 -p0
+%patch531 -p0
+%patch532 -p0
+%patch533 -p0
+%patch534 -p0
+%patch535 -p0
+%patch536 -p0
+%patch537 -p0
+%patch538 -p0
+%patch539 -p0
+%patch540 -p0
+%patch541 -p0
+%patch542 -p0
+%patch543 -p0
+%patch544 -p0
+%patch545 -p0
+%patch546 -p0
+%patch547 -p0
+%patch548 -p0
+%patch549 -p0
+%patch550 -p0
+%patch551 -p0
+%patch552 -p0
+%patch553 -p0
+%patch554 -p0
+%patch555 -p0
+%patch556 -p0
+%patch557 -p0
+%patch558 -p0
+%patch559 -p0
+%patch560 -p0
+%patch561 -p0
+%patch562 -p0
+%patch563 -p0
+%patch564 -p0
+%patch565 -p0
+%patch566 -p0
+%patch567 -p0
+%patch568 -p0
+%patch569 -p0
+%patch570 -p0
+%patch571 -p0
+%patch572 -p0
+%patch573 -p0
+%patch574 -p0
+%patch575 -p0
+%patch576 -p0
+%patch577 -p0
+%patch578 -p0
+%patch579 -p0
+%patch580 -p0
+%patch581 -p0
+%patch582 -p0
+%patch583 -p0
+%patch584 -p0
+%patch585 -p0
+%patch586 -p0
+%patch587 -p0
+%patch588 -p0
+%patch589 -p0
+%patch590 -p0
+%patch591 -p0
+%patch592 -p0
+%patch593 -p0
+%patch594 -p0
+%patch595 -p0
+%patch596 -p0
+%patch597 -p0
+%patch598 -p0
+%patch599 -p0
+%patch600 -p0
+%patch601 -p0
+%patch602 -p0
+%patch603 -p0
+%patch604 -p0
+%patch605 -p0
+%patch606 -p0
+%patch607 -p0
+%patch608 -p0
+%patch609 -p0
+%patch610 -p0
+%patch611 -p0
+%patch612 -p0
+%patch613 -p0
+%patch614 -p0
+%patch615 -p0
+%patch616 -p0
+%patch617 -p0
+%patch618 -p0
+%patch619 -p0
+%patch620 -p0
+%patch621 -p0
+%patch622 -p0
+%patch623 -p0
+%patch624 -p0
+%patch625 -p0
+%patch626 -p0
+%patch627 -p0
+%patch628 -p0
+%patch629 -p0
 
 # install spell files
 %if %{withvimspell}
@@ -537,15 +1481,16 @@ perl -pi -e "s,bin/nawk,bin/awk,g" runtime/tools/mve.awk
 %patch3011 -p1
 %patch3012 -p1
 
-%if %{?fedora}%{!?fedora:0} >= 20 || %{?rhel}%{!?rhel:0} >= 7
-%patch3013 -p1
-%endif
 %patch3014 -p1
 %patch3015 -p1
 %patch3016 -p1
 %patch3017 -p1
 %patch3018 -p1
 %patch3019 -p1
+%patch3020 -p1
+%patch3021 -p1
+
+perl -pi -e "s/test71.out//" src/testdir/Makefile
 
 %build
 cp -f %{SOURCE5} .
@@ -559,6 +1504,31 @@ mv -f Makefile.tmp Makefile
 export CFLAGS="%{optflags} -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2 -D__linux__ -D_REENTRANT"
 export CXXFLAGS="%{optflags} -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2 -D__linux__ -D_REENTRANT"
 
+cp -f os_unix.h os_unix.h.save
+cp -f ex_cmds.c ex_cmds.c.save
+
+perl -pi -e "s/help.txt/vi_help.txt/"  os_unix.h ex_cmds.c
+perl -pi -e "s/\/etc\/vimrc/\/etc\/virc/"  os_unix.h
+%configure --prefix=%{_prefix} --with-features=small --with-x=no \
+  --enable-multibyte \
+  --disable-netbeans \
+%if %{WITH_SELINUX}
+  --enable-selinux \
+%else
+  --disable-selinux \
+%endif
+  --disable-pythoninterp --disable-perlinterp --disable-tclinterp \
+  --with-tlib=tinfo --enable-gui=no --disable-gpm --exec-prefix=/ \
+  --with-compiledby="<bugzilla@redhat.com>" \
+  --with-modified-by="<bugzilla@redhat.com>"
+
+make VIMRCLOC=/etc VIMRUNTIMEDIR=/usr/share/vim/%{vimdir} %{?_smp_mflags}
+cp vim minimal-vim
+make clean
+
+mv -f os_unix.h.save os_unix.h
+mv -f ex_cmds.c.save ex_cmds.c
+
 %configure --with-features=huge \
   --enable-pythoninterp=dynamic \
   --enable-perlinterp \
@@ -583,6 +1553,11 @@ export CXXFLAGS="%{optflags} -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOU
 %else
   --disable-rubyinterp \
 %endif
+%if "%{withlua}" == "1"
+  --enable-luainterp=dynamic \
+%else
+  --disable-luainterp \
+%endif
 
 make VIMRCLOC=/etc VIMRUNTIMEDIR=/usr/share/vim/%{vimdir} %{?_smp_mflags}
 cp vim gvim
@@ -612,27 +1587,14 @@ make clean
 %else
   --disable-rubyinterp \
 %endif
-
-make VIMRCLOC=/etc VIMRUNTIMEDIR=/usr/share/vim/%{vimdir} %{?_smp_mflags}
-cp vim enhanced-vim
-make clean
-
-perl -pi -e "s/help.txt/vi_help.txt/"  os_unix.h ex_cmds.c
-perl -pi -e "s/\/etc\/vimrc/\/etc\/virc/"  os_unix.h
-%configure --prefix=%{_prefix} --with-features=small --with-x=no \
-  --enable-multibyte \
-  --disable-netbeans \
-%if %{WITH_SELINUX}
-  --enable-selinux \
+%if "%{withlua}" == "1"
+  --enable-luainterp=dynamic \
 %else
-  --disable-selinux \
+  --disable-luainterp \
 %endif
-  --disable-pythoninterp --disable-perlinterp --disable-tclinterp \
-  --with-tlib=ncurses --enable-gui=no --disable-gpm --exec-prefix=/ \
-  --with-compiledby="<bugzilla@redhat.com>" \
-  --with-modified-by="<bugzilla@redhat.com>"
 
 make VIMRCLOC=/etc VIMRUNTIMEDIR=/usr/share/vim/%{vimdir} %{?_smp_mflags}
+cp vim enhanced-vim
 
 %install
 rm -rf %{buildroot}
@@ -645,6 +1607,7 @@ cp -f %{SOURCE15} %{buildroot}/%{_datadir}/%{name}/vimfiles/template.spec
 %else
 cp -f %{SOURCE14} %{buildroot}/%{_datadir}/%{name}/vimfiles/template.spec
 %endif
+cp -f %{SOURCE16} runtime/syntax/
 cp runtime/doc/uganda.txt LICENSE
 # Those aren't Linux info files but some binary files for Amiga:
 rm -f README*.info
@@ -654,7 +1617,7 @@ cd src
 make install DESTDIR=%{buildroot} BINDIR=%{_bindir} VIMRCLOC=/etc VIMRUNTIMEDIR=/usr/share/vim/%{vimdir}
 make installgtutorbin  DESTDIR=%{buildroot} BINDIR=%{_bindir} VIMRCLOC=/etc VIMRUNTIMEDIR=/usr/share/vim/%{vimdir}
 mkdir -p %{buildroot}%{_datadir}/icons/hicolor/{16x16,32x32,48x48,64x64}/apps
-install -m755 vim %{buildroot}%{_bindir}/vi
+install -m755 minimal-vim %{buildroot}%{_bindir}/vi
 install -m755 enhanced-vim %{buildroot}%{_bindir}/vim
 install -m755 gvim %{buildroot}%{_bindir}/gvim
 install -p -m644 %{SOURCE7} \
@@ -1030,8 +1993,18 @@ rm -rf %{buildroot}
 %{_datadir}/icons/hicolor/*/apps/*
 
 %changelog
-* Fri Jun 14 2019 Zdenek Dohnal <zdohnal@redhat.com> - 2:7.4.160-6
-- 1719963 - CVE-2019-12735 source command allows arbitrary command execution via the modeline
+* Fri Jun 14 2019 Zdenek Dohnal <zdohnal@redhat.com> - 2:7.4.629-6
+- increment release enough to get CVE fix 1719964 for clients migrated from RHEL6 
+
+* Fri Jun 14 2019 Zdenek Dohnal <zdohnal@redhat.com> - 2:7.4.629-3
+- 1719964 - CVE-2019-12735 arbitrary command execution in getchar.c [rhel-7.7]
+
+* Mon Jan 21 2019 Zdenek Dohnal <zdohnal@redhat.com> - 2:7.4.629-2
+- adding several additional changes for #1377316 from upstream
+
+* Wed Jan 16 2019 Zdenek Dohnal <zdohnal@redhat.com> - 2:7.4.629-1
+- 1563419 - Vim in RHEL 7 is older than VIM in RHEL 6 (Rebase)
+- 1377316 - [RFE] make _remote_ vim doing the right decisions about 'set background'
 
 * Mon Jun 18 2018 Zdenek Dohnal <zdohnal@redhat.com> - 2:7.4.160-5
 - 1490927 - vim dumps core when system reboots