Index: BOOK/final-system/common/vim.xml
===================================================================
--- BOOK/final-system/common/vim.xml	(revision f42e5c15d61cddbc2fab1347644bdfe67bfb066f)
+++ BOOK/final-system/common/vim.xml	(revision 6c5a343a617ff57d7560c9a344da1c0c894502da)
@@ -34,8 +34,4 @@
     </tip>
 
-    <para os="a">First, unpack both <filename>vim-&vim-version;.tar.bz2</filename>
-    and (optionally) <filename>vim-&vim-version;-lang.tar.gz</filename>
-    archives into the same directory.</para>
-
     <para os="p1">The following patch merges all updates from the &vim-version; Branch
     from the Vim developers:</para>
@@ -51,5 +47,5 @@
     <para os="d">Prepare Vim for compilation:</para>
 
-<screen os="e"><userinput>CPPFLAGS="-DUNUSED=" ./configure \
+<screen os="e"><userinput>./configure \
     --prefix=/usr --enable-multibyte</userinput></screen>
 
Index: BOOK/final-system/multilib/vim.xml
===================================================================
--- BOOK/final-system/multilib/vim.xml	(revision f42e5c15d61cddbc2fab1347644bdfe67bfb066f)
+++ BOOK/final-system/multilib/vim.xml	(revision 6c5a343a617ff57d7560c9a344da1c0c894502da)
@@ -28,8 +28,4 @@
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
     href="../common/vim.xml"
-    xpointer="xpointer(//*[@os='a'])"/>
-
-    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
-    href="../common/vim.xml"
     xpointer="xpointer(//*[@os='p1'])"/>
 
@@ -51,5 +47,5 @@
 
 <screen os="e"><userinput>CC="gcc ${BUILD64}" CXX="g++ ${BUILD64}" \
-    CPPFLAGS="-DUNUSED=" ./configure --prefix=/usr \
+  ./configure --prefix=/usr \
     --enable-multibyte</userinput></screen>
 
Index: BOOK/introduction/common/changelog.xml
===================================================================
--- BOOK/introduction/common/changelog.xml	(revision f42e5c15d61cddbc2fab1347644bdfe67bfb066f)
+++ BOOK/introduction/common/changelog.xml	(revision 6c5a343a617ff57d7560c9a344da1c0c894502da)
@@ -41,4 +41,7 @@
       <para>January 8, 2011</para>
       <itemizedlist>
+        <listitem>
+          <para>[jciccone] - Updated Vim to 7.3.</para>
+        </listitem>
         <listitem>
           <para>[jciccone] - Updated Udev to 165.</para>
Index: BOOK/materials/common/packages.xml
===================================================================
--- BOOK/materials/common/packages.xml	(revision f42e5c15d61cddbc2fab1347644bdfe67bfb066f)
+++ BOOK/materials/common/packages.xml	(revision 6c5a343a617ff57d7560c9a344da1c0c894502da)
@@ -529,13 +529,4 @@
 
     <varlistentry>
-      <term>Vim (&vim-version;) language files (optional) - <token>&vim-language-size;</token>:</term>
-      <listitem>
-        <para>Home page: <ulink url="&vim-language-home;"/></para>
-        <para>Download: <ulink url="&vim-language-url;"/></para>
-        <para>MD5 sum: <literal>&vim-language-md5;</literal></para>
-      </listitem>
-    </varlistentry>
-
-    <varlistentry>
       <term>XZ Utils  (&xz-version;) - <token>&xz-size;</token>:</term>
       <listitem>
Index: BOOK/packages.ent
===================================================================
--- BOOK/packages.ent	(revision f42e5c15d61cddbc2fab1347644bdfe67bfb066f)
+++ BOOK/packages.ent	(revision 6c5a343a617ff57d7560c9a344da1c0c894502da)
@@ -423,14 +423,10 @@
 <!ENTITY util-linux-ng-home "http://userweb.kernel.org/~kzak/util-linux-ng/">
 
-<!ENTITY vim-version "7.2">
-<!ENTITY vim-version2 "72">
-<!ENTITY vim-size "7,034 KB">
+<!ENTITY vim-version "7.3">
+<!ENTITY vim-version2 "73">
+<!ENTITY vim-size "8,868 KB">
 <!ENTITY vim-url "ftp://ftp.vim.org/pub/vim/unix/vim-&vim-version;.tar.bz2">
-<!ENTITY vim-md5 "f0901284b338e448bfd79ccca0041254">
+<!ENTITY vim-md5 "5b9510a17074e2b37d8bb38ae09edbf2">
 <!ENTITY vim-home "http://www.vim.org">
-<!ENTITY vim-language-size "1,333 KB">
-<!ENTITY vim-language-url "ftp://ftp.vim.org/pub/vim/extra/vim-&vim-version;-lang.tar.gz">
-<!ENTITY vim-language-md5 "d8884786979e0e520c112faf2e176f05">
-<!ENTITY vim-language-home " ">
 
 <!ENTITY xz-version "5.0.0">
Index: BOOK/patches.ent
===================================================================
--- BOOK/patches.ent	(revision f42e5c15d61cddbc2fab1347644bdfe67bfb066f)
+++ BOOK/patches.ent	(revision 6c5a343a617ff57d7560c9a344da1c0c894502da)
@@ -69,7 +69,7 @@
 <!ENTITY texinfo-new_compressors-patch-size "2 KB">
 
-<!ENTITY vim-branch_update-patch "vim-&vim-version;-branch_update-21.patch">
-<!ENTITY vim-branch_update-patch-md5 "68e540fbf2a06d9760a9b4d4b486b506">
-<!ENTITY vim-branch_update-patch-size "737 KB">
+<!ENTITY vim-branch_update-patch "vim-&vim-version;-branch_update-1.patch">
+<!ENTITY vim-branch_update-patch-md5 "c1866b7f2f945993b8fc2bb94606bc17">
+<!ENTITY vim-branch_update-patch-size "220 KB">
 
 <!-- Start of multilib patches -->
Index: BOOK/temp-system/common/vim.xml
===================================================================
--- BOOK/temp-system/common/vim.xml	(revision f42e5c15d61cddbc2fab1347644bdfe67bfb066f)
+++ BOOK/temp-system/common/vim.xml	(revision 6c5a343a617ff57d7560c9a344da1c0c894502da)
@@ -25,8 +25,4 @@
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
     href="../../final-system/common/vim.xml"
-    xpointer="xpointer(//*[@os='a'])"/>
-
-    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
-    href="../../final-system/common/vim.xml"
     xpointer="xpointer(//*[@os='p1'])"/>
 
@@ -34,4 +30,10 @@
     href="../../final-system/common/vim.xml"
     xpointer="xpointer(//*[@os='p2'])"/>
+
+    <para os="s1">The configure script has a single hard coded test that
+    cannot be bypassed with a cache entry. Disable this test with the
+    following command:</para>
+
+<screen os="s2"><userinput>sed -i "/using uint32_t/s/as_fn_error/#&amp;/" src/auto/configure</userinput></screen>
 
     <para os="c1">The <command>configure</command> script is full of logic
@@ -49,4 +51,7 @@
 vim_cv_tty_group=world
 ac_cv_sizeof_int=4
+ac_cv_sizeof_long=4
+ac_cv_sizeof_time_t=4
+ac_cv_sizeof_off_t=4
 EOF</userinput></screen>
 
@@ -61,5 +66,5 @@
     xpointer="xpointer(//*[@os='d'])"/>
 
-<screen os="e"><userinput>CPPFLAGS="-DUNUSED=" ./configure \
+<screen os="e"><userinput>./configure \
     --build=${CLFS_HOST} --host=${CLFS_TARGET} \
     --prefix=/tools --enable-multibyte --enable-gui=no \
Index: BOOK/temp-system/multilib/vim.xml
===================================================================
--- BOOK/temp-system/multilib/vim.xml	(revision f42e5c15d61cddbc2fab1347644bdfe67bfb066f)
+++ BOOK/temp-system/multilib/vim.xml	(revision 6c5a343a617ff57d7560c9a344da1c0c894502da)
@@ -25,8 +25,4 @@
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
     href="../common/vim.xml"
-    xpointer="xpointer(//*[@os='a'])"/>
-
-    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
-    href="../common/vim.xml"
     xpointer="xpointer(//*[@os='p1'])"/>
 
@@ -34,4 +30,12 @@
     href="../common/vim.xml"
     xpointer="xpointer(//*[@os='p2'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/vim.xml"
+    xpointer="xpointer(//*[@os='s1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/vim.xml"
+    xpointer="xpointer(//*[@os='s2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
@@ -55,5 +59,5 @@
     xpointer="xpointer(//*[@os='d'])"/>
 
-<screen os="e"><userinput>CC="${CC} ${BUILD64}" CXX="${CXX} ${BUILD64}" CPPFLAGS="-DUNUSED=" \
+<screen os="e"><userinput>CC="${CC} ${BUILD64}" CXX="${CXX} ${BUILD64}" \
   ./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} \
   --prefix=/tools --enable-multibyte --enable-gui=no \
Index: tches/vim-7.2-branch_update-21.patch
===================================================================
--- patches/vim-7.2-branch_update-21.patch	(revision f42e5c15d61cddbc2fab1347644bdfe67bfb066f)
+++ 	(revision )
@@ -1,26879 +1,0 @@
-Submitted By: Jim Gifford (jim at cross-lfs dot org)
-Date: 09-12-2009
-Initial Package Version: 7.2
-Origin: Upstream
-Upstream Status: Applied
-Description: Contains all upstream patches up to 7.2.259
-             The following patches were skipped
-             007 036 041 049 071 072 074 088 089 093 101 138 150 172 173 191 194 204 205 212 216 219 233 247 248 249 250
-
-diff -Naur vim72.orig/Filelist vim72/Filelist
---- vim72.orig/Filelist	2008-07-06 11:02:23.000000000 -0700
-+++ vim72/Filelist	2009-09-12 08:39:38.000000000 -0700
-@@ -285,6 +285,7 @@
- 		src/proto/os_win32.pro \
- 		src/proto/os_mswin.pro \
- 		src/testdir/Make_dos.mak \
-+		src/testdir/Make_ming.mak \
- 		src/testdir/dos.vim \
- 		src/uninstal.c \
- 		src/vim.def \
-@@ -682,9 +683,7 @@
- 		runtime/spell/??/main.aap \
- 		runtime/spell/yi/README.txt \
- 		runtime/spell/main.aap \
--		runtime/spell/cleanadd.vim \
- 		runtime/spell/*.vim \
--		runtime/spell/fixdup \
- 
- # generic language files, binary
- LANG_GEN_BIN = \
-diff -Naur vim72.orig/runtime/doc/cmdline.txt vim72/runtime/doc/cmdline.txt
---- vim72.orig/runtime/doc/cmdline.txt	2008-08-09 07:22:59.000000000 -0700
-+++ vim72/runtime/doc/cmdline.txt	2009-09-12 08:41:24.000000000 -0700
-@@ -1,4 +1,4 @@
--*cmdline.txt*   For Vim version 7.2.  Last change: 2008 Jul 29
-+*cmdline.txt*   For Vim version 7.2.  Last change: 2008 Sep 18
- 
- 
- 		  VIM REFERENCE MANUAL    by Bram Moolenaar
-@@ -157,6 +157,11 @@
- 				(doesn't work at the expression prompt; some
- 				things such as changing the buffer or current
- 				window are not allowed to avoid side effects)
-+				When the result is a |List| the items are used
-+				as lines.  They can have line breaks inside
-+				too.
-+				When the result is a Float it's automatically
-+				converted to a String.
- 		See |registers| about registers.  {not in Vi}
- 		Implementation detail: When using the |expression| register
- 		and invoking setcmdpos(), this sets the position before
-@@ -436,13 +441,20 @@
- those files with an extension that is in the 'suffixes' option are ignored.
- The default is ".bak,~,.o,.h,.info,.swp,.obj", which means that files ending
- in ".bak", "~", ".o", ".h", ".info", ".swp" and ".obj" are sometimes ignored.
--It is impossible to ignore suffixes with two dots.  Examples:
-+
-+An empty entry, two consecutive commas, match a file name that does not
-+contain a ".", thus has no suffix.  This is useful to ignore "prog" and prefer
-+"prog.c".
-+
-+Examples:
- 
-   pattern:	files:				match:	~
-    test*	test.c test.h test.o		test.c
-    test*	test.h test.o			test.h and test.o
-    test*	test.i test.h test.c		test.i and test.c
- 
-+It is impossible to ignore suffixes with two dots.
-+
- If there is more than one matching file (after ignoring the ones matching
- the 'suffixes' option) the first file name is inserted.  You can see that
- there is only one match when you type 'wildchar' twice and the completed
-@@ -730,19 +742,29 @@
- In Ex commands, at places where a file name can be used, the following
- characters have a special meaning.  These can also be used in the expression
- function expand() |expand()|.
--	%	is replaced with the current file name			*:_%*
--	#	is replaced with the alternate file name		*:_#*
-+	%	Is replaced with the current file name.		  *:_%* *c_%*
-+	#	Is replaced with the alternate file name.	  *:_#* *c_#*
- 	#n	(where n is a number) is replaced with the file name of
--		buffer n.  "#0" is the same as "#"
--	##	is replaced with all names in the argument list		*:_##*
-+		buffer n.  "#0" is the same as "#".
-+	##	Is replaced with all names in the argument list	  *:_##* *c_##*
- 		concatenated, separated by spaces.  Each space in a name
- 		is preceded with a backslash.
--Note that these give the file name as it was typed.  If an absolute path is
--needed (when using the file name from a different directory), you need to add
--":p".  See |filename-modifiers|.
-+	#<n	(where n is a number > 0) is replaced with old	  *:_#<* *c_#<*
-+		file name n.  See |:oldfiles| or |v:oldfiles| to get the
-+		number.							*E809*
-+		{only when compiled with the +eval and +viminfo features}
-+
-+Note that these, except "#<n", give the file name as it was typed.  If an
-+absolute path is needed (when using the file name from a different directory),
-+you need to add ":p".  See |filename-modifiers|.
-+
-+The "#<n" item returns an absolute path, but it will start with "~/" for files
-+below your home directory.
-+
- Note that backslashes are inserted before spaces, so that the command will
- correctly interpret the file name.  But this doesn't happen for shell
--commands.  For those you probably have to use quotes: >
-+commands.  For those you probably have to use quotes (this fails for files
-+that contain a quote and wildcards): >
- 	:!ls "%"
- 	:r !spell "%"
- 
-diff -Naur vim72.orig/runtime/doc/eval.txt vim72/runtime/doc/eval.txt
---- vim72.orig/runtime/doc/eval.txt	2008-08-09 07:22:59.000000000 -0700
-+++ vim72/runtime/doc/eval.txt	2009-09-12 08:37:22.000000000 -0700
-@@ -1,4 +1,4 @@
--*eval.txt*	For Vim version 7.2.  Last change: 2008 Aug 09
-+*eval.txt*	For Vim version 7.2.  Last change: 2008 Nov 27
- 
- 
- 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
-@@ -1484,6 +1484,17 @@
- 		This is the screen column number, like with |virtcol()|.  The
- 		value is zero when there was no mouse button click.
- 
-+					*v:oldfiles* *oldfiles-variable*
-+v:oldfiles	List of file names that is loaded from the |viminfo| file on
-+		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).
-+		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
-+		than String this will cause trouble.
-+		{only when compiled with the +viminfo feature}
-+
- 					*v:operator* *operator-variable*
- v:operator	The last operator given in Normal mode.  This is a single
- 		character except for commands starting with <g> or <z>,
-@@ -1695,7 +1706,7 @@
- exists( {expr})			Number	TRUE if {expr} exists
- extend({expr1}, {expr2} [, {expr3}])
- 				List/Dict insert items of {expr2} into {expr1}
--expand( {expr})			String	expand special keywords in {expr}
-+expand( {expr} [, {flag}])	String	expand special keywords in {expr}
- feedkeys( {string} [, {mode}])	Number	add key sequence to typeahead buffer
- filereadable( {file})		Number	TRUE if {file} is a readable file
- filewritable( {file})		Number	TRUE if {file} is a writable file
-@@ -1747,8 +1758,9 @@
- getwinposx()			Number	X coord in pixels of GUI Vim window
- getwinposy()			Number	Y coord in pixels of GUI Vim window
- getwinvar( {nr}, {varname})	any	variable {varname} in window {nr}
--glob( {expr})			String	expand file wildcards in {expr}
--globpath( {path}, {expr})	String	do glob({expr}) for all dirs in {path}
-+glob( {expr} [, {flag}])	String	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}
- haslocaldir()			Number	TRUE if current window executed |:lcd|
-@@ -2402,6 +2414,7 @@
- 		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.
-+		Returns 0 when the position could be set, -1 otherwise.
- 
- 
- deepcopy({expr}[, {noref}])				*deepcopy()* *E698*
-@@ -3275,14 +3288,16 @@
- 			:let list_is_on = getwinvar(2, '&list')
- 			:echo "myvar = " . getwinvar(1, 'myvar')
- <
--							*glob()*
--glob({expr})	Expand the file wildcards in {expr}.  See |wildcards| for the
-+glob({expr} [, {flag}])					*glob()*
-+		Expand the file wildcards in {expr}.  See |wildcards| for the
- 		use of special characters.
- 		The result is a String.
- 		When there are several matches, they are separated by <NL>
- 		characters.
--		The 'wildignore' option applies: Names matching one of the
--		patterns in 'wildignore' will be skipped.
-+		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.
- 		If the expansion fails, the result is an empty string.
- 		A name for a non-existing file is not included.
- 
-@@ -3296,20 +3311,22 @@
- 		See |expand()| for expanding special Vim variables.  See
- 		|system()| for getting the raw output of an external command.
- 
--globpath({path}, {expr})				*globpath()*
-+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.
-+		|glob()|.  A path separator is inserted when needed.
- 		To add a comma inside a directory name escape it with a
- 		backslash.  Note that on MS-Windows a directory may have a
- 		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.
--		The 'wildignore' option applies: Names matching one of the
--		patterns in 'wildignore' will be skipped.
-+		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
-@@ -4500,6 +4517,7 @@
- 		should also work to move files across file systems.  The
- 		result is a Number, which is 0 if the file was renamed
- 		successfully, and non-zero when the renaming failed.
-+		NOTE: If {to} exists it is overwritten without warning.
- 		This function is not available in the |sandbox|.
- 
- repeat({expr}, {count})					*repeat()*
-@@ -5332,10 +5350,12 @@
- 		"fg"		foreground color (GUI: color name used to set
- 				the color, cterm: color number as a string,
- 				term: empty string)
--		"bg"		background color (like "fg")
-+		"bg"		background color (as with "fg")
-+		"sp"		special color (as with "fg") |highlight-guisp|
- 		"fg#"		like "fg", but for the GUI and the GUI is
- 				running the name in "#RRGGBB" form
- 		"bg#"		like "fg#" for "bg"
-+		"sp#"		like "fg#" for "sp"
- 		"bold"		"1" if bold
- 		"italic"	"1" if italic
- 		"reverse"	"1" if reverse
-@@ -5823,7 +5843,8 @@
- mouse_pterm		Compiled with support for qnx pterm mouse.
- mouse_sysmouse		Compiled with support for sysmouse (*BSD console mouse)
- mouse_xterm		Compiled with support for xterm mouse.
--multi_byte		Compiled with support for editing Korean et al.
-+multi_byte		Compiled with support for 'encoding'
-+multi_byte_encoding	'encoding' is set to a multi-byte encoding.
- multi_byte_ime		Compiled with support for IME input method.
- multi_lang		Compiled with support for multiple languages.
- mzscheme		Compiled with MzScheme interface |mzscheme|.
-diff -Naur vim72.orig/runtime/doc/if_cscop.txt vim72/runtime/doc/if_cscop.txt
---- vim72.orig/runtime/doc/if_cscop.txt	2008-08-09 07:22:59.000000000 -0700
-+++ vim72/runtime/doc/if_cscop.txt	2009-09-12 08:41:56.000000000 -0700
-@@ -1,4 +1,4 @@
--*if_cscop.txt*  For Vim version 7.2.  Last change: 2005 Mar 29
-+*if_cscop.txt*  For Vim version 7.2.  Last change: 2009 Mar 18
- 
- 
- 		  VIM REFERENCE MANUAL    by Andy Kahn
-@@ -131,11 +131,22 @@
- 		7 or f: Find this file
- 		8 or i: Find files #including this file
- 
-+	For all types, except 4 and 6, leading white space for {name} is
-+	removed.  For 4 and 6 there is exactly one space between {querytype}
-+	and {name}.  Further white space is included in {name}.
-+
- 	EXAMPLES >
- 	    :cscope find c vim_free
--	    :cscope find 3 vim_free
-+	    :cscope find 3  vim_free
-+<
-+	    These two examples perform the same query: functions calling
-+	    "vim_free". >
-+
-+	    :cscope find t initOnce
-+	    :cscope find t  initOnce
- <
--	    These two examples perform the same query. >
-+	    The first one searches for the text "initOnce", the second one for
-+	    " initOnce". >
- 
- 	    :cscope find 0 DEFAULT_TERM
- <
-@@ -344,13 +355,8 @@
- The DJGPP-built version from http://cscope.sourceforge.net is known to not
- work with Vim.
- 
--There are a couple of hard-coded limitations:
--
--    1. The maximum number of cscope connections allowed is 8.  Do you
--    really need more?
--
--    2. Doing a |:tjump| when |:cstag| searches the tag files is not
--    configurable (e.g., you can't do a tselect instead).
-+Hard-coded limitation: doing a |:tjump| when |:cstag| searches the tag files
-+is not configurable (e.g., you can't do a tselect instead).
- 
- ==============================================================================
- 6. Suggested usage					*cscope-suggestions*
-@@ -475,7 +481,8 @@
- any problems, suggestions, patches, et al., you have for the usage of
- cscope within Vim to him.
- 							*cscope-win32*
--For a cscope version for Win32 see: http://iamphet.nm.ru/cscope/index.html
-+For a cscope version for Win32 see:
-+	http://code.google.com/p/cscope-win32/
- 
- Win32 support was added by Sergey Khorev <sergey.khorev@gmail.com>.  Contact
- him if you have Win32-specific issues.
-diff -Naur vim72.orig/runtime/doc/netbeans.txt vim72/runtime/doc/netbeans.txt
---- vim72.orig/runtime/doc/netbeans.txt	2008-08-09 07:22:59.000000000 -0700
-+++ vim72/runtime/doc/netbeans.txt	2009-09-12 08:34:15.000000000 -0700
-@@ -1,4 +1,4 @@
--*netbeans.txt*  For Vim version 7.2.  Last change: 2008 Jun 28
-+*netbeans.txt*  For Vim version 7.2.  Last change: 2009 Jan 06
- 
- 
- 		  VIM REFERENCE MANUAL    by Gordon Prieur et al.
-@@ -722,8 +722,10 @@
- 		of the cursor.
- 		New in version 2.1.
- 
--killed		A file was closed by the user.  Only for files that have been
--		assigned a number by the IDE.
-+killed		A file was deleted or wiped out by the user and the buffer
-+		annotations have been removed.  The bufID number for this
-+		buffer has become invalid.  Only for files that have been
-+		assigned a bufID number by the IDE.
- 
- newDotAndMark off off
- 		Reports the position of the cursor being at "off" bytes into
-diff -Naur vim72.orig/runtime/doc/options.txt vim72/runtime/doc/options.txt
---- vim72.orig/runtime/doc/options.txt	2008-08-09 07:22:59.000000000 -0700
-+++ vim72/runtime/doc/options.txt	2009-09-12 08:39:52.000000000 -0700
-@@ -1,4 +1,4 @@
--*options.txt*	For Vim version 7.2.  Last change: 2008 Aug 06
-+*options.txt*	For Vim version 7.2.  Last change: 2008 Nov 25
- 
- 
- 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
-@@ -1443,6 +1443,14 @@
- 	autoselectml	Like "autoselect", but for the modeless selection
- 			only.  Compare to the 'A' flag in 'guioptions'.
- 
-+	html		When the clipboard contains HTML, use this when
-+			pasting.  When putting text on the clipboard, mark it
-+			as HTML.  This works to copy rendered HTML from
-+			Firefox, paste it as raw HTML in Vim, select the HTML
-+			in Vim and paste it in a rich edit box in Firefox.
-+			Only supported for GTK version 2 and later.
-+			Only available with the |+multi_byte| feature.
-+
- 	exclude:{pattern}
- 			Defines a pattern that is matched against the name of
- 			the terminal 'term'.  If there is a match, no
-@@ -4175,9 +4183,6 @@
- 	be able to execute Normal mode commands.
- 	This is the opposite of the 'keymap' option, where characters are
- 	mapped in Insert mode.
--	This only works for 8-bit characters.  The value of 'langmap' may be
--	specified with multi-byte characters (e.g., UTF-8), but only the lower
--	8 bits of each character will be used.
- 
- 	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
-@@ -7472,7 +7477,9 @@
- 			{not available when compiled without the |+wildignore|
- 			feature}
- 	A list of file patterns.  A file that matches with one of these
--	patterns is ignored when completing file or directory names.
-+	patterns is ignored when completing file or directory names, and
-+	influences the result of |expand()|, |glob()| and |globpath()| unless
-+	a flag is passed to disable this.
- 	The pattern is used like with |:autocmd|, see |autocmd-patterns|.
- 	Also see 'suffixes'.
- 	Example: >
-diff -Naur vim72.orig/runtime/doc/spell.txt vim72/runtime/doc/spell.txt
---- vim72.orig/runtime/doc/spell.txt	2008-08-09 07:23:00.000000000 -0700
-+++ vim72/runtime/doc/spell.txt	2009-09-12 08:33:24.000000000 -0700
-@@ -1,4 +1,4 @@
--*spell.txt*	For Vim version 7.2.  Last change: 2008 Jun 21
-+*spell.txt*	For Vim version 7.2.  Last change: 2008 Nov 30
- 
- 
- 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
-@@ -831,8 +831,11 @@
- 
- 	# comment line ~
- 
--With some items it's also possible to put a comment after it, but this isn't
--supported in general.
-+Items with a fixed number of arguments can be followed by a comment.  But only
-+if none of the arguments can contain white space.  The comment must start with
-+a "#" character.  Example:
-+
-+	KEEPCASE =  # fix case for words with this flag ~
- 
- 
- ENCODING							*spell-SET*
-@@ -965,6 +968,9 @@
- 
- Note: When using utf-8 only characters up to 65000 may be used for flags.
- 
-+Note: even when using "num" or "long" the number of flags available to
-+compounding and prefixes is limited to about 250.
-+
- 
- AFFIXES
- 					    *spell-PFX* *spell-SFX*
-@@ -1178,6 +1184,9 @@
- The flag also applies to the word with affixes, thus this can be used to mark
- a whole bunch of related words as bad.
- 
-+							*spell-FORBIDDENWORD*
-+FORBIDDENWORD can be used just like BAD.  For compatibility with Hunspell.
-+
- 							*spell-NEEDAFFIX*
- The NEEDAFFIX flag is used to require that a word is used with an affix.  The
- word itself is not a good word (unless there is an empty affix).  Example:
-@@ -1268,6 +1277,10 @@
- 
- 	NEEDCOMPOUND & ~
- 
-+							*spell-ONLYINCOMPOUND*
-+The ONLYINCOMPOUND does exactly the same as NEEDCOMPOUND.  Supported for
-+compatiblity with Hunspell.
-+
- 							*spell-COMPOUNDMIN*
- The minimal character length of a word used for compounding is specified with
- COMPOUNDMIN.  Example:
-@@ -1328,6 +1341,20 @@
- rules.  Can also be used for an affix to count the affix as a compounding
- word.
- 
-+						*spell-CHECKCOMPOUNDPATTERN*
-+CHECKCOMPOUNDPATTERN is used to define patterns that, when matching at the
-+position where two words are compounded together forbids the compound.
-+For example:
-+	CHECKCOMPOUNDPATTERN o e ~
-+
-+This forbids compounding if the first word ends in "o" and the second word
-+starts with "e".
-+
-+The arguments must be plain text, no patterns are actually supported, despite
-+the item name.  Case is always ignored.
-+
-+The Hunspell feature to use three arguments and flags is not supported.
-+
- 							*spell-SYLLABLE*
- The SYLLABLE item defines characters or character sequences that are used to
- count the number of syllables in a word.  Example:
-@@ -1496,6 +1523,10 @@
- ACCENT		(Hunspell)				*spell-ACCENT*
- 		Use MAP instead. |spell-MAP|
- 
-+BREAK		(Hunspell)				*spell-BREAK*
-+		Define break points.  Unclear how it works exactly.
-+		Not supported.
-+
- CHECKCOMPOUNDCASE  (Hunspell)			*spell-CHECKCOMPOUNDCASE*
- 		Disallow uppercase letters at compound word boundaries.
- 		Not supported.
-@@ -1512,9 +1543,6 @@
- 		Forbid three identical characters when compounding.  Not
- 		supported.
- 
--CHECKCOMPOUNDPATTERN  (Hunspell)		*spell-CHECKCOMPOUNDPATTERN*
--		Forbid compounding when patterns match.  Not supported.
--
- COMPLEXPREFIXES  (Hunspell)				*spell-COMPLEXPREFIXES*
- 		Enables using two prefixes.  Not supported.
- 
-@@ -1536,13 +1564,18 @@
- COMPOUNDMIDDLE	(Hunspell)				*spell-COMPOUNDMIDDLE*
- 		Use COMPOUNDRULE instead. |spell-COMPOUNDRULE|
- 
-+COMPOUNDRULES	(Hunspell)				*spell-COMPOUNDRULES*
-+		Number of COMPOUNDRULE lines following.  Ignored, but the
-+		argument must be a number.
-+
- COMPOUNDSYLLABLE  (Hunspell)			*spell-COMPOUNDSYLLABLE*
- 		Use SYLLABLE and COMPOUNDSYLMAX instead. |spell-SYLLABLE|
- 		|spell-COMPOUNDSYLMAX|
- 
--FORBIDDENWORD	(Hunspell)				*spell-FORBIDDENWORD*
--		Use BAD instead. |spell-BAD|
--
-+KEY		(Hunspell)				*spell-KEY*
-+		Define characters that are close together on the keyboard.
-+		Used to give better suggestions.  Not supported.
-+		
- LANG		(Hunspell)				*spell-LANG*
- 		This specifies language-specific behavior.  This actually
- 		moves part of the language knowledge into the program,
-@@ -1553,10 +1586,7 @@
- 		Only needed for morphological analysis.
- 
- MAXNGRAMSUGS	(Hunspell)				*spell-MAXNGRAMSUGS*
--		Not supported.
--
--ONLYINCOMPOUND	(Hunspell)				*spell-ONLYINCOMPOUND*
--		Use NEEDCOMPOUND instead. |spell-NEEDCOMPOUND|
-+		Set number of n-gram suggestions.  Not supported.
- 
- PSEUDOROOT	(Hunspell)				*spell-PSEUDOROOT*
- 		Use NEEDAFFIX instead. |spell-NEEDAFFIX|
-diff -Naur vim72.orig/runtime/doc/starting.txt vim72/runtime/doc/starting.txt
---- vim72.orig/runtime/doc/starting.txt	2008-08-09 07:23:00.000000000 -0700
-+++ vim72/runtime/doc/starting.txt	2009-09-12 08:32:04.000000000 -0700
-@@ -1,4 +1,4 @@
--*starting.txt*  For Vim version 7.2.  Last change: 2008 Jun 21
-+*starting.txt*  For Vim version 7.2.  Last change: 2008 Nov 09
- 
- 
- 		  VIM REFERENCE MANUAL    by Bram Moolenaar
-@@ -1337,8 +1337,9 @@
- 							*viminfo-read*
- When Vim is started and the 'viminfo' option is non-empty, the contents of
- the viminfo file are read and the info can be used in the appropriate places.
--The marks are not read in at startup (but file marks are).  See
--|initialization| for how to set the 'viminfo' option upon startup.
-+The |v:oldfiles| variable is filled.  The marks are not read in at startup
-+(but file marks are).  See |initialization| for how to set the 'viminfo'
-+option upon startup.
- 
- 							*viminfo-write*
- When Vim exits and 'viminfo' is non-empty, the info is stored in the viminfo
-@@ -1372,6 +1373,8 @@
- that start with any string given with the "r" flag in 'viminfo'.  This can be
- used to avoid saving marks for files on removable media (for MS-DOS you would
- use "ra:,rb:", for Amiga "rdf0:,rdf1:,rdf2:").
-+The |v:oldfiles| variable is filled with the file names that the viminfo file
-+has marks for.
- 
- 							*viminfo-file-marks*
- Uppercase marks ('A to 'Z) are stored when writing the viminfo file.  The
-@@ -1463,8 +1466,8 @@
- 						   *:rv* *:rviminfo* *E195*
- :rv[iminfo][!] [file]	Read from viminfo file [file] (default: see above).
- 			If [!] is given, then any information that is
--			already set (registers, marks, etc.) will be
--			overwritten.  {not in Vi}
-+			already set (registers, marks, |v:oldfiles|, etc.)
-+			will be overwritten   {not in Vi}
- 
- 					*:wv* *:wviminfo* *E137* *E138* *E574*
- :wv[iminfo][!] [file]	Write to viminfo file [file] (default: see above).
-@@ -1479,4 +1482,20 @@
- 			the .viminfo file.
- 			{not in Vi}
- 
-+						*:ol* *:oldfiles*
-+:ol[dfiles]		List the files that have marks stored in the viminfo
-+			file.  This list is read on startup and only changes
-+			afterwards with ":rviminfo!".  Also see |v:oldfiles|.
-+			The number can be used with |c_#<|.
-+			{not in Vi, only when compiled with the +eval feature}
-+
-+:bro[wse] ol[dfiles][!]
-+			List file names as with |:oldfiles|, and then prompt
-+			for a number.  When the number is valid that file from
-+			the list is edited.
-+			If you get the |press-enter| prompt you can press "q"
-+			and still get the prompt to enter a file number.
-+			Use ! to abondon a modified buffer. |abandon|
-+			{not when compiled with tiny or small features}
-+
-  vim:tw=78:ts=8:ft=help:norl:
-diff -Naur vim72.orig/runtime/doc/usr_21.txt vim72/runtime/doc/usr_21.txt
---- vim72.orig/runtime/doc/usr_21.txt	2008-08-09 07:23:01.000000000 -0700
-+++ vim72/runtime/doc/usr_21.txt	2009-09-12 08:32:04.000000000 -0700
-@@ -1,4 +1,4 @@
--*usr_21.txt*	For Vim version 7.2.  Last change: 2007 May 01
-+*usr_21.txt*	For Vim version 7.2.  Last change: 2008 Nov 09
- 
- 		     VIM USER MANUAL - by Bram Moolenaar
- 
-@@ -153,7 +153,7 @@
- to be lost.  Each item can be remembered only once.
- 
- 
--GETTING BACK TO WHERE YOU WERE
-+GETTING BACK TO WHERE YOU STOPPED VIM
- 
- You are halfway editing a file and it's time to leave for holidays.  You exit
- Vim and go enjoy yourselves, forgetting all about your work.  After a couple
-@@ -168,6 +168,48 @@
-    The |:marks| command is useful to find out where '0 to '9 will take you.
- 
- 
-+GETTING BACK TO SOME FILE
-+
-+If you want to go back to a file that you edited recently, but not when
-+exiting Vim, there is a slightly more complicated way.  You can see a list of
-+files by typing the command: >
-+
-+	:oldfiles
-+<	1: ~/.viminfo ~
-+	2: ~/text/resume.txt ~
-+	3: /tmp/draft ~
-+
-+Now you would like to edit the second file, which is in the list preceded by
-+"2:".  You type: >
-+
-+	:e #<2
-+
-+Instead of ":e" you can use any command that has a file name argument, the
-+"#<2" item works in the same place as "%" (current file name) and "#"
-+(alternate file name).  So you can also split the window to edit the third
-+file: >
-+
-+	:split #<3
-+
-+That #<123 thing is a bit complicated when you just want to edit a file.
-+Fortunately there is a simpler way: >
-+
-+	:browse oldfiles
-+<	1: ~/.viminfo ~
-+	2: ~/text/resume.txt ~
-+	3: /tmp/draft ~
-+	-- More --
-+
-+You get the same list of files as with |:oldfiles|.  If you want to edit
-+"resume.txt" first press "q" to stop the listing.  You will get a prompt:
-+
-+	Type number and <Enter> (empty cancels): ~
-+
-+Type "2" and press <Enter> to edit the second file.
-+
-+More info at |:oldfiles|, |v:oldfiles| and |c_#<|.
-+
-+
- MOVE INFO FROM ONE VIM TO ANOTHER
- 
- You can use the ":wviminfo" and ":rviminfo" commands to save and restore the
-diff -Naur vim72.orig/runtime/doc/various.txt vim72/runtime/doc/various.txt
---- vim72.orig/runtime/doc/various.txt	2008-08-09 07:23:01.000000000 -0700
-+++ vim72/runtime/doc/various.txt	2009-09-12 08:40:55.000000000 -0700
-@@ -508,6 +508,17 @@
- 			messages though.  Use ":silent" in the command itself
- 			to avoid that: ":silent menu .... :silent command".
- 
-+						*:uns* *:unsilent*
-+:uns[ilent] {command}	Execute {command} not silently.  Only makes a
-+			difference when |:silent| was used to get to this
-+			command.
-+			Use this for giving a message even when |:silent| was
-+			used.  In this example |:silent| is used to avoid the
-+			message about reading the file and |:unsilent| to be
-+			able to list the first line of each file. >
-+    		:silent argdo unsilent echo expand('%') . ": " . getline(1)
-+<
-+
- 						*:verb* *:verbose*
- :[count]verb[ose] {command}
- 			Execute {command} with 'verbose' set to [count].  If
-diff -Naur vim72.orig/runtime/scripts.vim vim72/runtime/scripts.vim
---- vim72.orig/runtime/scripts.vim	2008-08-08 15:27:21.000000000 -0700
-+++ vim72/runtime/scripts.vim	2009-09-12 08:30:57.000000000 -0700
-@@ -234,6 +234,10 @@
-   elseif s:line1 =~ '\<DTD\s\+XHTML\s'
-     set ft=xhtml
- 
-+    " HTML (e.g.: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN")
-+  elseif s:line1 =~? '\<DOCTYPE\s\+html\>'
-+    set ft=html
-+
-     " PDF
-   elseif s:line1 =~ '^%PDF-'
-     set ft=pdf
-diff -Naur vim72.orig/src/auto/configure vim72/src/auto/configure
---- vim72.orig/src/auto/configure	2008-07-24 05:40:36.000000000 -0700
-+++ vim72/src/auto/configure	2009-09-12 08:42:09.000000000 -0700
-@@ -1,6 +1,6 @@
- #! /bin/sh
- # Guess values for system-dependent variables and create Makefiles.
--# Generated by GNU Autoconf 2.62.
-+# Generated by GNU Autoconf 2.63.
- #
- # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
- # 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-@@ -635,138 +635,138 @@
- # include <unistd.h>
- #endif"
- 
--ac_subst_vars='SHELL
--PATH_SEPARATOR
--PACKAGE_NAME
--PACKAGE_TARNAME
--PACKAGE_VERSION
--PACKAGE_STRING
--PACKAGE_BUGREPORT
--exec_prefix
--prefix
--program_transform_name
--bindir
--sbindir
--libexecdir
--datarootdir
--datadir
--sysconfdir
--sharedstatedir
--localstatedir
--includedir
--oldincludedir
--docdir
--infodir
--htmldir
--dvidir
--pdfdir
--psdir
--libdir
--localedir
--mandir
--DEFS
--ECHO_C
--ECHO_N
--ECHO_T
--LIBS
--build_alias
--host_alias
--target_alias
--SET_MAKE
--CC
--CFLAGS
--LDFLAGS
--CPPFLAGS
--ac_ct_CC
--EXEEXT
--OBJEXT
--CPP
--GREP
--EGREP
--AWK
--STRIP
--CPP_MM
--OS_EXTRA_SRC
--OS_EXTRA_OBJ
--VIMNAME
--EXNAME
--VIEWNAME
--line_break
--dovimdiff
--dogvimdiff
--compiledby
--vi_cv_path_mzscheme
--MZSCHEME_SRC
--MZSCHEME_OBJ
--MZSCHEME_PRO
--MZSCHEME_LIBS
--MZSCHEME_CFLAGS
--vi_cv_path_perl
--vi_cv_perllib
--shrpenv
--PERL_SRC
--PERL_OBJ
--PERL_PRO
--PERL_CFLAGS
--PERL_LIBS
--vi_cv_path_python
--PYTHON_CONFDIR
--PYTHON_LIBS
--PYTHON_GETPATH_CFLAGS
--PYTHON_CFLAGS
--PYTHON_SRC
--PYTHON_OBJ
--vi_cv_path_tcl
--TCL_SRC
--TCL_OBJ
--TCL_PRO
--TCL_CFLAGS
--TCL_LIBS
--vi_cv_path_ruby
--RUBY_SRC
--RUBY_OBJ
--RUBY_PRO
--RUBY_CFLAGS
--RUBY_LIBS
--WORKSHOP_SRC
--WORKSHOP_OBJ
--NETBEANS_SRC
--NETBEANS_OBJ
--SNIFF_SRC
--SNIFF_OBJ
--xmkmfpath
--XMKMF
--X_CFLAGS
--X_PRE_LIBS
--X_LIBS
--X_EXTRA_LIBS
--X_LIB
--GTK_CONFIG
--GTK12_CONFIG
--PKG_CONFIG
--GTK_CFLAGS
--GTK_LIBS
--GTK_LIBNAME
--GNOME_LIBS
--GNOME_LIBDIR
--GNOME_INCLUDEDIR
--GNOME_CONFIG
--MOTIF_LIBNAME
--NARROW_PROTO
--GUI_INC_LOC
--GUI_LIB_LOC
--GUITYPE
--GUI_X_LIBS
--HANGULIN_SRC
--HANGULIN_OBJ
--TAGPRG
--INSTALL_LANGS
--INSTALL_TOOL_LANGS
--MSGFMT
--MAKEMO
--DEPEND_CFLAGS_FILTER
-+ac_subst_vars='LTLIBOBJS
- LIBOBJS
--LTLIBOBJS'
-+DEPEND_CFLAGS_FILTER
-+MAKEMO
-+MSGFMT
-+INSTALL_TOOL_LANGS
-+INSTALL_LANGS
-+TAGPRG
-+HANGULIN_OBJ
-+HANGULIN_SRC
-+GUI_X_LIBS
-+GUITYPE
-+GUI_LIB_LOC
-+GUI_INC_LOC
-+NARROW_PROTO
-+MOTIF_LIBNAME
-+GNOME_CONFIG
-+GNOME_INCLUDEDIR
-+GNOME_LIBDIR
-+GNOME_LIBS
-+GTK_LIBNAME
-+GTK_LIBS
-+GTK_CFLAGS
-+PKG_CONFIG
-+GTK12_CONFIG
-+GTK_CONFIG
-+X_LIB
-+X_EXTRA_LIBS
-+X_LIBS
-+X_PRE_LIBS
-+X_CFLAGS
-+XMKMF
-+xmkmfpath
-+SNIFF_OBJ
-+SNIFF_SRC
-+NETBEANS_OBJ
-+NETBEANS_SRC
-+WORKSHOP_OBJ
-+WORKSHOP_SRC
-+RUBY_LIBS
-+RUBY_CFLAGS
-+RUBY_PRO
-+RUBY_OBJ
-+RUBY_SRC
-+vi_cv_path_ruby
-+TCL_LIBS
-+TCL_CFLAGS
-+TCL_PRO
-+TCL_OBJ
-+TCL_SRC
-+vi_cv_path_tcl
-+PYTHON_OBJ
-+PYTHON_SRC
-+PYTHON_CFLAGS
-+PYTHON_GETPATH_CFLAGS
-+PYTHON_LIBS
-+PYTHON_CONFDIR
-+vi_cv_path_python
-+PERL_LIBS
-+PERL_CFLAGS
-+PERL_PRO
-+PERL_OBJ
-+PERL_SRC
-+shrpenv
-+vi_cv_perllib
-+vi_cv_path_perl
-+MZSCHEME_CFLAGS
-+MZSCHEME_LIBS
-+MZSCHEME_PRO
-+MZSCHEME_OBJ
-+MZSCHEME_SRC
-+vi_cv_path_mzscheme
-+compiledby
-+dogvimdiff
-+dovimdiff
-+line_break
-+VIEWNAME
-+EXNAME
-+VIMNAME
-+OS_EXTRA_OBJ
-+OS_EXTRA_SRC
-+CPP_MM
-+STRIP
-+AWK
-+EGREP
-+GREP
-+CPP
-+OBJEXT
-+EXEEXT
-+ac_ct_CC
-+CPPFLAGS
-+LDFLAGS
-+CFLAGS
-+CC
-+SET_MAKE
-+target_alias
-+host_alias
-+build_alias
-+LIBS
-+ECHO_T
-+ECHO_N
-+ECHO_C
-+DEFS
-+mandir
-+localedir
-+libdir
-+psdir
-+pdfdir
-+dvidir
-+htmldir
-+infodir
-+docdir
-+oldincludedir
-+includedir
-+localstatedir
-+sharedstatedir
-+sysconfdir
-+datadir
-+datarootdir
-+libexecdir
-+sbindir
-+bindir
-+program_transform_name
-+prefix
-+exec_prefix
-+PACKAGE_BUGREPORT
-+PACKAGE_STRING
-+PACKAGE_VERSION
-+PACKAGE_TARNAME
-+PACKAGE_NAME
-+PATH_SEPARATOR
-+SHELL'
- ac_subst_files=''
- ac_user_opts='
- enable_option_checking
-@@ -1253,9 +1253,9 @@
- if test -n "$ac_unrecognized_opts"; then
-   case $enable_option_checking in
-     no) ;;
--    fatal) { $as_echo "$as_me: error: Unrecognized options: $ac_unrecognized_opts" >&2
-+    fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2
-    { (exit 1); exit 1; }; } ;;
--    *)     $as_echo "$as_me: WARNING: Unrecognized options: $ac_unrecognized_opts" >&2 ;;
-+    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
-   esac
- fi
- 
-@@ -1308,7 +1308,7 @@
- ac_pwd=`pwd` && test -n "$ac_pwd" &&
- ac_ls_di=`ls -di .` &&
- ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
--  { $as_echo "$as_me: error: Working directory cannot be determined" >&2
-+  { $as_echo "$as_me: error: working directory cannot be determined" >&2
-    { (exit 1); exit 1; }; }
- test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
-   { $as_echo "$as_me: error: pwd does not report name of working directory" >&2
-@@ -1587,7 +1587,7 @@
- if $ac_init_version; then
-   cat <<\_ACEOF
- configure
--generated by GNU Autoconf 2.62
-+generated by GNU Autoconf 2.63
- 
- Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
- 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-@@ -1601,7 +1601,7 @@
- running configure, to aid debugging if configure makes a mistake.
- 
- It was created by $as_me, which was
--generated by GNU Autoconf 2.62.  Invocation command line was
-+generated by GNU Autoconf 2.63.  Invocation command line was
- 
-   $ $0 $@
- 
-@@ -1724,8 +1724,8 @@
-     case $ac_val in #(
-     *${as_nl}*)
-       case $ac_var in #(
--      *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
--$as_echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
-+      *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5
-+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
-       esac
-       case $ac_var in #(
-       _ | IFS | as_nl) ;; #(
-@@ -1928,6 +1928,8 @@
-   fi
- done
- if $ac_cache_corrupted; then
-+  { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-   { $as_echo "$as_me:$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_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-@@ -2084,12 +2086,8 @@
-   else
-     case $cross_compiling:$ac_tool_warned in
- yes:)
--{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
--whose name does not start with the host triplet.  If you think this
--configuration is useful to you, please write to autoconf@gnu.org." >&5
--$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
--whose name does not start with the host triplet.  If you think this
--configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
-+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
- ac_tool_warned=yes ;;
- esac
-     CC=$ac_ct_CC
-@@ -2288,12 +2286,8 @@
-   else
-     case $cross_compiling:$ac_tool_warned in
- yes:)
--{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
--whose name does not start with the host triplet.  If you think this
--configuration is useful to you, please write to autoconf@gnu.org." >&5
--$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
--whose name does not start with the host triplet.  If you think this
--configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
-+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
- ac_tool_warned=yes ;;
- esac
-     CC=$ac_ct_CC
-@@ -2303,11 +2297,13 @@
- fi
- 
- 
--test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-+test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-+{ { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
- See \`config.log' for more details." >&5
- $as_echo "$as_me: error: no acceptable C compiler found in \$PATH
- See \`config.log' for more details." >&2;}
--   { (exit 1); exit 1; }; }
-+   { (exit 1); exit 1; }; }; }
- 
- # Provide some information about the compiler.
- $as_echo "$as_me:$LINENO: checking for C compiler version" >&5
-@@ -2437,11 +2433,13 @@
-   $as_echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
- 
-+{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables
- See \`config.log' for more details." >&5
- $as_echo "$as_me: error: C compiler cannot create executables
- See \`config.log' for more details." >&2;}
--   { (exit 77); exit 77; }; }
-+   { (exit 77); exit 77; }; }; }
- fi
- 
- ac_exeext=$ac_cv_exeext
-@@ -2469,13 +2467,15 @@
-     if test "$cross_compiling" = maybe; then
- 	cross_compiling=yes
-     else
--	{ { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs.
-+	{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-+{ { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs.
- If you meant to cross compile, use \`--host'.
- See \`config.log' for more details." >&5
- $as_echo "$as_me: error: cannot run C compiled programs.
- If you meant to cross compile, use \`--host'.
- See \`config.log' for more details." >&2;}
--   { (exit 1); exit 1; }; }
-+   { (exit 1); exit 1; }; }; }
-     fi
-   fi
- fi
-@@ -2518,11 +2518,13 @@
-   esac
- done
- else
--  { { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
-+  { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-+{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
- See \`config.log' for more details." >&5
- $as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
- See \`config.log' for more details." >&2;}
--   { (exit 1); exit 1; }; }
-+   { (exit 1); exit 1; }; }; }
- fi
- 
- rm -f conftest$ac_cv_exeext
-@@ -2576,11 +2578,13 @@
-   $as_echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
- 
-+{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
- See \`config.log' for more details." >&5
- $as_echo "$as_me: error: cannot compute suffix of object files: cannot compile
- See \`config.log' for more details." >&2;}
--   { (exit 1); exit 1; }; }
-+   { (exit 1); exit 1; }; }; }
- fi
- 
- rm -f conftest.$ac_cv_objext conftest.$ac_ext
-@@ -3148,11 +3152,13 @@
- if $ac_preproc_ok; then
-   :
- else
--  { { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
-+  { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-+{ { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
- See \`config.log' for more details." >&5
- $as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
- See \`config.log' for more details." >&2;}
--   { (exit 1); exit 1; }; }
-+   { (exit 1); exit 1; }; }; }
- fi
- 
- ac_ext=c
-@@ -4016,8 +4022,9 @@
- 		 $as_echo "$as_val"'`
- 	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
- $as_echo "$ac_res" >&6; }
--if test `eval 'as_val=${'$as_ac_Header'}
--		 $as_echo "$as_val"'` = yes; then
-+as_val=`eval 'as_val=${'$as_ac_Header'}
-+		 $as_echo "$as_val"'`
-+   if test "x$as_val" = x""yes; then
-   cat >>confdefs.h <<_ACEOF
- #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
- _ACEOF
-@@ -4154,7 +4161,7 @@
- $as_echo "$ac_cv_header_Carbon_Carbon_h" >&6; }
- 
- fi
--if test $ac_cv_header_Carbon_Carbon_h = yes; then
-+if test "x$ac_cv_header_Carbon_Carbon_h" = x""yes; then
-   CARBON=yes
- fi
- 
-@@ -4484,7 +4491,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_selinux_is_selinux_enabled" >&5
- $as_echo "$ac_cv_lib_selinux_is_selinux_enabled" >&6; }
--if test $ac_cv_lib_selinux_is_selinux_enabled = yes; then
-+if test "x$ac_cv_lib_selinux_is_selinux_enabled" = x""yes; then
-   LIBS="$LIBS -lselinux"
- 	   cat >>confdefs.h <<\_ACEOF
- #define HAVE_SELINUX 1
-@@ -5745,7 +5752,10 @@
- 	fi
- 	rubyldflags=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["LDFLAGS"]'`
- 	if test "X$rubyldflags" != "X"; then
--	  LDFLAGS="$rubyldflags $LDFLAGS"
-+	  	  	  	  rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//'`
-+	  if test "X$rubyldflags" != "X"; then
-+	    LDFLAGS="$rubyldflags $LDFLAGS"
-+	  fi
- 	fi
- 	RUBY_SRC="if_ruby.c"
- 	RUBY_OBJ="objects/if_ruby.o"
-@@ -5891,7 +5901,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_socket_socket" >&5
- $as_echo "$ac_cv_lib_socket_socket" >&6; }
--if test $ac_cv_lib_socket_socket = yes; then
-+if test "x$ac_cv_lib_socket_socket" = x""yes; then
-   cat >>confdefs.h <<_ACEOF
- #define HAVE_LIBSOCKET 1
- _ACEOF
-@@ -5966,7 +5976,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5
- $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; }
--if test $ac_cv_lib_nsl_gethostbyname = yes; then
-+if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then
-   cat >>confdefs.h <<_ACEOF
- #define HAVE_LIBNSL 1
- _ACEOF
-@@ -6203,8 +6213,8 @@
-   have_x=disabled
- else
-   case $x_includes,$x_libraries in #(
--    *\'*) { { $as_echo "$as_me:$LINENO: error: Cannot use X directory names containing '" >&5
--$as_echo "$as_me: error: Cannot use X directory names containing '" >&2;}
-+    *\'*) { { $as_echo "$as_me:$LINENO: error: cannot use X directory names containing '" >&5
-+$as_echo "$as_me: error: cannot use X directory names containing '" >&2;}
-    { (exit 1); exit 1; }; };; #(
-     *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; then
-   $as_echo_n "(cached) " >&6
-@@ -6242,7 +6252,7 @@
- 	*) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;;
-     esac
-     case $ac_im_usrlibdir in
--	/usr/lib | /lib) ;;
-+	/usr/lib | /usr/lib64 | /lib | /lib64) ;;
- 	*) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;;
-     esac
-   fi
-@@ -6682,7 +6692,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
- $as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; }
--if test $ac_cv_lib_dnet_dnet_ntoa = yes; then
-+if test "x$ac_cv_lib_dnet_dnet_ntoa" = x""yes; then
-   X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
- fi
- 
-@@ -6752,7 +6762,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
- $as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; }
--if test $ac_cv_lib_dnet_stub_dnet_ntoa = yes; then
-+if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = x""yes; then
-   X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
- fi
- 
-@@ -6924,7 +6934,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5
- $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; }
--if test $ac_cv_lib_nsl_gethostbyname = yes; then
-+if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then
-   X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
- fi
- 
-@@ -6994,7 +7004,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_gethostbyname" >&5
- $as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; }
--if test $ac_cv_lib_bsd_gethostbyname = yes; then
-+if test "x$ac_cv_lib_bsd_gethostbyname" = x""yes; then
-   X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
- fi
- 
-@@ -7160,7 +7170,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_socket_connect" >&5
- $as_echo "$ac_cv_lib_socket_connect" >&6; }
--if test $ac_cv_lib_socket_connect = yes; then
-+if test "x$ac_cv_lib_socket_connect" = x""yes; then
-   X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
- fi
- 
-@@ -7319,7 +7329,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_posix_remove" >&5
- $as_echo "$ac_cv_lib_posix_remove" >&6; }
--if test $ac_cv_lib_posix_remove = yes; then
-+if test "x$ac_cv_lib_posix_remove" = x""yes; then
-   X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
- fi
- 
-@@ -7478,7 +7488,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_ipc_shmat" >&5
- $as_echo "$ac_cv_lib_ipc_shmat" >&6; }
--if test $ac_cv_lib_ipc_shmat = yes; then
-+if test "x$ac_cv_lib_ipc_shmat" = x""yes; then
-   X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
- fi
- 
-@@ -7559,7 +7569,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
- $as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; }
--if test $ac_cv_lib_ICE_IceConnectionNumber = yes; then
-+if test "x$ac_cv_lib_ICE_IceConnectionNumber" = x""yes; then
-   X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
- fi
- 
-@@ -7727,7 +7737,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_Xdmcp__XdmcpAuthDoIt" >&5
- $as_echo "$ac_cv_lib_Xdmcp__XdmcpAuthDoIt" >&6; }
--if test $ac_cv_lib_Xdmcp__XdmcpAuthDoIt = yes; then
-+if test "x$ac_cv_lib_Xdmcp__XdmcpAuthDoIt" = x""yes; then
-   X_EXTRA_LIBS="$X_EXTRA_LIBS -lXdmcp"
- fi
- 
-@@ -7797,7 +7807,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_ICE_IceOpenConnection" >&5
- $as_echo "$ac_cv_lib_ICE_IceOpenConnection" >&6; }
--if test $ac_cv_lib_ICE_IceOpenConnection = yes; then
-+if test "x$ac_cv_lib_ICE_IceOpenConnection" = x""yes; then
-   X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE"
- fi
- 
-@@ -7868,7 +7878,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_Xpm_XpmCreatePixmapFromData" >&5
- $as_echo "$ac_cv_lib_Xpm_XpmCreatePixmapFromData" >&6; }
--if test $ac_cv_lib_Xpm_XpmCreatePixmapFromData = yes; then
-+if test "x$ac_cv_lib_Xpm_XpmCreatePixmapFromData" = x""yes; then
-   X_PRE_LIBS="$X_PRE_LIBS -lXpm"
- fi
- 
-@@ -7970,6 +7980,82 @@
- 
-     LDFLAGS="$ac_save_LDFLAGS"
- 
-+    { $as_echo "$as_me:$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_echo "$as_me:$LINENO: error: failed to compile test program" >&5
-+$as_echo "$as_me: error: failed to compile test program" >&2;}
-+   { (exit 1); exit 1; }; }
-+else
-+  cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
-+
-+#include <X11/Xlib.h>
-+#if STDC_HEADERS
-+# include <stdlib.h>
-+# include <stddef.h>
-+#endif
-+		main()
-+		{
-+		  if (sizeof(wchar_t) <= 2)
-+		    exit(1);
-+		  exit(0);
-+		}
-+_ACEOF
-+rm -f conftest$ac_exeext
-+if { (ac_try="$ac_link"
-+case "(($ac_try" in
-+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-+  *) ac_try_echo=$ac_try;;
-+esac
-+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-+$as_echo "$ac_try_echo") >&5
-+  (eval "$ac_link") 2>&5
-+  ac_status=$?
-+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-+  { (case "(($ac_try" in
-+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-+  *) ac_try_echo=$ac_try;;
-+esac
-+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-+$as_echo "$ac_try_echo") >&5
-+  (eval "$ac_try") 2>&5
-+  ac_status=$?
-+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+  (exit $ac_status); }; }; then
-+  ac_cv_small_wchar_t="no"
-+else
-+  $as_echo "$as_me: program exited with status $ac_status" >&5
-+$as_echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+( exit $ac_status )
-+ac_cv_small_wchar_t="yes"
-+fi
-+rm -rf conftest.dSYM
-+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-+fi
-+
-+
-+fi
-+
-+    { $as_echo "$as_me:$LINENO: result: $ac_cv_small_wchar_t" >&5
-+$as_echo "$ac_cv_small_wchar_t" >&6; }
-+    if test "x$ac_cv_small_wchar_t" = "xyes" ; then
-+      cat >>confdefs.h <<\_ACEOF
-+#define SMALL_WCHAR_T 1
-+_ACEOF
-+
-+    fi
-+
-   fi
- fi
- 
-@@ -9251,7 +9337,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_Xext_XShapeQueryExtension" >&5
- $as_echo "$ac_cv_lib_Xext_XShapeQueryExtension" >&6; }
--if test $ac_cv_lib_Xext_XShapeQueryExtension = yes; then
-+if test "x$ac_cv_lib_Xext_XShapeQueryExtension" = x""yes; then
-   GUI_X_LIBS="-lXext"
- fi
- 
-@@ -9320,7 +9406,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_w_wslen" >&5
- $as_echo "$ac_cv_lib_w_wslen" >&6; }
--if test $ac_cv_lib_w_wslen = yes; then
-+if test "x$ac_cv_lib_w_wslen" = x""yes; then
-   X_EXTRA_LIBS="$X_EXTRA_LIBS -lw"
- fi
- 
-@@ -9389,7 +9475,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlsym" >&5
- $as_echo "$ac_cv_lib_dl_dlsym" >&6; }
--if test $ac_cv_lib_dl_dlsym = yes; then
-+if test "x$ac_cv_lib_dl_dlsym" = x""yes; then
-   X_EXTRA_LIBS="$X_EXTRA_LIBS -ldl"
- fi
- 
-@@ -9458,7 +9544,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_Xmu_XmuCreateStippledPixmap" >&5
- $as_echo "$ac_cv_lib_Xmu_XmuCreateStippledPixmap" >&6; }
--if test $ac_cv_lib_Xmu_XmuCreateStippledPixmap = yes; then
-+if test "x$ac_cv_lib_Xmu_XmuCreateStippledPixmap" = x""yes; then
-   GUI_X_LIBS="-lXmu $GUI_X_LIBS"
- fi
- 
-@@ -9528,7 +9614,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_Xp_XpEndJob" >&5
- $as_echo "$ac_cv_lib_Xp_XpEndJob" >&6; }
--if test $ac_cv_lib_Xp_XpEndJob = yes; then
-+if test "x$ac_cv_lib_Xp_XpEndJob" = x""yes; then
-   GUI_X_LIBS="-lXp $GUI_X_LIBS"
- fi
- 
-@@ -9699,8 +9785,9 @@
- $as_echo "$ac_res" >&6; }
- 
- fi
--if test `eval 'as_val=${'$as_ac_Header'}
--		 $as_echo "$as_val"'` = yes; then
-+as_val=`eval 'as_val=${'$as_ac_Header'}
-+		 $as_echo "$as_val"'`
-+   if test "x$as_val" = x""yes; then
-   cat >>confdefs.h <<_ACEOF
- #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
- _ACEOF
-@@ -9852,8 +9939,9 @@
- $as_echo "$ac_res" >&6; }
- 
- fi
--if test `eval 'as_val=${'$as_ac_Header'}
--		 $as_echo "$as_val"'` = yes; then
-+as_val=`eval 'as_val=${'$as_ac_Header'}
-+		 $as_echo "$as_val"'`
-+   if test "x$as_val" = x""yes; then
-   cat >>confdefs.h <<_ACEOF
- #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
- _ACEOF
-@@ -10098,8 +10186,9 @@
- $as_echo "$ac_res" >&6; }
- 
- fi
--if test `eval 'as_val=${'$as_ac_Header'}
--		 $as_echo "$as_val"'` = yes; then
-+as_val=`eval 'as_val=${'$as_ac_Header'}
-+		 $as_echo "$as_val"'`
-+   if test "x$as_val" = x""yes; then
-   cat >>confdefs.h <<_ACEOF
- #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
- _ACEOF
-@@ -10489,7 +10578,7 @@
- $as_echo "$ac_cv_header_elf_h" >&6; }
- 
- fi
--if test $ac_cv_header_elf_h = yes; then
-+if test "x$ac_cv_header_elf_h" = x""yes; then
-   HAS_ELF=1
- fi
- 
-@@ -10555,7 +10644,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_elf_main" >&5
- $as_echo "$ac_cv_lib_elf_main" >&6; }
--if test $ac_cv_lib_elf_main = yes; then
-+if test "x$ac_cv_lib_elf_main" = x""yes; then
-   cat >>confdefs.h <<_ACEOF
- #define HAVE_LIBELF 1
- _ACEOF
-@@ -10629,8 +10718,9 @@
- 		 $as_echo "$as_val"'`
- 	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
- $as_echo "$ac_res" >&6; }
--if test `eval 'as_val=${'$as_ac_Header'}
--		 $as_echo "$as_val"'` = yes; then
-+as_val=`eval 'as_val=${'$as_ac_Header'}
-+		 $as_echo "$as_val"'`
-+   if test "x$as_val" = x""yes; then
-   cat >>confdefs.h <<_ACEOF
- #define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
- _ACEOF
-@@ -10916,7 +11006,6 @@
- 
- 
- 
--
- for ac_header in stdarg.h stdlib.h string.h sys/select.h sys/utsname.h \
- 	termcap.h fcntl.h sgtty.h sys/ioctl.h sys/time.h sys/types.h termio.h \
- 	iconv.h langinfo.h math.h unistd.h stropts.h errno.h \
-@@ -10924,7 +11013,7 @@
- 	sys/stream.h termios.h libc.h sys/statfs.h \
- 	poll.h sys/poll.h pwd.h utime.h sys/param.h libintl.h \
- 	libgen.h util/debug.h util/msg18n.h frame.h \
--	sys/acl.h sys/access.h sys/sysctl.h sys/sysinfo.h wchar.h wctype.h
-+	sys/acl.h sys/access.h sys/sysinfo.h wchar.h wctype.h
- do
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
- if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-@@ -11058,8 +11147,9 @@
- $as_echo "$ac_res" >&6; }
- 
- fi
--if test `eval 'as_val=${'$as_ac_Header'}
--		 $as_echo "$as_val"'` = yes; then
-+as_val=`eval 'as_val=${'$as_ac_Header'}
-+		 $as_echo "$as_val"'`
-+   if test "x$as_val" = x""yes; then
-   cat >>confdefs.h <<_ACEOF
- #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
- _ACEOF
-@@ -11122,8 +11212,74 @@
- 		 $as_echo "$as_val"'`
- 	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
- $as_echo "$ac_res" >&6; }
--if test `eval 'as_val=${'$as_ac_Header'}
--		 $as_echo "$as_val"'` = yes; then
-+as_val=`eval 'as_val=${'$as_ac_Header'}
-+		 $as_echo "$as_val"'`
-+   if test "x$as_val" = x""yes; then
-+  cat >>confdefs.h <<_ACEOF
-+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-+_ACEOF
-+
-+fi
-+
-+done
-+
-+
-+
-+for ac_header in sys/sysctl.h
-+do
-+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
-+$as_echo_n "checking for $ac_header... " >&6; }
-+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-+  $as_echo_n "(cached) " >&6
-+else
-+  cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
-+#if defined HAVE_SYS_PARAM_H
-+#  include <sys/param.h>
-+#endif
-+
-+#include <$ac_header>
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (ac_try="$ac_compile"
-+case "(($ac_try" in
-+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-+  *) ac_try_echo=$ac_try;;
-+esac
-+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-+$as_echo "$ac_try_echo") >&5
-+  (eval "$ac_compile") 2>conftest.er1
-+  ac_status=$?
-+  grep -v '^ *+' conftest.er1 >conftest.err
-+  rm -f conftest.er1
-+  cat conftest.err >&5
-+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+  (exit $ac_status); } && {
-+	 test -z "$ac_c_werror_flag" ||
-+	 test ! -s conftest.err
-+       } && test -s conftest.$ac_objext; then
-+  eval "$as_ac_Header=yes"
-+else
-+  $as_echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+	eval "$as_ac_Header=no"
-+fi
-+
-+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-+fi
-+ac_res=`eval 'as_val=${'$as_ac_Header'}
-+		 $as_echo "$as_val"'`
-+	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-+$as_echo "$ac_res" >&6; }
-+as_val=`eval 'as_val=${'$as_ac_Header'}
-+		 $as_echo "$as_val"'`
-+   if test "x$as_val" = x""yes; then
-   cat >>confdefs.h <<_ACEOF
- #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
- _ACEOF
-@@ -11322,8 +11478,9 @@
- $as_echo "$ac_res" >&6; }
- 
- fi
--if test `eval 'as_val=${'$as_ac_Header'}
--		 $as_echo "$as_val"'` = yes; then
-+as_val=`eval 'as_val=${'$as_ac_Header'}
-+		 $as_echo "$as_val"'`
-+   if test "x$as_val" = x""yes; then
-   cat >>confdefs.h <<_ACEOF
- #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
- _ACEOF
-@@ -11565,6 +11722,67 @@
- 
- fi
- 
-+{ $as_echo "$as_me:$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 >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
-+
-+int
-+main ()
-+{
-+
-+volatile int x;
-+int * volatile y = (int *) 0;
-+return !x && !y;
-+  ;
-+  return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (ac_try="$ac_compile"
-+case "(($ac_try" in
-+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-+  *) ac_try_echo=$ac_try;;
-+esac
-+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-+$as_echo "$ac_try_echo") >&5
-+  (eval "$ac_compile") 2>conftest.er1
-+  ac_status=$?
-+  grep -v '^ *+' conftest.er1 >conftest.err
-+  rm -f conftest.er1
-+  cat conftest.err >&5
-+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+  (exit $ac_status); } && {
-+	 test -z "$ac_c_werror_flag" ||
-+	 test ! -s conftest.err
-+       } && test -s conftest.$ac_objext; then
-+  ac_cv_c_volatile=yes
-+else
-+  $as_echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+	ac_cv_c_volatile=no
-+fi
-+
-+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-+fi
-+{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_volatile" >&5
-+$as_echo "$ac_cv_c_volatile" >&6; }
-+if test $ac_cv_c_volatile = no; then
-+
-+cat >>confdefs.h <<\_ACEOF
-+#define volatile /**/
-+_ACEOF
-+
-+fi
-+
- { $as_echo "$as_me:$LINENO: checking for mode_t" >&5
- $as_echo_n "checking for mode_t... " >&6; }
- if test "${ac_cv_type_mode_t+set}" = set; then
-@@ -11659,7 +11877,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_type_mode_t" >&5
- $as_echo "$ac_cv_type_mode_t" >&6; }
--if test $ac_cv_type_mode_t = yes; then
-+if test "x$ac_cv_type_mode_t" = x""yes; then
-   :
- else
- 
-@@ -11763,7 +11981,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5
- $as_echo "$ac_cv_type_off_t" >&6; }
--if test $ac_cv_type_off_t = yes; then
-+if test "x$ac_cv_type_off_t" = x""yes; then
-   :
- else
- 
-@@ -11867,7 +12085,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_type_pid_t" >&5
- $as_echo "$ac_cv_type_pid_t" >&6; }
--if test $ac_cv_type_pid_t = yes; then
-+if test "x$ac_cv_type_pid_t" = x""yes; then
-   :
- else
- 
-@@ -11971,7 +12189,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5
- $as_echo "$ac_cv_type_size_t" >&6; }
--if test $ac_cv_type_size_t = yes; then
-+if test "x$ac_cv_type_size_t" = x""yes; then
-   :
- else
- 
-@@ -12175,7 +12393,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_type_ino_t" >&5
- $as_echo "$ac_cv_type_ino_t" >&6; }
--if test $ac_cv_type_ino_t = yes; then
-+if test "x$ac_cv_type_ino_t" = x""yes; then
-   :
- else
- 
-@@ -12279,7 +12497,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_type_dev_t" >&5
- $as_echo "$ac_cv_type_dev_t" >&6; }
--if test $ac_cv_type_dev_t = yes; then
-+if test "x$ac_cv_type_dev_t" = x""yes; then
-   :
- else
- 
-@@ -12569,8 +12787,9 @@
- 		 $as_echo "$as_val"'`
- 	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
- $as_echo "$ac_res" >&6; }
--if test `eval 'as_val=${'$as_ac_Lib'}
--		 $as_echo "$as_val"'` = yes; then
-+as_val=`eval 'as_val=${'$as_ac_Lib'}
-+		 $as_echo "$as_val"'`
-+   if test "x$as_val" = x""yes; then
-   cat >>confdefs.h <<_ACEOF
- #define `$as_echo "HAVE_LIB${libname}" | $as_tr_cpp` 1
- _ACEOF
-@@ -13818,8 +14037,9 @@
- 		 $as_echo "$as_val"'`
- 	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
- $as_echo "$ac_res" >&6; }
--if test `eval 'as_val=${'$as_ac_var'}
--		 $as_echo "$as_val"'` = yes; then
-+as_val=`eval 'as_val=${'$as_ac_var'}
-+		 $as_echo "$as_val"'`
-+   if test "x$as_val" = x""yes; then
-   cat >>confdefs.h <<_ACEOF
- #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
- _ACEOF
-@@ -14202,7 +14422,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_m_strtod" >&5
- $as_echo "$ac_cv_lib_m_strtod" >&6; }
--if test $ac_cv_lib_m_strtod = yes; then
-+if test "x$ac_cv_lib_m_strtod" = x""yes; then
-   cat >>confdefs.h <<_ACEOF
- #define HAVE_LIBM 1
- _ACEOF
-@@ -14362,7 +14582,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_posix1e_acl_get_file" >&5
- $as_echo "$ac_cv_lib_posix1e_acl_get_file" >&6; }
--if test $ac_cv_lib_posix1e_acl_get_file = yes; then
-+if test "x$ac_cv_lib_posix1e_acl_get_file" = x""yes; then
-   LIBS="$LIBS -lposix1e"
- else
-   { $as_echo "$as_me:$LINENO: checking for acl_get_file in -lacl" >&5
-@@ -14430,7 +14650,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_acl_acl_get_file" >&5
- $as_echo "$ac_cv_lib_acl_acl_get_file" >&6; }
--if test $ac_cv_lib_acl_acl_get_file = yes; then
-+if test "x$ac_cv_lib_acl_acl_get_file" = x""yes; then
-   LIBS="$LIBS -lacl"
- 		  { $as_echo "$as_me:$LINENO: checking for fgetxattr in -lattr" >&5
- $as_echo_n "checking for fgetxattr in -lattr... " >&6; }
-@@ -14497,7 +14717,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_attr_fgetxattr" >&5
- $as_echo "$ac_cv_lib_attr_fgetxattr" >&6; }
--if test $ac_cv_lib_attr_fgetxattr = yes; then
-+if test "x$ac_cv_lib_attr_fgetxattr" = x""yes; then
-   LIBS="$LIBS -lattr"
- fi
- 
-@@ -15226,7 +15446,6 @@
- 
- 
- 
--
- bcopy_test_prog='
- #include "confdefs.h"
- #ifdef HAVE_STRING_H
-@@ -15458,7 +15677,7 @@
- if test "$enable_multibyte" = "yes"; then
-   cflags_save=$CFLAGS
-   ldflags_save=$LDFLAGS
--  if test -n "$x_includes" ; then
-+  if test "x$x_includes" != "xNONE" ; then
-     CFLAGS="$CFLAGS -I$x_includes"
-     LDFLAGS="$X_LIBS $LDFLAGS -lX11"
-     { $as_echo "$as_me:$LINENO: checking whether X_LOCALE needed" >&5
-@@ -15635,7 +15854,7 @@
- fi
- { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_xpg4__xpg4_setrunelocale" >&5
- $as_echo "$ac_cv_lib_xpg4__xpg4_setrunelocale" >&6; }
--if test $ac_cv_lib_xpg4__xpg4_setrunelocale = yes; then
-+if test "x$ac_cv_lib_xpg4__xpg4_setrunelocale" = x""yes; then
-   LIBS="$LIBS -lxpg4"
- fi
- 
-@@ -15646,6 +15865,7 @@
- if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
-   TAGPRG="ctags -I INIT+ --fields=+S"
- else
-+  TAGPRG="ctags"
-   (eval etags	   /dev/null) < /dev/null 1>&5 2>&1 && TAGPRG="etags"
-   (eval etags -c   /dev/null) < /dev/null 1>&5 2>&1 && TAGPRG="etags -c"
-   (eval ctags	   /dev/null) < /dev/null 1>&5 2>&1 && TAGPRG="ctags"
-@@ -15933,8 +16153,9 @@
- 		 $as_echo "$as_val"'`
- 	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
- $as_echo "$ac_res" >&6; }
--if test `eval 'as_val=${'$as_ac_var'}
--		 $as_echo "$as_val"'` = yes; then
-+as_val=`eval 'as_val=${'$as_ac_var'}
-+		 $as_echo "$as_val"'`
-+   if test "x$as_val" = x""yes; then
-   cat >>confdefs.h <<_ACEOF
- #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
- _ACEOF
-@@ -16134,7 +16355,7 @@
- $as_echo "$ac_cv_header_dlfcn_h" >&6; }
- 
- fi
--if test $ac_cv_header_dlfcn_h = yes; then
-+if test "x$ac_cv_header_dlfcn_h" = x""yes; then
-   DLL=dlfcn.h
- else
-   if test "${ac_cv_header_dl_h+set}" = set; then
-@@ -16264,7 +16485,7 @@
- $as_echo "$ac_cv_header_dl_h" >&6; }
- 
- fi
--if test $ac_cv_header_dl_h = yes; then
-+if test "x$ac_cv_header_dl_h" = x""yes; then
-   DLL=dl.h
- fi
- 
-@@ -16783,8 +17004,9 @@
- $as_echo "$ac_res" >&6; }
- 
- fi
--if test `eval 'as_val=${'$as_ac_Header'}
--		 $as_echo "$as_val"'` = yes; then
-+as_val=`eval 'as_val=${'$as_ac_Header'}
-+		 $as_echo "$as_val"'`
-+   if test "x$as_val" = x""yes; then
-   cat >>confdefs.h <<_ACEOF
- #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
- _ACEOF
-@@ -16819,21 +17041,29 @@
-   LDFLAGS="$LDFLAGS -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
- fi
- 
--{ $as_echo "$as_me:$LINENO: checking for GCC 3 or later" >&5
--$as_echo_n "checking for GCC 3 or later... " >&6; }
- DEPEND_CFLAGS_FILTER=
- if test "$GCC" = yes; then
-+  { $as_echo "$as_me:$LINENO: checking for GCC 3 or later" >&5
-+$as_echo_n "checking for GCC 3 or later... " >&6; }
-   gccmajor=`echo "$gccversion" | sed -e 's/^\([1-9]\)\..*$/\1/g'`
-   if test "$gccmajor" -gt "2"; then
-     DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
--  fi
--fi
--if test "$DEPEND_CFLAGS_FILTER" = ""; then
--  { $as_echo "$as_me:$LINENO: result: no" >&5
-+    { $as_echo "$as_me:$LINENO: result: yes" >&5
-+$as_echo "yes" >&6; }
-+  else
-+    { $as_echo "$as_me:$LINENO: result: no" >&5
- $as_echo "no" >&6; }
--else
--  { $as_echo "$as_me:$LINENO: result: yes" >&5
-+  fi
-+      { $as_echo "$as_me:$LINENO: checking whether we need -D_FORTIFY_SOURCE=1" >&5
-+$as_echo_n "checking whether we need -D_FORTIFY_SOURCE=1... " >&6; }
-+  if test "$gccmajor" -gt "3"; then
-+    CFLAGS=`echo "$CFLAGS -D_FORTIFY_SOURCE=1" | sed -e 's/-Wp,-D_FORTIFY_SOURCE=2//g' -e 's/-D_FORTIFY_SOURCE=2//g'`
-+    { $as_echo "$as_me:$LINENO: result: yes" >&5
- $as_echo "yes" >&6; }
-+  else
-+    { $as_echo "$as_me:$LINENO: result: no" >&5
-+$as_echo "no" >&6; }
-+  fi
- fi
- 
- 
-@@ -16866,8 +17096,8 @@
-     case $ac_val in #(
-     *${as_nl}*)
-       case $ac_var in #(
--      *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
--$as_echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
-+      *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5
-+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
-       esac
-       case $ac_var in #(
-       _ | IFS | as_nl) ;; #(
-@@ -17259,7 +17489,7 @@
- # values after options handling.
- ac_log="
- This file was extended by $as_me, which was
--generated by GNU Autoconf 2.62.  Invocation command line was
-+generated by GNU Autoconf 2.63.  Invocation command line was
- 
-   CONFIG_FILES    = $CONFIG_FILES
-   CONFIG_HEADERS  = $CONFIG_HEADERS
-@@ -17272,6 +17502,15 @@
- 
- _ACEOF
- 
-+case $ac_config_files in *"
-+"*) set x $ac_config_files; shift; ac_config_files=$*;;
-+esac
-+
-+case $ac_config_headers in *"
-+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
-+esac
-+
-+
- cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- # Files that config.status was made for.
- config_files="$ac_config_files"
-@@ -17284,16 +17523,17 @@
- \`$as_me' instantiates files from templates according to the
- current configuration.
- 
--Usage: $0 [OPTIONS] [FILE]...
-+Usage: $0 [OPTION]... [FILE]...
- 
-   -h, --help       print this help, then exit
-   -V, --version    print version number and configuration settings, then exit
--  -q, --quiet      do not print progress messages
-+  -q, --quiet, --silent
-+                   do not print progress messages
-   -d, --debug      don't remove temporary files
-       --recheck    update $as_me by reconfiguring in the same conditions
--  --file=FILE[:TEMPLATE]
-+      --file=FILE[:TEMPLATE]
-                    instantiate the configuration file FILE
--  --header=FILE[:TEMPLATE]
-+      --header=FILE[:TEMPLATE]
-                    instantiate the configuration header FILE
- 
- Configuration files:
-@@ -17308,7 +17548,7 @@
- cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- ac_cs_version="\\
- config.status
--configured by $0, generated by GNU Autoconf 2.62,
-+configured by $0, generated by GNU Autoconf 2.63,
-   with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
- 
- Copyright (C) 2008 Free Software Foundation, Inc.
-@@ -17505,7 +17745,8 @@
- $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
-    { (exit 1); exit 1; }; }
- 
--  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` = $ac_delim_num; then
-+  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_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-@@ -17710,9 +17951,9 @@
-   }
-   split(mac1, mac2, "(") #)
-   macro = mac2[1]
-+  prefix = substr(line, 1, index(line, defundef) - 1)
-   if (D_is_set[macro]) {
-     # Preserve the white space surrounding the "#".
--    prefix = substr(line, 1, index(line, defundef) - 1)
-     print prefix "define", macro P[macro] D[macro]
-     next
-   } else {
-@@ -17720,7 +17961,7 @@
-     # in the case of _POSIX_SOURCE, which is predefined and required
-     # on some systems where configure will not decide to define it.
-     if (defundef == "undef") {
--      print "/*", line, "*/"
-+      print "/*", prefix defundef, macro, "*/"
-       next
-     }
-   }
-@@ -17744,8 +17985,8 @@
-   esac
-   case $ac_mode$ac_tag in
-   :[FHL]*:*);;
--  :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
--$as_echo "$as_me: error: Invalid tag $ac_tag." >&2;}
-+  :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5
-+$as_echo "$as_me: error: invalid tag $ac_tag" >&2;}
-    { (exit 1); exit 1; }; };;
-   :[FH]-) ac_tag=-:-;;
-   :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
-@@ -18063,8 +18304,8 @@
-   $ac_cs_success || { (exit 1); exit 1; }
- fi
- if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
--  { $as_echo "$as_me:$LINENO: WARNING: Unrecognized options: $ac_unrecognized_opts" >&5
--$as_echo "$as_me: WARNING: Unrecognized options: $ac_unrecognized_opts" >&2;}
-+  { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
- fi
- 
- 
-diff -Naur vim72.orig/src/buffer.c vim72/src/buffer.c
---- vim72.orig/src/buffer.c	2008-08-06 04:00:48.000000000 -0700
-+++ vim72/src/buffer.c	2009-09-12 08:38:51.000000000 -0700
-@@ -44,6 +44,7 @@
- #ifdef FEAT_TITLE
- static int	ti_change __ARGS((char_u *str, char_u **last));
- #endif
-+static int	append_arg_number __ARGS((win_T *wp, char_u *buf, int buflen, int add_file));
- static void	free_buffer __ARGS((buf_T *));
- static void	free_buffer_stuff __ARGS((buf_T *buf, int free_options));
- static void	clear_wininfo __ARGS((buf_T *buf));
-@@ -437,10 +438,6 @@
- 	return;
- #endif
- 
--#ifdef FEAT_NETBEANS_INTG
--    if (usingNetbeans)
--	netbeans_file_closed(buf);
--#endif
-     /* Change directories when the 'acd' option is set. */
-     DO_AUTOCHDIR
- 
-@@ -639,6 +636,10 @@
- #ifdef FEAT_SIGNS
-     buf_delete_signs(buf);		/* delete any signs */
- #endif
-+#ifdef FEAT_NETBEANS_INTG
-+    if (usingNetbeans)
-+        netbeans_file_killed(buf);
-+#endif
- #ifdef FEAT_LOCALMAP
-     map_clear_int(buf, MAP_ALL_MODES, TRUE, FALSE);  /* clear local mappings */
-     map_clear_int(buf, MAP_ALL_MODES, TRUE, TRUE);   /* clear local abbrevs */
-@@ -647,6 +648,9 @@
-     vim_free(buf->b_start_fenc);
-     buf->b_start_fenc = NULL;
- #endif
-+#ifdef FEAT_SPELL
-+    ga_clear(&buf->b_langp);
-+#endif
- }
- 
- /*
-@@ -812,9 +816,6 @@
-     int		bnr;		/* buffer number */
-     char_u	*p;
- 
--#ifdef FEAT_NETBEANS_INTG
--    netbeansCloseFile = 1;
--#endif
-     if (addr_count == 0)
-     {
- 	(void)do_buffer(command, DOBUF_CURRENT, FORWARD, 0, forceit);
-@@ -909,9 +910,6 @@
- 	}
-     }
- 
--#ifdef FEAT_NETBEANS_INTG
--    netbeansCloseFile = 0;
--#endif
- 
-     return errormsg;
- }
-@@ -1237,7 +1235,7 @@
- 	 * "buf" if one exists */
- 	if ((swb_flags & SWB_USEOPEN) && buf_jump_open_win(buf))
- 	    return OK;
--	/* If 'switchbuf' contians "usetab": jump to first window in any tab
-+	/* If 'switchbuf' contains "usetab": jump to first window in any tab
- 	 * page containing "buf" if one exists */
- 	if ((swb_flags & SWB_USETAB) && buf_jump_open_tab(buf))
- 	    return OK;
-@@ -1351,11 +1349,12 @@
- 	}
-     }
- #ifdef FEAT_AUTOCMD
-+    /* An autocommand may have deleted "buf", already entered it (e.g., when
-+     * it did ":bunload") or aborted the script processing! */
- # ifdef FEAT_EVAL
--    /* An autocommand may have deleted buf or aborted the script processing! */
--    if (buf_valid(buf) && !aborting())
-+    if (buf_valid(buf) && buf != curbuf && !aborting())
- # else
--    if (buf_valid(buf))	    /* an autocommand may have deleted buf! */
-+    if (buf_valid(buf) && buf != curbuf)
- # endif
- #endif
- 	enter_buffer(buf);
-@@ -1397,6 +1396,9 @@
-     curwin->w_cursor.coladd = 0;
- #endif
-     curwin->w_set_curswant = TRUE;
-+#ifdef FEAT_AUTOCMD
-+    curwin->w_topline_was_set = FALSE;
-+#endif
- 
-     /* Make sure the buffer is loaded. */
-     if (curbuf->b_ml.ml_mfp == NULL)	/* need to load the file */
-@@ -1436,7 +1438,8 @@
-     maketitle();
- #endif
- #ifdef FEAT_AUTOCMD
--    if (curwin->w_topline == 1)		/* when autocmds didn't change it */
-+	/* when autocmds didn't change it */
-+    if (curwin->w_topline == 1 && !curwin->w_topline_was_set)
- #endif
- 	scroll_cursor_halfway(FALSE);	/* redisplay at correct position */
- 
-@@ -1451,13 +1454,13 @@
- 
- #ifdef FEAT_KEYMAP
-     if (curbuf->b_kmap_state & KEYMAP_INIT)
--	keymap_init();
-+	(void)keymap_init();
- #endif
- #ifdef FEAT_SPELL
-     /* May need to set the spell language.  Can only do this after the buffer
-      * has been properly setup. */
-     if (!curbuf->b_help && curwin->w_p_spell && *curbuf->b_p_spl != NUL)
--	did_set_spelllang(curbuf);
-+	(void)did_set_spelllang(curbuf);
- #endif
- 
-     redraw_later(NOT_VALID);
-@@ -1675,9 +1678,10 @@
-     buf->b_fname = buf->b_sfname;
- #ifdef UNIX
-     if (st.st_dev == (dev_T)-1)
--	buf->b_dev = -1;
-+	buf->b_dev_valid = FALSE;
-     else
-     {
-+	buf->b_dev_valid = TRUE;
- 	buf->b_dev = st.st_dev;
- 	buf->b_ino = st.st_ino;
-     }
-@@ -2022,13 +2026,12 @@
-  * Return fnum of the found buffer.
-  * Return < 0 for error.
-  */
--/*ARGSUSED*/
-     int
- buflist_findpat(pattern, pattern_end, unlisted, diffmode)
-     char_u	*pattern;
-     char_u	*pattern_end;	/* pointer to first char after pattern */
-     int		unlisted;	/* find unlisted buffers */
--    int		diffmode;	/* find diff-mode buffers only */
-+    int		diffmode UNUSED; /* find diff-mode buffers only */
- {
-     buf_T	*buf;
-     regprog_T	*prog;
-@@ -2466,7 +2469,7 @@
-     buf_T	*buf;
- {
-     wininfo_T	*wip;
--    static pos_T no_position = {1, 0};
-+    static pos_T no_position = INIT_POS_T(1, 0, 0);
- 
-     wip = find_wininfo(buf);
-     if (wip != NULL)
-@@ -2489,7 +2492,6 @@
- /*
-  * List all know file names (for :files and :buffers command).
-  */
--/*ARGSUSED*/
-     void
- buflist_list(eap)
-     exarg_T	*eap;
-@@ -2527,8 +2529,8 @@
- 	{
- 	    IObuff[len++] = ' ';
- 	} while (--i > 0 && len < IOSIZE - 18);
--	vim_snprintf((char *)IObuff + len, IOSIZE - len, _("line %ld"),
--		buf == curbuf ? curwin->w_cursor.lnum
-+	vim_snprintf((char *)IObuff + len, (size_t)(IOSIZE - len),
-+		_("line %ld"), buf == curbuf ? curwin->w_cursor.lnum
- 					       : (long)buflist_findlnum(buf));
- 	msg_outtrans(IObuff);
- 	out_flush();	    /* output one line at a time */
-@@ -2642,9 +2644,10 @@
-     buf->b_fname = buf->b_sfname;
- #ifdef UNIX
-     if (st.st_dev == (dev_T)-1)
--	buf->b_dev = -1;
-+	buf->b_dev_valid = FALSE;
-     else
-     {
-+	buf->b_dev_valid = TRUE;
- 	buf->b_dev = st.st_dev;
- 	buf->b_ino = st.st_ino;
-     }
-@@ -2838,7 +2841,7 @@
- 	/* If no struct stat given, get it now */
- 	if (stp == NULL)
- 	{
--	    if (buf->b_dev < 0 || mch_stat((char *)ffname, &st) < 0)
-+	    if (!buf->b_dev_valid || mch_stat((char *)ffname, &st) < 0)
- 		st.st_dev = (dev_T)-1;
- 	    stp = &st;
- 	}
-@@ -2875,11 +2878,12 @@
- 
-     if (buf->b_fname != NULL && mch_stat((char *)buf->b_fname, &st) >= 0)
-     {
-+	buf->b_dev_valid = TRUE;
- 	buf->b_dev = st.st_dev;
- 	buf->b_ino = st.st_ino;
-     }
-     else
--	buf->b_dev = -1;
-+	buf->b_dev_valid = FALSE;
- }
- 
- /*
-@@ -2890,7 +2894,7 @@
-     buf_T	*buf;
-     struct stat *stp;
- {
--    return (buf->b_dev >= 0
-+    return (buf->b_dev_valid
- 	    && stp->st_dev == buf->b_dev
- 	    && stp->st_ino == buf->b_ino);
- }
-@@ -2917,7 +2921,7 @@
- 
-     if (fullname > 1)	    /* 2 CTRL-G: include buffer number */
-     {
--	sprintf((char *)buffer, "buf %d: ", curbuf->b_fnum);
-+	vim_snprintf((char *)buffer, IOSIZE, "buf %d: ", curbuf->b_fnum);
- 	p = buffer + STRLEN(buffer);
-     }
-     else
-@@ -2991,11 +2995,12 @@
- 		(long)curbuf->b_ml.ml_line_count,
- 		n);
- 	validate_virtcol();
--	col_print(buffer + STRLEN(buffer),
-+	len = STRLEN(buffer);
-+	col_print(buffer + len, IOSIZE - len,
- 		   (int)curwin->w_cursor.col + 1, (int)curwin->w_virtcol + 1);
-     }
- 
--    (void)append_arg_number(curwin, buffer, !shortmess(SHM_FILE), IOSIZE);
-+    (void)append_arg_number(curwin, buffer, IOSIZE, !shortmess(SHM_FILE));
- 
-     if (dont_truncate)
-     {
-@@ -3023,15 +3028,16 @@
- }
- 
-     void
--col_print(buf, col, vcol)
-+col_print(buf, buflen, col, vcol)
-     char_u  *buf;
-+    size_t  buflen;
-     int	    col;
-     int	    vcol;
- {
-     if (col == vcol)
--	sprintf((char *)buf, "%d", col);
-+	vim_snprintf((char *)buf, buflen, "%d", col);
-     else
--	sprintf((char *)buf, "%d-%d", col, vcol);
-+	vim_snprintf((char *)buf, buflen, "%d-%d", col, vcol);
- }
- 
- #if defined(FEAT_TITLE) || defined(PROTO)
-@@ -3144,18 +3150,18 @@
- 		if (p == buf + off)
- 		    /* must be a help buffer */
- 		    vim_strncpy(buf + off, (char_u *)_("help"),
--							    IOSIZE - off - 1);
-+						  (size_t)(IOSIZE - off - 1));
- 		else
- 		    *p = NUL;
- 
- 		/* translate unprintable chars */
- 		p = transstr(buf + off);
--		vim_strncpy(buf + off, p, IOSIZE - off - 1);
-+		vim_strncpy(buf + off, p, (size_t)(IOSIZE - off - 1));
- 		vim_free(p);
- 		STRCAT(buf, ")");
- 	    }
- 
--	    append_arg_number(curwin, buf, FALSE, IOSIZE);
-+	    append_arg_number(curwin, buf, IOSIZE, FALSE);
- 
- #if defined(FEAT_CLIENTSERVER)
- 	    if (serverName != NULL)
-@@ -3292,14 +3298,13 @@
-  * If maxwidth is not zero, the string will be filled at any middle marker
-  * or truncated if too long, fillchar is used for all whitespace.
-  */
--/*ARGSUSED*/
-     int
- build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar, maxwidth, hltab, tabtab)
-     win_T	*wp;
-     char_u	*out;		/* buffer to write into != NameBuff */
-     size_t	outlen;		/* length of out[] */
-     char_u	*fmt;
--    int		use_sandbox;	/* "fmt" was set insecurely, use sandbox */
-+    int		use_sandbox UNUSED; /* "fmt" was set insecurely, use sandbox */
-     int		fillchar;
-     int		maxwidth;
-     struct stl_hlrec *hltab;	/* return: HL attributes (can be NULL) */
-@@ -3470,7 +3475,7 @@
- 		    n = (long)(p - t) - item[groupitem[groupdepth]].maxwid + 1;
- 
- 		*t = '<';
--		mch_memmove(t + 1, t + n, p - (t + n));
-+		mch_memmove(t + 1, t + n, (size_t)(p - (t + n)));
- 		p = p - n + 1;
- #ifdef FEAT_MBYTE
- 		/* Fill up space left over by half a double-wide char. */
-@@ -3500,7 +3505,7 @@
- 		else
- 		{
- 		    /* fill by inserting characters */
--		    mch_memmove(t + n - l, t, p - t);
-+		    mch_memmove(t + n - l, t, (size_t)(p - t));
- 		    l = n - l;
- 		    if (p + l >= out + outlen)
- 			l = (long)((out + outlen) - p - 1);
-@@ -3636,7 +3641,7 @@
- 	    p = t;
- 
- #ifdef FEAT_EVAL
--	    sprintf((char *)tmp, "%d", curbuf->b_fnum);
-+	    vim_snprintf((char *)tmp, sizeof(tmp), "%d", curbuf->b_fnum);
- 	    set_internal_string_var((char_u *)"actual_curbuf", tmp);
- 
- 	    o_curbuf = curbuf;
-@@ -3703,13 +3708,13 @@
- 
- 	case STL_ALTPERCENT:
- 	    str = tmp;
--	    get_rel_pos(wp, str);
-+	    get_rel_pos(wp, str, TMPLEN);
- 	    break;
- 
- 	case STL_ARGLISTSTAT:
- 	    fillable = FALSE;
- 	    tmp[0] = 0;
--	    if (append_arg_number(wp, tmp, FALSE, (int)sizeof(tmp)))
-+	    if (append_arg_number(wp, tmp, (int)sizeof(tmp), FALSE))
- 		str = tmp;
- 	    break;
- 
-@@ -3744,7 +3749,7 @@
- 	case STL_BYTEVAL_X:
- 	    base = 'X';
- 	case STL_BYTEVAL:
--	    if (wp->w_cursor.col > STRLEN(linecont))
-+	    if (wp->w_cursor.col > (colnr_T)STRLEN(linecont))
- 		num = 0;
- 	    else
- 	    {
-@@ -3917,7 +3922,7 @@
- 	    if (zeropad)
- 		*t++ = '0';
- 	    *t++ = '*';
--	    *t++ = nbase == 16 ? base : (nbase == 8 ? 'o' : 'd');
-+	    *t++ = nbase == 16 ? base : (char_u)(nbase == 8 ? 'o' : 'd');
- 	    *t = 0;
- 
- 	    for (n = num, l = 1; n >= nbase; n /= nbase)
-@@ -3963,7 +3968,7 @@
-     width = vim_strsize(out);
-     if (maxwidth > 0 && width > maxwidth)
-     {
--	/* Result is too long, must trunctate somewhere. */
-+	/* Result is too long, must truncate somewhere. */
- 	l = 0;
- 	if (itemcnt == 0)
- 	    s = out;
-@@ -4110,13 +4115,14 @@
- #if defined(FEAT_STL_OPT) || defined(FEAT_CMDL_INFO) \
- 	    || defined(FEAT_GUI_TABLINE) || defined(PROTO)
- /*
-- * Get relative cursor position in window into "str[]", in the form 99%, using
-- * "Top", "Bot" or "All" when appropriate.
-+ * Get relative cursor position in window into "buf[buflen]", in the form 99%,
-+ * using "Top", "Bot" or "All" when appropriate.
-  */
-     void
--get_rel_pos(wp, str)
-+get_rel_pos(wp, buf, buflen)
-     win_T	*wp;
--    char_u	*str;
-+    char_u	*buf;
-+    int		buflen;
- {
-     long	above; /* number of lines above window */
-     long	below; /* number of lines below window */
-@@ -4127,34 +4133,35 @@
- #endif
-     below = wp->w_buffer->b_ml.ml_line_count - wp->w_botline + 1;
-     if (below <= 0)
--	STRCPY(str, above == 0 ? _("All") : _("Bot"));
-+	vim_strncpy(buf, (char_u *)(above == 0 ? _("All") : _("Bot")),
-+							(size_t)(buflen - 1));
-     else if (above <= 0)
--	STRCPY(str, _("Top"));
-+	vim_strncpy(buf, (char_u *)_("Top"), (size_t)(buflen - 1));
-     else
--	sprintf((char *)str, "%2d%%", above > 1000000L
-+	vim_snprintf((char *)buf, (size_t)buflen, "%2d%%", above > 1000000L
- 				    ? (int)(above / ((above + below) / 100L))
- 				    : (int)(above * 100L / (above + below)));
- }
- #endif
- 
- /*
-- * Append (file 2 of 8) to 'buf', if editing more than one file.
-+ * Append (file 2 of 8) to "buf[buflen]", if editing more than one file.
-  * Return TRUE if it was appended.
-  */
--    int
--append_arg_number(wp, buf, add_file, maxlen)
-+    static int
-+append_arg_number(wp, buf, buflen, add_file)
-     win_T	*wp;
-     char_u	*buf;
-+    int		buflen;
-     int		add_file;	/* Add "file" before the arg number */
--    int		maxlen;		/* maximum nr of chars in buf or zero*/
- {
-     char_u	*p;
- 
-     if (ARGCOUNT <= 1)		/* nothing to do */
- 	return FALSE;
- 
--    p = buf + STRLEN(buf);		/* go to the end of the buffer */
--    if (maxlen && p - buf + 35 >= maxlen) /* getting too long */
-+    p = buf + STRLEN(buf);	/* go to the end of the buffer */
-+    if (p - buf + 35 >= buflen)	/* getting too long */
- 	return FALSE;
-     *p++ = ' ';
-     *p++ = '(';
-@@ -4163,7 +4170,8 @@
- 	STRCPY(p, "file ");
- 	p += 5;
-     }
--    sprintf((char *)p, wp->w_arg_idx_invalid ? "(%d) of %d)"
-+    vim_snprintf((char *)p, (size_t)(buflen - (p - buf)),
-+		wp->w_arg_idx_invalid ? "(%d) of %d)"
- 				  : "%d of %d)", wp->w_arg_idx + 1, ARGCOUNT);
-     return TRUE;
- }
-@@ -4946,7 +4954,7 @@
- 	if (tab != NULL)
- 	{
- 	    *tab++ = '\0';
--	    col = atoi((char *)tab);
-+	    col = (colnr_T)atoi((char *)tab);
- 	    tab = vim_strrchr(xline, '\t');
- 	    if (tab != NULL)
- 	    {
-@@ -4984,6 +4992,7 @@
- #endif
-     char_u	*line;
-     int		max_buffers;
-+    size_t	len;
- 
-     if (find_viminfo_parameter('%') == NULL)
- 	return;
-@@ -4992,7 +5001,8 @@
-     max_buffers = get_viminfo_parameter('%');
- 
-     /* Allocate room for the file name, lnum and col. */
--    line = alloc(MAXPATHL + 40);
-+#define LINE_BUF_LEN (MAXPATHL + 40)
-+    line = alloc(LINE_BUF_LEN);
-     if (line == NULL)
- 	return;
- 
-@@ -5018,7 +5028,8 @@
- 	    break;
- 	putc('%', fp);
- 	home_replace(NULL, buf->b_ffname, line, MAXPATHL, TRUE);
--	sprintf((char *)line + STRLEN(line), "\t%ld\t%d",
-+	len = STRLEN(line);
-+	vim_snprintf((char *)line + len, len - LINE_BUF_LEN, "\t%ld\t%d",
- 			(long)buf->b_last_cursor.lnum,
- 			buf->b_last_cursor.col);
- 	viminfo_writestring(fp, line);
-@@ -5048,7 +5059,8 @@
- 	 */
- 	FOR_ALL_TAB_WINDOWS(tp, win)
- 	    if (win->w_buffer == buf)
--		break;
-+		goto win_found;
-+win_found:
- 	if (win != NULL && win->w_llist_ref != NULL)
- 	    return _("[Location List]");
- 	else
-@@ -5062,7 +5074,7 @@
-     {
- 	if (buf->b_sfname != NULL)
- 	    return (char *)buf->b_sfname;
--	return "[Scratch]";
-+	return _("[Scratch]");
-     }
- #endif
-     if (buf->b_fname == NULL)
-@@ -5175,7 +5187,7 @@
-     return;
- }
- 
--    int
-+    linenr_T
- buf_change_sign_type(buf, markId, typenr)
-     buf_T	*buf;		/* buffer to store sign in */
-     int		markId;		/* sign ID */
-@@ -5192,10 +5204,10 @@
- 	}
-     }
- 
--    return 0;
-+    return (linenr_T)0;
- }
- 
--    int_u
-+    int
- buf_getsigntype(buf, lnum, type)
-     buf_T	*buf;
-     linenr_T	lnum;
-diff -Naur vim72.orig/src/charset.c vim72/src/charset.c
---- vim72.orig/src/charset.c	2008-07-24 07:59:44.000000000 -0700
-+++ vim72/src/charset.c	2009-09-12 08:42:12.000000000 -0700
-@@ -17,7 +17,7 @@
- static int win_nolbr_chartabsize __ARGS((win_T *wp, char_u *s, colnr_T col, int *headp));
- #endif
- 
--static int nr2hex __ARGS((int c));
-+static unsigned nr2hex __ARGS((unsigned c));
- 
- static int    chartab_initialized = FALSE;
- 
-@@ -174,6 +174,11 @@
- 	    if (VIM_ISDIGIT(*p))
- 		c = getdigits(&p);
- 	    else
-+#ifdef FEAT_MBYTE
-+		 if (has_mbyte)
-+		c = mb_ptr2char_adv(&p);
-+	    else
-+#endif
- 		c = *p++;
- 	    c2 = -1;
- 	    if (*p == '-' && p[1] != NUL)
-@@ -664,7 +669,7 @@
-     }
- #endif
-     buf[++i] = nr2hex((unsigned)c >> 4);
--    buf[++i] = nr2hex(c);
-+    buf[++i] = nr2hex((unsigned)c);
-     buf[++i] = '>';
-     buf[++i] = NUL;
- }
-@@ -674,9 +679,9 @@
-  * Lower case letters are used to avoid the confusion of <F1> being 0xf1 or
-  * function key 1.
-  */
--    static int
-+    static unsigned
- nr2hex(c)
--    int		c;
-+    unsigned	c;
- {
-     if ((c & 0xf) <= 9)
- 	return (c & 0xf) + '0';
-@@ -884,7 +889,7 @@
-     if (c >= 0x100)
-     {
- 	if (enc_dbcs != 0)
--	    return dbcs_class((unsigned)c >> 8, c & 0xff) >= 2;
-+	    return dbcs_class((unsigned)c >> 8, (unsigned)(c & 0xff)) >= 2;
- 	if (enc_utf8)
- 	    return utf_class(c) >= 2;
-     }
-@@ -1090,7 +1095,7 @@
- 	 */
- 	numberextra = win_col_off(wp);
- 	col2 = col;
--	colmax = W_WIDTH(wp) - numberextra;
-+	colmax = (colnr_T)(W_WIDTH(wp) - numberextra);
- 	if (col >= colmax)
- 	{
- 	    n = colmax + win_col_off2(wp);
-@@ -1201,17 +1206,17 @@
-     win_T	*wp;
-     colnr_T	vcol;
- {
--    colnr_T	width1;		/* width of first line (after line number) */
--    colnr_T	width2;		/* width of further lines */
-+    int		width1;		/* width of first line (after line number) */
-+    int		width2;		/* width of further lines */
- 
- #ifdef FEAT_VERTSPLIT
-     if (wp->w_width == 0)	/* there is no border */
- 	return FALSE;
- #endif
-     width1 = W_WIDTH(wp) - win_col_off(wp);
--    if (vcol < width1 - 1)
-+    if ((int)vcol < width1 - 1)
- 	return FALSE;
--    if (vcol == width1 - 1)
-+    if ((int)vcol == width1 - 1)
- 	return TRUE;
-     width2 = width1 + win_col_off2(wp);
-     return ((vcol - width1) % width2 == width2 - 1);
-@@ -1396,13 +1401,13 @@
- # ifdef FEAT_MBYTE
- 	/* Cannot put the cursor on part of a wide character. */
- 	ptr = ml_get_buf(wp->w_buffer, pos->lnum, FALSE);
--	if (pos->col < STRLEN(ptr))
-+	if (pos->col < (colnr_T)STRLEN(ptr))
- 	{
- 	    int c = (*mb_ptr2char)(ptr + pos->col);
- 
- 	    if (c != TAB && vim_isprintc(c))
- 	    {
--		endadd = char2cells(c) - 1;
-+		endadd = (colnr_T)(char2cells(c) - 1);
- 		if (coladd > endadd)	/* past end of line */
- 		    endadd = 0;
- 		else
-diff -Naur vim72.orig/src/config.h.in vim72/src/config.h.in
---- vim72.orig/src/config.h.in	2008-06-21 08:01:41.000000000 -0700
-+++ vim72/src/config.h.in	2009-09-12 08:39:05.000000000 -0700
-@@ -36,6 +36,9 @@
- /* Defined to the size of an int */
- #undef SIZEOF_INT
- 
-+/* Define when wchar_t is only 2 bytes. */
-+#undef SMALL_WCHAR_T
-+
- /*
-  * If we cannot trust one of the following from the libraries, we use our
-  * own safe but probably slower vim_memmove().
-@@ -50,6 +53,9 @@
- /* Define to empty if the keyword does not work.  */
- #undef const
- 
-+/* Define to empty if the keyword does not work.  */
-+#undef volatile
-+
- /* Define to `int' if <sys/types.h> doesn't define.  */
- #undef mode_t
- 
-diff -Naur vim72.orig/src/configure.in vim72/src/configure.in
---- vim72.orig/src/configure.in	2008-07-24 05:40:26.000000000 -0700
-+++ vim72/src/configure.in	2009-09-12 08:42:09.000000000 -0700
-@@ -957,7 +957,13 @@
- 	fi
- 	rubyldflags=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["LDFLAGS"]]'`
- 	if test "X$rubyldflags" != "X"; then
--	  LDFLAGS="$rubyldflags $LDFLAGS"
-+	  dnl Ruby on Mac OS X 10.5 adds "-arch" flags but these should only
-+	  dnl be included if requested by passing --with-mac-arch to
-+	  dnl configure, so strip these flags first (if present)
-+	  rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//'`
-+	  if test "X$rubyldflags" != "X"; then
-+	    LDFLAGS="$rubyldflags $LDFLAGS"
-+	  fi
- 	fi
- 	RUBY_SRC="if_ruby.c"
- 	RUBY_OBJ="objects/if_ruby.o"
-@@ -1193,6 +1199,28 @@
- 
-     LDFLAGS="$ac_save_LDFLAGS"
- 
-+    AC_MSG_CHECKING(size of wchar_t is 2 bytes)
-+    AC_CACHE_VAL(ac_cv_small_wchar_t,
-+	[AC_TRY_RUN([
-+#include <X11/Xlib.h>
-+#if STDC_HEADERS
-+# include <stdlib.h>
-+# include <stddef.h>
-+#endif
-+		main()
-+		{
-+		  if (sizeof(wchar_t) <= 2)
-+		    exit(1);
-+		  exit(0);
-+		}],
-+		ac_cv_small_wchar_t="no",
-+		ac_cv_small_wchar_t="yes",
-+		AC_MSG_ERROR(failed to compile test program))])
-+    AC_MSG_RESULT($ac_cv_small_wchar_t)
-+    if test "x$ac_cv_small_wchar_t" = "xyes" ; then
-+      AC_DEFINE(SMALL_WCHAR_T)
-+    fi
-+
-   fi
- fi
- 
-@@ -2095,7 +2123,7 @@
- 	sys/stream.h termios.h libc.h sys/statfs.h \
- 	poll.h sys/poll.h pwd.h utime.h sys/param.h libintl.h \
- 	libgen.h util/debug.h util/msg18n.h frame.h \
--	sys/acl.h sys/access.h sys/sysctl.h sys/sysinfo.h wchar.h wctype.h)
-+	sys/acl.h sys/access.h sys/sysinfo.h wchar.h wctype.h)
- 
- dnl sys/ptem.h depends on sys/stream.h on Solaris
- AC_CHECK_HEADERS(sys/ptem.h, [], [],
-@@ -2103,6 +2131,12 @@
- #  include <sys/stream.h>
- #endif])
- 
-+dnl sys/sysctl.h depends on sys/param.h on OpenBSD
-+AC_CHECK_HEADERS(sys/sysctl.h, [], [],
-+[#if defined HAVE_SYS_PARAM_H
-+#  include <sys/param.h>
-+#endif])
-+
- 
- dnl pthread_np.h may exist but can only be used after including pthread.h
- AC_MSG_CHECKING([for pthread_np.h])
-@@ -2148,6 +2182,7 @@
- dnl Checks for typedefs, structures, and compiler characteristics.
- AC_PROG_GCC_TRADITIONAL
- AC_C_CONST
-+AC_C_VOLATILE
- AC_TYPE_MODE_T
- AC_TYPE_OFF_T
- AC_TYPE_PID_T
-@@ -2869,7 +2904,6 @@
- AC_MSG_RESULT($ac_cv_sizeof_int)
- AC_DEFINE_UNQUOTED(SIZEOF_INT, $ac_cv_sizeof_int)
- 
--
- dnl Check for memmove() before bcopy(), makes memmove() be used when both are
- dnl present, fixes problem with incompatibility between Solaris 2.4 and 2.5.
- 
-@@ -2951,7 +2985,7 @@
- if test "$enable_multibyte" = "yes"; then
-   cflags_save=$CFLAGS
-   ldflags_save=$LDFLAGS
--  if test -n "$x_includes" ; then
-+  if test "x$x_includes" != "xNONE" ; then
-     CFLAGS="$CFLAGS -I$x_includes"
-     LDFLAGS="$X_LIBS $LDFLAGS -lX11"
-     AC_MSG_CHECKING(whether X_LOCALE needed)
-@@ -2967,7 +3001,7 @@
- dnl Link with xpg4, it is said to make Korean locale working
- AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,)
- 
--dnl Check how we can run ctags
-+dnl Check how we can run ctags.  Default to "ctags" when nothing works.
- dnl --version for Exuberant ctags (preferred)
- dnl       Add --fields=+S to get function signatures for omni completion.
- dnl -t for typedefs (many ctags have this)
-@@ -2979,6 +3013,7 @@
- if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
-   TAGPRG="ctags -I INIT+ --fields=+S"
- else
-+  TAGPRG="ctags"
-   (eval etags	   /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags"
-   (eval etags -c   /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags -c"
-   (eval ctags	   /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags"
-@@ -3152,18 +3187,25 @@
- dnl But only when making dependencies, cproto and lint don't take "-isystem".
- dnl Mac gcc returns "powerpc-apple-darwin8-gcc-4.0.1 (GCC)...", need to allow
- dnl the number before the version number.
--AC_MSG_CHECKING(for GCC 3 or later)
- DEPEND_CFLAGS_FILTER=
- if test "$GCC" = yes; then
-+  AC_MSG_CHECKING(for GCC 3 or later)
-   gccmajor=`echo "$gccversion" | sed -e 's/^\([[1-9]]\)\..*$/\1/g'`
-   if test "$gccmajor" -gt "2"; then
-     DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'"
-+    AC_MSG_RESULT(yes)
-+  else
-+    AC_MSG_RESULT(no)
-+  fi
-+  dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is
-+  dnl declared as char x[1] but actually longer.  Introduced in gcc 4.0.
-+  AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1)
-+  if test "$gccmajor" -gt "3"; then
-+    CFLAGS=`echo "$CFLAGS -D_FORTIFY_SOURCE=1" | sed -e 's/-Wp,-D_FORTIFY_SOURCE=2//g' -e 's/-D_FORTIFY_SOURCE=2//g'`
-+    AC_MSG_RESULT(yes)
-+  else
-+    AC_MSG_RESULT(no)
-   fi
--fi
--if test "$DEPEND_CFLAGS_FILTER" = ""; then
--  AC_MSG_RESULT(no)
--else
--  AC_MSG_RESULT(yes)
- fi
- AC_SUBST(DEPEND_CFLAGS_FILTER)
- 
-diff -Naur vim72.orig/src/diff.c vim72/src/diff.c
---- vim72.orig/src/diff.c	2008-03-05 03:16:56.000000000 -0800
-+++ vim72/src/diff.c	2009-09-12 08:41:38.000000000 -0700
-@@ -8,7 +8,7 @@
-  */
- 
- /*
-- * diff.c: code for diff'ing two or three buffers.
-+ * diff.c: code for diff'ing two, three or four buffers.
-  */
- 
- #include "vim.h"
-@@ -73,6 +73,8 @@
- 	{
- 	    tp->tp_diffbuf[i] = NULL;
- 	    tp->tp_diff_invalid = TRUE;
-+	    if (tp == curtab)
-+		diff_redraw(TRUE);
- 	}
-     }
- }
-@@ -102,6 +104,7 @@
- 	    {
- 		curtab->tp_diffbuf[i] = NULL;
- 		curtab->tp_diff_invalid = TRUE;
-+		diff_redraw(TRUE);
- 	    }
- 	}
-     }
-@@ -113,7 +116,7 @@
-  * Add a buffer to make diffs for.
-  * Call this when a new buffer is being edited in the current window where
-  * 'diff' is set.
-- * Marks the current buffer as being part of the diff and requireing updating.
-+ * Marks the current buffer as being part of the diff and requiring updating.
-  * This must be done before any autocmd, because a command may use info
-  * about the screen contents.
-  */
-@@ -131,6 +134,7 @@
- 	{
- 	    curtab->tp_diffbuf[i] = buf;
- 	    curtab->tp_diff_invalid = TRUE;
-+	    diff_redraw(TRUE);
- 	    return;
- 	}
- 
-@@ -661,6 +665,7 @@
-     char_u	*tmp_diff;
-     FILE	*fd;
-     int		ok;
-+    int		io_error = FALSE;
- 
-     /* Delete all diffblocks. */
-     diff_clear(curtab);
-@@ -697,18 +702,26 @@
-     {
- 	ok = FALSE;
- 	fd = mch_fopen((char *)tmp_orig, "w");
--	if (fd != NULL)
-+	if (fd == NULL)
-+	    io_error = TRUE;
-+	else
- 	{
--	    fwrite("line1\n", (size_t)6, (size_t)1, fd);
-+	    if (fwrite("line1\n", (size_t)6, (size_t)1, fd) != 1)
-+		io_error = TRUE;
- 	    fclose(fd);
- 	    fd = mch_fopen((char *)tmp_new, "w");
--	    if (fd != NULL)
-+	    if (fd == NULL)
-+		io_error = TRUE;
-+	    else
- 	    {
--		fwrite("line2\n", (size_t)6, (size_t)1, fd);
-+		if (fwrite("line2\n", (size_t)6, (size_t)1, fd) != 1)
-+		    io_error = TRUE;
- 		fclose(fd);
- 		diff_file(tmp_orig, tmp_new, tmp_diff);
- 		fd = mch_fopen((char *)tmp_diff, "r");
--		if (fd != NULL)
-+		if (fd == NULL)
-+		    io_error = TRUE;
-+		else
- 		{
- 		    char_u	linebuf[LBUFLEN];
- 
-@@ -761,6 +774,8 @@
-     }
-     if (!ok)
-     {
-+	if (io_error)
-+	    EMSG(_("E810: Cannot read or write temp files"));
- 	EMSG(_("E97: Cannot create diffs"));
- 	diff_a_works = MAYBE;
- #if defined(MSWIN) || defined(MSDOS)
-@@ -812,6 +827,7 @@
-     char_u	*tmp_diff;
- {
-     char_u	*cmd;
-+    size_t	len;
- 
- #ifdef FEAT_EVAL
-     if (*p_dex != NUL)
-@@ -820,8 +836,9 @@
-     else
- #endif
-     {
--	cmd = alloc((unsigned)(STRLEN(tmp_orig) + STRLEN(tmp_new)
--				+ STRLEN(tmp_diff) + STRLEN(p_srr) + 27));
-+	len = STRLEN(tmp_orig) + STRLEN(tmp_new)
-+				      + STRLEN(tmp_diff) + STRLEN(p_srr) + 27;
-+	cmd = alloc((unsigned)len);
- 	if (cmd != NULL)
- 	{
- 	    /* We don't want $DIFF_OPTIONS to get in the way. */
-@@ -831,7 +848,7 @@
- 	    /* Build the diff command and execute it.  Always use -a, binary
- 	     * differences are of no use.  Ignore errors, diff returns
- 	     * non-zero when differences have been found. */
--	    sprintf((char *)cmd, "diff %s%s%s%s%s %s",
-+	    vim_snprintf((char *)cmd, len, "diff %s%s%s%s%s %s",
- 		    diff_a_works == FALSE ? "" : "-a ",
- #if defined(MSWIN) || defined(MSDOS)
- 		    diff_bin_works == TRUE ? "--binary " : "",
-@@ -841,7 +858,7 @@
- 		    (diff_flags & DIFF_IWHITE) ? "-b " : "",
- 		    (diff_flags & DIFF_ICASE) ? "-i " : "",
- 		    tmp_orig, tmp_new);
--	    append_redir(cmd, p_srr, tmp_diff);
-+	    append_redir(cmd, (int)len, p_srr, tmp_diff);
- #ifdef FEAT_AUTOCMD
- 	    block_autocmds();	/* Avoid ShellCmdPost stuff */
- #endif
-@@ -866,6 +883,7 @@
-     char_u	*tmp_orig;	/* name of original temp file */
-     char_u	*tmp_new;	/* name of patched temp file */
-     char_u	*buf = NULL;
-+    size_t	buflen;
-     win_T	*old_curwin = curwin;
-     char_u	*newname = NULL;	/* name of patched file buffer */
- #ifdef UNIX
-@@ -876,6 +894,7 @@
-     char_u	*browseFile = NULL;
-     int		browse_flag = cmdmod.browse;
- #endif
-+    struct stat st;
- 
- #ifdef FEAT_BROWSE
-     if (cmdmod.browse)
-@@ -905,16 +924,17 @@
-     /* Get the absolute path of the patchfile, changing directory below. */
-     fullname = FullName_save(eap->arg, FALSE);
- #endif
--    buf = alloc((unsigned)(STRLEN(tmp_orig) + (
-+    buflen = STRLEN(tmp_orig) + (
- # ifdef UNIX
- 		    fullname != NULL ? STRLEN(fullname) :
- # endif
--		    STRLEN(eap->arg)) + STRLEN(tmp_new) + 16));
-+		    STRLEN(eap->arg)) + STRLEN(tmp_new) + 16;
-+    buf = alloc((unsigned)buflen);
-     if (buf == NULL)
- 	goto theend;
- 
- #ifdef UNIX
--    /* Temporaraly chdir to /tmp, to avoid patching files in the current
-+    /* Temporarily chdir to /tmp, to avoid patching files in the current
-      * directory when the patch file contains more than one patch.  When we
-      * have our own temp dir use that instead, it will be cleaned up when we
-      * exit (any .rej files created).  Don't change directory if we can't
-@@ -925,10 +945,10 @@
-     {
- # ifdef TEMPDIRNAMES
- 	if (vim_tempdir != NULL)
--	    mch_chdir((char *)vim_tempdir);
-+	    ignored = mch_chdir((char *)vim_tempdir);
- 	else
- # endif
--	    mch_chdir("/tmp");
-+	    ignored = mch_chdir("/tmp");
- 	shorten_fnames(TRUE);
-     }
- #endif
-@@ -946,7 +966,8 @@
-     {
- 	/* Build the patch command and execute it.  Ignore errors.  Switch to
- 	 * cooked mode to allow the user to respond to prompts. */
--	sprintf((char *)buf, "patch -o %s %s < \"%s\"", tmp_new, tmp_orig,
-+	vim_snprintf((char *)buf, buflen, "patch -o %s %s < \"%s\"",
-+		tmp_new, tmp_orig,
- # ifdef UNIX
- 		fullname != NULL ? fullname :
- # endif
-@@ -980,44 +1001,51 @@
-     STRCAT(buf, ".rej");
-     mch_remove(buf);
- 
--    if (curbuf->b_fname != NULL)
-+    /* Only continue if the output file was created. */
-+    if (mch_stat((char *)tmp_new, &st) < 0 || st.st_size == 0)
-+	EMSG(_("E816: Cannot read patch output"));
-+    else
-     {
--	newname = vim_strnsave(curbuf->b_fname,
-+	if (curbuf->b_fname != NULL)
-+	{
-+	    newname = vim_strnsave(curbuf->b_fname,
- 					  (int)(STRLEN(curbuf->b_fname) + 4));
--	if (newname != NULL)
--	    STRCAT(newname, ".new");
--    }
-+	    if (newname != NULL)
-+		STRCAT(newname, ".new");
-+	}
- 
- #ifdef FEAT_GUI
--    need_mouse_correct = TRUE;
-+	need_mouse_correct = TRUE;
- #endif
--    /* don't use a new tab page, each tab page has its own diffs */
--    cmdmod.tab = 0;
-+	/* don't use a new tab page, each tab page has its own diffs */
-+	cmdmod.tab = 0;
- 
--    if (win_split(0, (diff_flags & DIFF_VERTICAL) ? WSP_VERT : 0) != FAIL)
--    {
--	/* Pretend it was a ":split fname" command */
--	eap->cmdidx = CMD_split;
--	eap->arg = tmp_new;
--	do_exedit(eap, old_curwin);
--
--	if (curwin != old_curwin)		/* split must have worked */
-+	if (win_split(0, (diff_flags & DIFF_VERTICAL) ? WSP_VERT : 0) != FAIL)
- 	{
--	    /* Set 'diff', 'scrollbind' on and 'wrap' off. */
--	    diff_win_options(curwin, TRUE);
--	    diff_win_options(old_curwin, TRUE);
-+	    /* Pretend it was a ":split fname" command */
-+	    eap->cmdidx = CMD_split;
-+	    eap->arg = tmp_new;
-+	    do_exedit(eap, old_curwin);
- 
--	    if (newname != NULL)
-+	    /* check that split worked and editing tmp_new */
-+	    if (curwin != old_curwin && win_valid(old_curwin))
- 	    {
--		/* do a ":file filename.new" on the patched buffer */
--		eap->arg = newname;
--		ex_file(eap);
-+		/* Set 'diff', 'scrollbind' on and 'wrap' off. */
-+		diff_win_options(curwin, TRUE);
-+		diff_win_options(old_curwin, TRUE);
-+
-+		if (newname != NULL)
-+		{
-+		    /* do a ":file filename.new" on the patched buffer */
-+		    eap->arg = newname;
-+		    ex_file(eap);
- 
- #ifdef FEAT_AUTOCMD
--		/* Do filetype detection with the new name. */
--		if (au_has_group((char_u *)"filetypedetect"))
--		    do_cmdline_cmd((char_u *)":doau filetypedetect BufRead");
-+		    /* Do filetype detection with the new name. */
-+		    if (au_has_group((char_u *)"filetypedetect"))
-+			do_cmdline_cmd((char_u *)":doau filetypedetect BufRead");
- #endif
-+		}
- 	    }
- 	}
-     }
-@@ -1138,7 +1166,7 @@
- 
-     for (wp = firstwin; wp != NULL; wp = wp->w_next)
-     {
--	if (wp == curwin || eap->forceit)
-+	if (wp == curwin || (eap->forceit && wp->w_p_diff))
- 	{
- 	    /* Set 'diff', 'scrollbind' off and 'wrap' on. */
- 	    wp->w_p_diff = FALSE;
-@@ -2114,6 +2142,8 @@
- 	    EMSG2(_("E102: Can't find buffer \"%s\""), eap->arg);
- 	    return;
- 	}
-+	if (buf == curbuf)
-+	    return;		/* nothing to do */
- 	idx_other = diff_buf_idx(buf);
- 	if (idx_other == DB_COUNT)
- 	{
-diff -Naur vim72.orig/src/digraph.c vim72/src/digraph.c
---- vim72.orig/src/digraph.c	2008-06-23 14:12:51.000000000 -0700
-+++ vim72/src/digraph.c	2009-09-12 08:38:11.000000000 -0700
-@@ -32,7 +32,7 @@
- static void printdigraph __ARGS((digr_T *));
- 
- /* digraphs added by the user */
--static garray_T	user_digraphs = {0, 0, sizeof(digr_T), 10, NULL};
-+static garray_T	user_digraphs = {0, 0, (int)sizeof(digr_T), 10, NULL};
- 
- /*
-  * Note: Characters marked with XX are not included literally, because some
-@@ -2371,10 +2371,10 @@
- 	}
- 	else
- #endif
--	    *p++ = dp->result;
-+	    *p++ = (char_u)dp->result;
- 	if (char2cells(dp->result) == 1)
- 	    *p++ = ' ';
--	sprintf((char *)p, " %3d", dp->result);
-+	vim_snprintf((char *)p, sizeof(buf) - (p - buf), " %3d", dp->result);
- 	msg_outtrans(buf);
-     }
- }
-@@ -2395,7 +2395,10 @@
- static void keymap_unload __ARGS((void));
- 
- /*
-- * Set up key mapping tables for the 'keymap' option
-+ * Set up key mapping tables for the 'keymap' option.
-+ * Returns NULL if OK, an error message for failure.  This only needs to be
-+ * used when setting the option, not later when the value has already been
-+ * checked.
-  */
-     char_u *
- keymap_init()
-@@ -2412,25 +2415,29 @@
-     else
-     {
- 	char_u	*buf;
-+	size_t  buflen;
- 
- 	/* Source the keymap file.  It will contain a ":loadkeymap" command
- 	 * which will call ex_loadkeymap() below. */
--	buf = alloc((unsigned)(STRLEN(curbuf->b_p_keymap)
-+	buflen = STRLEN(curbuf->b_p_keymap)
- # ifdef FEAT_MBYTE
--						       + STRLEN(p_enc)
-+					   + STRLEN(p_enc)
- # endif
--						       + 14));
-+						       + 14;
-+	buf = alloc((unsigned)buflen);
- 	if (buf == NULL)
- 	    return e_outofmem;
- 
- # ifdef FEAT_MBYTE
- 	/* try finding "keymap/'keymap'_'encoding'.vim"  in 'runtimepath' */
--	sprintf((char *)buf, "keymap/%s_%s.vim", curbuf->b_p_keymap, p_enc);
-+	vim_snprintf((char *)buf, buflen, "keymap/%s_%s.vim",
-+						   curbuf->b_p_keymap, p_enc);
- 	if (source_runtime(buf, FALSE) == FAIL)
- # endif
- 	{
- 	    /* try finding "keymap/'keymap'.vim" in 'runtimepath'  */
--	    sprintf((char *)buf, "keymap/%s.vim", curbuf->b_p_keymap);
-+	    vim_snprintf((char *)buf, buflen, "keymap/%s.vim",
-+							  curbuf->b_p_keymap);
- 	    if (source_runtime(buf, FALSE) == FAIL)
- 	    {
- 		vim_free(buf);
-diff -Naur vim72.orig/src/edit.c vim72/src/edit.c
---- vim72.orig/src/edit.c	2008-08-06 05:51:17.000000000 -0700
-+++ vim72/src/edit.c	2009-09-12 08:40:57.000000000 -0700
-@@ -57,7 +57,7 @@
-     N_(" Keyword Local completion (^N^P)"),
- };
- 
--static char_u e_hitend[] = N_("Hit end of paragraph");
-+static char e_hitend[] = N_("Hit end of paragraph");
- 
- /*
-  * Structure used to store one match for insert completion.
-@@ -114,6 +114,10 @@
-  * FALSE the word to be completed must be located. */
- static int	  compl_started = FALSE;
- 
-+/* Set when doing something for completion that may call edit() recursively,
-+ * which is not allowed. */
-+static int	  compl_busy = FALSE;
-+
- static int	  compl_matches = 0;
- static char_u	  *compl_pattern = NULL;
- static int	  compl_direction = FORWARD;
-@@ -147,6 +151,7 @@
- static int  ins_compl_bs __ARGS((void));
- static void ins_compl_new_leader __ARGS((void));
- static void ins_compl_addleader __ARGS((int c));
-+static int ins_compl_len __ARGS((void));
- static void ins_compl_restart __ARGS((void));
- static void ins_compl_set_original_text __ARGS((char_u *str));
- static void ins_compl_addfrommatch __ARGS((void));
-@@ -164,7 +169,7 @@
- static int  ins_compl_key2count __ARGS((int c));
- static int  ins_compl_use_match __ARGS((int c));
- static int  ins_complete __ARGS((int c));
--static int  quote_meta __ARGS((char_u *dest, char_u *str, int len));
-+static unsigned  quote_meta __ARGS((char_u *dest, char_u *str, int len));
- #endif /* FEAT_INS_EXPAND */
- 
- #define BACKSPACE_CHAR		    1
-@@ -197,7 +202,8 @@
- static void mb_replace_pop_ins __ARGS((int cc));
- #endif
- static void replace_flush __ARGS((void));
--static void replace_do_bs __ARGS((void));
-+static void replace_do_bs __ARGS((int limit_col));
-+static int del_char_after_col __ARGS((int limit_col));
- #ifdef FEAT_CINDENT
- static int cindent_on __ARGS((void));
- #endif
-@@ -304,7 +310,7 @@
-     int		c = 0;
-     char_u	*ptr;
-     int		lastc;
--    colnr_T	mincol;
-+    int		mincol;
-     static linenr_T o_lnum = 0;
-     int		i;
-     int		did_backspace = TRUE;	    /* previous char was backspace */
-@@ -344,7 +350,7 @@
- 
- #ifdef FEAT_INS_EXPAND
-     /* Don't allow recursive insert mode when busy with completion. */
--    if (compl_started || pum_visible())
-+    if (compl_started || compl_busy || pum_visible())
-     {
- 	EMSG(_(e_secure));
- 	return FALSE;
-@@ -385,7 +391,7 @@
- 	if (startln)
- 	    Insstart.col = 0;
-     }
--    Insstart_textlen = linetabsize(ml_get_curline());
-+    Insstart_textlen = (colnr_T)linetabsize(ml_get_curline());
-     Insstart_blank_vcol = MAXCOL;
-     if (!did_ai)
- 	ai_col = 0;
-@@ -651,7 +657,7 @@
- 	    mincol = curwin->w_wcol;
- 	    validate_cursor_col();
- 
--	    if ((int)curwin->w_wcol < (int)mincol - curbuf->b_p_ts
-+	    if ((int)curwin->w_wcol < mincol - curbuf->b_p_ts
- 		    && curwin->w_wrow == W_WINROW(curwin)
- 						 + curwin->w_height - 1 - p_so
- 		    && (curwin->w_cursor.lnum != curwin->w_topline
-@@ -751,7 +757,7 @@
- 		 * there is nothing to add, CTRL-L works like CTRL-P then. */
- 		if (c == Ctrl_L
- 			&& (ctrl_x_mode != CTRL_X_WHOLE_LINE
--			    || STRLEN(compl_shown_match->cp_str)
-+			    || (int)STRLEN(compl_shown_match->cp_str)
- 					  > curwin->w_cursor.col - compl_col))
- 		{
- 		    ins_compl_addfrommatch();
-@@ -1338,8 +1344,10 @@
- 		goto normalchar;
- 
- docomplete:
-+	    compl_busy = TRUE;
- 	    if (ins_complete(c) == FAIL)
- 		compl_cont_status = 0;
-+	    compl_busy = FALSE;
- 	    break;
- #endif /* FEAT_INS_EXPAND */
- 
-@@ -1771,7 +1779,7 @@
- 	 * Compute the screen column where the cursor should be.
- 	 */
- 	vcol = get_indent() - vcol;
--	curwin->w_virtcol = (vcol < 0) ? 0 : vcol;
-+	curwin->w_virtcol = (colnr_T)((vcol < 0) ? 0 : vcol);
- 
- 	/*
- 	 * Advance the cursor until we reach the right screen column.
-@@ -1798,9 +1806,9 @@
- 	 */
- 	if (vcol != (int)curwin->w_virtcol)
- 	{
--	    curwin->w_cursor.col = new_cursor_col;
-+	    curwin->w_cursor.col = (colnr_T)new_cursor_col;
- 	    i = (int)curwin->w_virtcol - vcol;
--	    ptr = alloc(i + 1);
-+	    ptr = alloc((unsigned)(i + 1));
- 	    if (ptr != NULL)
- 	    {
- 		new_cursor_col += i;
-@@ -1824,7 +1832,7 @@
-     if (new_cursor_col <= 0)
- 	curwin->w_cursor.col = 0;
-     else
--	curwin->w_cursor.col = new_cursor_col;
-+	curwin->w_cursor.col = (colnr_T)new_cursor_col;
-     curwin->w_set_curswant = TRUE;
-     changed_cline_bef_curs();
- 
-@@ -1933,6 +1941,8 @@
- /*
-  * Backspace the cursor until the given column.  Handles REPLACE and VREPLACE
-  * modes correctly.  May also be used when not in insert mode at all.
-+ * Will attempt not to go before "col" even when there is a composing
-+ * character.
-  */
-     void
- backspace_until_column(col)
-@@ -1942,13 +1952,50 @@
-     {
- 	curwin->w_cursor.col--;
- 	if (State & REPLACE_FLAG)
--	    replace_do_bs();
--	else
--	    (void)del_char(FALSE);
-+	    replace_do_bs(col);
-+	else if (!del_char_after_col(col))
-+	    break;
-     }
- }
- #endif
- 
-+/*
-+ * Like del_char(), but make sure not to go before column "limit_col".
-+ * Only matters when there are composing characters.
-+ * Return TRUE when something was deleted.
-+ */
-+/*ARGSUSED*/
-+   static int
-+del_char_after_col(limit_col)
-+    int limit_col;
-+{
-+#ifdef FEAT_MBYTE
-+    if (enc_utf8 && limit_col >= 0)
-+    {
-+	colnr_T ecol = curwin->w_cursor.col + 1;
-+
-+	/* Make sure the cursor is at the start of a character, but
-+	 * skip forward again when going too far back because of a
-+	 * composing character. */
-+	mb_adjust_cursor();
-+	while (curwin->w_cursor.col < (colnr_T)limit_col)
-+	{
-+	    int l = utf_ptr2len(ml_get_cursor());
-+
-+	    if (l == 0)  /* end of line */
-+		break;
-+	    curwin->w_cursor.col += l;
-+	}
-+	if (*ml_get_cursor() == NUL || curwin->w_cursor.col == ecol)
-+	    return FALSE;
-+	del_bytes((long)((int)ecol - curwin->w_cursor.col), FALSE, TRUE);
-+    }
-+    else
-+#endif
-+	(void)del_char(FALSE);
-+    return TRUE;
-+}
-+
- #if defined(FEAT_INS_EXPAND) || defined(PROTO)
- /*
-  * CTRL-X pressed in Insert mode.
-@@ -2160,7 +2207,7 @@
- 	    actual_compl_length = compl_length;
- 
- 	/* Allocate wide character array for the completion and fill it. */
--	wca = (int *)alloc(actual_len * sizeof(int));
-+	wca = (int *)alloc((unsigned)(actual_len * sizeof(int)));
- 	if (wca != NULL)
- 	{
- 	    p = str;
-@@ -2418,7 +2465,7 @@
- 	{
- 	    had_match = (curwin->w_cursor.col > compl_col);
- 	    ins_compl_delete();
--	    ins_bytes(compl_leader + curwin->w_cursor.col - compl_col);
-+	    ins_bytes(compl_leader + ins_compl_len());
- 	    ins_redraw(FALSE);
- 
- 	    /* When the match isn't there (to avoid matching itself) remove it
-@@ -2470,7 +2517,7 @@
- 	    *p = NUL;
- 	    had_match = (curwin->w_cursor.col > compl_col);
- 	    ins_compl_delete();
--	    ins_bytes(compl_leader + curwin->w_cursor.col - compl_col);
-+	    ins_bytes(compl_leader + ins_compl_len());
- 	    ins_redraw(FALSE);
- 
- 	    /* When the match isn't there (to avoid matching itself) remove it
-@@ -2539,7 +2586,7 @@
-  */
-     void
- set_completion(startcol, list)
--    int	    startcol;
-+    colnr_T startcol;
-     list_T  *list;
- {
-     /* If already doing completions stop it. */
-@@ -2550,10 +2597,10 @@
-     if (stop_arrow() == FAIL)
- 	return;
- 
--    if (startcol > (int)curwin->w_cursor.col)
-+    if (startcol > curwin->w_cursor.col)
- 	startcol = curwin->w_cursor.col;
-     compl_col = startcol;
--    compl_length = curwin->w_cursor.col - startcol;
-+    compl_length = (int)curwin->w_cursor.col - (int)startcol;
-     /* compl_pattern doesn't need to be set */
-     compl_orig_text = vim_strnsave(ml_get_curline() + compl_col, compl_length);
-     if (compl_orig_text == NULL || ins_compl_add(compl_orig_text,
-@@ -2819,7 +2866,6 @@
-     regmatch_T	regmatch;
-     char_u	**files;
-     int		count;
--    int		i;
-     int		save_p_scs;
-     int		dir = compl_direction;
- 
-@@ -2851,17 +2897,18 @@
-     if (ctrl_x_mode == CTRL_X_WHOLE_LINE)
-     {
- 	char_u *pat_esc = vim_strsave_escaped(pat, (char_u *)"\\");
-+	size_t len;
- 
- 	if (pat_esc == NULL)
- 	    goto theend;
--	i = (int)STRLEN(pat_esc) + 10;
--	ptr = alloc(i);
-+	len = STRLEN(pat_esc) + 10;
-+	ptr = alloc((unsigned)len);
- 	if (ptr == NULL)
- 	{
- 	    vim_free(pat_esc);
- 	    goto theend;
- 	}
--	vim_snprintf((char *)ptr, i, "^\\s*\\zs\\V%s", pat_esc);
-+	vim_snprintf((char *)ptr, len, "^\\s*\\zs\\V%s", pat_esc);
- 	regmatch.regprog = vim_regcomp(ptr, RE_MAGIC);
- 	vim_free(pat_esc);
- 	vim_free(ptr);
-@@ -2952,7 +2999,7 @@
- 	{
- 	    vim_snprintf((char *)IObuff, IOSIZE,
- 			      _("Scanning dictionary: %s"), (char *)files[i]);
--	    msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R));
-+	    (void)msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R));
- 	}
- 
- 	if (fp != NULL)
-@@ -3133,6 +3180,7 @@
- 	vim_free(match);
-     } while (compl_curr_match != NULL && compl_curr_match != compl_first_match);
-     compl_first_match = compl_curr_match = NULL;
-+    compl_shown_match = NULL;
- }
- 
-     static void
-@@ -3209,7 +3257,7 @@
- {
-     ins_compl_del_pum();
-     ins_compl_delete();
--    ins_bytes(compl_leader + curwin->w_cursor.col - compl_col);
-+    ins_bytes(compl_leader + ins_compl_len());
-     compl_used_match = FALSE;
- 
-     if (compl_started)
-@@ -3264,6 +3312,20 @@
- }
- 
- /*
-+ * Return the length of the completion, from the completion start column to
-+ * the cursor column.  Making sure it never goes below zero.
-+ */
-+    static int
-+ins_compl_len()
-+{
-+    int off = (int)curwin->w_cursor.col - (int)compl_col;
-+
-+    if (off < 0)
-+	return 0;
-+    return off;
-+}
-+
-+/*
-  * Append one character to the match leader.  May reduce the number of
-  * matches.
-  */
-@@ -3292,7 +3354,7 @@
- 
-     vim_free(compl_leader);
-     compl_leader = vim_strnsave(ml_get_curline() + compl_col,
--					    curwin->w_cursor.col - compl_col);
-+				     (int)(curwin->w_cursor.col - compl_col));
-     if (compl_leader != NULL)
- 	ins_compl_new_leader();
- }
-@@ -3340,7 +3402,7 @@
- ins_compl_addfrommatch()
- {
-     char_u	*p;
--    int		len = curwin->w_cursor.col - compl_col;
-+    int		len = (int)curwin->w_cursor.col - (int)compl_col;
-     int		c;
-     compl_T	*cp;
- 
-@@ -3621,10 +3683,9 @@
- 	    {
- 		ins_compl_delete();
- 		if (compl_leader != NULL)
--		    ins_bytes(compl_leader + curwin->w_cursor.col - compl_col);
-+		    ins_bytes(compl_leader + ins_compl_len());
- 		else if (compl_first_match != NULL)
--		    ins_bytes(compl_orig_text
--					  + curwin->w_cursor.col - compl_col);
-+		    ins_bytes(compl_orig_text + ins_compl_len());
- 		retval = TRUE;
- 	    }
- 
-@@ -3907,7 +3968,7 @@
- 			    : ins_buf->b_sfname == NULL
- 				? (char *)ins_buf->b_fname
- 				: (char *)ins_buf->b_sfname);
--		msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R));
-+		(void)msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R));
- 	    }
- 	    else if (*e_cpt == NUL)
- 		break;
-@@ -3936,8 +3997,8 @@
- 		else if (*e_cpt == ']' || *e_cpt == 't')
- 		{
- 		    type = CTRL_X_TAGS;
--		    sprintf((char*)IObuff, _("Scanning tags."));
--		    msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R));
-+		    vim_snprintf((char *)IObuff, IOSIZE, _("Scanning tags."));
-+		    (void)msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R));
- 		}
- 		else
- 		    type = -1;
-@@ -4035,7 +4096,7 @@
- 	case CTRL_X_SPELL:
- #ifdef FEAT_SPELL
- 	    num_matches = expand_spelling(first_match_pos.lnum,
--				 first_match_pos.col, compl_pattern, &matches);
-+						     compl_pattern, &matches);
- 	    if (num_matches > 0)
- 		ins_compl_add_matches(num_matches, matches, p_ic);
- #endif
-@@ -4187,7 +4248,7 @@
- 	}
- 
- 	/* check if compl_curr_match has changed, (e.g. other type of
--	 * expansion added somenthing) */
-+	 * expansion added something) */
- 	if (type != 0 && compl_curr_match != old_match)
- 	    found_new_match = OK;
- 
-@@ -4256,7 +4317,7 @@
-     static void
- ins_compl_insert()
- {
--    ins_bytes(compl_shown_match->cp_str + curwin->w_cursor.col - compl_col);
-+    ins_bytes(compl_shown_match->cp_str + ins_compl_len());
-     if (compl_shown_match->cp_flags & ORIGINAL_TEXT)
- 	compl_used_match = FALSE;
-     else
-@@ -4425,7 +4486,7 @@
- 	if (!compl_get_longest || compl_used_match)
- 	    ins_compl_insert();
- 	else
--	    ins_bytes(compl_leader + curwin->w_cursor.col - compl_col);
-+	    ins_bytes(compl_leader + ins_compl_len());
-     }
-     else
- 	compl_used_match = FALSE;
-@@ -4688,7 +4749,7 @@
- 		}
- 		compl_length = curwin->w_cursor.col - (int)compl_col;
- 		/* IObuff is used to add a "word from the next line" would we
--		 * have enough space?  just being paranoic */
-+		 * have enough space?  just being paranoid */
- #define	MIN_SPACE 75
- 		if (compl_length > (IOSIZE - MIN_SPACE))
- 		{
-@@ -4745,10 +4806,9 @@
- 	    {
- 		char_u	    *prefix = (char_u *)"\\<";
- 
--		/* we need 3 extra chars, 1 for the NUL and
--		 * 2 >= strlen(prefix)	-- Acevedo */
-+		/* we need up to 2 extra chars for the prefix */
- 		compl_pattern = alloc(quote_meta(NULL, line + compl_col,
--							   compl_length) + 3);
-+							   compl_length) + 2);
- 		if (compl_pattern == NULL)
- 		    return FAIL;
- 		if (!vim_iswordp(line + compl_col)
-@@ -4823,7 +4883,7 @@
- 		else
- 		{
- 		    compl_pattern = alloc(quote_meta(NULL, line + compl_col,
--							   compl_length) + 3);
-+							   compl_length) + 2);
- 		    if (compl_pattern == NULL)
- 			return FAIL;
- 		    STRCPY((char *)compl_pattern, "\\<");
-@@ -4905,7 +4965,7 @@
- 	    if (col < 0)
- 		col = curs_col;
- 	    compl_col = col;
--	    if ((colnr_T)compl_col > curs_col)
-+	    if (compl_col > curs_col)
- 		compl_col = curs_col;
- 
- 	    /* Setup variables for completion.  Need to obtain "line" again,
-@@ -5178,15 +5238,15 @@
-  * a backslash) the metachars, and dest would be NUL terminated.
-  * Returns the length (needed) of dest
-  */
--    static int
-+    static unsigned
- quote_meta(dest, src, len)
-     char_u	*dest;
-     char_u	*src;
-     int		len;
- {
--    int	m;
-+    unsigned	m = (unsigned)len + 1;  /* one extra for the NUL */
- 
--    for (m = len; --len >= 0; src++)
-+    for ( ; --len >= 0; src++)
-     {
- 	switch (*src)
- 	{
-@@ -6015,7 +6075,7 @@
-      * in 'formatoptions' and there is a single character before the cursor.
-      * Otherwise the line would be broken and when typing another non-white
-      * next they are not joined back together. */
--    wasatend = (pos.col == STRLEN(old));
-+    wasatend = (pos.col == (colnr_T)STRLEN(old));
-     if (*old != NUL && !trailblank && wasatend)
-     {
- 	dec_cursor();
-@@ -6192,7 +6252,7 @@
-      * three digits. */
-     if (VIM_ISDIGIT(c))
-     {
--	sprintf((char *)buf, "%03d", c);
-+	vim_snprintf((char *)buf, sizeof(buf), "%03d", c);
- 	AppendToRedobuff(buf);
-     }
-     else
-@@ -6266,7 +6326,7 @@
- 	    ins_need_undo = FALSE;
- 	}
- 	Insstart = curwin->w_cursor;	/* new insertion starts here */
--	Insstart_textlen = linetabsize(ml_get_curline());
-+	Insstart_textlen = (colnr_T)linetabsize(ml_get_curline());
- 	ai_col = 0;
- #ifdef FEAT_VREPLACE
- 	if (State & VREPLACE_FLAG)
-@@ -6369,13 +6429,17 @@
- 
- 	/* If we just did an auto-indent, remove the white space from the end
- 	 * of the line, and put the cursor back.
--	 * Do this when ESC was used or moving the cursor up/down. */
-+	 * Do this when ESC was used or moving the cursor up/down.
-+	 * Check for the old position still being valid, just in case the text
-+	 * got changed unexpectedly. */
- 	if (did_ai && (esc || (vim_strchr(p_cpo, CPO_INDENT) == NULL
--			&& curwin->w_cursor.lnum != end_insert_pos->lnum)))
-+			&& curwin->w_cursor.lnum != end_insert_pos->lnum))
-+		&& end_insert_pos->lnum <= curbuf->b_ml.ml_line_count)
- 	{
- 	    pos_T	tpos = curwin->w_cursor;
- 
- 	    curwin->w_cursor = *end_insert_pos;
-+	    check_cursor_col();  /* make sure it is not past the line */
- 	    for (;;)
- 	    {
- 		if (gchar_cursor() == NUL && curwin->w_cursor.col > 0)
-@@ -6383,7 +6447,8 @@
- 		cc = gchar_cursor();
- 		if (!vim_iswhite(cc))
- 		    break;
--		(void)del_char(TRUE);
-+		if (del_char(TRUE) == FAIL)
-+		    break;  /* should not happen */
- 	    }
- 	    if (curwin->w_cursor.lnum != tpos.lnum)
- 		curwin->w_cursor = tpos;
-@@ -6395,10 +6460,11 @@
- 	     * deleted characters. */
- 	    if (VIsual_active && VIsual.lnum == curwin->w_cursor.lnum)
- 	    {
--		cc = (int)STRLEN(ml_get_curline());
--		if (VIsual.col > (colnr_T)cc)
-+		int len = (int)STRLEN(ml_get_curline());
-+
-+		if (VIsual.col > len)
- 		{
--		    VIsual.col = cc;
-+		    VIsual.col = len;
- # ifdef FEAT_VIRTUALEDIT
- 		    VIsual.coladd = 0;
- # endif
-@@ -7123,9 +7189,12 @@
-  * cc == 0: character was inserted, delete it
-  * cc > 0: character was replaced, put cc (first byte of original char) back
-  * and check for more characters to be put back
-+ * When "limit_col" is >= 0, don't delete before this column.  Matters when
-+ * using composing characters, use del_char_after_col() instead of del_char().
-  */
-     static void
--replace_do_bs()
-+replace_do_bs(limit_col)
-+    int		limit_col;
- {
-     int		cc;
- #ifdef FEAT_VREPLACE
-@@ -7153,7 +7222,7 @@
- #ifdef FEAT_MBYTE
- 	if (has_mbyte)
- 	{
--	    del_char(FALSE);
-+	    (void)del_char_after_col(limit_col);
- # ifdef FEAT_VREPLACE
- 	    if (State & VREPLACE_FLAG)
- 		orig_len = (int)STRLEN(ml_get_cursor());
-@@ -7203,7 +7272,7 @@
- 	changed_bytes(curwin->w_cursor.lnum, curwin->w_cursor.col);
-     }
-     else if (cc == 0)
--	(void)del_char(FALSE);
-+	(void)del_char_after_col(limit_col);
- }
- 
- #ifdef FEAT_CINDENT
-@@ -7646,9 +7715,7 @@
-      */
-     ++no_mapping;
-     regname = plain_vgetc();
--#ifdef FEAT_LANGMAP
-     LANGMAP_ADJUST(regname, TRUE);
--#endif
-     if (regname == Ctrl_R || regname == Ctrl_O || regname == Ctrl_P)
-     {
- 	/* Get a third key for literal register insertion */
-@@ -7657,9 +7724,7 @@
- 	add_to_showcmd_c(literally);
- #endif
- 	regname = plain_vgetc();
--#ifdef FEAT_LANGMAP
- 	LANGMAP_ADJUST(regname, TRUE);
--#endif
-     }
-     --no_mapping;
- 
-@@ -8150,7 +8215,7 @@
- /*
-  * If the cursor is on an indent, ^T/^D insert/delete one
-  * shiftwidth.	Otherwise ^T/^D behave like a "<<" or ">>".
-- * Always round the indent to 'shiftwith', this is compatible
-+ * Always round the indent to 'shiftwidth', this is compatible
-  * with vi.  But vi only supports ^T and ^D after an
-  * autoindent, we support it everywhere.
-  */
-@@ -8239,7 +8304,7 @@
- 	 * Replace mode */
- 	if (curwin->w_cursor.lnum != Insstart.lnum
- 		|| curwin->w_cursor.col >= Insstart.col)
--	    replace_do_bs();
-+	    replace_do_bs(-1);
-     }
-     else
- 	(void)del_char(FALSE);
-@@ -8258,6 +8323,7 @@
-     linenr_T	lnum;
-     int		cc;
-     int		temp = 0;	    /* init for GCC */
-+    colnr_T	save_col;
-     colnr_T	mincol;
-     int		did_backspace = FALSE;
-     int		in_indent;
-@@ -8415,13 +8481,13 @@
- 		 */
- 		while (cc > 0)
- 		{
--		    temp = curwin->w_cursor.col;
-+		    save_col = curwin->w_cursor.col;
- #ifdef FEAT_MBYTE
- 		    mb_replace_pop_ins(cc);
- #else
- 		    ins_char(cc);
- #endif
--		    curwin->w_cursor.col = temp;
-+		    curwin->w_cursor.col = save_col;
- 		    cc = replace_pop();
- 		}
- 		/* restore the characters that NL replaced */
-@@ -8453,11 +8519,11 @@
- #endif
- 			    )
- 	{
--	    temp = curwin->w_cursor.col;
-+	    save_col = curwin->w_cursor.col;
- 	    beginline(BL_WHITE);
- 	    if (curwin->w_cursor.col < (colnr_T)temp)
- 		mincol = curwin->w_cursor.col;
--	    curwin->w_cursor.col = temp;
-+	    curwin->w_cursor.col = save_col;
- 	}
- 
- 	/*
-@@ -8556,7 +8622,7 @@
- 		break;
- 	    }
- 	    if (State & REPLACE_FLAG)
--		replace_do_bs();
-+		replace_do_bs(-1);
- 	    else
- 	    {
- #ifdef FEAT_MBYTE
-@@ -8931,7 +8997,10 @@
- 	foldOpenCursor();
- #endif
-     undisplay_dollar();
--    if (gchar_cursor() != NUL || virtual_active()
-+    if (gchar_cursor() != NUL
-+#ifdef FEAT_VIRTUALEDIT
-+	    || virtual_active()
-+#endif
- 	    )
-     {
- 	start_arrow(&curwin->w_cursor);
-diff -Naur vim72.orig/src/eval.c vim72/src/eval.c
---- vim72.orig/src/eval.c	2008-08-07 12:37:22.000000000 -0700
-+++ vim72/src/eval.c	2009-09-12 08:39:30.000000000 -0700
-@@ -32,6 +32,9 @@
- 
- #define DICT_MAXNEST 100	/* maximum nesting of lists and dicts */
- 
-+#define DO_NOT_FREE_CNT 99999	/* refcount for dict or list that should not
-+				   be freed. */
-+
- /*
-  * In a hashtab item "hi_key" points to "di_key" in a dictitem.
-  * This avoids adding a pointer to the hashtab item.
-@@ -126,8 +129,11 @@
- /*
-  * When recursively copying lists and dicts we need to remember which ones we
-  * have done to avoid endless recursiveness.  This unique ID is used for that.
-+ * The last bit is used for previous_funccal, ignored when comparing.
-  */
- static int current_copyID = 0;
-+#define COPYID_INC 2
-+#define COPYID_MASK (~0x1)
- 
- /*
-  * Array to hold the hashtab with variables local to each sourced script.
-@@ -280,7 +286,7 @@
- #define VV_RO		2	/* read-only */
- #define VV_RO_SBX	4	/* read-only in the sandbox */
- 
--#define VV_NAME(s, t)	s, {{t}}, {0}
-+#define VV_NAME(s, t)	s, {{t, 0, {0}}, 0, {0}}, {0}
- 
- static struct vimvar
- {
-@@ -348,6 +354,7 @@
-     {VV_NAME("mouse_col",	 VAR_NUMBER), 0},
-     {VV_NAME("operator",	 VAR_STRING), VV_RO},
-     {VV_NAME("searchforward",	 VAR_NUMBER), 0},
-+    {VV_NAME("oldfiles",	 VAR_LIST), 0},
- };
- 
- /* shorthand */
-@@ -355,6 +362,7 @@
- #define vv_nr		vv_di.di_tv.vval.v_number
- #define vv_float	vv_di.di_tv.vval.v_float
- #define vv_str		vv_di.di_tv.vval.v_string
-+#define vv_list		vv_di.di_tv.vval.v_list
- #define vv_tv		vv_di.di_tv
- 
- /*
-@@ -426,7 +434,6 @@
- static long list_idx_of_item __ARGS((list_T *l, listitem_T *item));
- static void list_append __ARGS((list_T *l, listitem_T *item));
- static int list_append_tv __ARGS((list_T *l, typval_T *tv));
--static int list_append_string __ARGS((list_T *l, char_u *str, int len));
- static int list_append_number __ARGS((list_T *l, varnumber_T n));
- static int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item));
- static int list_extend __ARGS((list_T	*l1, list_T *l2, listitem_T *bef));
-@@ -435,6 +442,7 @@
- static void list_remove __ARGS((list_T *l, listitem_T *item, listitem_T *item2));
- static char_u *list2string __ARGS((typval_T *tv, int copyID));
- static int list_join __ARGS((garray_T *gap, list_T *l, char_u *sep, int echo, int copyID));
-+static int free_unref_items __ARGS((int copyID));
- static void set_ref_in_ht __ARGS((hashtab_T *ht, int copyID));
- static void set_ref_in_list __ARGS((list_T *l, int copyID));
- static void set_ref_in_item __ARGS((typval_T *tv, int copyID));
-@@ -788,6 +796,8 @@
- static void func_unref __ARGS((char_u *name));
- static void func_ref __ARGS((char_u *name));
- static void call_user_func __ARGS((ufunc_T *fp, int argcount, typval_T *argvars, typval_T *rettv, linenr_T firstline, linenr_T lastline, dict_T *selfdict));
-+static int can_free_funccal __ARGS((funccall_T *fc, int copyID)) ;
-+static void free_funccal __ARGS((funccall_T *fc, int free_val));
- static void add_nr_var __ARGS((dict_T *dp, dictitem_T *v, char *name, varnumber_T nr));
- static win_T *find_win_by_nr __ARGS((typval_T *vp, tabpage_T *tp));
- static void getwinvar __ARGS((typval_T *argvars, typval_T *rettv, int off));
-@@ -845,11 +855,17 @@
- 	p = &vimvars[i];
- 	if (p->vv_di.di_tv.v_type == VAR_STRING)
- 	{
--	    vim_free(p->vv_di.di_tv.vval.v_string);
--	    p->vv_di.di_tv.vval.v_string = NULL;
-+	    vim_free(p->vv_str);
-+	    p->vv_str = NULL;
-+	}
-+	else if (p->vv_di.di_tv.v_type == VAR_LIST)
-+	{
-+	    list_unref(p->vv_list);
-+	    p->vv_list = NULL;
- 	}
-     }
-     hash_clear(&vimvarht);
-+    hash_init(&vimvarht);  /* garbage_collect() will access it */
-     hash_clear(&compat_hashtab);
- 
-     /* script-local variables */
-@@ -916,6 +932,10 @@
- /* pointer to funccal for currently active function */
- funccall_T *current_funccal = NULL;
- 
-+/* pointer to list of previously used funccal, still around because some
-+ * item in it is still being used. */
-+funccall_T *previous_funccal = NULL;
-+
- /*
-  * Return TRUE when a function was ended by a ":return" command.
-  */
-@@ -1256,23 +1276,28 @@
- 
- /*
-  * Top level evaluation function, returning a string.
-+ * When "convert" is TRUE convert a List into a sequence of lines and convert
-+ * a Float to a String.
-  * Return pointer to allocated memory, or NULL for failure.
-  */
-     char_u *
--eval_to_string(arg, nextcmd, dolist)
-+eval_to_string(arg, nextcmd, convert)
-     char_u	*arg;
-     char_u	**nextcmd;
--    int		dolist;		/* turn List into sequence of lines */
-+    int		convert;
- {
-     typval_T	tv;
-     char_u	*retval;
-     garray_T	ga;
-+#ifdef FEAT_FLOAT
-+    char_u	numbuf[NUMBUFLEN];
-+#endif
- 
-     if (eval0(arg, &tv, nextcmd, TRUE) == FAIL)
- 	retval = NULL;
-     else
-     {
--	if (dolist && tv.v_type == VAR_LIST)
-+	if (convert && tv.v_type == VAR_LIST)
- 	{
- 	    ga_init2(&ga, (int)sizeof(char), 80);
- 	    if (tv.vval.v_list != NULL)
-@@ -1280,6 +1305,13 @@
- 	    ga_append(&ga, NUL);
- 	    retval = (char_u *)ga.ga_data;
- 	}
-+#ifdef FEAT_FLOAT
-+	else if (convert && tv.v_type == VAR_FLOAT)
-+	{
-+	    vim_snprintf((char *)numbuf, NUMBUFLEN, "%g", tv.vval.v_float);
-+	    retval = vim_strsave(numbuf);
-+	}
-+#endif
- 	else
- 	    retval = vim_strsave(get_tv_string(&tv));
- 	clear_tv(&tv);
-@@ -3277,7 +3309,7 @@
- 
-     if (*startarg != '(')
-     {
--	EMSG2(_("E107: Missing braces: %s"), eap->arg);
-+	EMSG2(_("E107: Missing parentheses: %s"), eap->arg);
- 	goto end;
-     }
- 
-@@ -3657,8 +3689,8 @@
- }
- 
- /*
-- * Return TRUE if typeval "tv" is locked: Either tha value is locked itself or
-- * it refers to a List or Dictionary that is locked.
-+ * Return TRUE if typeval "tv" is locked: Either that value is locked itself
-+ * or it refers to a List or Dictionary that is locked.
-  */
-     static int
- tv_islocked(tv)
-@@ -3744,7 +3776,6 @@
-  * Function given to ExpandGeneric() to obtain the list of user defined
-  * (global/buffer/window/built-in) variable names.
-  */
--/*ARGSUSED*/
-     char_u *
- get_user_var_name(xp, idx)
-     expand_T	*xp;
-@@ -3902,7 +3933,7 @@
- 
- /*
-  * Handle top level expression:
-- *	expr1 ? expr0 : expr0
-+ *	expr2 ? expr1 : expr1
-  *
-  * "arg" must point to the first non-white of the expression.
-  * "arg" is advanced to the next non-white after the recognized expression.
-@@ -6047,6 +6078,25 @@
- }
- 
- /*
-+ * Get list item "l[idx - 1]" as a string.  Returns NULL for failure.
-+ */
-+    char_u *
-+list_find_str(l, idx)
-+    list_T	*l;
-+    long	idx;
-+{
-+    listitem_T	*li;
-+
-+    li = list_find(l, idx - 1);
-+    if (li == NULL)
-+    {
-+	EMSGN(_(e_listidx), idx);
-+	return NULL;
-+    }
-+    return get_tv_string(&li->li_tv);
-+}
-+
-+/*
-  * Locate "item" list "l" and return its index.
-  * Returns -1 when "item" is not in the list.
-  */
-@@ -6137,7 +6187,7 @@
-  * When "len" >= 0 use "str[len]".
-  * Returns FAIL when out of memory.
-  */
--    static int
-+    int
- list_append_string(l, str, len)
-     list_T	*l;
-     char_u	*str;
-@@ -6448,14 +6498,13 @@
-     int
- garbage_collect()
- {
--    dict_T	*dd;
--    list_T	*ll;
--    int		copyID = ++current_copyID;
-+    int		copyID;
-     buf_T	*buf;
-     win_T	*wp;
-     int		i;
--    funccall_T	*fc;
--    int		did_free = FALSE;
-+    funccall_T	*fc, **pfc;
-+    int		did_free;
-+    int		did_free_funccal = FALSE;
- #ifdef FEAT_WINDOWS
-     tabpage_T	*tp;
- #endif
-@@ -6465,10 +6514,25 @@
-     may_garbage_collect = FALSE;
-     garbage_collect_at_exit = FALSE;
- 
-+    /* We advance by two because we add one for items referenced through
-+     * previous_funccal. */
-+    current_copyID += COPYID_INC;
-+    copyID = current_copyID;
-+
-     /*
-      * 1. Go through all accessible variables and mark all lists and dicts
-      *    with copyID.
-      */
-+
-+    /* Don't free variables in the previous_funccal list unless they are only
-+     * referenced through previous_funccal.  This must be first, because if
-+     * 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);
-@@ -6497,11 +6561,54 @@
- 	set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID);
-     }
- 
-+    /* v: vars */
-+    set_ref_in_ht(&vimvarht, copyID);
-+
-+    /*
-+     * 2. Free lists and dictionaries that are not referenced.
-+     */
-+    did_free = free_unref_items(copyID);
-+
-     /*
--     * 2. Go through the list of dicts and free items without the 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;
-+}
-+
-+/*
-+ * Free lists and dictionaries that are no longer referenced.
-+ */
-+    static int
-+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)
-+	if ((dd->dv_copyID & COPYID_MASK) != (copyID & COPYID_MASK))
- 	{
- 	    /* Free the Dictionary and ordinary items it contains, but don't
- 	     * recurse into Lists and Dictionaries, they will be in the list
-@@ -6516,12 +6623,13 @@
- 	    dd = dd->dv_used_next;
- 
-     /*
--     * 3. Go through the list of lists and free items without the copyID.
--     *    But don't free a list that has a watcher (used in a for loop), these
--     *    are not referenced anywhere.
-+     * Go through the list of lists and free items without the copyID.
-+     * But don't free a list that has a watcher (used in a for loop), these
-+     * are not referenced anywhere.
-      */
-     for (ll = first_list; ll != NULL; )
--	if (ll->lv_copyID != copyID && ll->lv_watch == NULL)
-+	if ((ll->lv_copyID & COPYID_MASK) != (copyID & COPYID_MASK)
-+						      && ll->lv_watch == NULL)
- 	{
- 	    /* Free the List and ordinary items it contains, but don't recurse
- 	     * into Lists and Dictionaries, they will be in the list of dicts
-@@ -6587,7 +6695,7 @@
-     {
- 	case VAR_DICT:
- 	    dd = tv->vval.v_dict;
--	    if (dd->dv_copyID != copyID)
-+	    if (dd != NULL && dd->dv_copyID != copyID)
- 	    {
- 		/* Didn't see this dict yet. */
- 		dd->dv_copyID = copyID;
-@@ -6597,7 +6705,7 @@
- 
- 	case VAR_LIST:
- 	    ll = tv->vval.v_list;
--	    if (ll->lv_copyID != copyID)
-+	    if (ll != NULL && ll->lv_copyID != copyID)
- 	    {
- 		/* Didn't see this list yet. */
- 		ll->lv_copyID = copyID;
-@@ -7525,8 +7633,8 @@
-     {"getwinposx",	0, 0, f_getwinposx},
-     {"getwinposy",	0, 0, f_getwinposy},
-     {"getwinvar",	2, 2, f_getwinvar},
--    {"glob",		1, 1, f_glob},
--    {"globpath",	2, 2, f_globpath},
-+    {"glob",		1, 2, f_glob},
-+    {"globpath",	2, 3, f_globpath},
-     {"has",		1, 1, f_has},
-     {"has_key",		2, 2, f_has_key},
-     {"haslocaldir",	0, 0, f_haslocaldir},
-@@ -7723,7 +7831,6 @@
-  * Function given to ExpandGeneric() to obtain the list of internal or
-  * user defined variable or function names.
-  */
--/*ARGSUSED*/
-     char_u *
- get_expr_name(xp, idx)
-     expand_T	*xp;
-@@ -7856,9 +7963,9 @@
-     else if (!aborting())
-     {
- 	if (argcount == MAX_FUNC_ARGS)
--	    emsg_funcname("E740: Too many arguments for function %s", name);
-+	    emsg_funcname(N_("E740: Too many arguments for function %s"), name);
- 	else
--	    emsg_funcname("E116: Invalid arguments for function %s", name);
-+	    emsg_funcname(N_("E116: Invalid arguments for function %s"), name);
-     }
- 
-     while (--argcount >= 0)
-@@ -7956,7 +8063,8 @@
-     /* execute the function if no errors detected and executing */
-     if (evaluate && error == ERROR_NONE)
-     {
--	rettv->v_type = VAR_NUMBER;	/* default is number rettv */
-+	rettv->v_type = VAR_NUMBER;	/* default rettv is number zero */
-+	rettv->vval.v_number = 0;
- 	error = ERROR_UNKNOWN;
- 
- 	if (!builtin_function(fname))
-@@ -8091,6 +8199,7 @@
- 
- /*
-  * Give an error message with a function name.  Handle <SNR> things.
-+ * "ermsg" is to be passed without translation, use N_() instead of _().
-  */
-     static void
- emsg_funcname(ermsg, name)
-@@ -8205,7 +8314,6 @@
- 		return;
- 	    li = l->lv_first;
- 	}
--	rettv->vval.v_number = 0;	/* Default: Success */
- 	for (;;)
- 	{
- 	    if (l == NULL)
-@@ -8238,10 +8346,9 @@
- /*
-  * "argc()" function
-  */
--/* ARGSUSED */
-     static void
- f_argc(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     rettv->vval.v_number = ARGCOUNT;
-@@ -8250,10 +8357,9 @@
- /*
-  * "argidx()" function
-  */
--/* ARGSUSED */
-     static void
- f_argidx(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     rettv->vval.v_number = curwin->w_arg_idx;
-@@ -8331,10 +8437,9 @@
- /*
-  * "browse(save, title, initdir, default)" function
-  */
--/* ARGSUSED */
-     static void
- f_browse(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
- #ifdef FEAT_BROWSE
-@@ -8366,10 +8471,9 @@
- /*
-  * "browsedir(title, initdir)" function
-  */
--/* ARGSUSED */
-     static void
- f_browsedir(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
- #ifdef FEAT_BROWSE
-@@ -8594,10 +8698,9 @@
- /*
-  * "byte2line(byte)" function
-  */
--/*ARGSUSED*/
-     static void
- f_byte2line(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
- #ifndef FEAT_BYTEOFF
-@@ -8617,7 +8720,6 @@
- /*
-  * "byteidx()" function
-  */
--/*ARGSUSED*/
-     static void
- f_byteidx(argvars, rettv)
-     typval_T	*argvars;
-@@ -8665,7 +8767,6 @@
-     int		dummy;
-     dict_T	*selfdict = NULL;
- 
--    rettv->vval.v_number = 0;
-     if (argvars[1].v_type != VAR_LIST)
-     {
- 	EMSG(_(e_listreq));
-@@ -8737,10 +8838,9 @@
- /*
-  * "changenr()" function
-  */
--/*ARGSUSED*/
-     static void
- f_changenr(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     rettv->vval.v_number = curbuf->b_u_seq_cur;
-@@ -8790,11 +8890,10 @@
- /*
-  * "clearmatches()" function
-  */
--/*ARGSUSED*/
-     static void
- f_clearmatches(argvars, rettv)
--    typval_T	*argvars;
--    typval_T	*rettv;
-+    typval_T	*argvars UNUSED;
-+    typval_T	*rettv UNUSED;
- {
- #ifdef FEAT_SEARCH_EXTRA
-     clear_matches(curwin);
-@@ -8858,11 +8957,10 @@
- /*
-  * "complete()" function
-  */
--/*ARGSUSED*/
-     static void
- f_complete(argvars, rettv)
-     typval_T	*argvars;
--    typval_T	*rettv;
-+    typval_T	*rettv UNUSED;
- {
-     int	    startcol;
- 
-@@ -8893,7 +8991,6 @@
- /*
-  * "complete_add()" function
-  */
--/*ARGSUSED*/
-     static void
- f_complete_add(argvars, rettv)
-     typval_T	*argvars;
-@@ -8905,10 +9002,9 @@
- /*
-  * "complete_check()" function
-  */
--/*ARGSUSED*/
-     static void
- f_complete_check(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     int		saved = RedrawingDisabled;
-@@ -8923,11 +9019,10 @@
- /*
-  * "confirm(message, buttons[, default [, type]])" function
-  */
--/*ARGSUSED*/
-     static void
- f_confirm(argvars, rettv)
--    typval_T	*argvars;
--    typval_T	*rettv;
-+    typval_T	*argvars UNUSED;
-+    typval_T	*rettv UNUSED;
- {
- #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
-     char_u	*message;
-@@ -8973,13 +9068,9 @@
-     if (buttons == NULL || *buttons == NUL)
- 	buttons = (char_u *)_("&Ok");
- 
--    if (error)
--	rettv->vval.v_number = 0;
--    else
-+    if (!error)
- 	rettv->vval.v_number = do_dialog(type, NULL, message, buttons,
- 								   def, NULL);
--#else
--    rettv->vval.v_number = 0;
- #endif
- }
- 
-@@ -9096,11 +9187,10 @@
-  *
-  * Checks the existence of a cscope connection.
-  */
--/*ARGSUSED*/
-     static void
- f_cscope_connection(argvars, rettv)
--    typval_T	*argvars;
--    typval_T	*rettv;
-+    typval_T	*argvars UNUSED;
-+    typval_T	*rettv UNUSED;
- {
- #ifdef FEAT_CSCOPE
-     int		num = 0;
-@@ -9118,17 +9208,15 @@
-     }
- 
-     rettv->vval.v_number = cs_connection(num, dbpath, prepend);
--#else
--    rettv->vval.v_number = 0;
- #endif
- }
- 
- /*
-  * "cursor(lnum, col)" function
-  *
-- * Moves the cursor to the specified line and column
-+ * Moves the cursor to the specified line and column.
-+ * Returns 0 when the position could be set, -1 otherwise.
-  */
--/*ARGSUSED*/
-     static void
- f_cursor(argvars, rettv)
-     typval_T	*argvars;
-@@ -9139,6 +9227,7 @@
-     long	coladd = 0;
- #endif
- 
-+    rettv->vval.v_number = -1;
-     if (argvars[1].v_type == VAR_UNKNOWN)
-     {
- 	pos_T	    pos;
-@@ -9183,6 +9272,7 @@
- #endif
- 
-     curwin->w_set_curswant = TRUE;
-+    rettv->vval.v_number = 0;
- }
- 
- /*
-@@ -9200,7 +9290,10 @@
-     if (noref < 0 || noref > 1)
- 	EMSG(_(e_invarg));
-     else
--	item_copy(&argvars[0], rettv, TRUE, noref == 0 ? ++current_copyID : 0);
-+    {
-+	current_copyID += COPYID_INC;
-+	item_copy(&argvars[0], rettv, TRUE, noref == 0 ? current_copyID : 0);
-+    }
- }
- 
- /*
-@@ -9220,27 +9313,23 @@
- /*
-  * "did_filetype()" function
-  */
--/*ARGSUSED*/
-     static void
- f_did_filetype(argvars, rettv)
--    typval_T	*argvars;
--    typval_T	*rettv;
-+    typval_T	*argvars UNUSED;
-+    typval_T	*rettv UNUSED;
- {
- #ifdef FEAT_AUTOCMD
-     rettv->vval.v_number = did_filetype;
--#else
--    rettv->vval.v_number = 0;
- #endif
- }
- 
- /*
-  * "diff_filler()" function
-  */
--/*ARGSUSED*/
-     static void
- f_diff_filler(argvars, rettv)
--    typval_T	*argvars;
--    typval_T	*rettv;
-+    typval_T	*argvars UNUSED;
-+    typval_T	*rettv UNUSED;
- {
- #ifdef FEAT_DIFF
-     rettv->vval.v_number = diff_check_fill(curwin, get_tv_lnum(argvars));
-@@ -9250,11 +9339,10 @@
- /*
-  * "diff_hlID()" function
-  */
--/*ARGSUSED*/
-     static void
- f_diff_hlID(argvars, rettv)
--    typval_T	*argvars;
--    typval_T	*rettv;
-+    typval_T	*argvars UNUSED;
-+    typval_T	*rettv UNUSED;
- {
- #ifdef FEAT_DIFF
-     linenr_T		lnum = get_tv_lnum(argvars);
-@@ -9367,7 +9455,6 @@
- /*
-  * "eval()" function
-  */
--/*ARGSUSED*/
-     static void
- f_eval(argvars, rettv)
-     typval_T	*argvars;
-@@ -9391,10 +9478,9 @@
- /*
-  * "eventhandler()" function
-  */
--/*ARGSUSED*/
-     static void
- f_eventhandler(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     rettv->vval.v_number = vgetc_busy;
-@@ -9518,7 +9604,7 @@
-     else
-     {
- 	/* When the optional second argument is non-zero, don't remove matches
--	 * for 'suffixes' and 'wildignore' */
-+	 * for 'wildignore' and don't put matches for 'suffixes' at the end. */
- 	if (argvars[1].v_type != VAR_UNKNOWN
- 				    && get_tv_number_chk(&argvars[1], &error))
- 	    flags |= WILD_KEEP_ALL;
-@@ -9542,7 +9628,6 @@
-     typval_T	*argvars;
-     typval_T	*rettv;
- {
--    rettv->vval.v_number = 0;
-     if (argvars[0].v_type == VAR_LIST && argvars[1].v_type == VAR_LIST)
-     {
- 	list_T		*l1, *l2;
-@@ -9652,11 +9737,10 @@
- /*
-  * "feedkeys()" function
-  */
--/*ARGSUSED*/
-     static void
- f_feedkeys(argvars, rettv)
-     typval_T    *argvars;
--    typval_T    *rettv;
-+    typval_T    *rettv UNUSED;
- {
-     int		remap = TRUE;
-     char_u	*keys, *flags;
-@@ -9670,7 +9754,6 @@
-     if (check_secure())
- 	return;
- 
--    rettv->vval.v_number = 0;
-     keys = get_tv_string(&argvars[0]);
-     if (*keys != NUL)
-     {
-@@ -9838,7 +9921,6 @@
-     char_u	*ermsg = map ? (char_u *)"map()" : (char_u *)"filter()";
-     int		save_did_emsg;
- 
--    rettv->vval.v_number = 0;
-     if (argvars[0].v_type == VAR_LIST)
-     {
- 	if ((l = argvars[0].vval.v_list) == NULL
-@@ -10021,8 +10103,6 @@
- 	else
- 	    rettv->vval.v_number = (varnumber_T)f;
-     }
--    else
--	rettv->vval.v_number = 0;
- }
- 
- /*
-@@ -10156,18 +10236,15 @@
-     lnum = get_tv_lnum(argvars);
-     if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count)
- 	rettv->vval.v_number = foldLevel(lnum);
--    else
- #endif
--	rettv->vval.v_number = 0;
- }
- 
- /*
-  * "foldtext()" function
-  */
--/*ARGSUSED*/
-     static void
- f_foldtext(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
- #ifdef FEAT_FOLDING
-@@ -10232,10 +10309,9 @@
- /*
-  * "foldtextresult(lnum)" function
-  */
--/*ARGSUSED*/
-     static void
- f_foldtextresult(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
- #ifdef FEAT_FOLDING
-@@ -10268,13 +10344,11 @@
- /*
-  * "foreground()" function
-  */
--/*ARGSUSED*/
-     static void
- f_foreground(argvars, rettv)
--    typval_T	*argvars;
--    typval_T	*rettv;
-+    typval_T	*argvars UNUSED;
-+    typval_T	*rettv UNUSED;
- {
--    rettv->vval.v_number = 0;
- #ifdef FEAT_GUI
-     if (gui.in_use)
- 	gui_mch_set_foreground();
-@@ -10288,7 +10362,6 @@
- /*
-  * "function()" function
-  */
--/*ARGSUSED*/
-     static void
- f_function(argvars, rettv)
-     typval_T	*argvars;
-@@ -10296,11 +10369,11 @@
- {
-     char_u	*s;
- 
--    rettv->vval.v_number = 0;
-     s = get_tv_string(&argvars[0]);
-     if (s == NULL || *s == NUL || VIM_ISDIGIT(*s))
- 	EMSG2(_(e_invarg2), s);
--    else if (!function_exists(s))
-+    /* Don't check an autoload name for existence here. */
-+    else if (vim_strchr(s, AUTOLOAD_CHAR) == NULL && !function_exists(s))
- 	EMSG2(_("E700: Unknown function: %s"), s);
-     else
-     {
-@@ -10312,11 +10385,10 @@
- /*
-  * "garbagecollect()" function
-  */
--/*ARGSUSED*/
-     static void
- f_garbagecollect(argvars, rettv)
-     typval_T	*argvars;
--    typval_T	*rettv;
-+    typval_T	*rettv UNUSED;
- {
-     /* This is postponed until we are back at the toplevel, because we may be
-      * using Lists and Dicts internally.  E.g.: ":echo [garbagecollect()]". */
-@@ -10365,9 +10437,7 @@
- 
-     if (tv == NULL)
-     {
--	if (argvars[2].v_type == VAR_UNKNOWN)
--	    rettv->vval.v_number = 0;
--	else
-+	if (argvars[2].v_type != VAR_UNKNOWN)
- 	    copy_tv(&argvars[2], rettv);
-     }
-     else
-@@ -10392,13 +10462,8 @@
- {
-     char_u	*p;
- 
--    if (retlist)
--    {
--	if (rettv_list_alloc(rettv) == FAIL)
--	    return;
--    }
--    else
--	rettv->vval.v_number = 0;
-+    if (retlist && rettv_list_alloc(rettv) == FAIL)
-+	return;
- 
-     if (buf == NULL || buf->b_ml.ml_mfp == NULL || start < 0)
- 	return;
-@@ -10602,7 +10667,7 @@
- # ifdef FEAT_WINDOWS
- 	    win_T	*wp;
- # endif
--	    int		n = 1;
-+	    int		winnr = 1;
- 
- 	    if (row >= 0 && col >= 0)
- 	    {
-@@ -10612,9 +10677,9 @@
- 		(void)mouse_comp_pos(win, &row, &col, &lnum);
- # ifdef FEAT_WINDOWS
- 		for (wp = firstwin; wp != win; wp = wp->w_next)
--		    ++n;
-+		    ++winnr;
- # endif
--		vimvars[VV_MOUSE_WIN].vv_nr = n;
-+		vimvars[VV_MOUSE_WIN].vv_nr = winnr;
- 		vimvars[VV_MOUSE_LNUM].vv_nr = lnum;
- 		vimvars[VV_MOUSE_COL].vv_nr = col + 1;
- 	    }
-@@ -10626,10 +10691,9 @@
- /*
-  * "getcharmod()" function
-  */
--/*ARGSUSED*/
-     static void
- f_getcharmod(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     rettv->vval.v_number = mod_mask;
-@@ -10638,10 +10702,9 @@
- /*
-  * "getcmdline()" function
-  */
--/*ARGSUSED*/
-     static void
- f_getcmdline(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     rettv->v_type = VAR_STRING;
-@@ -10651,10 +10714,9 @@
- /*
-  * "getcmdpos()" function
-  */
--/*ARGSUSED*/
-     static void
- f_getcmdpos(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     rettv->vval.v_number = get_cmdline_pos() + 1;
-@@ -10663,10 +10725,9 @@
- /*
-  * "getcmdtype()" function
-  */
--/*ARGSUSED*/
-     static void
- f_getcmdtype(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     rettv->v_type = VAR_STRING;
-@@ -10681,10 +10742,9 @@
- /*
-  * "getcwd()" function
-  */
--/*ARGSUSED*/
-     static void
- f_getcwd(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     char_u	cwd[MAXPATHL];
-@@ -10705,10 +10765,9 @@
- /*
-  * "getfontname()" function
-  */
--/*ARGSUSED*/
-     static void
- f_getfontname(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     rettv->v_type = VAR_STRING;
-@@ -10935,18 +10994,15 @@
- /*
-  * "getmatches()" function
-  */
--/*ARGSUSED*/
-     static void
- f_getmatches(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
- #ifdef FEAT_SEARCH_EXTRA
-     dict_T	*dict;
-     matchitem_T	*cur = curwin->w_match_head;
- 
--    rettv->vval.v_number = 0;
--
-     if (rettv_list_alloc(rettv) == OK)
-     {
- 	while (cur != NULL)
-@@ -10968,10 +11024,9 @@
- /*
-  * "getpid()" function
-  */
--/*ARGSUSED*/
-     static void
- f_getpid(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     rettv->vval.v_number = mch_get_pid();
-@@ -11015,17 +11070,15 @@
- /*
-  * "getqflist()" and "getloclist()" functions
-  */
--/*ARGSUSED*/
-     static void
- f_getqflist(argvars, rettv)
--    typval_T	*argvars;
--    typval_T	*rettv;
-+    typval_T	*argvars UNUSED;
-+    typval_T	*rettv UNUSED;
- {
- #ifdef FEAT_QUICKFIX
-     win_T	*wp;
- #endif
- 
--    rettv->vval.v_number = 0;
- #ifdef FEAT_QUICKFIX
-     if (rettv_list_alloc(rettv) == OK)
-     {
-@@ -11135,10 +11188,9 @@
- /*
-  * "getwinposx()" function
-  */
--/*ARGSUSED*/
-     static void
- f_getwinposx(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     rettv->vval.v_number = -1;
-@@ -11156,10 +11208,9 @@
- /*
-  * "getwinposy()" function
-  */
--/*ARGSUSED*/
-     static void
- f_getwinposy(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     rettv->vval.v_number = -1;
-@@ -11284,13 +11335,25 @@
-     typval_T	*argvars;
-     typval_T	*rettv;
- {
-+    int		flags = WILD_SILENT|WILD_USE_NL;
-     expand_T	xpc;
-+    int		error = FALSE;
- 
--    ExpandInit(&xpc);
--    xpc.xp_context = EXPAND_FILES;
-+    /* 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[1].v_type != VAR_UNKNOWN
-+				&& get_tv_number_chk(&argvars[1], &error))
-+	flags |= WILD_KEEP_ALL;
-     rettv->v_type = VAR_STRING;
--    rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]),
--				     NULL, WILD_USE_NL|WILD_SILENT, WILD_ALL);
-+    if (!error)
-+    {
-+	ExpandInit(&xpc);
-+	xpc.xp_context = EXPAND_FILES;
-+	rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]),
-+						       NULL, flags, WILD_ALL);
-+    }
-+    else
-+	rettv->vval.v_string = NULL;
- }
- 
- /*
-@@ -11301,14 +11364,22 @@
-     typval_T	*argvars;
-     typval_T	*rettv;
- {
-+    int		flags = 0;
-     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)
-+    if (file == NULL || error)
- 	rettv->vval.v_string = NULL;
-     else
--	rettv->vval.v_string = globpath(get_tv_string(&argvars[0]), file);
-+	rettv->vval.v_string = globpath(get_tv_string(&argvars[0]), file,
-+								       flags);
- }
- 
- /*
-@@ -11782,6 +11853,10 @@
- 	    n = has_patch(atoi((char *)name + 5));
- 	else if (STRICMP(name, "vim_starting") == 0)
- 	    n = (starting != 0);
-+#ifdef FEAT_MBYTE
-+	else if (STRICMP(name, "multi_byte_encoding") == 0)
-+	    n = has_mbyte;
-+#endif
- #if defined(FEAT_BEVAL) && defined(FEAT_GUI_W32)
- 	else if (STRICMP(name, "balloon_multiline") == 0)
- 	    n = multiline_balloon_available();
-@@ -11847,7 +11922,6 @@
-     typval_T	*argvars;
-     typval_T	*rettv;
- {
--    rettv->vval.v_number = 0;
-     if (argvars[0].v_type != VAR_DICT)
-     {
- 	EMSG(_(e_dictreq));
-@@ -11863,10 +11937,9 @@
- /*
-  * "haslocaldir()" function
-  */
--/*ARGSUSED*/
-     static void
- f_haslocaldir(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     rettv->vval.v_number = (curwin->w_localdir != NULL);
-@@ -11904,10 +11977,9 @@
- /*
-  * "histadd()" function
-  */
--/*ARGSUSED*/
-     static void
- f_histadd(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
- #ifdef FEAT_CMDHIST
-@@ -11938,11 +12010,10 @@
- /*
-  * "histdel()" function
-  */
--/*ARGSUSED*/
-     static void
- f_histdel(argvars, rettv)
--    typval_T	*argvars;
--    typval_T	*rettv;
-+    typval_T	*argvars UNUSED;
-+    typval_T	*rettv UNUSED;
- {
- #ifdef FEAT_CMDHIST
-     int		n;
-@@ -11964,18 +12035,15 @@
- 	n = del_history_entry(get_histtype(str),
- 				      get_tv_string_buf(&argvars[1], buf));
-     rettv->vval.v_number = n;
--#else
--    rettv->vval.v_number = 0;
- #endif
- }
- 
- /*
-  * "histget()" function
-  */
--/*ARGSUSED*/
-     static void
- f_histget(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
- #ifdef FEAT_CMDHIST
-@@ -12005,10 +12073,9 @@
- /*
-  * "histnr()" function
-  */
--/*ARGSUSED*/
-     static void
- f_histnr(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     int		i;
-@@ -12050,10 +12117,9 @@
- /*
-  * "hostname()" function
-  */
--/*ARGSUSED*/
-     static void
- f_hostname(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     char_u hostname[256];
-@@ -12066,10 +12132,9 @@
- /*
-  * iconv() function
-  */
--/*ARGSUSED*/
-     static void
- f_iconv(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
- #ifdef FEAT_MBYTE
-@@ -12327,7 +12392,6 @@
-     int		selected;
-     int		mouse_used;
- 
--    rettv->vval.v_number = 0;
- #ifdef NO_CONSOLE_INPUT
-     /* While starting up, there is no place to enter text. */
-     if (no_console_input())
-@@ -12365,10 +12429,9 @@
- /*
-  * "inputrestore()" function
-  */
--/*ARGSUSED*/
-     static void
- f_inputrestore(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     if (ga_userinput.ga_len > 0)
-@@ -12376,7 +12439,7 @@
- 	--ga_userinput.ga_len;
- 	restore_typeahead((tasave_T *)(ga_userinput.ga_data)
- 						       + ga_userinput.ga_len);
--	rettv->vval.v_number = 0; /* OK */
-+	/* default return is zero == OK */
-     }
-     else if (p_verbose > 1)
-     {
-@@ -12388,10 +12451,9 @@
- /*
-  * "inputsave()" function
-  */
--/*ARGSUSED*/
-     static void
- f_inputsave(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     /* Add an entry to the stack of typeahead storage. */
-@@ -12400,7 +12462,7 @@
- 	save_typeahead((tasave_T *)(ga_userinput.ga_data)
- 						       + ga_userinput.ga_len);
- 	++ga_userinput.ga_len;
--	rettv->vval.v_number = 0; /* OK */
-+	/* default return is zero == OK */
-     }
-     else
- 	rettv->vval.v_number = 1; /* Failed */
-@@ -12434,7 +12496,6 @@
-     list_T	*l;
-     int		error = FALSE;
- 
--    rettv->vval.v_number = 0;
-     if (argvars[0].v_type != VAR_LIST)
- 	EMSG2(_(e_listarg), "insert()");
-     else if ((l = argvars[0].vval.v_list) != NULL
-@@ -12553,7 +12614,6 @@
-     dict_T	*d;
-     int		todo;
- 
--    rettv->vval.v_number = 0;
-     if (argvars[0].v_type != VAR_DICT)
-     {
- 	EMSG(_(e_dictreq));
-@@ -12641,7 +12701,6 @@
-     garray_T	ga;
-     char_u	*sep;
- 
--    rettv->vval.v_number = 0;
-     if (argvars[0].v_type != VAR_LIST)
-     {
- 	EMSG(_(e_listreq));
-@@ -12681,10 +12740,9 @@
- /*
-  * "last_buffer_nr()" function.
-  */
--/*ARGSUSED*/
-     static void
- f_last_buffer_nr(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     int		n = 0;
-@@ -12739,9 +12797,7 @@
- #endif
- 
-     rettv->v_type = type;
--    if (type == VAR_NUMBER)
--	rettv->vval.v_number = 0;
--    else
-+    if (type != VAR_NUMBER)
- 	rettv->vval.v_string = NULL;
- 
-     if (check_restricted() || check_secure())
-@@ -12813,10 +12869,9 @@
- /*
-  * "line2byte(lnum)" function
-  */
--/*ARGSUSED*/
-     static void
- f_line2byte(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
- #ifndef FEAT_BYTEOFF
-@@ -12862,10 +12917,9 @@
- /*
-  * "localtime()" function
-  */
--/*ARGSUSED*/
-     static void
- f_localtime(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     rettv->vval.v_number = (varnumber_T)time(NULL);
-@@ -13447,7 +13501,6 @@
- /*
-  * "mode()" function
-  */
--/*ARGSUSED*/
-     static void
- f_mode(argvars, rettv)
-     typval_T	*argvars;
-@@ -13676,13 +13729,11 @@
- /*
-  * "pumvisible()" function
-  */
--/*ARGSUSED*/
-     static void
- f_pumvisible(argvars, rettv)
--    typval_T	*argvars;
--    typval_T	*rettv;
-+    typval_T	*argvars UNUSED;
-+    typval_T	*rettv UNUSED;
- {
--    rettv->vval.v_number = 0;
- #ifdef FEAT_INS_EXPAND
-     if (pum_visible())
- 	rettv->vval.v_number = 1;
-@@ -13716,7 +13767,6 @@
- 	    stride = get_tv_number_chk(&argvars[2], &error);
-     }
- 
--    rettv->vval.v_number = 0;
-     if (error)
- 	return;		/* type error; errmsg already given */
-     if (stride == 0)
-@@ -14083,10 +14133,9 @@
- /*
-  * "remote_expr()" function
-  */
--/*ARGSUSED*/
-     static void
- f_remote_expr(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     rettv->v_type = VAR_STRING;
-@@ -14099,13 +14148,11 @@
- /*
-  * "remote_foreground()" function
-  */
--/*ARGSUSED*/
-     static void
- f_remote_foreground(argvars, rettv)
--    typval_T	*argvars;
--    typval_T	*rettv;
-+    typval_T	*argvars UNUSED;
-+    typval_T	*rettv UNUSED;
- {
--    rettv->vval.v_number = 0;
- #ifdef FEAT_CLIENTSERVER
- # ifdef WIN32
-     /* On Win32 it's done in this application. */
-@@ -14126,10 +14173,9 @@
- #endif
- }
- 
--/*ARGSUSED*/
-     static void
- f_remote_peek(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
- #ifdef FEAT_CLIENTSERVER
-@@ -14161,7 +14207,6 @@
- 	rettv->vval.v_number = (s != NULL);
-     }
- # else
--    rettv->vval.v_number = 0;
-     if (check_connection() == FAIL)
- 	return;
- 
-@@ -14185,10 +14230,9 @@
- #endif
- }
- 
--/*ARGSUSED*/
-     static void
- f_remote_read(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     char_u	*r = NULL;
-@@ -14220,10 +14264,9 @@
- /*
-  * "remote_send()" function
-  */
--/*ARGSUSED*/
-     static void
- f_remote_send(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     rettv->v_type = VAR_STRING;
-@@ -14250,7 +14293,6 @@
-     dict_T	*d;
-     dictitem_T	*di;
- 
--    rettv->vval.v_number = 0;
-     if (argvars[0].v_type == VAR_DICT)
-     {
- 	if (argvars[2].v_type != VAR_UNKNOWN)
-@@ -14353,7 +14395,6 @@
- /*
-  * "repeat()" function
-  */
--/*ARGSUSED*/
-     static void
- f_repeat(argvars, rettv)
-     typval_T	*argvars;
-@@ -14608,7 +14649,6 @@
-     list_T	*l;
-     listitem_T	*li, *ni;
- 
--    rettv->vval.v_number = 0;
-     if (argvars[0].v_type != VAR_LIST)
- 	EMSG2(_(e_listarg), "reverse()");
-     else if ((l = argvars[0].vval.v_list) != NULL
-@@ -14960,8 +15000,6 @@
-     int		lnum = 0;
-     int		col = 0;
- 
--    rettv->vval.v_number = 0;
--
-     if (rettv_list_alloc(rettv) == FAIL)
- 	return;
- 
-@@ -15148,8 +15186,6 @@
-     int		n;
-     int		flags = 0;
- 
--    rettv->vval.v_number = 0;
--
-     if (rettv_list_alloc(rettv) == FAIL)
- 	return;
- 
-@@ -15167,10 +15203,9 @@
- }
- 
- 
--/*ARGSUSED*/
-     static void
- f_server2client(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
- #ifdef FEAT_CLIENTSERVER
-@@ -15199,10 +15234,9 @@
- #endif
- }
- 
--/*ARGSUSED*/
-     static void
- f_serverlist(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     char_u	*r = NULL;
-@@ -15223,11 +15257,10 @@
- /*
-  * "setbufvar()" function
-  */
--/*ARGSUSED*/
-     static void
- f_setbufvar(argvars, rettv)
-     typval_T	*argvars;
--    typval_T	*rettv;
-+    typval_T	*rettv UNUSED;
- {
-     buf_T	*buf;
-     aco_save_T	aco;
-@@ -15235,8 +15268,6 @@
-     typval_T	*varp;
-     char_u	nbuf[NUMBUFLEN];
- 
--    rettv->vval.v_number = 0;
--
-     if (check_restricted() || check_secure())
- 	return;
-     (void)get_tv_number(&argvars[0]);	    /* issue errmsg if type error */
-@@ -15316,7 +15347,7 @@
-     else
- 	line = get_tv_string_chk(&argvars[1]);
- 
--    rettv->vval.v_number = 0;		/* OK */
-+    /* default result is zero == OK */
-     for (;;)
-     {
- 	if (l != NULL)
-@@ -15364,12 +15395,11 @@
- /*
-  * Used by "setqflist()" and "setloclist()" functions
-  */
--/*ARGSUSED*/
-     static void
- set_qf_ll_list(wp, list_arg, action_arg, rettv)
--    win_T	*wp;
--    typval_T	*list_arg;
--    typval_T	*action_arg;
-+    win_T	*wp UNUSED;
-+    typval_T	*list_arg UNUSED;
-+    typval_T	*action_arg UNUSED;
-     typval_T	*rettv;
- {
- #ifdef FEAT_QUICKFIX
-@@ -15404,7 +15434,6 @@
- /*
-  * "setloclist()" function
-  */
--/*ARGSUSED*/
-     static void
- f_setloclist(argvars, rettv)
-     typval_T	*argvars;
-@@ -15482,7 +15511,6 @@
- /*
-  * "setpos()" function
-  */
--/*ARGSUSED*/
-     static void
- f_setpos(argvars, rettv)
-     typval_T	*argvars;
-@@ -15526,7 +15554,6 @@
- /*
-  * "setqflist()" function
-  */
--/*ARGSUSED*/
-     static void
- f_setqflist(argvars, rettv)
-     typval_T	*argvars;
-@@ -15632,7 +15659,7 @@
-     static void
- setwinvar(argvars, rettv, off)
-     typval_T	*argvars;
--    typval_T	*rettv;
-+    typval_T	*rettv UNUSED;
-     int		off;
- {
-     win_T	*win;
-@@ -15645,8 +15672,6 @@
-     char_u	nbuf[NUMBUFLEN];
-     tabpage_T	*tp;
- 
--    rettv->vval.v_number = 0;
--
-     if (check_restricted() || check_secure())
- 	return;
- 
-@@ -15838,10 +15863,9 @@
-     if (res == FAIL)
- 	res = ITEM_COMPARE_FAIL;
-     else
--	/* return value has wrong type */
- 	res = get_tv_number_chk(&rettv, &item_compare_func_err);
-     if (item_compare_func_err)
--	res = ITEM_COMPARE_FAIL;
-+	res = ITEM_COMPARE_FAIL;  /* return value has wrong type */
-     clear_tv(&rettv);
-     return res;
- }
-@@ -15860,7 +15884,6 @@
-     long	len;
-     long	i;
- 
--    rettv->vval.v_number = 0;
-     if (argvars[0].v_type != VAR_LIST)
- 	EMSG2(_(e_listarg), "sort()");
-     else
-@@ -15952,10 +15975,9 @@
- /*
-  * "spellbadword()" function
-  */
--/* ARGSUSED */
-     static void
- f_spellbadword(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     char_u	*word = (char_u *)"";
-@@ -16007,10 +16029,9 @@
- /*
-  * "spellsuggest()" function
-  */
--/*ARGSUSED*/
-     static void
- f_spellsuggest(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
- #ifdef FEAT_SPELL
-@@ -16493,10 +16514,9 @@
- /*
-  * "synID(lnum, col, trans)" function
-  */
--/*ARGSUSED*/
-     static void
- f_synID(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     int		id = 0;
-@@ -16521,10 +16541,9 @@
- /*
-  * "synIDattr(id, what [, mode])" function
-  */
--/*ARGSUSED*/
-     static void
- f_synIDattr(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     char_u	*p = NULL;
-@@ -16590,8 +16609,11 @@
- 		p = highlight_has_attr(id, HL_INVERSE, modec);
- 		break;
- 
--	case 's':					/* standout */
--		p = highlight_has_attr(id, HL_STANDOUT, modec);
-+	case 's':
-+		if (TOLOWER_ASC(what[1]) == 'p')	/* sp[#] */
-+		    p = highlight_color(id, what, modec);
-+		else					/* standout */
-+		    p = highlight_has_attr(id, HL_STANDOUT, modec);
- 		break;
- 
- 	case 'u':
-@@ -16614,10 +16636,9 @@
- /*
-  * "synIDtrans(id)" function
-  */
--/*ARGSUSED*/
-     static void
- f_synIDtrans(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     int		id;
-@@ -16637,10 +16658,9 @@
- /*
-  * "synstack(lnum, col)" function
-  */
--/*ARGSUSED*/
-     static void
- f_synstack(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
- #ifdef FEAT_SYN_HL
-@@ -16658,7 +16678,7 @@
-     col = get_tv_number(&argvars[1]) - 1;	/* -1 on type error */
- 
-     if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count
--	    && col >= 0 && col < (long)STRLEN(ml_get(lnum))
-+	    && col >= 0 && (col == 0 || col < (long)STRLEN(ml_get(lnum)))
- 	    && rettv_list_alloc(rettv) != FAIL)
-     {
- 	(void)syn_get_id(curwin, lnum, (colnr_T)col, FALSE, NULL, TRUE);
-@@ -16774,15 +16794,12 @@
- /*
-  * "tabpagebuflist()" function
-  */
--/* ARGSUSED */
-     static void
- f_tabpagebuflist(argvars, rettv)
--    typval_T	*argvars;
--    typval_T	*rettv;
-+    typval_T	*argvars UNUSED;
-+    typval_T	*rettv UNUSED;
- {
--#ifndef FEAT_WINDOWS
--    rettv->vval.v_number = 0;
--#else
-+#ifdef FEAT_WINDOWS
-     tabpage_T	*tp;
-     win_T	*wp = NULL;
- 
-@@ -16794,19 +16811,12 @@
- 	if (tp != NULL)
- 	    wp = (tp == curtab) ? firstwin : tp->tp_firstwin;
-     }
--    if (wp == NULL)
--	rettv->vval.v_number = 0;
--    else
-+    if (wp != NULL && rettv_list_alloc(rettv) != FAIL)
-     {
--	if (rettv_list_alloc(rettv) == FAIL)
--	    rettv->vval.v_number = 0;
--	else
--	{
--	    for (; wp != NULL; wp = wp->w_next)
--		if (list_append_number(rettv->vval.v_list,
-+	for (; wp != NULL; wp = wp->w_next)
-+	    if (list_append_number(rettv->vval.v_list,
- 						wp->w_buffer->b_fnum) == FAIL)
--		    break;
--	}
-+		break;
-     }
- #endif
- }
-@@ -16815,10 +16825,9 @@
- /*
-  * "tabpagenr()" function
-  */
--/* ARGSUSED */
-     static void
- f_tabpagenr(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     int		nr = 1;
-@@ -16900,10 +16909,9 @@
- /*
-  * "tabpagewinnr()" function
-  */
--/* ARGSUSED */
-     static void
- f_tabpagewinnr(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     int		nr = 1;
-@@ -16923,10 +16931,9 @@
- /*
-  * "tagfiles()" function
-  */
--/*ARGSUSED*/
-     static void
- f_tagfiles(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     char_u	fname[MAXPATHL + 1];
-@@ -16934,10 +16941,7 @@
-     int		first;
- 
-     if (rettv_list_alloc(rettv) == FAIL)
--    {
--	rettv->vval.v_number = 0;
- 	return;
--    }
- 
-     for (first = TRUE; ; first = FALSE)
- 	if (get_tagfname(&tn, first, fname) == FAIL
-@@ -16969,10 +16973,9 @@
- /*
-  * "tempname()" function
-  */
--/*ARGSUSED*/
-     static void
- f_tempname(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     static int	x = 'A';
-@@ -17005,11 +17008,10 @@
- /*
-  * "test(list)" function: Just checking the walls...
-  */
--/*ARGSUSED*/
-     static void
- f_test(argvars, rettv)
--    typval_T	*argvars;
--    typval_T	*rettv;
-+    typval_T	*argvars UNUSED;
-+    typval_T	*rettv UNUSED;
- {
-     /* Used for unit testing.  Change the code below to your liking. */
- #if 0
-@@ -17294,11 +17296,10 @@
- /*
-  * "visualmode()" function
-  */
--/*ARGSUSED*/
-     static void
- f_visualmode(argvars, rettv)
--    typval_T	*argvars;
--    typval_T	*rettv;
-+    typval_T	*argvars UNUSED;
-+    typval_T	*rettv UNUSED;
- {
- #ifdef FEAT_VISUAL
-     char_u	str[2];
-@@ -17311,8 +17312,6 @@
-     /* A non-zero number or non-empty string argument: reset mode. */
-     if (non_zero_arg(&argvars[0]))
- 	curbuf->b_visual_mode_eval = NUL;
--#else
--    rettv->vval.v_number = 0; /* return anything, it won't work anyway */
- #endif
- }
- 
-@@ -17336,10 +17335,9 @@
- /*
-  * "wincol()" function
-  */
--/*ARGSUSED*/
-     static void
- f_wincol(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     validate_cursor();
-@@ -17366,10 +17364,9 @@
- /*
-  * "winline()" function
-  */
--/*ARGSUSED*/
-     static void
- f_winline(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     validate_cursor();
-@@ -17379,10 +17376,9 @@
- /*
-  * "winnr()" function
-  */
--/* ARGSUSED */
-     static void
- f_winnr(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     int		nr = 1;
-@@ -17396,10 +17392,9 @@
- /*
-  * "winrestcmd()" function
-  */
--/* ARGSUSED */
-     static void
- f_winrestcmd(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
- #ifdef FEAT_WINDOWS
-@@ -17431,11 +17426,10 @@
- /*
-  * "winrestview()" function
-  */
--/* ARGSUSED */
-     static void
- f_winrestview(argvars, rettv)
-     typval_T	*argvars;
--    typval_T	*rettv;
-+    typval_T	*rettv UNUSED;
- {
-     dict_T	*dict;
- 
-@@ -17477,10 +17471,9 @@
- /*
-  * "winsaveview()" function
-  */
--/* ARGSUSED */
-     static void
- f_winsaveview(argvars, rettv)
--    typval_T	*argvars;
-+    typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
-     dict_T	*dict;
-@@ -18097,14 +18090,28 @@
- }
- 
- /*
-- * Set v:count, v:count1 and v:prevcount.
-+ * Get List v: variable value.  Caller must take care of reference count when
-+ * needed.
-+ */
-+    list_T *
-+get_vim_var_list(idx)
-+    int		idx;
-+{
-+    return vimvars[idx].vv_list;
-+}
-+
-+/*
-+ * Set v:count to "count" and v:count1 to "count1".
-+ * When "set_prevcount" is TRUE first set v:prevcount from v:count.
-  */
-     void
--set_vcount(count, count1)
-+set_vcount(count, count1, set_prevcount)
-     long	count;
-     long	count1;
-+    int		set_prevcount;
- {
--    vimvars[VV_PREVCOUNT].vv_nr = vimvars[VV_COUNT].vv_nr;
-+    if (set_prevcount)
-+	vimvars[VV_PREVCOUNT].vv_nr = vimvars[VV_COUNT].vv_nr;
-     vimvars[VV_COUNT].vv_nr = count;
-     vimvars[VV_COUNT1].vv_nr = count1;
- }
-@@ -18132,6 +18139,20 @@
- }
- 
- /*
-+ * Set List v: variable to "val".
-+ */
-+    void
-+set_vim_var_list(idx, val)
-+    int		idx;
-+    list_T	*val;
-+{
-+    list_unref(vimvars[idx].vv_list);
-+    vimvars[idx].vv_list = val;
-+    if (val != NULL)
-+	++val->lv_refcount;
-+}
-+
-+/*
-  * Set v:register if needed.
-  */
-     void
-@@ -18868,7 +18889,8 @@
-     dictitem_T	*dict_var;
- {
-     hash_init(&dict->dv_hashtab);
--    dict->dv_refcount = 99999;
-+    dict->dv_refcount = DO_NOT_FREE_CNT;
-+    dict->dv_copyID = 0;
-     dict_var->di_tv.vval.v_dict = dict;
-     dict_var->di_tv.v_type = VAR_DICT;
-     dict_var->di_tv.v_lock = VAR_FIXED;
-@@ -18951,7 +18973,8 @@
-     char_u	*s;
-     char_u	numbuf[NUMBUFLEN];
- 
--    s = echo_string(&v->di_tv, &tofree, numbuf, ++current_copyID);
-+    current_copyID += COPYID_INC;
-+    s = echo_string(&v->di_tv, &tofree, numbuf, current_copyID);
-     list_one_var_a(prefix, v->di_key, v->di_tv.v_type,
- 					 s == NULL ? (char_u *)"" : s, first);
-     vim_free(tofree);
-@@ -19205,6 +19228,8 @@
-  * Copy the values from typval_T "from" to typval_T "to".
-  * When needed allocates string or increases reference count.
-  * Does not make a copy of a list or dict but copies the reference!
-+ * It is OK for "from" and "to" to point to the same item.  This is used to
-+ * make a copy later.
-  */
-     static void
- copy_tv(from, to)
-@@ -19384,7 +19409,8 @@
- 	    }
- 	    else if (eap->cmdidx == CMD_echo)
- 		msg_puts_attr((char_u *)" ", echo_attr);
--	    p = echo_string(&rettv, &tofree, numbuf, ++current_copyID);
-+	    current_copyID += COPYID_INC;
-+	    p = echo_string(&rettv, &tofree, numbuf, current_copyID);
- 	    if (p != NULL)
- 		for ( ; *p != NUL && !got_int; ++p)
- 		{
-@@ -19660,6 +19686,7 @@
- 			    list_func_head(fp, FALSE);
- 		    }
- 		}
-+		vim_free(regmatch.regprog);
- 	    }
- 	}
- 	if (*p == '/')
-@@ -19748,7 +19775,7 @@
- 		}
- 	    }
- 	    else
--		emsg_funcname("E123: Undefined function: %s", name);
-+		emsg_funcname(N_("E123: Undefined function: %s"), name);
- 	}
- 	goto ret_free;
-     }
-@@ -19792,7 +19819,7 @@
- 						      : eval_isnamec(arg[j])))
- 		++j;
- 	    if (arg[j] != NUL)
--		emsg_funcname(_(e_invarg2), arg);
-+		emsg_funcname((char *)e_invarg2, arg);
- 	}
-     }
- 
-@@ -20064,7 +20091,7 @@
- 	v = find_var(name, &ht);
- 	if (v != NULL && v->di_tv.v_type == VAR_FUNC)
- 	{
--	    emsg_funcname("E707: Function name conflicts with variable: %s",
-+	    emsg_funcname(N_("E707: Function name conflicts with variable: %s"),
- 									name);
- 	    goto erret;
- 	}
-@@ -20079,7 +20106,7 @@
- 	    }
- 	    if (fp->uf_calls > 0)
- 	    {
--		emsg_funcname("E127: Cannot redefine function %s: It is in use",
-+		emsg_funcname(N_("E127: Cannot redefine function %s: It is in use"),
- 									name);
- 		goto erret;
- 	    }
-@@ -20590,6 +20617,9 @@
-     int		st_len = 0;
- 
-     todo = (int)func_hashtab.ht_used;
-+    if (todo == 0)
-+	return;     /* nothing to dump */
-+
-     sorttab = (ufunc_T **)alloc((unsigned)(sizeof(ufunc_T) * todo));
- 
-     for (hi = func_hashtab.ht_array; todo > 0; ++hi)
-@@ -20638,6 +20668,8 @@
- 							      prof_self_cmp);
- 	prof_sort_list(fd, sorttab, st_len, "SELF", TRUE);
-     }
-+
-+    vim_free(sorttab);
- }
- 
-     static void
-@@ -21012,7 +21044,7 @@
-     char_u	*save_sourcing_name;
-     linenr_T	save_sourcing_lnum;
-     scid_T	save_current_SID;
--    funccall_T	fc;
-+    funccall_T	*fc;
-     int		save_did_emsg;
-     static int	depth = 0;
-     dictitem_T	*v;
-@@ -21038,36 +21070,37 @@
- 
-     line_breakcheck();		/* check for CTRL-C hit */
- 
--    fc.caller = current_funccal;
--    current_funccal = &fc;
--    fc.func = fp;
--    fc.rettv = rettv;
-+    fc = (funccall_T *)alloc(sizeof(funccall_T));
-+    fc->caller = current_funccal;
-+    current_funccal = fc;
-+    fc->func = fp;
-+    fc->rettv = rettv;
-     rettv->vval.v_number = 0;
--    fc.linenr = 0;
--    fc.returned = FALSE;
--    fc.level = ex_nesting_level;
-+    fc->linenr = 0;
-+    fc->returned = FALSE;
-+    fc->level = ex_nesting_level;
-     /* Check if this function has a breakpoint. */
--    fc.breakpoint = dbg_find_breakpoint(FALSE, fp->uf_name, (linenr_T)0);
--    fc.dbg_tick = debug_tick;
-+    fc->breakpoint = dbg_find_breakpoint(FALSE, fp->uf_name, (linenr_T)0);
-+    fc->dbg_tick = debug_tick;
- 
-     /*
--     * Note about using fc.fixvar[]: This is an array of FIXVAR_CNT variables
-+     * Note about using fc->fixvar[]: This is an array of FIXVAR_CNT variables
-      * with names up to VAR_SHORT_LEN long.  This avoids having to alloc/free
-      * each argument variable and saves a lot of time.
-      */
-     /*
-      * Init l: variables.
-      */
--    init_var_dict(&fc.l_vars, &fc.l_vars_var);
-+    init_var_dict(&fc->l_vars, &fc->l_vars_var);
-     if (selfdict != NULL)
-     {
- 	/* Set l:self to "selfdict".  Use "name" to avoid a warning from
- 	 * some compiler that checks the destination size. */
--	v = &fc.fixvar[fixvar_idx++].var;
-+	v = &fc->fixvar[fixvar_idx++].var;
- 	name = v->di_key;
- 	STRCPY(name, "self");
- 	v->di_flags = DI_FLAGS_RO + DI_FLAGS_FIX;
--	hash_add(&fc.l_vars.dv_hashtab, DI2HIKEY(v));
-+	hash_add(&fc->l_vars.dv_hashtab, DI2HIKEY(v));
- 	v->di_tv.v_type = VAR_DICT;
- 	v->di_tv.v_lock = 0;
- 	v->di_tv.vval.v_dict = selfdict;
-@@ -21079,28 +21112,31 @@
-      * Set a:0 to "argcount".
-      * Set a:000 to a list with room for the "..." arguments.
-      */
--    init_var_dict(&fc.l_avars, &fc.l_avars_var);
--    add_nr_var(&fc.l_avars, &fc.fixvar[fixvar_idx++].var, "0",
-+    init_var_dict(&fc->l_avars, &fc->l_avars_var);
-+    add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "0",
- 				(varnumber_T)(argcount - fp->uf_args.ga_len));
--    v = &fc.fixvar[fixvar_idx++].var;
--    STRCPY(v->di_key, "000");
-+    /* Use "name" to avoid a warning from some compiler that checks the
-+     * destination size. */
-+    v = &fc->fixvar[fixvar_idx++].var;
-+    name = v->di_key;
-+    STRCPY(name, "000");
-     v->di_flags = DI_FLAGS_RO | DI_FLAGS_FIX;
--    hash_add(&fc.l_avars.dv_hashtab, DI2HIKEY(v));
-+    hash_add(&fc->l_avars.dv_hashtab, DI2HIKEY(v));
-     v->di_tv.v_type = VAR_LIST;
-     v->di_tv.v_lock = VAR_FIXED;
--    v->di_tv.vval.v_list = &fc.l_varlist;
--    vim_memset(&fc.l_varlist, 0, sizeof(list_T));
--    fc.l_varlist.lv_refcount = 99999;
--    fc.l_varlist.lv_lock = VAR_FIXED;
-+    v->di_tv.vval.v_list = &fc->l_varlist;
-+    vim_memset(&fc->l_varlist, 0, sizeof(list_T));
-+    fc->l_varlist.lv_refcount = DO_NOT_FREE_CNT;
-+    fc->l_varlist.lv_lock = VAR_FIXED;
- 
-     /*
-      * Set a:firstline to "firstline" and a:lastline to "lastline".
-      * Set a:name to named arguments.
-      * Set a:N to the "..." arguments.
-      */
--    add_nr_var(&fc.l_avars, &fc.fixvar[fixvar_idx++].var, "firstline",
-+    add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "firstline",
- 						      (varnumber_T)firstline);
--    add_nr_var(&fc.l_avars, &fc.fixvar[fixvar_idx++].var, "lastline",
-+    add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "lastline",
- 						       (varnumber_T)lastline);
-     for (i = 0; i < argcount; ++i)
-     {
-@@ -21116,7 +21152,7 @@
- 	}
- 	if (fixvar_idx < FIXVAR_CNT && STRLEN(name) <= VAR_SHORT_LEN)
- 	{
--	    v = &fc.fixvar[fixvar_idx++].var;
-+	    v = &fc->fixvar[fixvar_idx++].var;
- 	    v->di_flags = DI_FLAGS_RO | DI_FLAGS_FIX;
- 	}
- 	else
-@@ -21128,7 +21164,7 @@
- 	    v->di_flags = DI_FLAGS_RO;
- 	}
- 	STRCPY(v->di_key, name);
--	hash_add(&fc.l_avars.dv_hashtab, DI2HIKEY(v));
-+	hash_add(&fc->l_avars.dv_hashtab, DI2HIKEY(v));
- 
- 	/* Note: the values are copied directly to avoid alloc/free.
- 	 * "argvars" must have VAR_FIXED for v_lock. */
-@@ -21137,9 +21173,9 @@
- 
- 	if (ai >= 0 && ai < MAX_FUNC_ARGS)
- 	{
--	    list_append(&fc.l_varlist, &fc.l_listitems[ai]);
--	    fc.l_listitems[ai].li_tv = argvars[i];
--	    fc.l_listitems[ai].li_tv.v_lock = VAR_FIXED;
-+	    list_append(&fc->l_varlist, &fc->l_listitems[ai]);
-+	    fc->l_listitems[ai].li_tv = argvars[i];
-+	    fc->l_listitems[ai].li_tv.v_lock = VAR_FIXED;
- 	}
-     }
- 
-@@ -21204,7 +21240,7 @@
- 	if (!fp->uf_profiling && has_profiling(FALSE, fp->uf_name, NULL))
- 	    func_do_profile(fp);
- 	if (fp->uf_profiling
--		       || (fc.caller != NULL && &fc.caller->func->uf_profiling))
-+		    || (fc->caller != NULL && fc->caller->func->uf_profiling))
- 	{
- 	    ++fp->uf_tm_count;
- 	    profile_start(&call_start);
-@@ -21220,7 +21256,7 @@
-     did_emsg = FALSE;
- 
-     /* call do_cmdline() to execute the lines */
--    do_cmdline(NULL, get_func_line, (void *)&fc,
-+    do_cmdline(NULL, get_func_line, (void *)fc,
- 				     DOCMD_NOWAIT|DOCMD_VERBOSE|DOCMD_REPEAT);
- 
-     --RedrawingDisabled;
-@@ -21235,16 +21271,16 @@
- 
- #ifdef FEAT_PROFILE
-     if (do_profiling == PROF_YES && (fp->uf_profiling
--		    || (fc.caller != NULL && &fc.caller->func->uf_profiling)))
-+		    || (fc->caller != NULL && fc->caller->func->uf_profiling)))
-     {
- 	profile_end(&call_start);
- 	profile_sub_wait(&wait_start, &call_start);
- 	profile_add(&fp->uf_tm_total, &call_start);
- 	profile_self(&fp->uf_tm_self, &call_start, &fp->uf_tm_children);
--	if (fc.caller != NULL && &fc.caller->func->uf_profiling)
-+	if (fc->caller != NULL && fc->caller->func->uf_profiling)
- 	{
--	    profile_add(&fc.caller->func->uf_tm_children, &call_start);
--	    profile_add(&fc.caller->func->uf_tml_children, &call_start);
-+	    profile_add(&fc->caller->func->uf_tm_children, &call_start);
-+	    profile_add(&fc->caller->func->uf_tml_children, &call_start);
- 	}
-     }
- #endif
-@@ -21257,9 +21293,9 @@
- 
- 	if (aborting())
- 	    smsg((char_u *)_("%s aborted"), sourcing_name);
--	else if (fc.rettv->v_type == VAR_NUMBER)
-+	else if (fc->rettv->v_type == VAR_NUMBER)
- 	    smsg((char_u *)_("%s returning #%ld"), sourcing_name,
--					       (long)fc.rettv->vval.v_number);
-+					       (long)fc->rettv->vval.v_number);
- 	else
- 	{
- 	    char_u	buf[MSG_BUF_LEN];
-@@ -21270,7 +21306,7 @@
- 	    /* 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);
-+	    s = tv2string(fc->rettv, &tofree, numbuf2, 0);
- 	    if (s != NULL)
- 	    {
- 		trunc_string(s, buf, MSG_BUF_CLEN);
-@@ -21306,14 +21342,84 @@
-     }
- 
-     did_emsg |= save_did_emsg;
--    current_funccal = fc.caller;
-+    current_funccal = fc->caller;
-+    --depth;
- 
--    /* The a: variables typevals were not allocated, only free the allocated
--     * variables. */
--    vars_clear_ext(&fc.l_avars.dv_hashtab, FALSE);
-+    /* If the a:000 list and the l: and a: dicts are not referenced we can
-+     * free the funccall_T and what's in it. */
-+    if (fc->l_varlist.lv_refcount == DO_NOT_FREE_CNT
-+	    && fc->l_vars.dv_refcount == DO_NOT_FREE_CNT
-+	    && fc->l_avars.dv_refcount == DO_NOT_FREE_CNT)
-+    {
-+	free_funccal(fc, FALSE);
-+    }
-+    else
-+    {
-+	hashitem_T	*hi;
-+	listitem_T	*li;
-+	int		todo;
- 
--    vars_clear(&fc.l_vars.dv_hashtab);		/* free all l: variables */
--    --depth;
-+	/* "fc" is still in use.  This can happen when returning "a:000" or
-+	 * assigning "l:" to a global variable.
-+	 * Link "fc" in the list for garbage collection later. */
-+	fc->caller = previous_funccal;
-+	previous_funccal = fc;
-+
-+	/* Make a copy of the a: variables, since we didn't do that above. */
-+	todo = (int)fc->l_avars.dv_hashtab.ht_used;
-+	for (hi = fc->l_avars.dv_hashtab.ht_array; todo > 0; ++hi)
-+	{
-+	    if (!HASHITEM_EMPTY(hi))
-+	    {
-+		--todo;
-+		v = HI2DI(hi);
-+		copy_tv(&v->di_tv, &v->di_tv);
-+	    }
-+	}
-+
-+	/* Make a copy of the a:000 items, since we didn't do that above. */
-+	for (li = fc->l_varlist.lv_first; li != NULL; li = li->li_next)
-+	    copy_tv(&li->li_tv, &li->li_tv);
-+    }
-+}
-+
-+/*
-+ * Return TRUE if items in "fc" do not have "copyID".  That means they are not
-+ * referenced from anywhere that is in use.
-+ */
-+    static int
-+can_free_funccal(fc, copyID)
-+    funccall_T	*fc;
-+    int		copyID;
-+{
-+    return (fc->l_varlist.lv_copyID != copyID
-+	    && fc->l_vars.dv_copyID != copyID
-+	    && fc->l_avars.dv_copyID != copyID);
-+}
-+
-+/*
-+ * Free "fc" and what it contains.
-+ */
-+   static void
-+free_funccal(fc, free_val)
-+    funccall_T	*fc;
-+    int		free_val;  /* a: vars were allocated */
-+{
-+    listitem_T	*li;
-+
-+    /* The a: variables typevals may not have been allocated, only free the
-+     * allocated variables. */
-+    vars_clear_ext(&fc->l_avars.dv_hashtab, free_val);
-+
-+    /* free all l: variables */
-+    vars_clear(&fc->l_vars.dv_hashtab);
-+
-+    /* Free the a:000 variables if they were allocated. */
-+    if (free_val)
-+	for (li = fc->l_varlist.lv_first; li != NULL; li = li->li_next)
-+	    clear_tv(&li->li_tv);
-+
-+    vim_free(fc);
- }
- 
- /*
-@@ -21512,12 +21618,11 @@
-  * Called by do_cmdline() to get the next line.
-  * Returns allocated string, or NULL for end of function.
-  */
--/* ARGSUSED */
-     char_u *
- get_func_line(c, cookie, indent)
--    int	    c;		    /* not used */
-+    int	    c UNUSED;
-     void    *cookie;
--    int	    indent;	    /* not used */
-+    int	    indent UNUSED;
- {
-     funccall_T	*fcp = (funccall_T *)cookie;
-     ufunc_T	*fp = fcp->func;
-@@ -21886,6 +21991,61 @@
-     }
- }
- 
-+/*
-+ * List v:oldfiles in a nice way.
-+ */
-+    void
-+ex_oldfiles(eap)
-+    exarg_T	*eap UNUSED;
-+{
-+    list_T	*l = vimvars[VV_OLDFILES].vv_list;
-+    listitem_T	*li;
-+    int		nr = 0;
-+
-+    if (l == NULL)
-+	msg((char_u *)_("No old files"));
-+    else
-+    {
-+	msg_start();
-+	msg_scroll = TRUE;
-+	for (li = l->lv_first; li != NULL && !got_int; li = li->li_next)
-+	{
-+	    msg_outnum((long)++nr);
-+	    MSG_PUTS(": ");
-+	    msg_outtrans(get_tv_string(&li->li_tv));
-+	    msg_putchar('\n');
-+	    out_flush();	    /* output one line at a time */
-+	    ui_breakcheck();
-+	}
-+	/* Assume "got_int" was set to truncate the listing. */
-+	got_int = FALSE;
-+
-+#ifdef FEAT_BROWSE_CMD
-+	if (cmdmod.browse)
-+	{
-+	    quit_more = FALSE;
-+	    nr = prompt_for_number(FALSE);
-+	    msg_starthere();
-+	    if (nr > 0)
-+	    {
-+		char_u *p = list_find_str(get_vim_var_list(VV_OLDFILES),
-+								    (long)nr);
-+
-+		if (p != NULL)
-+		{
-+		    p = expand_env_save(p);
-+		    eap->arg = p;
-+		    eap->cmdidx = CMD_edit;
-+		    cmdmod.browse = FALSE;
-+		    do_exedit(eap, NULL);
-+		    vim_free(p);
-+		}
-+	    }
-+	}
-+#endif
-+    }
-+}
-+
- #endif /* FEAT_EVAL */
- 
- 
-diff -Naur vim72.orig/src/ex_cmds2.c vim72/src/ex_cmds2.c
---- vim72.orig/src/ex_cmds2.c	2008-07-13 09:18:22.000000000 -0700
-+++ vim72/src/ex_cmds2.c	2009-09-12 08:38:46.000000000 -0700
-@@ -28,7 +28,8 @@
- {
-     char_u	*sn_name;
- # ifdef UNIX
--    int		sn_dev;
-+    int		sn_dev_valid;
-+    dev_t	sn_dev;
-     ino_t	sn_ino;
- # endif
- # ifdef FEAT_PROFILE
-@@ -2842,6 +2843,7 @@
-     linenr_T		    save_sourcing_lnum;
-     char_u		    *p;
-     char_u		    *fname_exp;
-+    char_u		    *firstline = NULL;
-     int			    retval = FAIL;
- #ifdef FEAT_EVAL
-     scid_T		    save_current_SID;
-@@ -2992,23 +2994,6 @@
- 
-     cookie.level = ex_nesting_level;
- #endif
--#ifdef FEAT_MBYTE
--    cookie.conv.vc_type = CONV_NONE;		/* no conversion */
--
--    /* Try reading the first few bytes to check for a UTF-8 BOM. */
--    {
--	char_u	    buf[3];
--
--	if (fread((char *)buf, sizeof(char_u), (size_t)3, cookie.fp)
--								  == (size_t)3
--		&& buf[0] == 0xef && buf[1] == 0xbb && buf[2] == 0xbf)
--	    /* Found BOM, setup conversion and skip over it. */
--	    convert_setup(&cookie.conv, (char_u *)"utf-8", p_enc);
--	else
--	    /* No BOM found, rewind. */
--	    fseek(cookie.fp, 0L, SEEK_SET);
--    }
--#endif
- 
-     /*
-      * Keep the sourcing name/lnum, for recursive calls.
-@@ -3018,6 +3003,27 @@
-     save_sourcing_lnum = sourcing_lnum;
-     sourcing_lnum = 0;
- 
-+#ifdef FEAT_MBYTE
-+    cookie.conv.vc_type = CONV_NONE;		/* no conversion */
-+
-+    /* Read the first line so we can check for a UTF-8 BOM. */
-+    firstline = getsourceline(0, (void *)&cookie, 0);
-+    if (firstline != NULL && STRLEN(firstline) >= 3 && firstline[0] == 0xef
-+			      && firstline[1] == 0xbb && firstline[2] == 0xbf)
-+    {
-+	/* Found BOM; setup conversion, skip over BOM and recode the line. */
-+	convert_setup(&cookie.conv, (char_u *)"utf-8", p_enc);
-+	p = string_convert(&cookie.conv, firstline + 3, NULL);
-+	if (p == NULL)
-+	    p = vim_strsave(firstline + 3);
-+	if (p != NULL)
-+	{
-+	    vim_free(firstline);
-+	    firstline = p;
-+	}
-+    }
-+#endif
-+
- #ifdef STARTUPTIME
-     time_push(&tv_rel, &tv_start);
- #endif
-@@ -3049,7 +3055,7 @@
- 		    /* Compare dev/ino when possible, it catches symbolic
- 		     * links.  Also compare file names, the inode may change
- 		     * when the file was edited. */
--		    ((stat_ok && si->sn_dev != -1)
-+		    ((stat_ok && si->sn_dev_valid)
- 			&& (si->sn_dev == st.st_dev
- 			    && si->sn_ino == st.st_ino)) ||
- # endif
-@@ -3076,11 +3082,12 @@
- # ifdef UNIX
- 	if (stat_ok)
- 	{
-+	    si->sn_dev_valid = TRUE;
- 	    si->sn_dev = st.st_dev;
- 	    si->sn_ino = st.st_ino;
- 	}
- 	else
--	    si->sn_dev = -1;
-+	    si->sn_dev_valid = FALSE;
- # endif
- 
- 	/* Allocate the local script variables to use for this script. */
-@@ -3111,9 +3118,8 @@
-     /*
-      * Call do_cmdline, which will call getsourceline() to get the lines.
-      */
--    do_cmdline(NULL, getsourceline, (void *)&cookie,
-+    do_cmdline(firstline, getsourceline, (void *)&cookie,
- 				     DOCMD_VERBOSE|DOCMD_NOWAIT|DOCMD_REPEAT);
--
-     retval = OK;
- 
- #ifdef FEAT_PROFILE
-@@ -3145,8 +3151,8 @@
- 	verbose_leave();
-     }
- #ifdef STARTUPTIME
--    vim_snprintf(IObuff, IOSIZE, "sourcing %s", fname);
--    time_msg(IObuff, &tv_start);
-+    vim_snprintf((char *)IObuff, IOSIZE, "sourcing %s", fname);
-+    time_msg((char *)IObuff, &tv_start);
-     time_pop(&tv_rel);
- #endif
- 
-@@ -3171,6 +3177,7 @@
- #endif
-     fclose(cookie.fp);
-     vim_free(cookie.nextline);
-+    vim_free(firstline);
- #ifdef FEAT_MBYTE
-     convert_setup(&cookie.conv, NULL, NULL);
- #endif
-@@ -3368,7 +3375,7 @@
- 	    p = skipwhite(sp->nextline);
- 	    if (*p != '\\')
- 		break;
--	    s = alloc((int)(STRLEN(line) + STRLEN(p)));
-+	    s = alloc((unsigned)(STRLEN(line) + STRLEN(p)));
- 	    if (s == NULL)	/* out of memory */
- 		break;
- 	    STRCPY(s, line);
-diff -Naur vim72.orig/src/ex_cmds.c vim72/src/ex_cmds.c
---- vim72.orig/src/ex_cmds.c	2008-08-04 12:15:00.000000000 -0700
-+++ vim72/src/ex_cmds.c	2009-09-12 08:41:03.000000000 -0700
-@@ -24,7 +24,7 @@
- static void do_filter __ARGS((linenr_T line1, linenr_T line2, exarg_T *eap, char_u *cmd, int do_in, int do_out));
- #ifdef FEAT_VIMINFO
- static char_u *viminfo_filename __ARGS((char_u	*));
--static void do_viminfo __ARGS((FILE *fp_in, FILE *fp_out, int want_info, int want_marks, int force_read));
-+static void do_viminfo __ARGS((FILE *fp_in, FILE *fp_out, int flags));
- static int viminfo_encoding __ARGS((vir_T *virp));
- static int read_viminfo_up_to_marks __ARGS((vir_T *virp, int forceit, int writing));
- #endif
-@@ -49,6 +49,7 @@
-     exarg_T	*eap;
- {
-     int		c;
-+    int		cval;
-     char	buf1[20];
-     char	buf2[20];
-     char_u	buf3[7];
-@@ -75,6 +76,10 @@
-     {
- 	if (c == NL)	    /* NUL is stored as NL */
- 	    c = NUL;
-+	if (c == CAR && get_fileformat(curbuf) == EOL_MAC)
-+	    cval = NL;	    /* NL is stored as CR */
-+	else
-+	    cval = c;
- 	if (vim_isprintc_strict(c) && (c < ' '
- #ifndef EBCDIC
- 		    || c > '~'
-@@ -82,19 +87,20 @@
- 			       ))
- 	{
- 	    transchar_nonprint(buf3, c);
--	    sprintf(buf1, "  <%s>", (char *)buf3);
-+	    vim_snprintf(buf1, sizeof(buf1), "  <%s>", (char *)buf3);
- 	}
- 	else
- 	    buf1[0] = NUL;
- #ifndef EBCDIC
- 	if (c >= 0x80)
--	    sprintf(buf2, "  <M-%s>", transchar(c & 0x7f));
-+	    vim_snprintf(buf2, sizeof(buf2), "  <M-%s>",
-+						 (char *)transchar(c & 0x7f));
- 	else
- #endif
- 	    buf2[0] = NUL;
- 	vim_snprintf((char *)IObuff, IOSIZE,
- 		_("<%s>%s%s  %d,  Hex %02x,  Octal %03o"),
--					   transchar(c), buf1, buf2, c, c, c);
-+				  transchar(c), buf1, buf2, cval, cval, cval);
- #ifdef FEAT_MBYTE
- 	if (enc_utf8)
- 	    c = cc[ci++];
-@@ -353,7 +359,7 @@
-     linenr_T	lnum;
-     long	maxlen = 0;
-     sorti_T	*nrs;
--    size_t	count = eap->line2 - eap->line1 + 1;
-+    size_t	count = (size_t)(eap->line2 - eap->line1 + 1);
-     size_t	i;
-     char_u	*p;
-     char_u	*s;
-@@ -952,7 +958,7 @@
- 	    }
- 	    len += (int)STRLEN(prevcmd);
- 	}
--	if ((t = alloc(len)) == NULL)
-+	if ((t = alloc((unsigned)len)) == NULL)
- 	{
- 	    vim_free(newcmd);
- 	    return;
-@@ -1543,7 +1549,7 @@
-      * redirecting input and/or output.
-      */
-     if (itmp != NULL || otmp != NULL)
--	sprintf((char *)buf, "(%s)", (char *)cmd);
-+	vim_snprintf((char *)buf, len, "(%s)", (char *)cmd);
-     else
- 	STRCPY(buf, cmd);
-     if (itmp != NULL)
-@@ -1592,37 +1598,41 @@
-     }
- #endif
-     if (otmp != NULL)
--	append_redir(buf, p_srr, otmp);
-+	append_redir(buf, (int)len, p_srr, otmp);
- 
-     return buf;
- }
- 
- /*
-- * Append output redirection for file "fname" to the end of string buffer "buf"
-+ * Append output redirection for file "fname" to the end of string buffer
-+ * "buf[buflen]"
-  * Works with the 'shellredir' and 'shellpipe' options.
-  * The caller should make sure that there is enough room:
-  *	STRLEN(opt) + STRLEN(fname) + 3
-  */
-     void
--append_redir(buf, opt, fname)
-+append_redir(buf, buflen, opt, fname)
-     char_u	*buf;
-+    int		buflen;
-     char_u	*opt;
-     char_u	*fname;
- {
-     char_u	*p;
-+    char_u	*end;
- 
--    buf += STRLEN(buf);
-+    end = buf + STRLEN(buf);
-     /* find "%s", skipping "%%" */
-     for (p = opt; (p = vim_strchr(p, '%')) != NULL; ++p)
- 	if (p[1] == 's')
- 	    break;
-     if (p != NULL)
-     {
--	*buf = ' '; /* not really needed? Not with sh, ksh or bash */
--	sprintf((char *)buf + 1, (char *)opt, (char *)fname);
-+	*end = ' '; /* not really needed? Not with sh, ksh or bash */
-+	vim_snprintf((char *)end + 1, (size_t)(buflen - (end + 1 - buf)),
-+						  (char *)opt, (char *)fname);
-     }
-     else
--	sprintf((char *)buf,
-+	vim_snprintf((char *)end, (size_t)(buflen - (end - buf)),
- #ifdef FEAT_QUICKFIX
- # ifndef RISCOS
- 		opt != p_sp ? " %s%s" :
-@@ -1676,14 +1686,12 @@
- 
- /*
-  * read_viminfo() -- Read the viminfo file.  Registers etc. which are already
-- * set are not over-written unless force is TRUE. -- webb
-+ * set are not over-written unless "flags" includes VIF_FORCEIT. -- webb
-  */
-     int
--read_viminfo(file, want_info, want_marks, forceit)
--    char_u	*file;
--    int		want_info;
--    int		want_marks;
--    int		forceit;
-+read_viminfo(file, flags)
-+    char_u	*file;	    /* file name or NULL to use default name */
-+    int		flags;	    /* VIF_WANT_INFO et al. */
- {
-     FILE	*fp;
-     char_u	*fname;
-@@ -1691,7 +1699,7 @@
-     if (no_viminfo())
- 	return FAIL;
- 
--    fname = viminfo_filename(file);	    /* may set to default if NULL */
-+    fname = viminfo_filename(file);	/* get file name in allocated buffer */
-     if (fname == NULL)
- 	return FAIL;
-     fp = mch_fopen((char *)fname, READBIN);
-@@ -1701,8 +1709,9 @@
- 	verbose_enter();
- 	smsg((char_u *)_("Reading viminfo file \"%s\"%s%s%s"),
- 		fname,
--		want_info ? _(" info") : "",
--		want_marks ? _(" marks") : "",
-+		(flags & VIF_WANT_INFO) ? _(" info") : "",
-+		(flags & VIF_WANT_MARKS) ? _(" marks") : "",
-+		(flags & VIF_GET_OLDFILES) ? _(" oldfiles") : "",
- 		fp == NULL ? _(" FAILED") : "");
- 	verbose_leave();
-     }
-@@ -1712,10 +1721,9 @@
- 	return FAIL;
- 
-     viminfo_errcnt = 0;
--    do_viminfo(fp, NULL, want_info, want_marks, forceit);
-+    do_viminfo(fp, NULL, flags);
- 
-     fclose(fp);
--
-     return OK;
- }
- 
-@@ -1786,7 +1794,7 @@
- 	 * overwrite a user's viminfo file after a "su root", with a
- 	 * viminfo file that the user can't read.
- 	 */
--	st_old.st_dev = 0;
-+	st_old.st_dev = (dev_t)0;
- 	st_old.st_ino = 0;
- 	st_old.st_mode = 0600;
- 	if (mch_stat((char *)fname, &st_old) == 0
-@@ -1943,7 +1951,7 @@
- 	     * root.
- 	     */
- 	    if (fp_out != NULL)
--		(void)fchown(fileno(fp_out), st_old.st_uid, st_old.st_gid);
-+		ignored = fchown(fileno(fp_out), st_old.st_uid, st_old.st_gid);
- #endif
- 	}
-     }
-@@ -1968,7 +1976,7 @@
-     }
- 
-     viminfo_errcnt = 0;
--    do_viminfo(fp_in, fp_out, !forceit, !forceit, FALSE);
-+    do_viminfo(fp_in, fp_out, forceit ? 0 : (VIF_WANT_INFO | VIF_WANT_MARKS));
- 
-     fclose(fp_out);	    /* errors are ignored !? */
-     if (fp_in != NULL)
-@@ -2041,12 +2049,10 @@
-  * do_viminfo() -- Should only be called from read_viminfo() & write_viminfo().
-  */
-     static void
--do_viminfo(fp_in, fp_out, want_info, want_marks, force_read)
-+do_viminfo(fp_in, fp_out, flags)
-     FILE	*fp_in;
-     FILE	*fp_out;
--    int		want_info;
--    int		want_marks;
--    int		force_read;
-+    int		flags;
- {
-     int		count = 0;
-     int		eof = FALSE;
-@@ -2061,8 +2067,9 @@
- 
-     if (fp_in != NULL)
-     {
--	if (want_info)
--	    eof = read_viminfo_up_to_marks(&vir, force_read, fp_out != NULL);
-+	if (flags & VIF_WANT_INFO)
-+	    eof = read_viminfo_up_to_marks(&vir,
-+					 flags & VIF_FORCEIT, fp_out != NULL);
- 	else
- 	    /* Skip info, find start of marks */
- 	    while (!(eof = viminfo_readline(&vir))
-@@ -2092,8 +2099,9 @@
- 	write_viminfo_bufferlist(fp_out);
- 	count = write_viminfo_marks(fp_out);
-     }
--    if (fp_in != NULL && want_marks)
--	copy_viminfo_marks(&vir, fp_out, count, eof);
-+    if (fp_in != NULL
-+	    && (flags & (VIF_WANT_MARKS | VIF_GET_OLDFILES | VIF_FORCEIT)))
-+	copy_viminfo_marks(&vir, fp_out, count, eof, flags);
- 
-     vim_free(vir.vir_line);
- #ifdef FEAT_MBYTE
-@@ -2248,12 +2256,11 @@
-  *
-  * Return the string in allocated memory (NULL when out of memory).
-  */
--/*ARGSUSED*/
-     char_u *
- viminfo_readstring(virp, off, convert)
-     vir_T	*virp;
-     int		off;		    /* offset for virp->vir_line */
--    int		convert;	    /* convert the string */
-+    int		convert UNUSED;	    /* convert the string */
- {
-     char_u	*retval;
-     char_u	*s, *d;
-@@ -2387,7 +2394,8 @@
- 
-     if (curwin->w_p_nu || use_number)
-     {
--	sprintf((char *)numbuf, "%*ld ", number_width(curwin), (long)lnum);
-+	vim_snprintf((char *)numbuf, sizeof(numbuf),
-+				   "%*ld ", number_width(curwin), (long)lnum);
- 	msg_puts_attr(numbuf, hl_attr(HLF_N));	/* Highlight line nrs */
-     }
-     msg_prt_line(ml_get(lnum), list);
-@@ -2414,8 +2422,8 @@
- 	cursor_on();		/* msg_start() switches it off */
- 	out_flush();
- 	silent_mode = save_silent;
--	info_message = FALSE;
-     }
-+    info_message = FALSE;
- }
- 
- /*
-@@ -2704,7 +2712,12 @@
- 	if (eap->cmdidx == CMD_saveas)
- 	{
- 	    if (retval == OK)
-+	    {
- 		curbuf->b_p_ro = FALSE;
-+#ifdef FEAT_WINDOWS
-+		redraw_tabline = TRUE;
-+#endif
-+	    }
- 	    /* Change directories when the 'acd' option is set. */
- 	    DO_AUTOCHDIR
- 	}
-@@ -2724,7 +2737,6 @@
-  * May set eap->forceit if a dialog says it's OK to overwrite.
-  * Return OK if it's OK, FAIL if it is not.
-  */
--/*ARGSUSED*/
-     static int
- check_overwrite(eap, buf, fname, ffname, other)
-     exarg_T	*eap;
-@@ -3701,7 +3713,7 @@
-     /* If the window options were changed may need to set the spell language.
-      * Can only do this after the buffer has been properly setup. */
-     if (did_get_winopts && curwin->w_p_spell && *curbuf->b_p_spl != NUL)
--	did_set_spelllang(curbuf);
-+	(void)did_set_spelllang(curbuf);
- #endif
- 
-     if (command == NULL)
-@@ -3774,7 +3786,7 @@
- 
- #ifdef FEAT_KEYMAP
-     if (curbuf->b_kmap_state & KEYMAP_INIT)
--	keymap_init();
-+	(void)keymap_init();
- #endif
- 
-     --RedrawingDisabled;
-@@ -3997,6 +4009,9 @@
- 	    break;
- 	ml_delete(eap->line1, FALSE);
-     }
-+
-+    /* make sure the cursor is not beyond the end of the file now */
-+    check_cursor_lnum();
-     deleted_lines_mark(eap->line1, (long)(eap->line2 - lnum));
- 
-     /* ":append" on the line above the deleted lines. */
-@@ -4022,8 +4037,10 @@
- 	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;
- 
-@@ -4472,7 +4489,7 @@
- 	    char_u	*p1;
- 	    int		did_sub = FALSE;
- 	    int		lastone;
--	    unsigned	len, needed_len;
-+	    int		len, copy_len, needed_len;
- 	    long	nmatch_tl = 0;	/* nr of lines matched below lnum */
- 	    int		do_again;	/* do it again after joining lines */
- 	    int		skip_match = FALSE;
-@@ -4617,6 +4634,8 @@
- 
- 		if (do_ask)
- 		{
-+		    int typed = 0;
-+
- 		    /* change State to CONFIRM, so that the mouse works
- 		     * properly */
- 		    save_State = State;
-@@ -4655,7 +4674,7 @@
- 			    resp = getexmodeline('?', NULL, 0);
- 			    if (resp != NULL)
- 			    {
--				i = *resp;
-+				typed = *resp;
- 				vim_free(resp);
- 			    }
- 			}
-@@ -4707,7 +4726,7 @@
- #endif
- 			    ++no_mapping;	/* don't map this key */
- 			    ++allow_keys;	/* allow special keys */
--			    i = plain_vgetc();
-+			    typed = plain_vgetc();
- 			    --allow_keys;
- 			    --no_mapping;
- 
-@@ -4718,35 +4737,35 @@
- 			}
- 
- 			need_wait_return = FALSE; /* no hit-return prompt */
--			if (i == 'q' || i == ESC || i == Ctrl_C
-+			if (typed == 'q' || typed == ESC || typed == Ctrl_C
- #ifdef UNIX
--				|| i == intr_char
-+				|| typed == intr_char
- #endif
- 				)
- 			{
- 			    got_quit = TRUE;
- 			    break;
- 			}
--			if (i == 'n')
-+			if (typed == 'n')
- 			    break;
--			if (i == 'y')
-+			if (typed == 'y')
- 			    break;
--			if (i == 'l')
-+			if (typed == 'l')
- 			{
- 			    /* last: replace and then stop */
- 			    do_all = FALSE;
- 			    line2 = lnum;
- 			    break;
- 			}
--			if (i == 'a')
-+			if (typed == 'a')
- 			{
- 			    do_ask = FALSE;
- 			    break;
- 			}
- #ifdef FEAT_INS_EXPAND
--			if (i == Ctrl_E)
-+			if (typed == Ctrl_E)
- 			    scrollup_clamp();
--			else if (i == Ctrl_Y)
-+			else if (typed == Ctrl_Y)
- 			    scrolldown_clamp();
- #endif
- 		    }
-@@ -4757,7 +4776,7 @@
- 		    if (vim_strchr(p_cpo, CPO_UNDO) != NULL)
- 			--no_u_sync;
- 
--		    if (i == 'n')
-+		    if (typed == 'n')
- 		    {
- 			/* For a multi-line match, put matchcol at the NUL at
- 			 * the end of the line and set nmatch to one, so that
-@@ -4808,9 +4827,9 @@
- 		    p1 = ml_get(sub_firstlnum + nmatch - 1);
- 		    nmatch_tl += nmatch - 1;
- 		}
--		i = regmatch.startpos[0].col - copycol;
--		needed_len = i + ((unsigned)STRLEN(p1) - regmatch.endpos[0].col)
--								 + sublen + 1;
-+		copy_len = regmatch.startpos[0].col - copycol;
-+		needed_len = copy_len + ((unsigned)STRLEN(p1)
-+				       - regmatch.endpos[0].col) + sublen + 1;
- 		if (new_start == NULL)
- 		{
- 		    /*
-@@ -4833,7 +4852,7 @@
- 		     */
- 		    len = (unsigned)STRLEN(new_start);
- 		    needed_len += len;
--		    if (needed_len > new_start_len)
-+		    if (needed_len > (int)new_start_len)
- 		    {
- 			new_start_len = needed_len + 50;
- 			if ((p1 = alloc_check(new_start_len)) == NULL)
-@@ -4851,8 +4870,8 @@
- 		/*
- 		 * copy the text up to the part that matched
- 		 */
--		mch_memmove(new_end, sub_firstline + copycol, (size_t)i);
--		new_end += i;
-+		mch_memmove(new_end, sub_firstline + copycol, (size_t)copy_len);
-+		new_end += copy_len;
- 
- 		(void)vim_regsub_multi(&regmatch,
- 				    sub_firstlnum - regmatch.startpos[0].lnum,
-@@ -5059,6 +5078,7 @@
- 
- 	    if (did_sub)
- 		++sub_nlines;
-+	    vim_free(new_start);	/* for when substitute was cancelled */
- 	    vim_free(sub_firstline);	/* free the copy of the original line */
- 	    sub_firstline = NULL;
- 	}
-@@ -5769,7 +5789,7 @@
-      * Recognize a few exceptions to the rule.	Some strings that contain '*'
-      * with "star".  Otherwise '*' is recognized as a wildcard.
-      */
--    for (i = sizeof(mtable) / sizeof(char *); --i >= 0; )
-+    for (i = (int)(sizeof(mtable) / sizeof(char *)); --i >= 0; )
- 	if (STRCMP(arg, mtable[i]) == 0)
- 	{
- 	    STRCPY(d, rtable[i]);
-@@ -6519,22 +6539,11 @@
- static sign_T	*first_sign = NULL;
- static int	last_sign_typenr = MAX_TYPENR;	/* is decremented */
- 
-+static int sign_cmd_idx __ARGS((char_u *begin_cmd, char_u *end_cmd));
- static void sign_list_defined __ARGS((sign_T *sp));
-+static void sign_undefine __ARGS((sign_T *sp, sign_T *sp_prev));
- 
--/*
-- * ":sign" command
-- */
--    void
--ex_sign(eap)
--    exarg_T	*eap;
--{
--    char_u	*arg = eap->arg;
--    char_u	*p;
--    int		idx;
--    sign_T	*sp;
--    sign_T	*sp_prev;
--    buf_T	*buf;
--    static char	*cmds[] = {
-+static char *cmds[] = {
- 			"define",
- #define SIGNCMD_DEFINE	0
- 			"undefine",
-@@ -6547,22 +6556,51 @@
- #define SIGNCMD_UNPLACE	4
- 			"jump",
- #define SIGNCMD_JUMP	5
-+			NULL
- #define SIGNCMD_LAST	6
--    };
-+};
-+
-+/*
-+ * Find index of a ":sign" subcmd from its name.
-+ * "*end_cmd" must be writable.
-+ */
-+    static int
-+sign_cmd_idx(begin_cmd, end_cmd)
-+    char_u	*begin_cmd;	/* begin of sign subcmd */
-+    char_u	*end_cmd;	/* just after sign subcmd */
-+{
-+    int		idx;
-+    char	save = *end_cmd;
-+
-+    *end_cmd = NUL;
-+    for (idx = 0; ; ++idx)
-+	if (cmds[idx] == NULL || STRCMP(begin_cmd, cmds[idx]) == 0)
-+	    break;
-+    *end_cmd = save;
-+    return idx;
-+}
-+
-+/*
-+ * ":sign" command
-+ */
-+    void
-+ex_sign(eap)
-+    exarg_T	*eap;
-+{
-+    char_u	*arg = eap->arg;
-+    char_u	*p;
-+    int		idx;
-+    sign_T	*sp;
-+    sign_T	*sp_prev;
-+    buf_T	*buf;
- 
-     /* Parse the subcommand. */
-     p = skiptowhite(arg);
--    if (*p != NUL)
--	*p++ = NUL;
--    for (idx = 0; ; ++idx)
-+    idx = sign_cmd_idx(arg, p);
-+    if (idx == SIGNCMD_LAST)
-     {
--	if (idx == SIGNCMD_LAST)
--	{
--	    EMSG2(_("E160: Unknown sign command: %s"), arg);
--	    return;
--	}
--	if (STRCMP(arg, cmds[idx]) == 0)
--	    break;
-+	EMSG2(_("E160: Unknown sign command: %s"), arg);
-+	return;
-     }
-     arg = skipwhite(p);
- 
-@@ -6728,24 +6766,8 @@
- 		/* ":sign list {name}" */
- 		sign_list_defined(sp);
- 	    else
--	    {
- 		/* ":sign undefine {name}" */
--		vim_free(sp->sn_name);
--		vim_free(sp->sn_icon);
--#ifdef FEAT_SIGN_ICONS
--		if (sp->sn_image != NULL)
--		{
--		    out_flush();
--		    gui_mch_destroy_sign(sp->sn_image);
--		}
--#endif
--		vim_free(sp->sn_text);
--		if (sp_prev == NULL)
--		    first_sign = sp->sn_next;
--		else
--		    sp_prev->sn_next = sp->sn_next;
--		vim_free(sp);
--	    }
-+		sign_undefine(sp, sp_prev);
- 	}
-     }
-     else
-@@ -6994,6 +7016,31 @@
- }
- 
- /*
-+ * Undefine a sign and free its memory.
-+ */
-+    static void
-+sign_undefine(sp, sp_prev)
-+    sign_T	*sp;
-+    sign_T	*sp_prev;
-+{
-+    vim_free(sp->sn_name);
-+    vim_free(sp->sn_icon);
-+#ifdef FEAT_SIGN_ICONS
-+    if (sp->sn_image != NULL)
-+    {
-+	out_flush();
-+	gui_mch_destroy_sign(sp->sn_image);
-+    }
-+#endif
-+    vim_free(sp->sn_text);
-+    if (sp_prev == NULL)
-+	first_sign = sp->sn_next;
-+    else
-+	sp_prev->sn_next = sp->sn_next;
-+    vim_free(sp);
-+}
-+
-+/*
-  * Get highlighting attribute for sign "typenr".
-  * If "line" is TRUE: line highl, if FALSE: text highl.
-  */
-@@ -7067,6 +7114,198 @@
-     return (char_u *)_("[Deleted]");
- }
- 
-+#if defined(EXITFREE) || defined(PROTO)
-+/*
-+ * Undefine/free all signs.
-+ */
-+    void
-+free_signs()
-+{
-+    while (first_sign != NULL)
-+	sign_undefine(first_sign, NULL);
-+}
-+#endif
-+
-+#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
-+static enum
-+{
-+    EXP_SUBCMD,		/* expand :sign sub-commands */
-+    EXP_DEFINE,		/* expand :sign define {name} args */
-+    EXP_PLACE,		/* expand :sign place {id} args */
-+    EXP_UNPLACE,	/* expand :sign unplace" */
-+    EXP_SIGN_NAMES	/* expand with name of placed signs */
-+} expand_what;
-+
-+/*
-+ * Function given to ExpandGeneric() to obtain the sign command
-+ * expansion.
-+ */
-+/*ARGSUSED*/
-+    char_u *
-+get_sign_name(xp, idx)
-+    expand_T	*xp;
-+    int		idx;
-+{
-+    sign_T	*sp;
-+    int		current_idx;
-+
-+    switch (expand_what)
-+    {
-+    case EXP_SUBCMD:
-+	return (char_u *)cmds[idx];
-+    case EXP_DEFINE:
-+	{
-+	    char *define_arg[] =
-+	    {
-+		"icon=", "linehl=", "text=", "texthl=", NULL
-+	    };
-+	    return (char_u *)define_arg[idx];
-+	}
-+    case EXP_PLACE:
-+	{
-+	    char *place_arg[] =
-+	    {
-+		"line=", "name=", "file=", "buffer=", NULL
-+	    };
-+	    return (char_u *)place_arg[idx];
-+	}
-+    case EXP_UNPLACE:
-+	{
-+	    char *unplace_arg[] = { "file=", "buffer=", NULL };
-+	    return (char_u *)unplace_arg[idx];
-+	}
-+    case EXP_SIGN_NAMES:
-+	/* Complete with name of signs already defined */
-+	current_idx = 0;
-+	for (sp = first_sign; sp != NULL; sp = sp->sn_next)
-+	    if (current_idx++ == idx)
-+		return sp->sn_name;
-+	return NULL;
-+    default:
-+	return NULL;
-+    }
-+}
-+
-+/*
-+ * Handle command line completion for :sign command.
-+ */
-+    void
-+set_context_in_sign_cmd(xp, arg)
-+    expand_T	*xp;
-+    char_u	*arg;
-+{
-+    char_u	*p;
-+    char_u	*end_subcmd;
-+    char_u	*last;
-+    int		cmd_idx;
-+    char_u	*begin_subcmd_args;
-+
-+    /* Default: expand subcommands. */
-+    xp->xp_context = EXPAND_SIGN;
-+    expand_what = EXP_SUBCMD;
-+    xp->xp_pattern = arg;
-+
-+    end_subcmd = skiptowhite(arg);
-+    if (*end_subcmd == NUL)
-+	/* expand subcmd name
-+	 * :sign {subcmd}<CTRL-D>*/
-+	return;
-+
-+    cmd_idx = sign_cmd_idx(arg, end_subcmd);
-+
-+    /* :sign {subcmd} {subcmd_args}
-+     *                |
-+     *                begin_subcmd_args */
-+    begin_subcmd_args = skipwhite(end_subcmd);
-+    p = skiptowhite(begin_subcmd_args);
-+    if (*p == NUL)
-+    {
-+	/*
-+	 * Expand first argument of subcmd when possible.
-+	 * For ":jump {id}" and ":unplace {id}", we could
-+	 * possibly expand the ids of all signs already placed.
-+	 */
-+	xp->xp_pattern = begin_subcmd_args;
-+	switch (cmd_idx)
-+	{
-+	    case SIGNCMD_LIST:
-+	    case SIGNCMD_UNDEFINE:
-+		/* :sign list <CTRL-D>
-+		 * :sign undefine <CTRL-D> */
-+		expand_what = EXP_SIGN_NAMES;
-+		break;
-+	    default:
-+		xp->xp_context = EXPAND_NOTHING;
-+	}
-+	return;
-+    }
-+
-+    /* expand last argument of subcmd */
-+
-+    /* :sign define {name} {args}...
-+     *              |
-+     *              p */
-+
-+    /* Loop until reaching last argument. */
-+    do
-+    {
-+	p = skipwhite(p);
-+	last = p;
-+	p = skiptowhite(p);
-+    } while (*p != NUL);
-+
-+    p = vim_strchr(last, '=');
-+
-+    /* :sign define {name} {args}... {last}=
-+     *                               |     |
-+     *                            last     p */
-+    if (p == NUL)
-+    {
-+	/* Expand last argument name (before equal sign). */
-+	xp->xp_pattern = last;
-+	switch (cmd_idx)
-+	{
-+	    case SIGNCMD_DEFINE:
-+		expand_what = EXP_DEFINE;
-+		break;
-+	    case SIGNCMD_PLACE:
-+		expand_what = EXP_PLACE;
-+		break;
-+	    case SIGNCMD_JUMP:
-+	    case SIGNCMD_UNPLACE:
-+		expand_what = EXP_UNPLACE;
-+		break;
-+	    default:
-+		xp->xp_context = EXPAND_NOTHING;
-+	}
-+    }
-+    else
-+    {
-+	/* Expand last argument value (after equal sign). */
-+	xp->xp_pattern = p + 1;
-+	switch (cmd_idx)
-+	{
-+	    case SIGNCMD_DEFINE:
-+		if (STRNCMP(last, "texthl", p - last) == 0 ||
-+		    STRNCMP(last, "linehl", p - last) == 0)
-+		    xp->xp_context = EXPAND_HIGHLIGHT;
-+		else if (STRNCMP(last, "icon", p - last) == 0)
-+		    xp->xp_context = EXPAND_FILES;
-+		else
-+		    xp->xp_context = EXPAND_NOTHING;
-+		break;
-+	    case SIGNCMD_PLACE:
-+		if (STRNCMP(last, "name", p - last) == 0)
-+		    expand_what = EXP_SIGN_NAMES;
-+		else
-+		    xp->xp_context = EXPAND_NOTHING;
-+		break;
-+	    default:
-+		xp->xp_context = EXPAND_NOTHING;
-+	}
-+    }
-+}
-+#endif
- #endif
- 
- #if defined(FEAT_GUI) || defined(FEAT_CLIENTSERVER) || defined(PROTO)
-diff -Naur vim72.orig/src/ex_cmds.h vim72/src/ex_cmds.h
---- vim72.orig/src/ex_cmds.h	2008-06-21 11:47:57.000000000 -0700
-+++ vim72/src/ex_cmds.h	2009-09-12 08:40:55.000000000 -0700
-@@ -278,7 +278,7 @@
- EX(CMD_crewind,		"crewind",	ex_cc,
- 			RANGE|NOTADR|COUNT|TRLBAR|BANG),
- EX(CMD_cscope,		"cscope",	do_cscope,
--			EXTRA|NOTRLCOM|SBOXOK|XFILE),
-+			EXTRA|NOTRLCOM|XFILE),
- EX(CMD_cstag,		"cstag",	do_cstag,
- 			BANG|TRLBAR|WORD1),
- EX(CMD_cunmap,		"cunmap",	ex_unmap,
-@@ -506,7 +506,7 @@
- EX(CMD_lclose,		"lclose",	ex_cclose,
- 			RANGE|NOTADR|COUNT|TRLBAR),
- EX(CMD_lcscope,		"lcscope",	do_cscope,
--			EXTRA|NOTRLCOM|SBOXOK|XFILE),
-+			EXTRA|NOTRLCOM|XFILE),
- EX(CMD_left,		"left",		ex_align,
- 			TRLBAR|RANGE|WHOLEFOLD|EXTRA|CMDWIN|MODIFY),
- EX(CMD_leftabove,	"leftabove",	ex_wrongmodifier,
-@@ -635,6 +635,8 @@
- 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
- EX(CMD_noremap,		"noremap",	ex_map,
- 			BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
-+EX(CMD_noautocmd,	"noautocmd",	ex_wrongmodifier,
-+			NEEDARG|EXTRA|NOTRLCOM),
- EX(CMD_nohlsearch,	"nohlsearch",	ex_nohlsearch,
- 			TRLBAR|SBOXOK|CMDWIN),
- EX(CMD_noreabbrev,	"noreabbrev",	ex_abbreviate,
-@@ -651,6 +653,8 @@
- 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
- EX(CMD_open,		"open",		ex_open,
- 			RANGE|EXTRA),
-+EX(CMD_oldfiles,	"oldfiles",	ex_oldfiles,
-+			BANG|TRLBAR|SBOXOK|CMDWIN),
- EX(CMD_omap,		"omap",		ex_map,
- 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
- EX(CMD_omapclear,	"omapclear",	ex_mapclear,
-@@ -802,7 +806,7 @@
- EX(CMD_scriptencoding,	"scriptencoding", ex_scriptencoding,
- 			WORD1|TRLBAR|CMDWIN),
- EX(CMD_scscope,		"scscope",	do_scscope,
--			EXTRA|NOTRLCOM|SBOXOK),
-+			EXTRA|NOTRLCOM),
- EX(CMD_set,		"set",		ex_set,
- 			TRLBAR|EXTRA|CMDWIN|SBOXOK),
- EX(CMD_setfiletype,	"setfiletype",	ex_setfiletype,
-@@ -987,6 +991,8 @@
- 			BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
- EX(CMD_unmenu,		"unmenu",	ex_menu,
- 			BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
-+EX(CMD_unsilent,	"unsilent",	ex_wrongmodifier,
-+			NEEDARG|EXTRA|NOTRLCOM|SBOXOK|CMDWIN),
- EX(CMD_update,		"update",	ex_update,
- 			RANGE|WHOLEFOLD|BANG|FILE1|ARGOPT|DFLALL|TRLBAR),
- EX(CMD_vglobal,		"vglobal",	ex_global,
-diff -Naur vim72.orig/src/ex_docmd.c vim72/src/ex_docmd.c
---- vim72.orig/src/ex_docmd.c	2008-07-26 04:51:05.000000000 -0700
-+++ vim72/src/ex_docmd.c	2009-09-12 08:41:05.000000000 -0700
-@@ -364,6 +364,7 @@
- # define ex_function		ex_ni
- # define ex_delfunction		ex_ni
- # define ex_return		ex_ni
-+# define ex_oldfiles		ex_ni
- #endif
- static char_u	*arg_all __ARGS((void));
- #ifdef FEAT_SESSION
-@@ -1577,11 +1578,10 @@
-  * If "fgetline" is get_loop_line(), return TRUE if the getline it uses equals
-  * "func".  * Otherwise return TRUE when "fgetline" equals "func".
-  */
--/*ARGSUSED*/
-     int
- getline_equal(fgetline, cookie, func)
-     char_u	*(*fgetline) __ARGS((int, void *, int));
--    void	*cookie;		/* argument for fgetline() */
-+    void	*cookie UNUSED;		/* argument for fgetline() */
-     char_u	*(*func) __ARGS((int, void *, int));
- {
- #ifdef FEAT_EVAL
-@@ -1609,10 +1609,9 @@
-  * If "fgetline" is get_loop_line(), return the cookie used by the original
-  * getline function.  Otherwise return "cookie".
-  */
--/*ARGSUSED*/
-     void *
- getline_cookie(fgetline, cookie)
--    char_u	*(*fgetline) __ARGS((int, void *, int));
-+    char_u	*(*fgetline) __ARGS((int, void *, int)) UNUSED;
-     void	*cookie;		/* argument for fgetline() */
- {
- # ifdef FEAT_EVAL
-@@ -1678,8 +1677,8 @@
-     char_u		*errormsg = NULL;	/* error message */
-     exarg_T		ea;			/* Ex command arguments */
-     long		verbose_save = -1;
--    int			save_msg_scroll = 0;
--    int			did_silent = 0;
-+    int			save_msg_scroll = msg_scroll;
-+    int			save_msg_silent = -1;
-     int			did_esilent = 0;
- #ifdef HAVE_SANDBOX
-     int			did_sandbox = FALSE;
-@@ -1770,7 +1769,7 @@
- 			}
- 			if (checkforcmd(&ea.cmd, "browse", 3))
- 			{
--#ifdef FEAT_BROWSE
-+#ifdef FEAT_BROWSE_CMD
- 			    cmdmod.browse = TRUE;
- #endif
- 			    continue;
-@@ -1857,9 +1856,9 @@
- 			}
- 			if (!checkforcmd(&ea.cmd, "silent", 3))
- 			    break;
--			++did_silent;
-+			if (save_msg_silent == -1)
-+			    save_msg_silent = msg_silent;
- 			++msg_silent;
--			save_msg_scroll = msg_scroll;
- 			if (*ea.cmd == '!' && !vim_iswhite(ea.cmd[-1]))
- 			{
- 			    /* ":silent!", but not "silent !cmd" */
-@@ -1887,6 +1886,13 @@
- #endif
- 			continue;
- 
-+	    case 'u':	if (!checkforcmd(&ea.cmd, "unsilent", 3))
-+			    break;
-+			if (save_msg_silent == -1)
-+			    save_msg_silent = msg_silent;
-+			msg_silent = 0;
-+			continue;
-+
- 	    case 'v':	if (checkforcmd(&ea.cmd, "vertical", 4))
- 			{
- #ifdef FEAT_VERTSPLIT
-@@ -2685,19 +2691,23 @@
- 
-     cmdmod = save_cmdmod;
- 
--    if (did_silent > 0)
-+    if (save_msg_silent != -1)
-     {
- 	/* messages could be enabled for a serious error, need to check if the
- 	 * counters don't become negative */
--	msg_silent -= did_silent;
--	if (msg_silent < 0)
--	    msg_silent = 0;
-+	if (!did_emsg)
-+	    msg_silent = save_msg_silent;
- 	emsg_silent -= did_esilent;
- 	if (emsg_silent < 0)
- 	    emsg_silent = 0;
- 	/* Restore msg_scroll, it's set by file I/O commands, even when no
- 	 * message is actually displayed. */
- 	msg_scroll = save_msg_scroll;
-+
-+	/* "silent reg" or "silent echo x" inside "redir" leaves msg_col
-+	 * somewhere in the line.  Put it back in the first column. */
-+	if (redirecting())
-+	    msg_col = 0;
-     }
- 
- #ifdef HAVE_SANDBOX
-@@ -2731,7 +2741,7 @@
-     int		i;
- 
-     for (i = 0; cmd[i] != NUL; ++i)
--	if (cmd[i] != (*pp)[i])
-+	if (((char_u *)cmd)[i] != (*pp)[i])
- 	    break;
-     if (i >= len && !isalpha((*pp)[i]))
-     {
-@@ -2748,11 +2758,10 @@
-  * "full" is set to TRUE if the whole command name matched.
-  * Returns NULL for an ambiguous user command.
-  */
--/*ARGSUSED*/
-     static char_u *
- find_command(eap, full)
-     exarg_T	*eap;
--    int		*full;
-+    int		*full UNUSED;
- {
-     int		len;
-     char_u	*p;
-@@ -2797,7 +2806,7 @@
- 	    /* Check for ":dl", ":dell", etc. to ":deletel": that's
- 	     * :delete with the 'l' flag.  Same for 'p'. */
- 	    for (i = 0; i < len; ++i)
--		if (eap->cmd[i] != "delete"[i])
-+		if (eap->cmd[i] != ((char_u *)"delete")[i])
- 		    break;
- 	    if (i == len - 1)
- 	    {
-@@ -2978,11 +2987,13 @@
-     {"keepmarks", 3, FALSE},
-     {"leftabove", 5, FALSE},
-     {"lockmarks", 3, FALSE},
-+    {"noautocmd", 3, FALSE},
-     {"rightbelow", 6, FALSE},
-     {"sandbox", 3, FALSE},
-     {"silent", 3, FALSE},
-     {"tab", 3, TRUE},
-     {"topleft", 2, FALSE},
-+    {"unsilent", 3, FALSE},
-     {"verbose", 4, TRUE},
-     {"vertical", 4, FALSE},
- };
-@@ -3000,7 +3011,7 @@
- 
-     if (VIM_ISDIGIT(*cmd))
- 	p = skipwhite(skipdigits(cmd));
--    for (i = 0; i < sizeof(cmdmods) / sizeof(struct cmdmod); ++i)
-+    for (i = 0; i < (int)(sizeof(cmdmods) / sizeof(struct cmdmod)); ++i)
-     {
- 	for (j = 0; p[j] != NUL; ++j)
- 	    if (p[j] != cmdmods[i].name[j])
-@@ -3028,7 +3039,7 @@
-     char_u	*p;
- 
-     /* Check command modifiers. */
--    for (i = 0; i < sizeof(cmdmods) / sizeof(struct cmdmod); ++i)
-+    for (i = 0; i < (int)(sizeof(cmdmods) / sizeof(struct cmdmod)); ++i)
-     {
- 	for (j = 0; name[j] != NUL; ++j)
- 	    if (name[j] != cmdmods[i].name[j])
-@@ -3608,6 +3619,7 @@
- 	    return set_context_in_autocmd(xp, arg, FALSE);
- 
- 	case CMD_doautocmd:
-+	case CMD_doautoall:
- 	    return set_context_in_autocmd(xp, arg, TRUE);
- #endif
- 	case CMD_set:
-@@ -3680,6 +3692,18 @@
- 	case CMD_highlight:
- 	    set_context_in_highlight_cmd(xp, arg);
- 	    break;
-+#ifdef FEAT_CSCOPE
-+	case CMD_cscope:
-+	case CMD_lcscope:
-+	case CMD_scscope:
-+	    set_context_in_cscope_cmd(xp, arg, ea.cmdidx);
-+	    break;
-+#endif
-+#ifdef FEAT_SIGNS
-+	case CMD_sign:
-+	    set_context_in_sign_cmd(xp, arg);
-+	    break;
-+#endif
- #ifdef FEAT_LISTCMDS
- 	case CMD_bdelete:
- 	case CMD_bwipeout:
-@@ -3803,7 +3827,7 @@
-     char_u	*cmd;
-     int		*ctx;	/* pointer to xp_context or NULL */
- {
--    int		delim;
-+    unsigned	delim;
- 
-     while (vim_strchr((char_u *)" \t0123456789.$%'/?-+,;", *cmd) != NULL)
-     {
-@@ -5033,10 +5057,9 @@
- /*
-  * Function given to ExpandGeneric() to obtain the list of command names.
-  */
--/*ARGSUSED*/
-     char_u *
- get_command_name(xp, idx)
--    expand_T	*xp;
-+    expand_T	*xp UNUSED;
-     int		idx;
- {
-     if (idx >= (int)CMD_SIZE)
-@@ -5121,7 +5144,11 @@
- 	    }
- 
- 	    vim_free(cmd->uc_rep);
--	    cmd->uc_rep = 0;
-+	    cmd->uc_rep = NULL;
-+#if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
-+	    vim_free(cmd->uc_compl_arg);
-+	    cmd->uc_compl_arg = NULL;
-+#endif
- 	    break;
- 	}
- 
-@@ -5180,6 +5207,9 @@
-     {EXPAND_AUGROUP, "augroup"},
-     {EXPAND_BUFFERS, "buffer"},
-     {EXPAND_COMMANDS, "command"},
-+#if defined(FEAT_CSCOPE)
-+    {EXPAND_CSCOPE, "cscope"},
-+#endif
- #if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
-     {EXPAND_USER_DEFINED, "custom"},
-     {EXPAND_USER_LIST, "customlist"},
-@@ -5196,6 +5226,9 @@
-     {EXPAND_MENUS, "menu"},
-     {EXPAND_SETTINGS, "option"},
-     {EXPAND_SHELLCMD, "shellcmd"},
-+#if defined(FEAT_SIGNS)
-+    {EXPAND_SIGN, "sign"},
-+#endif
-     {EXPAND_TAGS, "tag"},
-     {EXPAND_TAGS_LISTFILES, "tag_listfiles"},
-     {EXPAND_USER_VARS, "var"},
-@@ -5479,6 +5512,9 @@
-     return OK;
- }
- 
-+/*
-+ * ":command ..."
-+ */
-     static void
- ex_command(eap)
-     exarg_T   *eap;
-@@ -5540,10 +5576,9 @@
-  * ":comclear"
-  * Clear all user commands, global and for current buffer.
-  */
--/*ARGSUSED*/
-     void
- ex_comclear(eap)
--    exarg_T	*eap;
-+    exarg_T	*eap UNUSED;
- {
-     uc_clear(&ucmds);
-     uc_clear(&curbuf->b_ucmds);
-@@ -5910,7 +5945,8 @@
-     char_u	*q;
- 
-     char_u	*start;
--    char_u	*end;
-+    char_u	*end = NULL;
-+    char_u	*ksp;
-     size_t	len, totlen;
- 
-     size_t	split_len = 0;
-@@ -5927,16 +5963,51 @@
- 
-     /*
-      * Replace <> in the command by the arguments.
-+     * First round: "buf" is NULL, compute length, allocate "buf".
-+     * Second round: copy result into "buf".
-      */
-     buf = NULL;
-     for (;;)
-     {
--	p = cmd->uc_rep;
--	q = buf;
-+	p = cmd->uc_rep;    /* source */
-+	q = buf;	    /* destination */
- 	totlen = 0;
--	while ((start = vim_strchr(p, '<')) != NULL
--	       && (end = vim_strchr(start + 1, '>')) != NULL)
-+
-+	for (;;)
- 	{
-+	    start = vim_strchr(p, '<');
-+	    if (start != NULL)
-+		end = vim_strchr(start + 1, '>');
-+	    if (buf != NULL)
-+	    {
-+		ksp = vim_strchr(p, K_SPECIAL);
-+		if (ksp != NULL && (start == NULL || ksp < start || end == NULL)
-+			&& ((ksp[1] == KS_SPECIAL && ksp[2] == KE_FILLER)
-+# ifdef FEAT_GUI
-+			    || (ksp[1] == KS_EXTRA && ksp[2] == (int)KE_CSI)
-+# endif
-+			    ))
-+		{
-+		    /* K_SPECIAL han been put in the buffer as K_SPECIAL
-+		     * KS_SPECIAL KE_FILLER, like for mappings, but
-+		     * do_cmdline() doesn't handle that, so convert it back.
-+		     * Also change K_SPECIAL KS_EXTRA KE_CSI into CSI. */
-+		    len = ksp - p;
-+		    if (len > 0)
-+		    {
-+			mch_memmove(q, p, len);
-+			q += len;
-+		    }
-+		    *q++ = ksp[1] == KS_SPECIAL ? K_SPECIAL : CSI;
-+		    p = ksp + 3;
-+		    continue;
-+		}
-+	    }
-+
-+	    /* break if there no <item> is found */
-+	    if (start == NULL || end == NULL)
-+		break;
-+
- 	    /* Include the '>' */
- 	    ++end;
- 
-@@ -6003,10 +6074,9 @@
- /*
-  * Function given to ExpandGeneric() to obtain the list of user command names.
-  */
--/*ARGSUSED*/
-     char_u *
- get_user_commands(xp, idx)
--    expand_T	*xp;
-+    expand_T	*xp UNUSED;
-     int		idx;
- {
-     if (idx < curbuf->b_ucmds.ga_len)
-@@ -6021,17 +6091,16 @@
-  * Function given to ExpandGeneric() to obtain the list of user command
-  * attributes.
-  */
--/*ARGSUSED*/
-     char_u *
- get_user_cmd_flags(xp, idx)
--    expand_T	*xp;
-+    expand_T	*xp UNUSED;
-     int		idx;
- {
-     static char *user_cmd_flags[] =
- 	{"bang", "bar", "buffer", "complete", "count",
- 	    "nargs", "range", "register"};
- 
--    if (idx >= sizeof(user_cmd_flags) / sizeof(user_cmd_flags[0]))
-+    if (idx >= (int)(sizeof(user_cmd_flags) / sizeof(user_cmd_flags[0])))
- 	return NULL;
-     return (char_u *)user_cmd_flags[idx];
- }
-@@ -6039,15 +6108,14 @@
- /*
-  * Function given to ExpandGeneric() to obtain the list of values for -nargs.
-  */
--/*ARGSUSED*/
-     char_u *
- get_user_cmd_nargs(xp, idx)
--    expand_T	*xp;
-+    expand_T	*xp UNUSED;
-     int		idx;
- {
-     static char *user_cmd_nargs[] = {"0", "1", "*", "?", "+"};
- 
--    if (idx >= sizeof(user_cmd_nargs) / sizeof(user_cmd_nargs[0]))
-+    if (idx >= (int)(sizeof(user_cmd_nargs) / sizeof(user_cmd_nargs[0])))
- 	return NULL;
-     return (char_u *)user_cmd_nargs[idx];
- }
-@@ -6055,10 +6123,9 @@
- /*
-  * Function given to ExpandGeneric() to obtain the list of values for -complete.
-  */
--/*ARGSUSED*/
-     char_u *
- get_user_cmd_complete(xp, idx)
--    expand_T	*xp;
-+    expand_T	*xp UNUSED;
-     int		idx;
- {
-     return (char_u *)command_complete[idx].name;
-@@ -6236,10 +6303,9 @@
- /*
-  * ":cquit".
-  */
--/*ARGSUSED*/
-     static void
- ex_cquit(eap)
--    exarg_T	*eap;
-+    exarg_T	*eap UNUSED;
- {
-     getout(1);	/* this does not always pass on the exit code to the Manx
- 		   compiler. why? */
-@@ -6681,10 +6747,9 @@
- /*
-  * ":shell".
-  */
--/*ARGSUSED*/
-     static void
- ex_shell(eap)
--    exarg_T	*eap;
-+    exarg_T	*eap UNUSED;
- {
-     do_shell(NULL, 0);
- }
-@@ -6988,10 +7053,9 @@
- /*
-  * ":preserve".
-  */
--/*ARGSUSED*/
-     static void
- ex_preserve(eap)
--    exarg_T	*eap;
-+    exarg_T	*eap UNUSED;
- {
-     curbuf->b_flags |= BF_PRESERVED;
-     ml_preserve(curbuf, TRUE);
-@@ -7223,10 +7287,9 @@
- /*
-  * :tabs command: List tabs and their contents.
-  */
--/*ARGSUSED*/
-     static void
- ex_tabs(eap)
--    exarg_T	*eap;
-+    exarg_T	*eap UNUSED;
- {
-     tabpage_T	*tp;
-     win_T	*wp;
-@@ -7413,7 +7476,6 @@
- /*
-  * ":edit <file>" command and alikes.
-  */
--/*ARGSUSED*/
-     void
- do_exedit(eap, old_curwin)
-     exarg_T	*eap;
-@@ -7624,10 +7686,9 @@
- }
- #endif
- 
--/*ARGSUSED*/
-     static void
- ex_swapname(eap)
--    exarg_T	*eap;
-+    exarg_T	*eap UNUSED;
- {
-     if (curbuf->b_ml.ml_mfp == NULL || curbuf->b_ml.ml_mfp->mf_fname == NULL)
- 	MSG(_("No swap file"));
-@@ -7640,10 +7701,9 @@
-  * offset.
-  * (1998-11-02 16:21:01  R. Edward Ralston <eralston@computer.org>)
-  */
--/*ARGSUSED*/
-     static void
- ex_syncbind(eap)
--    exarg_T	*eap;
-+    exarg_T	*eap UNUSED;
- {
- #ifdef FEAT_SCROLLBIND
-     win_T	*wp;
-@@ -7784,10 +7844,10 @@
- 		if (*ml_get(lnum) == NUL && u_savedel(lnum, 1L) == OK)
- 		{
- 		    ml_delete(lnum, FALSE);
--		    deleted_lines_mark(lnum, 1L);
- 		    if (curwin->w_cursor.lnum > 1
- 					     && curwin->w_cursor.lnum >= lnum)
- 			--curwin->w_cursor.lnum;
-+		    deleted_lines_mark(lnum, 1L);
- 		}
- 	    }
- 	    redraw_curbuf_later(VALID);
-@@ -7803,6 +7863,9 @@
- {
-     vim_free(prev_dir);
-     prev_dir = NULL;
-+
-+    vim_free(globaldir);
-+    globaldir = NULL;
- }
- #endif
- 
-@@ -7825,6 +7888,10 @@
-     else
- #endif
-     {
-+#ifdef FEAT_AUTOCMD
-+	if (allbuf_locked())
-+	    return;
-+#endif
- 	if (vim_strchr(p_cpo, CPO_CHDIR) != NULL && curbufIsChanged()
- 							     && !eap->forceit)
- 	{
-@@ -7896,7 +7963,7 @@
- 	    shorten_fnames(TRUE);
- 
- 	    /* Echo the new current directory if the command was typed. */
--	    if (KeyTyped)
-+	    if (KeyTyped || p_verbose >= 5)
- 		ex_pwd(eap);
- 	}
- 	vim_free(tofree);
-@@ -7906,10 +7973,9 @@
- /*
-  * ":pwd".
-  */
--/*ARGSUSED*/
-     static void
- ex_pwd(eap)
--    exarg_T	*eap;
-+    exarg_T	*eap UNUSED;
- {
-     if (mch_dirname(NameBuff, MAXPATHL) == OK)
-     {
-@@ -8340,10 +8406,9 @@
- /*
-  * ":undo".
-  */
--/*ARGSUSED*/
-     static void
- ex_undo(eap)
--    exarg_T	*eap;
-+    exarg_T	*eap UNUSED;
- {
-     if (eap->addr_count == 1)	    /* :undo 123 */
- 	undo_time(eap->line2, FALSE, TRUE);
-@@ -8354,10 +8419,9 @@
- /*
-  * ":redo".
-  */
--/*ARGSUSED*/
-     static void
- ex_redo(eap)
--    exarg_T	*eap;
-+    exarg_T	*eap UNUSED;
- {
-     u_redo(1);
- }
-@@ -8365,7 +8429,6 @@
- /*
-  * ":earlier" and ":later".
-  */
--/*ARGSUSED*/
-     static void
- ex_later(eap)
-     exarg_T	*eap;
-@@ -8550,10 +8613,9 @@
- /*
-  * ":redrawstatus": force redraw of status line(s)
-  */
--/*ARGSUSED*/
-     static void
- ex_redrawstatus(eap)
--    exarg_T	*eap;
-+    exarg_T	*eap UNUSED;
- {
- #if defined(FEAT_WINDOWS)
-     int		r = RedrawingDisabled;
-@@ -8630,6 +8692,8 @@
-     }
- 
- #ifdef FEAT_SESSION
-+    /* Use the short file name until ":lcd" is used.  We also don't use the
-+     * short file name when 'acd' is set, that is checked later. */
-     did_lcd = FALSE;
- 
-     /* ":mkview" or ":mkview 9": generate file name with 'viewdir' */
-@@ -8749,8 +8813,8 @@
- 		else if (*dirnow != NUL
- 			&& (ssop_flags & SSOP_CURDIR) && globaldir != NULL)
- 		{
--		    (void)mch_chdir((char *)globaldir);
--		    shorten_fnames(TRUE);
-+		    if (mch_chdir((char *)globaldir) == 0)
-+			shorten_fnames(TRUE);
- 		}
- 
- 		failed |= (makeopens(fd, dirnow) == FAIL);
-@@ -8814,11 +8878,10 @@
- 
- #if ((defined(FEAT_SESSION) || defined(FEAT_EVAL)) && defined(vim_mkdir)) \
- 	|| defined(PROTO)
--/*ARGSUSED*/
-     int
- vim_mkdir_emsg(name, prot)
-     char_u	*name;
--    int		prot;
-+    int		prot UNUSED;
- {
-     if (vim_mkdir(name, prot) != 0)
-     {
-@@ -9089,10 +9152,9 @@
- /*
-  * ":stopinsert"
-  */
--/*ARGSUSED*/
-     static void
- ex_stopinsert(eap)
--    exarg_T	*eap;
-+    exarg_T	*eap UNUSED;
- {
-     restart_edit = 0;
-     stop_insert_mode = TRUE;
-@@ -9366,9 +9428,8 @@
- # define SPEC_CLIENT 9
- #endif
-     };
--#define SPEC_COUNT  (sizeof(spec_str) / sizeof(char *))
- 
--    for (i = 0; i < SPEC_COUNT; ++i)
-+    for (i = 0; i < (int)(sizeof(spec_str) / sizeof(char *)); ++i)
-     {
- 	len = (int)STRLEN(spec_str[i]);
- 	if (STRNCMP(src, spec_str[i], len) == 0)
-@@ -9506,24 +9567,50 @@
- 		    break;
- 		}
- 		s = src + 1;
-+		if (*s == '<')		/* "#<99" uses v:oldfiles */
-+		    ++s;
- 		i = (int)getdigits(&s);
- 		*usedlen = (int)(s - src); /* length of what we expand */
- 
--		buf = buflist_findnr(i);
--		if (buf == NULL)
-+		if (src[1] == '<')
- 		{
--		    *errormsg = (char_u *)_("E194: No alternate file name to substitute for '#'");
-+		    if (*usedlen < 2)
-+		    {
-+			/* Should we give an error message for #<text? */
-+			*usedlen = 1;
-+			return NULL;
-+		    }
-+#ifdef FEAT_EVAL
-+		    result = list_find_str(get_vim_var_list(VV_OLDFILES),
-+								     (long)i);
-+		    if (result == NULL)
-+		    {
-+			*errormsg = (char_u *)"";
-+			return NULL;
-+		    }
-+#else
-+		    *errormsg = (char_u *)_("E809: #< is not available without the +eval feature");
- 		    return NULL;
-+#endif
- 		}
--		if (lnump != NULL)
--		    *lnump = ECMD_LAST;
--		if (buf->b_fname == NULL)
-+		else
- 		{
--		    result = (char_u *)"";
--		    valid = 0;	    /* Must have ":p:h" to be valid */
-+		    buf = buflist_findnr(i);
-+		    if (buf == NULL)
-+		    {
-+			*errormsg = (char_u *)_("E194: No alternate file name to substitute for '#'");
-+			return NULL;
-+		    }
-+		    if (lnump != NULL)
-+			*lnump = ECMD_LAST;
-+		    if (buf->b_fname == NULL)
-+		    {
-+			result = (char_u *)"";
-+			valid = 0;	    /* Must have ":p:h" to be valid */
-+		    }
-+		    else
-+			result = buf->b_fname;
- 		}
--		else
--		    result = buf->b_fname;
- 		break;
- 
- #ifdef FEAT_SEARCHPATH
-@@ -9541,6 +9628,15 @@
- #ifdef FEAT_AUTOCMD
- 	case SPEC_AFILE:	/* file name for autocommand */
- 		result = autocmd_fname;
-+		if (result != NULL && !autocmd_fname_full)
-+		{
-+		    /* Still need to turn the fname into a full path.  It is
-+		     * postponed to avoid a delay when <afile> is not used. */
-+		    autocmd_fname_full = TRUE;
-+		    result = FullName_save(autocmd_fname, FALSE);
-+		    vim_free(autocmd_fname);
-+		    autocmd_fname = result;
-+		}
- 		if (result == NULL)
- 		{
- 		    *errormsg = (char_u *)_("E495: no autocommand file name to substitute for \"<afile>\"");
-@@ -9684,7 +9780,7 @@
- 	}
- 
- 	/* allocate memory */
--	retval = alloc(len + 1);
-+	retval = alloc((unsigned)len + 1);
- 	if (retval == NULL)
- 	    break;
-     }
-@@ -10067,7 +10163,7 @@
-      */
-     if (put_line(fd, "let s:sx = expand(\"<sfile>:p:r\").\"x.vim\"") == FAIL
- 	    || put_line(fd, "if file_readable(s:sx)") == FAIL
--	    || put_line(fd, "  exe \"source \" . s:sx") == FAIL
-+	    || put_line(fd, "  exe \"source \" . fnameescape(s:sx)") == FAIL
- 	    || put_line(fd, "endif") == FAIL)
- 	return FAIL;
- 
-@@ -10485,6 +10581,9 @@
-     if (buf->b_sfname != NULL
- 	    && flagp == &ssop_flags
- 	    && (ssop_flags & (SSOP_CURDIR | SSOP_SESDIR))
-+#ifdef FEAT_AUTOCHDIR
-+	    && !p_acd
-+#endif
- 	    && !did_lcd)
- 	name = buf->b_sfname;
-     else
-@@ -10689,7 +10788,8 @@
- 	p_viminfo = (char_u *)"'100";
-     if (eap->cmdidx == CMD_rviminfo)
-     {
--	if (read_viminfo(eap->arg, TRUE, TRUE, eap->forceit) == FAIL)
-+	if (read_viminfo(eap->arg, VIF_WANT_INFO | VIF_WANT_MARKS
-+				  | (eap->forceit ? VIF_FORCEIT : 0)) == FAIL)
- 	    EMSG(_("E195: Cannot open viminfo file for reading"));
-     }
-     else
-@@ -10850,10 +10950,9 @@
- }
- #endif
- 
--/*ARGSUSED*/
-     static void
- ex_digraphs(eap)
--    exarg_T	*eap;
-+    exarg_T	*eap UNUSED;
- {
- #ifdef FEAT_DIGRAPHS
-     if (*eap->arg != NUL)
-@@ -10887,10 +10986,9 @@
- /*
-  * ":nohlsearch"
-  */
--/*ARGSUSED*/
-     static void
- ex_nohlsearch(eap)
--    exarg_T	*eap;
-+    exarg_T	*eap UNUSED;
- {
-     no_hlsearch = TRUE;
-     redraw_all_later(SOME_VALID);
-@@ -10969,10 +11067,9 @@
- /*
-  * ":X": Get crypt key
-  */
--/*ARGSUSED*/
-     static void
- ex_X(eap)
--    exarg_T	*eap;
-+    exarg_T	*eap UNUSED;
- {
-     (void)get_crypt_key(TRUE, TRUE);
- }
-diff -Naur vim72.orig/src/ex_eval.c vim72/src/ex_eval.c
---- vim72.orig/src/ex_eval.c	2007-11-24 07:34:09.000000000 -0800
-+++ vim72/src/ex_eval.c	2009-09-12 08:38:41.000000000 -0700
-@@ -60,7 +60,9 @@
- #else
- /* Values used for the Vim release. */
- # define THROW_ON_ERROR		TRUE
-+# define THROW_ON_ERROR_TRUE
- # define THROW_ON_INTERRUPT	TRUE
-+# define THROW_ON_INTERRUPT_TRUE
- #endif
- 
- static void	catch_exception __ARGS((except_T *excp));
-@@ -1320,16 +1322,20 @@
-      * and reset the did_emsg or got_int flag, so this won't happen again at
-      * the next surrounding try conditional.
-      */
-+#ifndef THROW_ON_ERROR_TRUE
-     if (did_emsg && !THROW_ON_ERROR)
-     {
- 	inactivate_try = TRUE;
- 	did_emsg = FALSE;
-     }
-+#endif
-+#ifndef THROW_ON_INTERRUPT_TRUE
-     if (got_int && !THROW_ON_INTERRUPT)
-     {
- 	inactivate_try = TRUE;
- 	got_int = FALSE;
-     }
-+#endif
-     idx = cleanup_conditionals(cstack, 0, inactivate_try);
-     if (idx >= 0)
-     {
-@@ -2254,10 +2260,9 @@
- /*
-  * ":endfunction" when not after a ":function"
-  */
--/*ARGSUSED*/
-     void
- ex_endfunction(eap)
--    exarg_T	*eap;
-+    exarg_T	*eap UNUSED;
- {
-     EMSG(_("E193: :endfunction not inside a function"));
- }
-diff -Naur vim72.orig/src/ex_getln.c vim72/src/ex_getln.c
---- vim72.orig/src/ex_getln.c	2008-08-08 02:31:33.000000000 -0700
-+++ vim72/src/ex_getln.c	2009-09-12 08:40:31.000000000 -0700
-@@ -31,6 +31,8 @@
-     int		cmdattr;	/* attributes for prompt */
-     int		overstrike;	/* Typing mode on the command line.  Shared by
- 				   getcmdline() and put_on_cmdline(). */
-+    expand_T	*xpc;		/* struct being used for expansion, xp_pattern
-+				   may point into cmdbuff */
-     int		xp_context;	/* type of expansion */
- # ifdef FEAT_EVAL
-     char_u	*xp_arg;	/* user-defined expansion arg */
-@@ -38,7 +40,11 @@
- # endif
- };
- 
--static struct cmdline_info ccline;	/* current cmdline_info */
-+/* The current cmdline_info.  It is initialized in getcmdline() and after that
-+ * used by other functions.  When invoking getcmdline() recursively it needs
-+ * to be saved with save_cmdline() and restored with restore_cmdline().
-+ * TODO: make it local to getcmdline() and pass it around. */
-+static struct cmdline_info ccline;
- 
- static int	cmd_showtail;		/* Only show path tail in lists ? */
- 
-@@ -134,11 +140,10 @@
-  * Return pointer to allocated string if there is a commandline, NULL
-  * otherwise.
-  */
--/*ARGSUSED*/
-     char_u *
- getcmdline(firstc, count, indent)
-     int		firstc;
--    long	count;		/* only used for incremental search */
-+    long	count UNUSED;	/* only used for incremental search */
-     int		indent;		/* indent for inside conditionals */
- {
-     int		c;
-@@ -238,6 +243,7 @@
-     }
- 
-     ExpandInit(&xpc);
-+    ccline.xpc = &xpc;
- 
- #ifdef FEAT_RIGHTLEFT
-     if (curwin->w_p_rl && *curwin->w_p_rlc == 's'
-@@ -318,7 +324,7 @@
- #endif
- 
- #ifdef FEAT_DIGRAPHS
--    do_digraph(-1);		/* init digraph typahead */
-+    do_digraph(-1);		/* init digraph typeahead */
- #endif
- 
-     /*
-@@ -408,9 +414,10 @@
- #endif
- 
- 	/*
--	 * <S-Tab> works like CTRL-P (unless 'wc' is <S-Tab>).
-+	 * When there are matching completions to select <S-Tab> works like
-+	 * CTRL-P (unless 'wc' is <S-Tab>).
- 	 */
--	if (c != p_wc && c == K_S_TAB && xpc.xp_numfiles != -1)
-+	if (c != p_wc && c == K_S_TAB && xpc.xp_numfiles > 0)
- 	    c = Ctrl_P;
- 
- #ifdef FEAT_WILDMENU
-@@ -1513,6 +1520,7 @@
- 		    int		old_firstc;
- 
- 		    vim_free(ccline.cmdbuff);
-+		    xpc.xp_context = EXPAND_NOTHING;
- 		    if (hiscnt == hislen)
- 			p = lookfor;	/* back to the old one */
- 		    else
-@@ -1839,6 +1847,7 @@
- #endif
- 
-     ExpandCleanup(&xpc);
-+    ccline.xpc = NULL;
- 
- #ifdef FEAT_SEARCH_EXTRA
-     if (did_incsearch)
-@@ -1990,8 +1999,8 @@
- 
- #if defined(FEAT_AUTOCMD) || defined(PROTO)
- /*
-- * Check if "curbuf_lock" is set and return TRUE when it is and give an error
-- * message.
-+ * Check if "curbuf_lock" or "allbuf_lock" is set and return TRUE when it is
-+ * and give an error message.
-  */
-     int
- curbuf_locked()
-@@ -2001,6 +2010,21 @@
- 	EMSG(_("E788: Not allowed to edit another buffer now"));
- 	return TRUE;
-     }
-+    return allbuf_locked();
-+}
-+
-+/*
-+ * Check if "allbuf_lock" is set and return TRUE when it is and give an error
-+ * message.
-+ */
-+    int
-+allbuf_locked()
-+{
-+    if (allbuf_lock > 0)
-+    {
-+	EMSG(_("E811: Not allowed to change buffer information now"));
-+	return TRUE;
-+    }
-     return FALSE;
- }
- #endif
-@@ -2088,11 +2112,10 @@
- /*
-  * Get an Ex command line for the ":" command.
-  */
--/* ARGSUSED */
-     char_u *
--getexline(c, dummy, indent)
-+getexline(c, cookie, indent)
-     int		c;		/* normally ':', NUL for ":append" */
--    void	*dummy;		/* cookie not used */
-+    void	*cookie UNUSED;
-     int		indent;		/* indent for inside conditionals */
- {
-     /* When executing a register, remove ':' that's in front of each line. */
-@@ -2107,12 +2130,11 @@
-  * mappings or abbreviations.
-  * Returns a string in allocated memory or NULL.
-  */
--/* ARGSUSED */
-     char_u *
--getexmodeline(promptc, dummy, indent)
-+getexmodeline(promptc, cookie, indent)
-     int		promptc;	/* normally ':', NUL for ":append" and '?' for
- 				   :s prompt */
--    void	*dummy;		/* cookie not used */
-+    void	*cookie UNUSED;
-     int		indent;		/* indent for inside conditionals */
- {
-     garray_T	line_ga;
-@@ -2508,6 +2530,20 @@
-     }
-     mch_memmove(ccline.cmdbuff, p, (size_t)ccline.cmdlen + 1);
-     vim_free(p);
-+
-+    if (ccline.xpc != NULL
-+	    && ccline.xpc->xp_pattern != NULL
-+	    && ccline.xpc->xp_context != EXPAND_NOTHING
-+	    && ccline.xpc->xp_context != EXPAND_UNSUCCESSFUL)
-+    {
-+	int i = (int)(ccline.xpc->xp_pattern - p);
-+
-+	/* If xp_pattern points inside the old cmdbuff it needs to be adjusted
-+	 * to point into the newly allocated memory. */
-+	if (i >= 0 && i <= ccline.cmdlen)
-+	    ccline.xpc->xp_pattern = ccline.cmdbuff + i;
-+    }
-+
-     return OK;
- }
- 
-@@ -2875,6 +2911,7 @@
-     prev_ccline = ccline;
-     ccline.cmdbuff = NULL;
-     ccline.cmdprompt = NULL;
-+    ccline.xpc = NULL;
- }
- 
- /*
-@@ -3582,6 +3619,7 @@
- ExpandInit(xp)
-     expand_T	*xp;
- {
-+    xp->xp_pattern = NULL;
-     xp->xp_backslash = XP_BS_NONE;
- #ifndef BACKSLASH_IN_FILENAME
-     xp->xp_shell = FALSE;
-@@ -3791,11 +3829,10 @@
-  * Returns EXPAND_NOTHING when the character that triggered expansion should
-  * be inserted like a normal character.
-  */
--/*ARGSUSED*/
-     static int
- showmatches(xp, wildmenu)
-     expand_T	*xp;
--    int		wildmenu;
-+    int		wildmenu UNUSED;
- {
- #define L_SHOWFILE(m) (showtail ? sm_gettail(files_found[m]) : files_found[m])
-     int		num_files;
-@@ -4477,6 +4514,12 @@
- 	    {EXPAND_EVENTS, get_event_name, TRUE},
- 	    {EXPAND_AUGROUP, get_augroup_name, TRUE},
- #endif
-+#ifdef FEAT_CSCOPE
-+	    {EXPAND_CSCOPE, get_cscope_name, TRUE},
-+#endif
-+#ifdef FEAT_SIGNS
-+	    {EXPAND_SIGN, get_sign_name, TRUE},
-+#endif
- #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
- 	&& (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
- 	    {EXPAND_LANGUAGE, get_lang_arg, TRUE},
-@@ -4490,7 +4533,7 @@
- 	 * right function to do the expansion.
- 	 */
- 	ret = FAIL;
--	for (i = 0; i < sizeof(tab) / sizeof(struct expgen); ++i)
-+	for (i = 0; i < (int)(sizeof(tab) / sizeof(struct expgen)); ++i)
- 	    if (xp->xp_context == tab[i].context)
- 	    {
- 		if (tab[i].ic)
-@@ -4831,14 +4874,14 @@
-     /* Loop over the items in the list. */
-     for (li = retlist->lv_first; li != NULL; li = li->li_next)
-     {
--	if (li->li_tv.v_type != VAR_STRING)
--	    continue;  /* Skip non-string items */
-+	if (li->li_tv.v_type != VAR_STRING || li->li_tv.vval.v_string == NULL)
-+	    continue;  /* Skip non-string items and empty strings */
- 
- 	if (ga_grow(&ga, 1) == FAIL)
- 	    break;
- 
- 	((char_u **)ga.ga_data)[ga.ga_len] =
--	    vim_strsave(li->li_tv.vval.v_string);
-+					 vim_strsave(li->li_tv.vval.v_string);
- 	++ga.ga_len;
-     }
-     list_unref(retlist);
-@@ -4871,7 +4914,7 @@
-     if (s == NULL)
- 	return FAIL;
-     sprintf((char *)s, "%s/%s*.vim", dirname, pat);
--    all = globpath(p_rtp, s);
-+    all = globpath(p_rtp, s, 0);
-     vim_free(s);
-     if (all == NULL)
- 	return FAIL;
-@@ -4912,9 +4955,10 @@
-  * newlines.  Returns NULL for an error or no matches.
-  */
-     char_u *
--globpath(path, file)
-+globpath(path, file, expand_options)
-     char_u	*path;
-     char_u	*file;
-+    int		expand_options;
- {
-     expand_T	xpc;
-     char_u	*buf;
-@@ -4943,10 +4987,10 @@
- 	{
- 	    add_pathsep(buf);
- 	    STRCAT(buf, file);
--	    if (ExpandFromContext(&xpc, buf, &num_p, &p, WILD_SILENT) != FAIL
--								 && num_p > 0)
-+	    if (ExpandFromContext(&xpc, buf, &num_p, &p,
-+			     WILD_SILENT|expand_options) != FAIL && num_p > 0)
- 	    {
--		ExpandEscape(&xpc, buf, num_p, p, WILD_SILENT);
-+		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;
- 
-@@ -5641,7 +5685,7 @@
- 	histype1 = get_histtype(arg);
- 	if (histype1 == -1)
- 	{
--	    if (STRICMP(arg, "all") == 0)
-+	    if (STRNICMP(arg, "all", STRLEN(arg)) == 0)
- 	    {
- 		histype1 = 0;
- 		histype2 = HIST_COUNT-1;
-@@ -6020,9 +6064,7 @@
- # endif
- 	return K_IGNORE;
-     }
--    cmdwin_type = ccline.cmdfirstc;
--    if (cmdwin_type == NUL)
--	cmdwin_type = '-';
-+    cmdwin_type = get_cmdline_type();
- 
-     /* Create the command-line buffer empty. */
-     (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE);
-@@ -6030,6 +6072,9 @@
-     set_option_value((char_u *)"bt", 0L, (char_u *)"nofile", OPT_LOCAL);
-     set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL);
-     curbuf->b_p_ma = TRUE;
-+#ifdef FEAT_FOLDING
-+    curwin->w_p_fen = FALSE;
-+#endif
- # ifdef FEAT_RIGHTLEFT
-     curwin->w_p_rl = cmdmsg_rl;
-     cmdmsg_rl = FALSE;
-@@ -6046,7 +6091,7 @@
-     /* Showing the prompt may have set need_wait_return, reset it. */
-     need_wait_return = FALSE;
- 
--    histtype = hist_char2type(ccline.cmdfirstc);
-+    histtype = hist_char2type(cmdwin_type);
-     if (histtype == HIST_CMD || histtype == HIST_DEBUG)
-     {
- 	if (p_wc == TAB)
-diff -Naur vim72.orig/src/farsi.c vim72/src/farsi.c
---- vim72.orig/src/farsi.c	2007-12-31 08:28:10.000000000 -0800
-+++ vim72/src/farsi.c	2009-09-12 08:38:41.000000000 -0700
-@@ -103,7 +103,8 @@
- 	case F_HE:
- 		tempc = _HE;
- 
--		if (p_ri && (curwin->w_cursor.col+1 < STRLEN(ml_get_curline())))
-+		if (p_ri && (curwin->w_cursor.col + 1
-+					 < (colnr_T)STRLEN(ml_get_curline())))
- 		{
- 		    inc_cursor();
- 
-@@ -344,7 +345,7 @@
-     if (curwin->w_p_rl && p_ri)
- 	return;
- 
--    if ( (curwin->w_cursor.col < STRLEN(ml_get_curline())))
-+    if ((curwin->w_cursor.col < (colnr_T)STRLEN(ml_get_curline())))
-     {
- 	if ((p_ri && curwin->w_cursor.col) || !p_ri)
- 	{
-@@ -565,7 +566,7 @@
- 
-     tempc = gchar_cursor();
- 
--    if (curwin->w_cursor.col+1 < STRLEN(ml_get_curline()))
-+    if (curwin->w_cursor.col + 1 < (colnr_T)STRLEN(ml_get_curline()))
-     {
- 	inc_cursor();
- 
-@@ -594,8 +595,8 @@
- {
-     int	tempc;
- 
--    if (!curwin->w_cursor.col &&
--	(curwin->w_cursor.col+1 == STRLEN(ml_get_curline())))
-+    if (curwin->w_cursor.col != 0 &&
-+	(curwin->w_cursor.col + 1 == (colnr_T)STRLEN(ml_get_curline())))
- 	return;
- 
-     if (!curwin->w_cursor.col && p_ri)
-@@ -663,8 +664,8 @@
- {
-     int	tempc;
- 
--    if (!curwin->w_cursor.col &&
--	(curwin->w_cursor.col+1 == STRLEN(ml_get_curline())))
-+    if (curwin->w_cursor.col != 0 &&
-+	(curwin->w_cursor.col + 1 == (colnr_T)STRLEN(ml_get_curline())))
- 	return;
- 
-     if (!curwin->w_cursor.col && p_ri)
-diff -Naur vim72.orig/src/feature.h vim72/src/feature.h
---- vim72.orig/src/feature.h	2008-08-06 04:00:39.000000000 -0700
-+++ vim72/src/feature.h	2009-09-12 08:32:04.000000000 -0700
-@@ -767,9 +767,13 @@
- 
- /*
-  * +browse		":browse" command.
-+ *			or just the ":browse" command modifier
-  */
--#if defined(FEAT_NORMAL) && (defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA) || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MAC))
--# define FEAT_BROWSE
-+#if defined(FEAT_NORMAL)
-+# define FEAT_BROWSE_CMD
-+# if defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA) || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MAC)
-+#  define FEAT_BROWSE
-+# endif
- #endif
- 
- /*
-diff -Naur vim72.orig/src/fileio.c vim72/src/fileio.c
---- vim72.orig/src/fileio.c	2008-08-06 04:01:03.000000000 -0700
-+++ vim72/src/fileio.c	2009-09-12 08:42:30.000000000 -0700
-@@ -69,7 +69,7 @@
- static int au_find_group __ARGS((char_u *name));
- 
- # define AUGROUP_DEFAULT    -1	    /* default autocmd group */
--# define AUGROUP_ERROR	    -2	    /* errornouse autocmd group */
-+# define AUGROUP_ERROR	    -2	    /* erroneous autocmd group */
- # define AUGROUP_ALL	    -3	    /* all autocmd groups */
- #endif
- 
-@@ -121,6 +121,8 @@
-     char_u	*bw_conv_buf;	/* buffer for writing converted chars */
-     int		bw_conv_buflen; /* size of bw_conv_buf */
-     int		bw_conv_error;	/* set for conversion error */
-+    linenr_T	bw_conv_error_lnum;  /* first line with error or zero */
-+    linenr_T	bw_start_lnum;  /* line number at start of buffer */
- # ifdef USE_ICONV
-     iconv_t	bw_iconv_fd;	/* descriptor for iconv() or -1 */
- # endif
-@@ -132,7 +134,7 @@
- #ifdef FEAT_MBYTE
- static linenr_T readfile_linenr __ARGS((linenr_T linecnt, char_u *p, char_u *endp));
- static int ucs2bytes __ARGS((unsigned c, char_u **pp, int flags));
--static int same_encoding __ARGS((char_u *a, char_u *b));
-+static int need_conversion __ARGS((char_u *fenc));
- static int get_fio_flags __ARGS((char_u *ptr));
- static char_u *check_for_bom __ARGS((char_u *p, long size, int *lenp, int flags));
- static int make_bom __ARGS((char_u *buf, char_u *name));
-@@ -144,7 +146,9 @@
- # endif
- #endif
- static int move_lines __ARGS((buf_T *frombuf, buf_T *tobuf));
--
-+#ifdef FEAT_AUTOCMD
-+static char *e_auchangedbuf = N_("E812: Autocommands changed buffer or buffer name");
-+#endif
- 
-     void
- filemess(buf, name, s, attr)
-@@ -295,6 +299,19 @@
-     int		conv_restlen = 0;	/* nr of bytes in conv_rest[] */
- #endif
- 
-+#ifdef FEAT_AUTOCMD
-+    /* Remember the initial values of curbuf, curbuf->b_ffname and
-+     * curbuf->b_fname to detect whether they are altered as a result of
-+     * executing nasty autocommands.  Also check if "fname" and "sfname"
-+     * point to one of these values. */
-+    buf_T   *old_curbuf = curbuf;
-+    char_u  *old_b_ffname = curbuf->b_ffname;
-+    char_u  *old_b_fname = curbuf->b_fname;
-+    int     using_b_ffname = (fname == curbuf->b_ffname)
-+					      || (sfname == curbuf->b_ffname);
-+    int     using_b_fname = (fname == curbuf->b_fname)
-+					       || (sfname == curbuf->b_fname);
-+#endif
-     write_no_eol_lnum = 0;	/* in case it was set by the previous read */
- 
-     /*
-@@ -589,7 +606,21 @@
- #ifdef FEAT_QUICKFIX
- 		    if (!bt_dontwrite(curbuf))
- #endif
-+		    {
- 			check_need_swap(newfile);
-+#ifdef FEAT_AUTOCMD
-+			/* SwapExists autocommand may mess things up */
-+			if (curbuf != old_curbuf
-+				|| (using_b_ffname
-+					&& (old_b_ffname != curbuf->b_ffname))
-+				|| (using_b_fname
-+					 && (old_b_fname != curbuf->b_fname)))
-+			{
-+			    EMSG(_(e_auchangedbuf));
-+			    return FAIL;
-+			}
-+#endif
-+		    }
- 		    if (dir_of_file_exists(fname))
- 			filemess(curbuf, sfname, (char_u *)_("[New File]"), 0);
- 		    else
-@@ -668,9 +699,21 @@
- #endif
-     {
- 	check_need_swap(newfile);
-+#ifdef FEAT_AUTOCMD
-+	if (!read_stdin && (curbuf != old_curbuf
-+		|| (using_b_ffname && (old_b_ffname != curbuf->b_ffname))
-+		|| (using_b_fname && (old_b_fname != curbuf->b_fname))))
-+	{
-+	    EMSG(_(e_auchangedbuf));
-+	    if (!read_buffer)
-+		close(fd);
-+	    return FAIL;
-+	}
-+#endif
- #ifdef UNIX
- 	/* Set swap file protection bits after creating it. */
--	if (swap_mode > 0 && curbuf->b_ml.ml_mfp->mf_fname != NULL)
-+	if (swap_mode > 0 && curbuf->b_ml.ml_mfp != NULL
-+			  && curbuf->b_ml.ml_mfp->mf_fname != NULL)
- 	    (void)mch_setperm(curbuf->b_ml.ml_mfp->mf_fname, (long)swap_mode);
- #endif
-     }
-@@ -698,7 +741,6 @@
-     {
- 	int	m = msg_scroll;
- 	int	n = msg_scrolled;
--	buf_T	*old_curbuf = curbuf;
- 
- 	/*
- 	 * The file must be closed again, the autocommands may want to change
-@@ -740,8 +782,13 @@
- 	/*
- 	 * Don't allow the autocommands to change the current buffer.
- 	 * Try to re-open the file.
-+	 *
-+	 * Don't allow the autocommands to change the buffer name either
-+	 * (cd for example) if it invalidates fname or sfname.
- 	 */
- 	if (!read_stdin && (curbuf != old_curbuf
-+		|| (using_b_ffname && (old_b_ffname != curbuf->b_ffname))
-+		|| (using_b_fname && (old_b_fname != curbuf->b_fname))
- 		|| (fd = mch_open((char *)fname, O_RDONLY | O_EXTRA, 0)) < 0))
- 	{
- 	    --no_wait_return;
-@@ -932,7 +979,10 @@
-     else
-     {
- 	if (eap != NULL && eap->force_ff != 0)
-+	{
- 	    fileformat = get_fileformat_force(curbuf, eap);
-+	    try_unix = try_dos = try_mac = FALSE;
-+	}
- 	else if (curbuf->b_p_bin)
- 	    fileformat = EOL_UNIX;		/* binary: use Unix format */
- 	else if (*p_ffs == NUL)
-@@ -993,13 +1043,12 @@
-     }
- 
-     /*
--     * Conversion is required when the encoding of the file is different
--     * from 'encoding' or 'encoding' is UTF-16, UCS-2 or UCS-4 (requires
--     * conversion to UTF-8).
-+     * Conversion may be required when the encoding of the file is different
-+     * from 'encoding' or 'encoding' is UTF-16, UCS-2 or UCS-4.
-      */
-     fio_flags = 0;
--    converted = (*fenc != NUL && !same_encoding(p_enc, fenc));
--    if (converted || enc_unicode != 0)
-+    converted = need_conversion(fenc);
-+    if (converted)
-     {
- 
- 	/* "ucs-bom" means we need to check the first bytes of the file
-@@ -2211,7 +2260,7 @@
-     {
- 	/* Use stderr for stdin, makes shell commands work. */
- 	close(0);
--	dup(2);
-+	ignored = dup(2);
-     }
- #endif
- 
-@@ -2341,11 +2390,6 @@
- 		STRCAT(IObuff, _("[CR missing]"));
- 		c = TRUE;
- 	    }
--	    if (ff_error == EOL_MAC)
--	    {
--		STRCAT(IObuff, _("[NL found]"));
--		c = TRUE;
--	    }
- 	    if (split)
- 	    {
- 		STRCAT(IObuff, _("[long lines split]"));
-@@ -2711,7 +2755,7 @@
- {
-     if (!curbuf->b_marks_read && get_viminfo_parameter('\'') > 0
- 						  && curbuf->b_ffname != NULL)
--	read_viminfo(NULL, FALSE, TRUE, FALSE);
-+	read_viminfo(NULL, VIF_WANT_MARKS);
- 
-     /* Always set b_marks_read; needed when 'viminfo' is changed to include
-      * the ' parameter after opening a buffer. */
-@@ -2881,6 +2925,7 @@
-     linenr_T	    lnum;
-     long	    nchars;
-     char_u	    *errmsg = NULL;
-+    int		    errmsg_allocated = FALSE;
-     char_u	    *errnum = NULL;
-     char_u	    *buffer;
-     char_u	    smallbuf[SMBUFSIZE];
-@@ -2944,6 +2989,7 @@
-     /* must init bw_conv_buf and bw_iconv_fd before jumping to "fail" */
-     write_info.bw_conv_buf = NULL;
-     write_info.bw_conv_error = FALSE;
-+    write_info.bw_conv_error_lnum = 0;
-     write_info.bw_restlen = 0;
- # ifdef USE_ICONV
-     write_info.bw_iconv_fd = (iconv_t)-1;
-@@ -3451,12 +3497,12 @@
- 		{
- # ifdef UNIX
- #  ifdef HAVE_FCHOWN
--		    fchown(fd, st_old.st_uid, st_old.st_gid);
-+		    ignored = fchown(fd, st_old.st_uid, st_old.st_gid);
- #  endif
- 		    if (mch_stat((char *)IObuff, &st) < 0
- 			    || st.st_uid != st_old.st_uid
- 			    || st.st_gid != st_old.st_gid
--			    || st.st_mode != perm)
-+			    || (long)st.st_mode != perm)
- 			backup_copy = TRUE;
- # endif
- 		    /* Close the file before removing it, on MS-Windows we
-@@ -3922,10 +3968,9 @@
- 	fenc = buf->b_p_fenc;
- 
-     /*
--     * The file needs to be converted when 'fileencoding' is set and
--     * 'fileencoding' differs from 'encoding'.
-+     * Check if the file needs to be converted.
-      */
--    converted = (*fenc != NUL && !same_encoding(p_enc, fenc));
-+    converted = need_conversion(fenc);
- 
-     /*
-      * Check if UTF-8 to UCS-2/4 or Latin1 conversion needs to be done.  Or
-@@ -4200,6 +4245,7 @@
- 		nchars += write_info.bw_len;
- 	}
-     }
-+    write_info.bw_start_lnum = start;
- #endif
- 
-     write_info.bw_len = bufsize;
-@@ -4235,6 +4281,9 @@
- 	    nchars += bufsize;
- 	    s = buffer;
- 	    len = 0;
-+#ifdef FEAT_MBYTE
-+	    write_info.bw_start_lnum = lnum;
-+#endif
- 	}
- 	/* write failed or last line has no EOL: stop here */
- 	if (end == 0
-@@ -4367,14 +4416,14 @@
- 		|| st.st_uid != st_old.st_uid
- 		|| st.st_gid != st_old.st_gid)
- 	{
--	    fchown(fd, st_old.st_uid, st_old.st_gid);
-+	    ignored = fchown(fd, st_old.st_uid, st_old.st_gid);
- 	    if (perm >= 0)	/* set permission again, may have changed */
- 		(void)mch_setperm(wfname, perm);
- 	}
- # endif
- 	buf_setino(buf);
-     }
--    else if (buf->b_dev < 0)
-+    else if (!buf->b_dev_valid)
- 	/* Set the inode when creating a new file. */
- 	buf_setino(buf);
- #endif
-@@ -4431,7 +4480,17 @@
- 	{
- #ifdef FEAT_MBYTE
- 	    if (write_info.bw_conv_error)
--		errmsg = (char_u *)_("E513: write error, conversion failed (make 'fenc' empty to override)");
-+	    {
-+		if (write_info.bw_conv_error_lnum == 0)
-+		    errmsg = (char_u *)_("E513: write error, conversion failed (make 'fenc' empty to override)");
-+		else
-+		{
-+		    errmsg_allocated = TRUE;
-+		    errmsg = alloc(300);
-+		    vim_snprintf((char *)errmsg, 300, _("E513: write error, conversion failed in line %ld (make 'fenc' empty to override)"),
-+					 (long)write_info.bw_conv_error_lnum);
-+		}
-+	    }
- 	    else
- #endif
- 		if (got_int)
-@@ -4507,6 +4566,12 @@
- 	{
- 	    STRCAT(IObuff, _(" CONVERSION ERROR"));
- 	    c = TRUE;
-+	    if (write_info.bw_conv_error_lnum != 0)
-+	    {
-+		size_t l = STRLEN(IObuff);
-+		vim_snprintf((char *)IObuff + l, IOSIZE - l, _(" in line %ld;"),
-+			(long)write_info.bw_conv_error_lnum);
-+	    }
- 	}
- 	else if (notconverted)
- 	{
-@@ -4703,6 +4768,8 @@
- 	}
- 	STRCAT(IObuff, errmsg);
- 	emsg(IObuff);
-+	if (errmsg_allocated)
-+	    vim_free(errmsg);
- 
- 	retval = FAIL;
- 	if (end == 0)
-@@ -4782,6 +4849,8 @@
-     char_u	*sfname;
- {
- #ifdef FEAT_AUTOCMD
-+    buf_T	*buf = curbuf;
-+
-     /* It's like the unnamed buffer is deleted.... */
-     if (curbuf->b_p_bl)
- 	apply_autocmds(EVENT_BUFDELETE, NULL, NULL, FALSE, curbuf);
-@@ -4790,6 +4859,12 @@
-     if (aborting())	    /* autocmds may abort script processing */
- 	return FAIL;
- # endif
-+    if (curbuf != buf)
-+    {
-+	/* We are in another buffer now, don't do the renaming. */
-+	EMSG(_(e_auchangedbuf));
-+	return FAIL;
-+    }
- #endif
- 
-     if (setfname(curbuf, fname, sfname, FALSE) == OK)
-@@ -5054,7 +5129,13 @@
- 			c = buf[wlen];
- 		}
- 
--		ip->bw_conv_error |= ucs2bytes(c, &p, flags);
-+		if (ucs2bytes(c, &p, flags) && !ip->bw_conv_error)
-+		{
-+		    ip->bw_conv_error = TRUE;
-+		    ip->bw_conv_error_lnum = ip->bw_start_lnum;
-+		}
-+		if (c == NL)
-+		    ++ip->bw_start_lnum;
- 	    }
- 	    if (flags & FIO_LATIN1)
- 		len = (int)(p - buf);
-@@ -5246,13 +5327,16 @@
- 	    /* Convert with iconv(). */
- 	    if (ip->bw_restlen > 0)
- 	    {
-+		char *fp;
-+
- 		/* Need to concatenate the remainder of the previous call and
- 		 * the bytes of the current call.  Use the end of the
- 		 * conversion buffer for this. */
- 		fromlen = len + ip->bw_restlen;
--		from = (char *)ip->bw_conv_buf + ip->bw_conv_buflen - fromlen;
--		mch_memmove((void *)from, ip->bw_rest, (size_t)ip->bw_restlen);
--		mch_memmove((void *)(from + ip->bw_restlen), buf, (size_t)len);
-+		fp = (char *)ip->bw_conv_buf + ip->bw_conv_buflen - fromlen;
-+		mch_memmove(fp, ip->bw_rest, (size_t)ip->bw_restlen);
-+		mch_memmove(fp + ip->bw_restlen, buf, (size_t)len);
-+		from = fp;
- 		tolen = ip->bw_conv_buflen - fromlen;
- 	    }
- 	    else
-@@ -5332,6 +5416,7 @@
- #ifdef FEAT_MBYTE
- /*
-  * Convert a Unicode character to bytes.
-+ * Return TRUE for an error, FALSE when it's OK.
-  */
-     static int
- ucs2bytes(c, pp, flags)
-@@ -5415,20 +5500,37 @@
- }
- 
- /*
-- * Return TRUE if "a" and "b" are the same 'encoding'.
-- * Ignores difference between "ansi" and "latin1", "ucs-4" and "ucs-4be", etc.
-+ * Return TRUE if file encoding "fenc" requires conversion from or to
-+ * 'encoding'.
-  */
-     static int
--same_encoding(a, b)
--    char_u	*a;
--    char_u	*b;
-+need_conversion(fenc)
-+    char_u	*fenc;
- {
--    int		f;
-+    int		same_encoding;
-+    int		enc_flags;
-+    int		fenc_flags;
- 
--    if (STRCMP(a, b) == 0)
--	return TRUE;
--    f = get_fio_flags(a);
--    return (f != 0 && get_fio_flags(b) == f);
-+    if (*fenc == NUL || STRCMP(p_enc, fenc) == 0)
-+	same_encoding = TRUE;
-+    else
-+    {
-+	/* Ignore difference between "ansi" and "latin1", "ucs-4" and
-+	 * "ucs-4be", etc. */
-+	enc_flags = get_fio_flags(p_enc);
-+	fenc_flags = get_fio_flags(fenc);
-+	same_encoding = (enc_flags != 0 && fenc_flags == enc_flags);
-+    }
-+    if (same_encoding)
-+    {
-+	/* Specified encoding matches with 'encoding'.  This requires
-+	 * conversion when 'encoding' is Unicode but not UTF-8. */
-+	return enc_unicode != 0;
-+    }
-+
-+    /* Encodings differ.  However, conversion is not needed when 'enc' is any
-+     * Unicode encoding and the file is UTF-8. */
-+    return !(enc_utf8 && fenc_flags == FIO_UTF8);
- }
- 
- /*
-@@ -5550,9 +5652,10 @@
- 	    name = "ucs-4le";	/* FF FE 00 00 */
- 	    len = 4;
- 	}
--	else if (flags == FIO_ALL || flags == (FIO_UCS2 | FIO_ENDIAN_L))
-+	else if (flags == (FIO_UCS2 | FIO_ENDIAN_L))
- 	    name = "ucs-2le";	/* FF FE */
--	else if (flags == (FIO_UTF16 | FIO_ENDIAN_L))
-+	else if (flags == FIO_ALL || flags == (FIO_UTF16 | FIO_ENDIAN_L))
-+	    /* utf-16le is preferred, it also works for ucs-2le text */
- 	    name = "utf-16le";	/* FF FE */
-     }
-     else if (p[0] == 0xfe && p[1] == 0xff
-@@ -5917,7 +6020,7 @@
- 	else if (*ext == '.')
- #endif
- 	{
--	    if (s - ptr > (size_t)8)
-+	    if ((size_t)(s - ptr) > (size_t)8)
- 	    {
- 		s = ptr + 8;
- 		*s = '\0';
-@@ -6031,9 +6134,9 @@
- 	{
- 	    tbuf[FGETS_SIZE - 2] = NUL;
- #ifdef USE_CR
--	    fgets_cr((char *)tbuf, FGETS_SIZE, fp);
-+	    ignoredp = fgets_cr((char *)tbuf, FGETS_SIZE, fp);
- #else
--	    fgets((char *)tbuf, FGETS_SIZE, fp);
-+	    ignoredp = fgets((char *)tbuf, FGETS_SIZE, fp);
- #endif
- 	} while (tbuf[FGETS_SIZE - 2] != NUL && tbuf[FGETS_SIZE - 2] != '\n');
-     }
-@@ -6107,12 +6210,24 @@
- #ifdef HAVE_ACL
-     vim_acl_T	acl;		/* ACL from original file */
- #endif
-+#if defined(UNIX) || defined(CASE_INSENSITIVE_FILENAME)
-+    int		use_tmp_file = FALSE;
-+#endif
- 
-     /*
--     * When the names are identical, there is nothing to do.
-+     * When the names are identical, there is nothing to do.  When they refer
-+     * to the same file (ignoring case and slash/backslash differences) but
-+     * the file name differs we need to go through a temp file.
-      */
-     if (fnamecmp(from, to) == 0)
--	return 0;
-+    {
-+#ifdef CASE_INSENSITIVE_FILENAME
-+	if (STRCMP(gettail(from), gettail(to)) != 0)
-+	    use_tmp_file = TRUE;
-+	else
-+#endif
-+	    return 0;
-+    }
- 
-     /*
-      * Fail if the "from" file doesn't exist.  Avoids that "to" is deleted.
-@@ -6120,6 +6235,55 @@
-     if (mch_stat((char *)from, &st) < 0)
- 	return -1;
- 
-+#ifdef UNIX
-+    {
-+	struct stat	st_to;
-+
-+	/* It's possible for the source and destination to be the same file.
-+	 * This happens when "from" and "to" differ in case and are on a FAT32
-+	 * filesystem.  In that case go through a temp file name. */
-+	if (mch_stat((char *)to, &st_to) >= 0
-+		&& st.st_dev == st_to.st_dev
-+		&& st.st_ino == st_to.st_ino)
-+	    use_tmp_file = TRUE;
-+    }
-+#endif
-+
-+#if defined(UNIX) || defined(CASE_INSENSITIVE_FILENAME)
-+    if (use_tmp_file)
-+    {
-+	char	tempname[MAXPATHL + 1];
-+
-+	/*
-+	 * Find a name that doesn't exist and is in the same directory.
-+	 * Rename "from" to "tempname" and then rename "tempname" to "to".
-+	 */
-+	if (STRLEN(from) >= MAXPATHL - 5)
-+	    return -1;
-+	STRCPY(tempname, from);
-+	for (n = 123; n < 99999; ++n)
-+	{
-+	    sprintf((char *)gettail((char_u *)tempname), "%d", n);
-+	    if (mch_stat(tempname, &st) < 0)
-+	    {
-+		if (mch_rename((char *)from, tempname) == 0)
-+		{
-+		    if (mch_rename(tempname, (char *)to) == 0)
-+			return 0;
-+		    /* Strange, the second step failed.  Try moving the
-+		     * file back and return failure. */
-+		    mch_rename(tempname, (char *)from);
-+		    return -1;
-+		}
-+		/* If it fails for one temp name it will most likely fail
-+		 * for any temp name, give up. */
-+		return -1;
-+	    }
-+	}
-+	return -1;
-+    }
-+#endif
-+
-     /*
-      * Delete the "to" file, this is required on some systems to make the
-      * mch_rename() work, on other systems it makes sure that we don't have
-@@ -6260,7 +6424,7 @@
- 
-     if (!stuff_empty() || global_busy || !typebuf_typed()
- #ifdef FEAT_AUTOCMD
--			|| autocmd_busy || curbuf_lock > 0
-+			|| autocmd_busy || curbuf_lock > 0 || allbuf_lock > 0
- #endif
- 					)
- 	need_check_timestamps = TRUE;		/* check later */
-@@ -6353,11 +6517,10 @@
-  * return 2 if a message has been displayed.
-  * return 0 otherwise.
-  */
--/*ARGSUSED*/
-     int
- buf_check_timestamp(buf, focus)
-     buf_T	*buf;
--    int		focus;		/* called for GUI focus event */
-+    int		focus UNUSED;	/* called for GUI focus event */
- {
-     struct stat	st;
-     int		stat_res;
-@@ -6462,8 +6625,10 @@
- 	    set_vim_var_string(VV_FCS_REASON, (char_u *)reason, -1);
- 	    set_vim_var_string(VV_FCS_CHOICE, (char_u *)"", -1);
- # endif
-+	    ++allbuf_lock;
- 	    n = apply_autocmds(EVENT_FILECHANGEDSHELL,
- 				      buf->b_fname, buf->b_fname, FALSE, buf);
-+	    --allbuf_lock;
- 	    busy = FALSE;
- 	    if (n)
- 	    {
-@@ -6511,7 +6676,10 @@
- 			mesg = _("W16: Warning: Mode of file \"%s\" has changed since editing started");
- 			mesg2 = _("See \":help W16\" for more info.");
- 		    }
--		    /* Else: only timestamp changed, ignored */
-+		    else
-+			/* Only timestamp changed, store it to avoid a warning
-+			 * in check_mtime() later. */
-+			buf->b_mtime_read = buf->b_mtime;
- 		}
- 	    }
- 	}
-@@ -6538,6 +6706,11 @@
- 	    tbuf = alloc((unsigned)(STRLEN(path) + STRLEN(mesg)
- 							+ STRLEN(mesg2) + 2));
- 	    sprintf((char *)tbuf, mesg, path);
-+#ifdef FEAT_EVAL
-+	    /* Set warningmsg here, before the unimportant and output-specific
-+	     * mesg2 has been appended. */
-+	    set_vim_var_string(VV_WARNINGMSG, tbuf, -1);
-+#endif
- #if defined(FEAT_CON_DIALOG) || defined(FEAT_GUI_DIALOG)
- 	    if (can_reload)
- 	    {
-@@ -6732,10 +6905,11 @@
- #endif
- #ifdef FEAT_FOLDING
- 	{
--	    win_T *wp;
-+	    win_T	*wp;
-+	    tabpage_T	*tp;
- 
- 	    /* Update folds unless they are defined manually. */
--	    FOR_ALL_WINDOWS(wp)
-+	    FOR_ALL_TAB_WINDOWS(tp, wp)
- 		if (wp->w_buffer == curwin->w_buffer
- 			&& !foldmethodIsManual(wp))
- 		    foldUpdateAll(wp);
-@@ -6753,12 +6927,11 @@
-     /* Careful: autocommands may have made "buf" invalid! */
- }
- 
--/*ARGSUSED*/
-     void
- buf_store_time(buf, st, fname)
-     buf_T	*buf;
-     struct stat	*st;
--    char_u	*fname;
-+    char_u	*fname UNUSED;
- {
-     buf->b_mtime = (long)st->st_mtime;
-     buf->b_orig_size = (size_t)st->st_size;
-@@ -6821,10 +6994,9 @@
-  * The returned pointer is to allocated memory.
-  * The returned pointer is NULL if no valid name was found.
-  */
--/*ARGSUSED*/
-     char_u  *
- vim_tempname(extra_char)
--    int	    extra_char;	    /* character to use in the name instead of '?' */
-+    int	    extra_char UNUSED;  /* char to use in the name instead of '?' */
- {
- #ifdef USE_TMPNAM
-     char_u	itmp[L_tmpnam];	/* use tmpnam() */
-@@ -6853,7 +7025,7 @@
- 	/*
- 	 * Try the entries in TEMPDIRNAMES to create the temp directory.
- 	 */
--	for (i = 0; i < sizeof(tempdirs) / sizeof(char *); ++i)
-+	for (i = 0; i < (int)(sizeof(tempdirs) / sizeof(char *)); ++i)
- 	{
- 	    /* expand $TMP, leave room for "/v1100000/999999999" */
- 	    expand_env((char_u *)tempdirs[i], itmp, TEMPNAMELEN - 20);
-@@ -8245,7 +8417,7 @@
- 
- 	    /* Execute the modeline settings, but don't set window-local
- 	     * options if we are using the current window for another buffer. */
--	    do_modelines(aco.save_curwin == NULL ? OPT_NOWIN : 0);
-+	    do_modelines(curwin == aucmd_win ? OPT_NOWIN : 0);
- 
- 	    /* restore the current window */
- 	    aucmd_restbuf(&aco);
-@@ -8261,8 +8433,8 @@
- 
- /*
-  * Prepare for executing autocommands for (hidden) buffer "buf".
-- * Search a window for the current buffer.  Save the cursor position and
-- * screen offset.
-+ * Search for a visible window containing the current buffer.  If there isn't
-+ * one then use "aucmd_win".
-  * Set "curbuf" and "curwin" to match "buf".
-  * When FEAT_AUTOCMD is not defined another version is used, see below.
-  */
-@@ -8272,8 +8444,9 @@
-     buf_T	*buf;		/* new curbuf */
- {
-     win_T	*win;
--
--    aco->new_curbuf = buf;
-+#ifdef FEAT_WINDOWS
-+    int		save_ea;
-+#endif
- 
-     /* Find a window that is for the new buffer */
-     if (buf == curbuf)		/* be quick when buf is curbuf */
-@@ -8287,42 +8460,67 @@
- 	win = NULL;
- #endif
- 
--    /*
--     * Prefer to use an existing window for the buffer, it has the least side
--     * effects (esp. if "buf" is curbuf).
--     * Otherwise, use curwin for "buf".  It might make some items in the
--     * window invalid.  At least save the cursor and topline.
--     */
-+    /* Allocate "aucmd_win" when needed.  If this fails (out of memory) fall
-+     * back to using the current window. */
-+    if (win == NULL && aucmd_win == NULL)
-+    {
-+	win_alloc_aucmd_win();
-+	if (aucmd_win == NULL)
-+	    win = curwin;
-+    }
-+    if (win == NULL && aucmd_win_used)
-+	/* Strange recursive autocommand, fall back to using the current
-+	 * window.  Expect a few side effects... */
-+	win = curwin;
-+
-+    aco->save_curwin = curwin;
-+    aco->save_curbuf = curbuf;
-     if (win != NULL)
-     {
--	/* there is a window for "buf", make it the curwin */
--	aco->save_curwin = curwin;
-+	/* There is a window for "buf" in the current tab page, make it the
-+	 * curwin.  This is preferred, it has the least side effects (esp. if
-+	 * "buf" is curbuf). */
-+	aco->use_aucmd_win = FALSE;
- 	curwin = win;
--	aco->save_buf = win->w_buffer;
--	aco->new_curwin = win;
-     }
-     else
-     {
--	/* there is no window for "buf", use curwin */
--	aco->save_curwin = NULL;
--	aco->save_buf = curbuf;
--	--curbuf->b_nwindows;
--	curwin->w_buffer = buf;
-+	/* There is no window for "buf", use "aucmd_win".  To minimize the side
-+	 * effects, insert it in a the current tab page.
-+	 * Anything related to a window (e.g., setting folds) may have
-+	 * unexpected results. */
-+	aco->use_aucmd_win = TRUE;
-+	aucmd_win_used = TRUE;
-+	aucmd_win->w_buffer = buf;
- 	++buf->b_nwindows;
-+	win_init_empty(aucmd_win); /* set cursor and topline to safe values */
-+	vim_free(aucmd_win->w_localdir);
-+	aucmd_win->w_localdir = NULL;
-+
-+	/* Make sure w_localdir and globaldir are NULL to avoid a chdir() in
-+	 * win_enter_ext(). */
-+	aucmd_win->w_localdir = NULL;
-+	aco->globaldir = globaldir;
-+	globaldir = NULL;
- 
--	/* save cursor and topline, set them to safe values */
--	aco->save_cursor = curwin->w_cursor;
--	curwin->w_cursor.lnum = 1;
--	curwin->w_cursor.col = 0;
--	aco->save_topline = curwin->w_topline;
--	curwin->w_topline = 1;
--#ifdef FEAT_DIFF
--	aco->save_topfill = curwin->w_topfill;
--	curwin->w_topfill = 0;
-+
-+#ifdef FEAT_WINDOWS
-+	/* Split the current window, put the aucmd_win in the upper half.
-+	 * We don't want the BufEnter or WinEnter autocommands. */
-+	block_autocmds();
-+	make_snapshot(SNAP_AUCMD_IDX);
-+	save_ea = p_ea;
-+	p_ea = FALSE;
-+	(void)win_split_ins(0, WSP_TOP, aucmd_win, 0);
-+	(void)win_comp_pos();   /* recompute window positions */
-+	p_ea = save_ea;
-+	unblock_autocmds();
- #endif
-+	curwin = aucmd_win;
-     }
--
-     curbuf = buf;
-+    aco->new_curwin = curwin;
-+    aco->new_curbuf = curbuf;
- }
- 
- /*
-@@ -8334,21 +8532,92 @@
- aucmd_restbuf(aco)
-     aco_save_T	*aco;		/* structure holding saved values */
- {
--    if (aco->save_curwin != NULL)
-+#ifdef FEAT_WINDOWS
-+    int dummy;
-+#endif
-+
-+    if (aco->use_aucmd_win)
-+    {
-+	--curbuf->b_nwindows;
-+#ifdef FEAT_WINDOWS
-+	/* Find "aucmd_win", it can't be closed, but it may be in another tab
-+	 * page. Do not trigger autocommands here. */
-+	block_autocmds();
-+	if (curwin != aucmd_win)
-+	{
-+	    tabpage_T	*tp;
-+	    win_T	*wp;
-+
-+	    FOR_ALL_TAB_WINDOWS(tp, wp)
-+	    {
-+		if (wp == aucmd_win)
-+		{
-+		    if (tp != curtab)
-+			goto_tabpage_tp(tp);
-+		    win_goto(aucmd_win);
-+		    break;
-+		}
-+	    }
-+	}
-+
-+	/* Remove the window and frame from the tree of frames. */
-+	(void)winframe_remove(curwin, &dummy, NULL);
-+	win_remove(curwin, NULL);
-+	aucmd_win_used = FALSE;
-+	last_status(FALSE);	    /* may need to remove last status line */
-+	restore_snapshot(SNAP_AUCMD_IDX, FALSE);
-+	(void)win_comp_pos();   /* recompute window positions */
-+	unblock_autocmds();
-+
-+	if (win_valid(aco->save_curwin))
-+	    curwin = aco->save_curwin;
-+	else
-+	    /* Hmm, original window disappeared.  Just use the first one. */
-+	    curwin = firstwin;
-+# ifdef FEAT_EVAL
-+	vars_clear(&aucmd_win->w_vars.dv_hashtab);  /* free all w: variables */
-+# endif
-+#else
-+	curwin = aco->save_curwin;
-+#endif
-+	curbuf = curwin->w_buffer;
-+
-+	vim_free(globaldir);
-+	globaldir = aco->globaldir;
-+
-+	/* the buffer contents may have changed */
-+	check_cursor();
-+	if (curwin->w_topline > curbuf->b_ml.ml_line_count)
-+	{
-+	    curwin->w_topline = curbuf->b_ml.ml_line_count;
-+#ifdef FEAT_DIFF
-+	    curwin->w_topfill = 0;
-+#endif
-+	}
-+#if defined(FEAT_GUI)
-+	/* Hide the scrollbars from the aucmd_win and update. */
-+	gui_mch_enable_scrollbar(&aucmd_win->w_scrollbars[SBAR_LEFT], FALSE);
-+	gui_mch_enable_scrollbar(&aucmd_win->w_scrollbars[SBAR_RIGHT], FALSE);
-+	gui_may_update_scrollbars();
-+#endif
-+    }
-+    else
-     {
- 	/* restore curwin */
- #ifdef FEAT_WINDOWS
- 	if (win_valid(aco->save_curwin))
- #endif
- 	{
--	    /* restore the buffer which was previously edited by curwin, if
--	     * it's still the same window and it's valid */
-+	    /* Restore the buffer which was previously edited by curwin, if
-+	     * it was changed, we are still the same window and the buffer is
-+	     * valid. */
- 	    if (curwin == aco->new_curwin
--		    && buf_valid(aco->save_buf)
--		    && aco->save_buf->b_ml.ml_mfp != NULL)
-+		    && curbuf != aco->new_curbuf
-+		    && buf_valid(aco->new_curbuf)
-+		    && aco->new_curbuf->b_ml.ml_mfp != NULL)
- 	    {
- 		--curbuf->b_nwindows;
--		curbuf = aco->save_buf;
-+		curbuf = aco->new_curbuf;
- 		curwin->w_buffer = curbuf;
- 		++curbuf->b_nwindows;
- 	    }
-@@ -8357,34 +8626,6 @@
- 	    curbuf = curwin->w_buffer;
- 	}
-     }
--    else
--    {
--	/* restore buffer for curwin if it still exists and is loaded */
--	if (buf_valid(aco->save_buf) && aco->save_buf->b_ml.ml_mfp != NULL)
--	{
--	    --curbuf->b_nwindows;
--	    curbuf = aco->save_buf;
--	    curwin->w_buffer = curbuf;
--	    ++curbuf->b_nwindows;
--	    curwin->w_cursor = aco->save_cursor;
--	    check_cursor();
--	    /* check topline < line_count, in case lines got deleted */
--	    if (aco->save_topline <= curbuf->b_ml.ml_line_count)
--	    {
--		curwin->w_topline = aco->save_topline;
--#ifdef FEAT_DIFF
--		curwin->w_topfill = aco->save_topfill;
--#endif
--	    }
--	    else
--	    {
--		curwin->w_topline = curbuf->b_ml.ml_line_count;
--#ifdef FEAT_DIFF
--		curwin->w_topfill = 0;
--#endif
--	    }
--	}
--    }
- }
- 
- static int	autocmd_nested = FALSE;
-@@ -8523,6 +8764,7 @@
-     char_u	*save_sourcing_name;
-     linenr_T	save_sourcing_lnum;
-     char_u	*save_autocmd_fname;
-+    int		save_autocmd_fname_full;
-     int		save_autocmd_bufnr;
-     char_u	*save_autocmd_match;
-     int		save_autocmd_busy;
-@@ -8601,6 +8843,7 @@
-      * Save the autocmd_* variables and info about the current buffer.
-      */
-     save_autocmd_fname = autocmd_fname;
-+    save_autocmd_fname_full = autocmd_fname_full;
-     save_autocmd_bufnr = autocmd_bufnr;
-     save_autocmd_match = autocmd_match;
-     save_autocmd_busy = autocmd_busy;
-@@ -8618,14 +8861,15 @@
- 	if (fname != NULL && *fname != NUL)
- 	    autocmd_fname = fname;
- 	else if (buf != NULL)
--	    autocmd_fname = buf->b_fname;
-+	    autocmd_fname = buf->b_ffname;
- 	else
- 	    autocmd_fname = NULL;
-     }
-     else
- 	autocmd_fname = fname_io;
-     if (autocmd_fname != NULL)
--	autocmd_fname = FullName_save(autocmd_fname, FALSE);
-+	autocmd_fname = vim_strsave(autocmd_fname);
-+    autocmd_fname_full = FALSE; /* call FullName_save() later */
- 
-     /*
-      * Set the buffer number to be used for <abuf>.
-@@ -8667,9 +8911,11 @@
-     else
-     {
- 	sfname = vim_strsave(fname);
--	/* Don't try expanding FileType, Syntax, WindowID or QuickFixCmd* */
-+	/* Don't try expanding FileType, Syntax, FuncUndefined, WindowID or
-+	 * QuickFixCmd* */
- 	if (event == EVENT_FILETYPE
- 		|| event == EVENT_SYNTAX
-+		|| event == EVENT_FUNCUNDEFINED
- 		|| event == EVENT_REMOTEREPLY
- 		|| event == EVENT_SPELLFILEMISSING
- 		|| event == EVENT_QUICKFIXCMDPRE
-@@ -8810,6 +9056,7 @@
-     sourcing_lnum = save_sourcing_lnum;
-     vim_free(autocmd_fname);
-     autocmd_fname = save_autocmd_fname;
-+    autocmd_fname_full = save_autocmd_fname_full;
-     autocmd_bufnr = save_autocmd_bufnr;
-     autocmd_match = save_autocmd_match;
- #ifdef FEAT_EVAL
-@@ -8918,7 +9165,7 @@
-     {
- 	apc->curpat = NULL;
- 
--	/* only use a pattern when it has not been removed, has commands and
-+	/* Only use a pattern when it has not been removed, has commands and
- 	 * the group matches. For buffer-local autocommands only check the
- 	 * buffer number. */
- 	if (ap->pat != NULL && ap->cmds != NULL
-@@ -8967,12 +9214,11 @@
-  * Called by do_cmdline() to get the next line for ":if".
-  * Returns allocated string, or NULL for end of autocommands.
-  */
--/* ARGSUSED */
-     static char_u *
- getnextac(c, cookie, indent)
--    int	    c;		    /* not used */
-+    int	    c UNUSED;
-     void    *cookie;
--    int	    indent;	    /* not used */
-+    int	    indent UNUSED;
- {
-     AutoPatCmd	    *acp = (AutoPatCmd *)cookie;
-     char_u	    *retval;
-@@ -9083,10 +9329,9 @@
-  * Function given to ExpandGeneric() to obtain the list of autocommand group
-  * names.
-  */
--/*ARGSUSED*/
-     char_u *
- get_augroup_name(xp, idx)
--    expand_T	*xp;
-+    expand_T	*xp UNUSED;
-     int		idx;
- {
-     if (idx == augroups.ga_len)		/* add "END" add the end */
-@@ -9104,7 +9349,7 @@
- set_context_in_autocmd(xp, arg, doautocmd)
-     expand_T	*xp;
-     char_u	*arg;
--    int		doautocmd;	/* TRUE for :doautocmd, FALSE for :autocmd */
-+    int		doautocmd;	/* TRUE for :doauto*, FALSE for :autocmd */
- {
-     char_u	*p;
-     int		group;
-@@ -9152,10 +9397,9 @@
- /*
-  * Function given to ExpandGeneric() to obtain the list of event names.
-  */
--/*ARGSUSED*/
-     char_u *
- get_event_name(xp, idx)
--    expand_T	*xp;
-+    expand_T	*xp UNUSED;
-     int		idx;
- {
-     if (idx < augroups.ga_len)		/* First list group names, if wanted */
-@@ -9254,15 +9498,10 @@
-     ap = first_autopat[(int)event];
-     if (ap == NULL)
- 	goto theend;
--    if (pattern == NULL)
--    {
--	retval = TRUE;
--	goto theend;
--    }
- 
-     /* if pattern is "<buffer>", special handling is needed which uses curbuf */
-     /* for pattern "<buffer=N>, fnamecmp() will work fine */
--    if (STRICMP(pattern, "<buffer>") == 0)
-+    if (pattern != NULL && STRICMP(pattern, "<buffer>") == 0)
- 	buflocal_buf = curbuf;
- 
-     /* Check if there is an autocommand with the given pattern. */
-@@ -9271,9 +9510,10 @@
- 	/* For buffer-local autocommands, fnamecmp() works fine. */
- 	if (ap->pat != NULL && ap->cmds != NULL
- 	    && (group == AUGROUP_ALL || ap->group == group)
--	    && (buflocal_buf == NULL
--		 ? fnamecmp(ap->pat, pattern) == 0
--		 : ap->buflocal_nr == buflocal_buf->b_fnum))
-+	    && (pattern == NULL
-+		|| (buflocal_buf == NULL
-+		    ? fnamecmp(ap->pat, pattern) == 0
-+		    : ap->buflocal_nr == buflocal_buf->b_fnum)))
- 	{
- 	    retval = TRUE;
- 	    break;
-@@ -9296,9 +9536,11 @@
-     aco_save_T	*aco;		/* structure to save values in */
-     buf_T	*buf;		/* new curbuf */
- {
--    aco->save_buf = curbuf;
-+    aco->save_curbuf = curbuf;
-+    --curbuf->b_nwindows;
-     curbuf = buf;
-     curwin->w_buffer = buf;
-+    ++curbuf->b_nwindows;
- }
- 
- /*
-@@ -9309,8 +9551,10 @@
- aucmd_restbuf(aco)
-     aco_save_T	*aco;		/* structure holding saved values */
- {
--    curbuf = aco->save_buf;
-+    --curbuf->b_nwindows;
-+    curbuf = aco->save_curbuf;
-     curwin->w_buffer = curbuf;
-+    ++curbuf->b_nwindows;
- }
- 
- #endif	/* FEAT_AUTOCMD */
-@@ -9467,13 +9711,12 @@
-  *
-  * Returns NULL when out of memory.
-  */
--/*ARGSUSED*/
-     char_u *
- file_pat_to_reg_pat(pat, pat_end, allow_dirs, no_bslash)
-     char_u	*pat;
-     char_u	*pat_end;	/* first char after pattern or NULL */
-     char	*allow_dirs;	/* Result passed back out in here */
--    int		no_bslash;	/* Don't use a backward slash as pathsep */
-+    int		no_bslash UNUSED; /* Don't use a backward slash as pathsep */
- {
-     int		size;
-     char_u	*endp;
-diff -Naur vim72.orig/src/fold.c vim72/src/fold.c
---- vim72.orig/src/fold.c	2008-08-06 04:01:12.000000000 -0700
-+++ vim72/src/fold.c	2009-09-12 08:34:12.000000000 -0700
-@@ -48,7 +48,7 @@
- static int foldFind __ARGS((garray_T *gap, linenr_T lnum, fold_T **fpp));
- static int foldLevelWin __ARGS((win_T *wp, linenr_T lnum));
- static void checkupdate __ARGS((win_T *wp));
--static void setFoldRepeat __ARGS((linenr_T lnum, long count, int open));
-+static void setFoldRepeat __ARGS((linenr_T lnum, long count, int do_open));
- static linenr_T setManualFold __ARGS((linenr_T lnum, int opening, int recurse, int *donep));
- static linenr_T setManualFoldWin __ARGS((win_T *wp, linenr_T lnum, int opening, int recurse, int *donep));
- static void foldOpenNested __ARGS((fold_T *fpr));
-@@ -740,7 +740,7 @@
-     garray_T	*found_ga;
-     fold_T	*found_fp = NULL;
-     linenr_T	found_off = 0;
--    int		use_level = FALSE;
-+    int		use_level;
-     int		maybe_small = FALSE;
-     int		level = 0;
-     linenr_T	lnum = start;
-@@ -757,6 +757,7 @@
- 	gap = &curwin->w_folds;
- 	found_ga = NULL;
- 	lnum_off = 0;
-+	use_level = FALSE;
- 	for (;;)
- 	{
- 	    if (!foldFind(gap, lnum - lnum_off, &fp))
-@@ -783,20 +784,21 @@
- 	else
- 	{
- 	    lnum = found_fp->fd_top + found_fp->fd_len + found_off;
--	    did_one = TRUE;
- 
- 	    if (foldmethodIsManual(curwin))
- 		deleteFoldEntry(found_ga,
- 		    (int)(found_fp - (fold_T *)found_ga->ga_data), recursive);
- 	    else
- 	    {
--		if (found_fp->fd_top + found_off < first_lnum)
--		    first_lnum = found_fp->fd_top;
--		if (lnum > last_lnum)
-+		if (first_lnum > found_fp->fd_top + found_off)
-+		    first_lnum = found_fp->fd_top + found_off;
-+		if (last_lnum < lnum)
- 		    last_lnum = lnum;
--		parseMarker(curwin);
-+		if (!did_one)
-+		    parseMarker(curwin);
- 		deleteFoldMarkers(found_fp, recursive, found_off);
- 	    }
-+	    did_one = TRUE;
- 
- 	    /* redraw window */
- 	    changed_window_setting();
-@@ -811,6 +813,10 @@
- 	    redraw_curbuf_later(INVERTED);
- #endif
-     }
-+    else
-+	/* Deleting markers may make cursor column invalid. */
-+	check_cursor_col();
-+
-     if (last_lnum > 0)
- 	changed_lines(first_lnum, (colnr_T)0, last_lnum, 0L);
- }
-@@ -1241,10 +1247,10 @@
-  * Repeat "count" times.
-  */
-     static void
--setFoldRepeat(lnum, count, open)
-+setFoldRepeat(lnum, count, do_open)
-     linenr_T	lnum;
-     long	count;
--    int		open;
-+    int		do_open;
- {
-     int		done;
-     long	n;
-@@ -1252,7 +1258,7 @@
-     for (n = 0; n < count; ++n)
-     {
- 	done = DONE_NOTHING;
--	(void)setManualFold(lnum, open, FALSE, &done);
-+	(void)setManualFold(lnum, do_open, FALSE, &done);
- 	if (!(done & DONE_ACTION))
- 	{
- 	    /* Only give an error message when no fold could be opened. */
-diff -Naur vim72.orig/src/getchar.c vim72/src/getchar.c
---- vim72.orig/src/getchar.c	2008-07-22 09:57:48.000000000 -0700
-+++ vim72/src/getchar.c	2009-09-12 08:41:14.000000000 -0700
-@@ -1309,6 +1309,9 @@
-     return OK;
- }
- 
-+static int old_char = -1;	/* character put back by vungetc() */
-+static int old_mod_mask;	/* mod_mask for ungotten character */
-+
- #if defined(FEAT_EVAL) || defined(FEAT_EX_EXTRA) || defined(PROTO)
- 
- /*
-@@ -1323,6 +1326,10 @@
-     if (!tp->typebuf_valid)
- 	typebuf = tp->save_typebuf;
- 
-+    tp->old_char = old_char;
-+    tp->old_mod_mask = old_mod_mask;
-+    old_char = -1;
-+
-     tp->save_stuffbuff = stuffbuff;
-     stuffbuff.bh_first.b_next = NULL;
- # ifdef USE_INPUT_BUF
-@@ -1344,6 +1351,9 @@
- 	typebuf = tp->save_typebuf;
-     }
- 
-+    old_char = tp->old_char;
-+    old_mod_mask = tp->old_mod_mask;
-+
-     free_buff(&stuffbuff);
-     stuffbuff = tp->save_stuffbuff;
- # ifdef USE_INPUT_BUF
-@@ -1499,9 +1509,6 @@
- #define KL_PART_KEY -1		/* keylen value for incomplete key-code */
- #define KL_PART_MAP -2		/* keylen value for incomplete mapping */
- 
--static int old_char = -1;	/* character put back by vungetc() */
--static int old_mod_mask;	/* mod_mask for ungotten character */
--
- /*
-  * Get the next input character.
-  * Can return a special key or a multi-byte character.
-@@ -3701,11 +3708,10 @@
-  * Clear all mappings or abbreviations.
-  * 'abbr' should be FALSE for mappings, TRUE for abbreviations.
-  */
--/*ARGSUSED*/
-     void
- map_clear(cmdp, arg, forceit, abbr)
-     char_u	*cmdp;
--    char_u	*arg;
-+    char_u	*arg UNUSED;
-     int		forceit;
-     int		abbr;
- {
-@@ -3734,13 +3740,12 @@
- /*
-  * Clear all mappings in "mode".
-  */
--/*ARGSUSED*/
-     void
- map_clear_int(buf, mode, local, abbr)
--    buf_T	*buf;	    /* buffer for local mappings */
--    int		mode;	    /* mode in which to delete */
--    int		local;	    /* TRUE for buffer-local mappings */
--    int		abbr;	    /* TRUE for abbreviations */
-+    buf_T	*buf UNUSED;	/* buffer for local mappings */
-+    int		mode;		/* mode in which to delete */
-+    int		local UNUSED;	/* TRUE for buffer-local mappings */
-+    int		abbr;		/* TRUE for abbreviations */
- {
-     mapblock_T	*mp, **mpp;
-     int		hash;
-@@ -3816,7 +3821,11 @@
-     int len = 1;
- 
-     if (msg_didout || msg_silent != 0)
-+    {
- 	msg_putchar('\n');
-+	if (got_int)	    /* 'q' typed at MORE prompt */
-+	    return;
-+    }
-     if ((mp->m_mode & (INSERT + CMDLINE)) == INSERT + CMDLINE)
- 	msg_putchar('!');			/* :map! */
-     else if (mp->m_mode & INSERT)
-@@ -4702,7 +4711,7 @@
- 			return FAIL;
- 		    if (mp->m_noremap != REMAP_YES && fprintf(fd, "nore") < 0)
- 			return FAIL;
--		    if (fprintf(fd, cmd) < 0)
-+		    if (fputs(cmd, fd) < 0)
- 			return FAIL;
- 		    if (buf != NULL && fputs(" <buffer>", fd) < 0)
- 			return FAIL;
-@@ -4801,7 +4810,7 @@
- 	    }
- 	    if (IS_SPECIAL(c) || modifiers)	/* special key */
- 	    {
--		if (fprintf(fd, (char *)get_special_key_name(c, modifiers)) < 0)
-+		if (fputs((char *)get_special_key_name(c, modifiers), fd) < 0)
- 		    return FAIL;
- 		continue;
- 	    }
-diff -Naur vim72.orig/src/globals.h vim72/src/globals.h
---- vim72.orig/src/globals.h	2008-07-26 04:53:29.000000000 -0700
-+++ vim72/src/globals.h	2009-09-12 08:41:43.000000000 -0700
-@@ -482,8 +482,10 @@
- /*
-  * While executing external commands or in Ex mode, should not insert GUI
-  * events in the input buffer: Set hold_gui_events to non-zero.
-+ *
-+ * volatile because it is used in signal handler sig_sysmouse().
-  */
--EXTERN int	hold_gui_events INIT(= 0);
-+EXTERN volatile int hold_gui_events INIT(= 0);
- 
- /*
-  * When resizing the shell is postponed, remember the new size, and call
-@@ -507,6 +509,7 @@
- EXTERN int	clip_unnamed INIT(= FALSE);
- EXTERN int	clip_autoselect INIT(= FALSE);
- EXTERN int	clip_autoselectml INIT(= FALSE);
-+EXTERN int	clip_html INIT(= FALSE);
- EXTERN regprog_T *clip_exclude_prog INIT(= NULL);
- #endif
- 
-@@ -522,7 +525,7 @@
- EXTERN win_T	*prevwin INIT(= NULL);	/* previous window */
- # define W_NEXT(wp) ((wp)->w_next)
- # define FOR_ALL_WINDOWS(wp) for (wp = firstwin; wp != NULL; wp = wp->w_next)
--#define FOR_ALL_TAB_WINDOWS(tp, wp) \
-+# define FOR_ALL_TAB_WINDOWS(tp, wp) \
-     for ((tp) = first_tabpage; (tp) != NULL; (tp) = (tp)->tp_next) \
- 	for ((wp) = ((tp) == curtab) \
- 		? firstwin : (tp)->tp_firstwin; (wp); (wp) = (wp)->w_next)
-@@ -536,6 +539,11 @@
- 
- EXTERN win_T	*curwin;	/* currently active window */
- 
-+#ifdef FEAT_AUTOCMD
-+EXTERN win_T	*aucmd_win;	/* window used in aucmd_prepbuf() */
-+EXTERN int	aucmd_win_used INIT(= FALSE);	/* aucmd_win is being used */
-+#endif
-+
- /*
-  * The window layout is kept in a tree of frames.  topframe points to the top
-  * of the tree.
-@@ -597,7 +605,8 @@
- EXTERN int	really_exiting INIT(= FALSE);
- 				/* TRUE when we are sure to exit, e.g., after
- 				 * a deadly signal */
--EXTERN int	full_screen INIT(= FALSE);
-+/* volatile because it is used in signal handler deathtrap(). */
-+EXTERN volatile int full_screen INIT(= FALSE);
- 				/* TRUE when doing full-screen output
- 				 * otherwise only writing some messages */
- 
-@@ -616,6 +625,11 @@
- EXTERN int	curbuf_lock INIT(= 0);
- 				/* non-zero when the current buffer can't be
- 				 * changed.  Used for FileChangedRO. */
-+EXTERN int	allbuf_lock INIT(= 0);
-+				/* non-zero when no buffer name can be
-+				 * changed, no buffer can be deleted and
-+				 * current directory can't be changed.
-+				 * Used for SwapExists et al. */
- #endif
- #ifdef FEAT_EVAL
- # define HAVE_SANDBOX
-@@ -710,7 +724,7 @@
- 
- EXTERN pos_T	saved_cursor		/* w_cursor before formatting text. */
- # ifdef DO_INIT
--	= INIT_POS_T
-+	= INIT_POS_T(0, 0, 0)
- # endif
- 	;
- 
-@@ -739,10 +753,12 @@
-  */
- EXTERN JMP_BUF lc_jump_env;	/* argument to SETJMP() */
- # ifdef SIGHASARG
--EXTERN int lc_signal;		/* catched signal number, 0 when no was signal
--				   catched; used for mch_libcall() */
-+/* volatile because it is used in signal handlers. */
-+EXTERN volatile int lc_signal;	/* caught signal number, 0 when no was signal
-+				   caught; used for mch_libcall() */
- # endif
--EXTERN int lc_active INIT(= FALSE); /* TRUE when lc_jump_env is valid. */
-+/* volatile because it is used in signal handler deathtrap(). */
-+EXTERN volatile int lc_active INIT(= FALSE); /* TRUE when lc_jump_env is valid. */
- #endif
- 
- #if defined(FEAT_MBYTE) || defined(FEAT_POSTSCRIPT)
-@@ -800,11 +816,14 @@
-  */
- /* length of char in bytes, including following composing chars */
- EXTERN int (*mb_ptr2len) __ARGS((char_u *p)) INIT(= latin_ptr2len);
-+/* idem, with limit on string length */
-+EXTERN int (*mb_ptr2len_len) __ARGS((char_u *p, int size)) INIT(= latin_ptr2len_len);
- /* byte length of char */
- EXTERN int (*mb_char2len) __ARGS((int c)) INIT(= latin_char2len);
- /* convert char to bytes, return the length */
- EXTERN int (*mb_char2bytes) __ARGS((int c, char_u *buf)) INIT(= latin_char2bytes);
- EXTERN int (*mb_ptr2cells) __ARGS((char_u *p)) INIT(= latin_ptr2cells);
-+EXTERN int (*mb_ptr2cells_len) __ARGS((char_u *p, int size)) INIT(= latin_ptr2cells_len);
- EXTERN int (*mb_char2cells) __ARGS((int c)) INIT(= latin_char2cells);
- EXTERN int (*mb_off2cells) __ARGS((unsigned off, unsigned max_off)) INIT(= latin_off2cells);
- EXTERN int (*mb_ptr2char) __ARGS((char_u *p)) INIT(= latin_ptr2char);
-@@ -950,7 +969,7 @@
- 		    ;
- EXTERN typebuf_T typebuf		/* typeahead buffer */
- #ifdef DO_INIT
--		    = {NULL, NULL}
-+		    = {NULL, NULL, 0, 0, 0, 0, 0, 0, 0}
- #endif
- 		    ;
- #ifdef FEAT_EX_EXTRA
-@@ -986,7 +1005,8 @@
- EXTERN FILE	*scriptout  INIT(= NULL);   /* stream to write script to */
- EXTERN int	read_cmd_fd INIT(= 0);	    /* fd to read commands from */
- 
--EXTERN int	got_int INIT(= FALSE);	    /* set to TRUE when interrupt
-+/* volatile because it is used in signal handler catch_sigint(). */
-+EXTERN volatile int got_int INIT(= FALSE);    /* set to TRUE when interrupt
- 						signal occurred */
- #ifdef USE_TERM_CONSOLE
- EXTERN int	term_console INIT(= FALSE); /* set to TRUE when console used */
-@@ -1022,12 +1042,13 @@
- #endif
- #ifdef FEAT_AUTOCMD
- EXTERN char_u	*autocmd_fname INIT(= NULL); /* fname for <afile> on cmdline */
-+EXTERN int	autocmd_fname_full;	     /* autocmd_fname is full path */
- EXTERN int	autocmd_bufnr INIT(= 0);     /* fnum for <abuf> on cmdline */
- EXTERN char_u	*autocmd_match INIT(= NULL); /* name for <amatch> on cmdline */
- EXTERN int	did_cursorhold INIT(= FALSE); /* set when CursorHold t'gerd */
- EXTERN pos_T	last_cursormoved	    /* for CursorMoved event */
- # ifdef DO_INIT
--			= INIT_POS_T
-+			= INIT_POS_T(0, 0, 0)
- # endif
- 			;
- #endif
-@@ -1339,7 +1360,6 @@
- 
- #ifdef FEAT_NETBEANS_INTG
- EXTERN char *netbeansArg INIT(= NULL);	/* the -nb[:host:port:passwd] arg */
--EXTERN int netbeansCloseFile INIT(= 0);	/* send killed if != 0 */
- EXTERN int netbeansFireChanges INIT(= 1); /* send buffer changes if != 0 */
- EXTERN int netbeansForcedQuit INIT(= 0);/* don't write modified files */
- EXTERN int netbeansReadFile INIT(= 1);	/* OK to read from disk if != 0 */
-@@ -1548,6 +1568,14 @@
- EXTERN time_t starttime;
- 
- /*
-+ * Some compilers warn for not using a return value, but in some situations we
-+ * can't do anything useful with the value.  Assign to this variable to avoid
-+ * the warning.
-+ */
-+EXTERN int ignored;
-+EXTERN char *ignoredp;
-+
-+/*
-  * Optional Farsi support.  Include it here, so EXTERN and INIT are defined.
-  */
- #ifdef FEAT_FKMAP
-diff -Naur vim72.orig/src/gui_at_fs.c vim72/src/gui_at_fs.c
---- vim72.orig/src/gui_at_fs.c	2006-05-12 02:26:24.000000000 -0700
-+++ vim72/src/gui_at_fs.c	2009-09-12 08:39:05.000000000 -0700
-@@ -829,7 +829,7 @@
-     text.format = FMT8BIT;
- 
- #ifdef XtNinternational
--    if (_XawTextFormat((TextWidget)selFileField) == XawFmtWide)
-+    if ((unsigned long)_XawTextFormat((TextWidget)selFileField) == XawFmtWide)
-     {
- 	XawTextReplace(selFileField, (XawTextPosition)0,
- 				    (XawTextPosition)WcsLen((wchar_t *)&SFtextBuffer[0]), &text);
-@@ -851,17 +851,15 @@
- #endif
- }
- 
--/* ARGSUSED */
-     static void
- SFbuttonPressList(w, n, event)
--    Widget		w;
--    int			n;
--    XButtonPressedEvent	*event;
-+    Widget		w UNUSED;
-+    int			n UNUSED;
-+    XButtonPressedEvent	*event UNUSED;
- {
-     SFbuttonPressed = 1;
- }
- 
--/* ARGSUSED */
-     static void
- SFbuttonReleaseList(w, n, event)
-     Widget		 w;
-@@ -989,11 +987,10 @@
-     return result;
- }
- 
--/* ARGSUSED */
-     static void
- SFdirModTimer(cl, id)
--    XtPointer		cl;
--    XtIntervalId	*id;
-+    XtPointer		cl UNUSED;
-+    XtIntervalId	*id UNUSED;
- {
-     static int		n = -1;
-     static int		f = 0;
-@@ -1596,11 +1593,10 @@
- 
- static void SFscrollTimer __ARGS((XtPointer p, XtIntervalId *id));
- 
--/* ARGSUSED */
-     static void
- SFscrollTimer(p, id)
-     XtPointer		p;
--    XtIntervalId	*id;
-+    XtIntervalId	*id UNUSED;
- {
-     SFDir	*dir;
-     int		save;
-@@ -1695,10 +1691,9 @@
-     }
- }
- 
--/* ARGSUSED */
-     static void
- SFenterList(w, n, event)
--    Widget		w;
-+    Widget		w UNUSED;
-     int			n;
-     XEnterWindowEvent	*event;
- {
-@@ -1719,12 +1714,11 @@
-     }
- }
- 
--/* ARGSUSED */
-     static void
- SFleaveList(w, n, event)
--    Widget	w;
-+    Widget	w UNUSED;
-     int		n;
--    XEvent	*event;
-+    XEvent	*event UNUSED;
- {
-     if (SFcurrentInvert[n] != -1)
-     {
-@@ -1733,10 +1727,9 @@
-     }
- }
- 
--/* ARGSUSED */
-     static void
- SFmotionList(w, n, event)
--    Widget		w;
-+    Widget		w UNUSED;
-     int			n;
-     XMotionEvent	*event;
- {
-@@ -1754,7 +1747,6 @@
-     }
- }
- 
--/* ARGSUSED */
-     static void
- SFvFloatSliderMovedCallback(w, n, fnew)
-     Widget	w;
-@@ -1767,10 +1759,9 @@
-     SFvSliderMovedCallback(w, (int)(long)n, nw);
- }
- 
--/* ARGSUSED */
-     static void
- SFvSliderMovedCallback(w, n, nw)
--    Widget	w;
-+    Widget	w UNUSED;
-     int		n;
-     int		nw;
- {
-@@ -1853,10 +1844,9 @@
-     }
- }
- 
--/* ARGSUSED */
-     static void
- SFvAreaSelectedCallback(w, n, pnew)
--    Widget		w;
-+    Widget	w;
-     XtPointer	n;
-     XtPointer	pnew;
- {
-@@ -1914,10 +1904,9 @@
-     SFvSliderMovedCallback(w, (int)(long)n, nw);
- }
- 
--/* ARGSUSED */
-     static void
- SFhSliderMovedCallback(w, n, nw)
--    Widget	w;
-+    Widget	w UNUSED;
-     XtPointer	n;
-     XtPointer	nw;
- {
-@@ -1933,10 +1922,9 @@
-     SFdrawList((int)(long)n, SF_DO_NOT_SCROLL);
- }
- 
--/* ARGSUSED */
-     static void
- SFhAreaSelectedCallback(w, n, pnew)
--    Widget		w;
-+    Widget	w;
-     XtPointer	n;
-     XtPointer	pnew;
- {
-@@ -1994,11 +1982,10 @@
-     }
- }
- 
--/* ARGSUSED */
-     static void
- SFpathSliderMovedCallback(w, client_data, nw)
--    Widget		w;
--    XtPointer	client_data;
-+    Widget	w UNUSED;
-+    XtPointer	client_data UNUSED;
-     XtPointer	nw;
- {
-     SFDir		*dir;
-@@ -2031,11 +2018,10 @@
-     XawTextSetInsertionPoint(selFileField, pos);
- }
- 
--/* ARGSUSED */
-     static void
- SFpathAreaSelectedCallback(w, client_data, pnew)
-     Widget	w;
--    XtPointer	client_data;
-+    XtPointer	client_data UNUSED;
-     XtPointer	pnew;
- {
-     int		nw = (int)(long)pnew;
-@@ -2206,13 +2192,12 @@
- 
- static void SFexposeList __ARGS((Widget w, XtPointer n, XEvent *event, Boolean *cont));
- 
--/* ARGSUSED */
-     static void
- SFexposeList(w, n, event, cont)
--    Widget	w;
-+    Widget	w UNUSED;
-     XtPointer	n;
-     XEvent	*event;
--    Boolean	*cont;
-+    Boolean	*cont UNUSED;
- {
-     if ((event->type == NoExpose) || event->xexpose.count)
- 	return;
-@@ -2222,13 +2207,12 @@
- 
- static void SFmodVerifyCallback __ARGS((Widget w, XtPointer client_data, XEvent *event, Boolean *cont));
- 
--/* ARGSUSED */
-     static void
- SFmodVerifyCallback(w, client_data, event, cont)
--    Widget		w;
--    XtPointer		client_data;
-+    Widget		w UNUSED;
-+    XtPointer		client_data UNUSED;
-     XEvent		*event;
--    Boolean		*cont;
-+    Boolean		*cont UNUSED;
- {
-     char	buf[2];
- 
-@@ -2241,11 +2225,11 @@
- 
- static void SFokCallback __ARGS((Widget w, XtPointer cl, XtPointer cd));
- 
--/* ARGSUSED */
-     static void
- SFokCallback(w, cl, cd)
--    Widget	w;
--    XtPointer	cl, cd;
-+    Widget	w UNUSED;
-+    XtPointer	cl UNUSED;
-+    XtPointer	cd UNUSED;
- {
-     SFstatus = SEL_FILE_OK;
- }
-@@ -2258,11 +2242,11 @@
- 
- static void SFcancelCallback __ARGS((Widget w, XtPointer cl, XtPointer cd));
- 
--/* ARGSUSED */
-     static void
- SFcancelCallback(w, cl, cd)
--    Widget	w;
--    XtPointer	cl, cd;
-+    Widget	w UNUSED;
-+    XtPointer	cl UNUSED;
-+    XtPointer	cd UNUSED;
- {
-     SFstatus = SEL_FILE_CANCEL;
- }
-@@ -2275,16 +2259,15 @@
- 
- static void SFdismissAction __ARGS((Widget w, XEvent *event, String *params, Cardinal *num_params));
- 
--/* ARGSUSED */
-     static void
- SFdismissAction(w, event, params, num_params)
--    Widget	w;
--    XEvent *event;
--    String *params;
--    Cardinal *num_params;
-+    Widget	w UNUSED;
-+    XEvent	*event;
-+    String	*params UNUSED;
-+    Cardinal	*num_params UNUSED;
- {
--    if (event->type == ClientMessage &&
--	    event->xclient.data.l[0] != SFwmDeleteWindow)
-+    if (event->type == ClientMessage
-+	    && (Atom)event->xclient.data.l[0] != SFwmDeleteWindow)
- 	return;
- 
-     SFstatus = SEL_FILE_CANCEL;
-@@ -2703,7 +2686,7 @@
- SFtextChanged()
- {
- #if defined(FEAT_XFONTSET) && defined(XtNinternational)
--    if (_XawTextFormat((TextWidget)selFileField) == XawFmtWide)
-+    if ((unsigned long)_XawTextFormat((TextWidget)selFileField) == XawFmtWide)
-     {
- 	wchar_t *wcbuf=(wchar_t *)SFtextBuffer;
- 
-@@ -2749,7 +2732,7 @@
- #if defined(FEAT_XFONTSET) && defined(XtNinternational)
-     char *buf;
- 
--    if (_XawTextFormat((TextWidget)selFileField) == XawFmtWide)
-+    if ((unsigned long)_XawTextFormat((TextWidget)selFileField) == XawFmtWide)
-     {
- 	wchar_t *wcbuf;
- 	int mbslength;
-diff -Naur vim72.orig/src/gui_athena.c vim72/src/gui_athena.c
---- vim72.orig/src/gui_athena.c	2008-06-21 12:38:58.000000000 -0700
-+++ vim72/src/gui_athena.c	2009-09-12 08:39:05.000000000 -0700
-@@ -86,10 +86,9 @@
-  * Scrollbar callback (XtNjumpProc) for when the scrollbar is dragged with the
-  * left or middle mouse button.
-  */
--/* ARGSUSED */
-     static void
- gui_athena_scroll_cb_jump(w, client_data, call_data)
--    Widget	w;
-+    Widget	w UNUSED;
-     XtPointer	client_data, call_data;
- {
-     scrollbar_T *sb, *sb_info;
-@@ -122,10 +121,9 @@
-  * Scrollbar callback (XtNscrollProc) for paging up or down with the left or
-  * right mouse buttons.
-  */
--/* ARGSUSED */
-     static void
- gui_athena_scroll_cb_scroll(w, client_data, call_data)
--    Widget	w;
-+    Widget	w UNUSED;
-     XtPointer	client_data, call_data;
- {
-     scrollbar_T *sb, *sb_info;
-@@ -492,7 +490,7 @@
-     if (menu->icon_builtin || gui_find_bitmap(menu->name, buf, "xpm") == FAIL)
-     {
- 	if (menu->iconidx >= 0 && menu->iconidx
--		   < (sizeof(built_in_pixmaps) / sizeof(built_in_pixmaps[0])))
-+	      < (int)(sizeof(built_in_pixmaps) / sizeof(built_in_pixmaps[0])))
- 	    xpm = built_in_pixmaps[menu->iconidx];
- 	else
- 	    xpm = tb_blank_xpm;
-@@ -763,7 +761,7 @@
-     XtGetValues(XtParent(widget), args, n);
- 
-     retval = num_children;
--    for (i = 0; i < num_children; ++i)
-+    for (i = 0; i < (int)num_children; ++i)
-     {
- 	Widget	current = children[i];
- 	vimmenu_T	*menu = NULL;
-@@ -780,11 +778,10 @@
-     return retval;
- }
- 
--/* ARGSUSED */
-     void
- gui_mch_add_menu(menu, idx)
-     vimmenu_T	*menu;
--    int		idx;
-+    int		idx UNUSED;
- {
-     char_u	*pullright_name;
-     Dimension	height, space, border;
-@@ -869,7 +866,7 @@
- 	    XtVaGetValues(parent->submenu_id, XtNchildren, &children,
- 					      XtNnumChildren, &num_children,
- 					      NULL);
--	    for (i = 0; i < num_children; ++i)
-+	    for (i = 0; i < (int)num_children; ++i)
- 	    {
- 		XtVaSetValues(children[i],
- 			      XtNrightMargin, puller_width,
-@@ -913,7 +910,7 @@
-     XtVaGetValues(id, XtNchildren, &children,
- 		      XtNnumChildren, &num_children,
- 		      NULL);
--    for (i = 0; i < num_children; ++i)
-+    for (i = 0; i < (int)num_children; ++i)
-     {
- 	if (children[i] == ignore)
- 	    continue;
-@@ -1175,11 +1172,10 @@
-     return pname;
- }
- 
--/* ARGSUSED */
-     void
- gui_mch_add_menu_item(menu, idx)
-     vimmenu_T	*menu;
--    int		idx;
-+    int		idx UNUSED;
- {
-     vimmenu_T	*parent = menu->parent;
- 
-@@ -1444,7 +1440,7 @@
- 		XtNchildren,	    &children,
- 		XtNnumChildren,	    &numChildren,
- 		NULL);
--	for (i = 0; i < numChildren; i++)
-+	for (i = 0; i < (int)numChildren; i++)
- 	{
- 	    whgt = 0;
- 
-@@ -1473,10 +1469,9 @@
- #endif
- 
- 
--/* ARGSUSED */
-     void
- gui_mch_toggle_tearoffs(enable)
--    int		enable;
-+    int		enable UNUSED;
- {
-     /* no tearoff menus */
- }
-@@ -1537,7 +1532,7 @@
- 	    else
- 		get_left_margin = True;
- 
--	    for (i = 0; i < num_children; ++i)
-+	    for (i = 0; i < (int)num_children; ++i)
- 	    {
- 		if (children[i] == menu->id)
- 		    continue;
-@@ -1645,11 +1640,10 @@
-     }
- }
- 
--/*ARGSUSED*/
-     static void
- gui_athena_menu_timeout(client_data, id)
-     XtPointer	    client_data;
--    XtIntervalId    *id;
-+    XtIntervalId    *id UNUSED;
- {
-     Widget  w = (Widget)client_data;
-     Widget  popup;
-@@ -1678,12 +1672,11 @@
-  *
-  * This is called when XtPopup() is called.
-  */
--/*ARGSUSED*/
-     static void
- gui_athena_popup_callback(w, client_data, call_data)
-     Widget	w;
-     XtPointer	client_data;
--    XtPointer	call_data;
-+    XtPointer	call_data UNUSED;
- {
-     /* Assumption: XtIsSubclass(XtParent(w),simpleMenuWidgetClass) */
-     vimmenu_T	*menu = (vimmenu_T *)client_data;
-@@ -1711,7 +1704,6 @@
- 		     NULL);
- }
- 
--/* ARGSUSED */
-     static void
- gui_athena_popdown_submenus_action(w, event, args, nargs)
-     Widget	w;
-@@ -1756,7 +1748,6 @@
-     return False;
- }
- 
--/* ARGSUSED */
-     static void
- gui_athena_delayed_arm_action(w, event, args, nargs)
-     Widget	w;
-@@ -1837,7 +1828,6 @@
-      * (XtIsSubclass(popup,simpleMenuWidgetClass) == True) */
- }
- 
--/* ARGSUSED */
-     void
- gui_mch_show_popupmenu(menu)
-     vimmenu_T *menu;
-@@ -2046,15 +2036,14 @@
-  * Put up a file requester.
-  * Returns the selected name in allocated memory, or NULL for Cancel.
-  */
--/* ARGSUSED */
-     char_u *
- gui_mch_browse(saving, title, dflt, ext, initdir, filter)
--    int		saving;		/* select file to write */
--    char_u	*title;		/* not used (title for the window) */
--    char_u	*dflt;		/* not used (default name) */
--    char_u	*ext;		/* not used (extension added) */
-+    int		saving UNUSED;	/* select file to write */
-+    char_u	*title;		/* title for the window */
-+    char_u	*dflt;		/* default name */
-+    char_u	*ext UNUSED;	/* extension added */
-     char_u	*initdir;	/* initial directory, NULL for current dir */
--    char_u	*filter;	/* not used (file name filter) */
-+    char_u	*filter UNUSED;	/* file name filter */
- {
-     Position x, y;
-     char_u	dirbuf[MAXPATHL];
-@@ -2100,13 +2089,12 @@
-  * Callback function for the textfield.  When CR is hit this works like
-  * hitting the "OK" button, ESC like "Cancel".
-  */
--/* ARGSUSED */
-     static void
- keyhit_callback(w, client_data, event, cont)
--    Widget		w;
--    XtPointer		client_data;
-+    Widget		w UNUSED;
-+    XtPointer		client_data UNUSED;
-     XEvent		*event;
--    Boolean		*cont;
-+    Boolean		*cont UNUSED;
- {
-     char	buf[2];
- 
-@@ -2119,12 +2107,11 @@
-     }
- }
- 
--/* ARGSUSED */
-     static void
- butproc(w, client_data, call_data)
--    Widget	w;
-+    Widget	w UNUSED;
-     XtPointer	client_data;
--    XtPointer	call_data;
-+    XtPointer	call_data UNUSED;
- {
-     dialogStatus = (int)(long)client_data + 1;
- }
-@@ -2132,27 +2119,25 @@
- /*
-  * Function called when dialog window closed.
-  */
--/*ARGSUSED*/
-     static void
- dialog_wm_handler(w, client_data, event, dum)
--    Widget	w;
--    XtPointer	client_data;
-+    Widget	w UNUSED;
-+    XtPointer	client_data UNUSED;
-     XEvent	*event;
--    Boolean	*dum;
-+    Boolean	*dum UNUSED;
- {
-     if (event->type == ClientMessage
--	    && ((XClientMessageEvent *)event)->data.l[0] == dialogatom)
-+	    && (Atom)((XClientMessageEvent *)event)->data.l[0] == dialogatom)
- 	dialogStatus = 0;
- }
- 
--/* ARGSUSED */
-     int
- gui_mch_dialog(type, title, message, buttons, dfltbutton, textfield)
--    int		type;
-+    int		type UNUSED;
-     char_u	*title;
-     char_u	*message;
-     char_u	*buttons;
--    int		dfltbutton;
-+    int		dfltbutton UNUSED;
-     char_u	*textfield;
- {
-     char_u		*buts;
-diff -Naur vim72.orig/src/gui_at_sb.c vim72/src/gui_at_sb.c
---- vim72.orig/src/gui_at_sb.c	2004-06-07 07:32:25.000000000 -0700
-+++ vim72/src/gui_at_sb.c	2009-09-12 08:39:05.000000000 -0700
-@@ -198,10 +198,13 @@
-     /* extension	*/  NULL
-   },
-   { /* simple fields */
--    /* change_sensitive	*/  XtInheritChangeSensitive
-+    /* change_sensitive	*/  XtInheritChangeSensitive,
-+#ifndef OLDXAW
-+    /* extension */	    NULL
-+#endif
-   },
-   { /* scrollbar fields */
--    /* ignore	    */	0
-+    /* empty	    */	    0
-   }
- };
- 
-@@ -241,7 +244,8 @@
- 
-     if (bottom <= 0 || bottom <= top)
- 	return;
--    if ((sw = sbw->scrollbar.shadow_width) < 0)
-+    sw = sbw->scrollbar.shadow_width;
-+    if (sw < 0)
- 	sw = 0;
-     margin = MARGIN (sbw);
-     floor = sbw->scrollbar.length - margin + 2;
-@@ -516,13 +520,12 @@
-     }
- }
- 
--/* ARGSUSED */
-     static void
- Initialize(request, new, args, num_args)
--    Widget	request;	/* what the client asked for */
-+    Widget	request UNUSED;	/* what the client asked for */
-     Widget	new;		/* what we're going to give him */
--    ArgList	args;
--    Cardinal	*num_args;
-+    ArgList	args UNUSED;
-+    Cardinal	*num_args UNUSED;
- {
-     ScrollbarWidget sbw = (ScrollbarWidget) new;
- 
-@@ -556,14 +559,13 @@
- 	(w, valueMask, attributes);
- }
- 
--/* ARGSUSED */
-     static Boolean
- SetValues(current, request, desired, args, num_args)
--    Widget  current,	    /* what I am */
--	    request,	    /* what he wants me to be */
--	    desired;	    /* what I will become */
--    ArgList args;
--    Cardinal *num_args;
-+    Widget  current;	    /* what I am */
-+    Widget  request UNUSED; /* what he wants me to be */
-+    Widget  desired;	    /* what I will become */
-+    ArgList args UNUSED;
-+    Cardinal *num_args UNUSED;
- {
-     ScrollbarWidget	sbw = (ScrollbarWidget) current;
-     ScrollbarWidget	dsbw = (ScrollbarWidget) desired;
-@@ -609,7 +611,6 @@
- }
- 
- 
--/* ARGSUSED */
-     static void
- Redisplay(w, event, region)
-     Widget w;
-@@ -789,11 +790,10 @@
-     }
- }
- 
--/* ARGSUSED */
-     static void
- RepeatNotify(client_data, idp)
-     XtPointer client_data;
--    XtIntervalId *idp;
-+    XtIntervalId *idp UNUSED;
- {
-     ScrollbarWidget sbw = (ScrollbarWidget) client_data;
-     int		    call_data;
-@@ -839,46 +839,42 @@
-     return (num < small) ? small : ((num > big) ? big : num);
- }
- 
--/* ARGSUSED */
-     static void
- ScrollOneLineUp(w, event, params, num_params)
-     Widget	w;
-     XEvent	*event;
--    String	*params;
--    Cardinal	*num_params;
-+    String	*params UNUSED;
-+    Cardinal	*num_params UNUSED;
- {
-     ScrollSome(w, event, -ONE_LINE_DATA);
- }
- 
--/* ARGSUSED */
-     static void
- ScrollOneLineDown(w, event, params, num_params)
-     Widget	w;
-     XEvent	*event;
--    String	*params;
--    Cardinal	*num_params;
-+    String	*params UNUSED;
-+    Cardinal	*num_params UNUSED;
- {
-     ScrollSome(w, event, ONE_LINE_DATA);
- }
- 
--/* ARGSUSED */
-     static void
- ScrollPageDown(w, event, params, num_params)
-     Widget	w;
-     XEvent	*event;
--    String	*params;
--    Cardinal	*num_params;
-+    String	*params UNUSED;
-+    Cardinal	*num_params UNUSED;
- {
-     ScrollSome(w, event, ONE_PAGE_DATA);
- }
- 
--/* ARGSUSED */
-     static void
- ScrollPageUp(w, event, params, num_params)
-     Widget	w;
-     XEvent	*event;
--    String	*params;
--    Cardinal	*num_params;
-+    String	*params UNUSED;
-+    Cardinal	*num_params UNUSED;
- {
-     ScrollSome(w, event, -ONE_PAGE_DATA);
- }
-@@ -901,13 +897,12 @@
-     XtCallCallbacks(w, XtNscrollProc, (XtPointer)call_data);
- }
- 
--/* ARGSUSED */
-     static void
- NotifyScroll(w, event, params, num_params)
-     Widget	w;
-     XEvent	*event;
--    String	*params;
--    Cardinal	*num_params;
-+    String	*params UNUSED;
-+    Cardinal	*num_params UNUSED;
- {
-     ScrollbarWidget sbw = (ScrollbarWidget) w;
-     Position	    x, y, loc;
-@@ -991,13 +986,12 @@
- 					   delay, RepeatNotify, (XtPointer)w);
- }
- 
--/* ARGSUSED */
-     static void
- EndScroll(w, event, params, num_params)
-     Widget w;
--    XEvent *event;	/* unused */
--    String *params;	/* unused */
--    Cardinal *num_params;   /* unused */
-+    XEvent *event UNUSED;
-+    String *params UNUSED;
-+    Cardinal *num_params UNUSED;
- {
-     ScrollbarWidget sbw = (ScrollbarWidget) w;
- 
-@@ -1023,13 +1017,12 @@
-     return PICKLENGTH(sbw, x / width, y / height);
- }
- 
--/* ARGSUSED */
-     static void
- MoveThumb(w, event, params, num_params)
-     Widget	w;
-     XEvent	*event;
--    String	*params;	/* unused */
--    Cardinal	*num_params;	/* unused */
-+    String	*params UNUSED;
-+    Cardinal	*num_params UNUSED;
- {
-     ScrollbarWidget	sbw = (ScrollbarWidget)w;
-     Position		x, y;
-@@ -1069,15 +1062,20 @@
- }
- 
- 
--/* ARGSUSED */
-     static void
- NotifyThumb(w, event, params, num_params)
-     Widget	w;
-     XEvent	*event;
--    String	*params;	/* unused */
--    Cardinal	*num_params;	/* unused */
-+    String	*params UNUSED;
-+    Cardinal	*num_params UNUSED;
- {
-     ScrollbarWidget sbw = (ScrollbarWidget)w;
-+    /* Use a union to avoid a warning for the weird conversion from float to
-+     * XtPointer.  Comes from Xaw/Scrollbar.c. */
-+    union {
-+	XtPointer xtp;
-+	float xtf;
-+    } xtpf;
- 
-     if (LookAhead(w, event))
- 	return;
-@@ -1085,11 +1083,11 @@
-     /* thumbProc is not pretty, but is necessary for backwards
-        compatibility on those architectures for which it work{s,ed};
-        the intent is to pass a (truncated) float by value. */
--    XtCallCallbacks(w, XtNthumbProc, *(XtPointer*)&sbw->scrollbar.top);
-+    xtpf.xtf = sbw->scrollbar.top;
-+    XtCallCallbacks(w, XtNthumbProc, xtpf.xtp);
-     XtCallCallbacks(w, XtNjumpProc, (XtPointer)&sbw->scrollbar.top);
- }
- 
--/* ARGSUSED */
-     static void
- AllocTopShadowGC(w)
-     Widget w;
-@@ -1103,7 +1101,6 @@
-     sbw->scrollbar.top_shadow_GC = XtGetGC(w, valuemask, &myXGCV);
- }
- 
--/* ARGSUSED */
-     static void
- AllocBotShadowGC(w)
-     Widget w;
-@@ -1117,11 +1114,10 @@
-     sbw->scrollbar.bot_shadow_GC = XtGetGC(w, valuemask, &myXGCV);
- }
- 
--/* ARGSUSED */
-     static void
- _Xaw3dDrawShadows(gw, event, region, out)
-     Widget  gw;
--    XEvent  *event;
-+    XEvent  *event UNUSED;
-     Region  region;
-     int	    out;
- {
-diff -Naur vim72.orig/src/gui_beval.c vim72/src/gui_beval.c
---- vim72.orig/src/gui_beval.c	2007-05-07 12:33:41.000000000 -0700
-+++ vim72/src/gui_beval.c	2009-09-12 08:39:05.000000000 -0700
-@@ -15,11 +15,10 @@
- /*
-  * Common code, invoked when the mouse is resting for a moment.
-  */
--/*ARGSUSED*/
-     void
- general_beval_cb(beval, state)
-     BalloonEval *beval;
--    int state;
-+    int		state UNUSED;
- {
-     win_T	*wp;
-     int		col;
-@@ -551,9 +550,8 @@
-     return FALSE; /* continue emission */
- }
- 
--/*ARGSUSED*/
-     static gint
--mainwin_event_cb(GtkWidget *widget, GdkEvent *event, gpointer data)
-+mainwin_event_cb(GtkWidget *widget UNUSED, GdkEvent *event, gpointer data)
- {
-     BalloonEval *beval = (BalloonEval *)data;
- 
-@@ -663,9 +661,10 @@
-     return FALSE; /* don't call me again */
- }
- 
--/*ARGSUSED2*/
-     static gint
--balloon_expose_event_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data)
-+balloon_expose_event_cb(GtkWidget *widget,
-+			GdkEventExpose *event,
-+			gpointer data UNUSED)
- {
-     gtk_paint_flat_box(widget->style, widget->window,
- 		       GTK_STATE_NORMAL, GTK_SHADOW_OUT,
-@@ -676,7 +675,6 @@
- }
- 
- # ifndef HAVE_GTK2
--/*ARGSUSED2*/
-     static void
- balloon_draw_cb(GtkWidget *widget, GdkRectangle *area, gpointer data)
- {
-@@ -726,13 +724,12 @@
- /*
-  * The X event handler. All it does is call the real event handler.
-  */
--/*ARGSUSED*/
-     static void
- pointerEventEH(w, client_data, event, unused)
--    Widget	w;
-+    Widget	w UNUSED;
-     XtPointer	client_data;
-     XEvent	*event;
--    Boolean	*unused;
-+    Boolean	*unused UNUSED;
- {
-     BalloonEval *beval = (BalloonEval *)client_data;
-     pointerEvent(beval, event);
-@@ -877,11 +874,10 @@
-     }
- }
- 
--/*ARGSUSED*/
-     static void
- timerRoutine(dx, id)
-     XtPointer	    dx;
--    XtIntervalId    *id;
-+    XtIntervalId    *id UNUSED;
- {
-     BalloonEval *beval = (BalloonEval *)dx;
- 
-@@ -1291,6 +1287,23 @@
- 		XtNy, ty,
- 		NULL);
- #endif
-+	/* Set tooltip colors */
-+	{
-+	    Arg args[2];
-+
-+#ifdef FEAT_GUI_MOTIF
-+	    args[0].name = XmNbackground;
-+	    args[0].value = gui.tooltip_bg_pixel;
-+	    args[1].name = XmNforeground;
-+	    args[1].value = gui.tooltip_fg_pixel;
-+#else /* Athena */
-+	    args[0].name = XtNbackground;
-+	    args[0].value = gui.tooltip_bg_pixel;
-+	    args[1].name = XtNforeground;
-+	    args[1].value = gui.tooltip_fg_pixel;
-+#endif
-+	    XtSetValues(beval->balloonLabel, &args[0], XtNumber(args));
-+	}
- 
- 	XtPopup(beval->balloonShell, XtGrabNone);
- 
-diff -Naur vim72.orig/src/gui.c vim72/src/gui.c
---- vim72.orig/src/gui.c	2008-07-27 12:32:14.000000000 -0700
-+++ vim72/src/gui.c	2009-09-12 08:41:40.000000000 -0700
-@@ -139,7 +139,7 @@
- 		/* The read returns when the child closes the pipe (or when
- 		 * the child dies for some reason). */
- 		close(pipefd[1]);
--		(void)read(pipefd[0], &dummy, (size_t)1);
-+		ignored = (int)read(pipefd[0], &dummy, (size_t)1);
- 		close(pipefd[0]);
- 	    }
- 
-@@ -678,11 +678,10 @@
-  * Return OK when able to set the font.  When it failed FAIL is returned and
-  * the fonts are unchanged.
-  */
--/*ARGSUSED*/
-     int
- gui_init_font(font_list, fontset)
-     char_u	*font_list;
--    int		fontset;
-+    int		fontset UNUSED;
- {
- #define FONTLEN 320
-     char_u	font_name[FONTLEN];
-@@ -960,7 +959,7 @@
- 		guicolor_T fg, bg;
- 
- 		if (
--# ifdef HAVE_GTK2
-+# if defined(HAVE_GTK2) && !defined(FEAT_HANGULIN)
- 			preedit_get_status()
- # else
- 			im_get_status()
-@@ -1138,10 +1137,9 @@
-  * Position the various GUI components (text area, menu).  The vertical
-  * scrollbars are NOT handled here.  See gui_update_scrollbars().
-  */
--/*ARGSUSED*/
-     static void
- gui_position_components(total_width)
--    int	    total_width;
-+    int	    total_width UNUSED;
- {
-     int	    text_area_x;
-     int	    text_area_y;
-@@ -1374,10 +1372,9 @@
-  * If "fit_to_display" is TRUE then the size may be reduced to fit the window
-  * on the screen.
-  */
--/*ARGSUSED*/
-     void
- gui_set_shellsize(mustset, fit_to_display, direction)
--    int		mustset;		/* set by the user */
-+    int		mustset UNUSED;		/* set by the user */
-     int		fit_to_display;
-     int		direction;		/* RESIZE_HOR, RESIZE_VER */
- {
-@@ -3120,10 +3117,9 @@
-  * If "oldval" is not NULL, "oldval" is the previous value, the new value is
-  * in p_go.
-  */
--/*ARGSUSED*/
-     void
- gui_init_which_components(oldval)
--    char_u	*oldval;
-+    char_u	*oldval UNUSED;
- {
- #ifdef FEAT_MENU
-     static int	prev_menu_is_active = -1;
-@@ -3241,7 +3237,7 @@
- 	    i = Rows;
- 	    gui_update_tabline();
- 	    Rows = i;
--	    need_set_size = RESIZE_VERT;
-+	    need_set_size |= RESIZE_VERT;
- 	    if (using_tabline)
- 		fix_size = TRUE;
- 	    if (!gui_use_tabline())
-@@ -3275,9 +3271,9 @@
- 		if (gui.which_scrollbars[i] != prev_which_scrollbars[i])
- 		{
- 		    if (i == SBAR_BOTTOM)
--			need_set_size = RESIZE_VERT;
-+			need_set_size |= RESIZE_VERT;
- 		    else
--			need_set_size = RESIZE_HOR;
-+			need_set_size |= RESIZE_HOR;
- 		    if (gui.which_scrollbars[i])
- 			fix_size = TRUE;
- 		}
-@@ -3297,7 +3293,7 @@
- 	    gui_mch_enable_menu(gui.menu_is_active);
- 	    Rows = i;
- 	    prev_menu_is_active = gui.menu_is_active;
--	    need_set_size = RESIZE_VERT;
-+	    need_set_size |= RESIZE_VERT;
- 	    if (gui.menu_is_active)
- 		fix_size = TRUE;
- 	}
-@@ -3308,7 +3304,7 @@
- 	{
- 	    gui_mch_show_toolbar(using_toolbar);
- 	    prev_toolbar = using_toolbar;
--	    need_set_size = RESIZE_VERT;
-+	    need_set_size |= RESIZE_VERT;
- 	    if (using_toolbar)
- 		fix_size = TRUE;
- 	}
-@@ -3318,7 +3314,7 @@
- 	{
- 	    gui_mch_enable_footer(using_footer);
- 	    prev_footer = using_footer;
--	    need_set_size = RESIZE_VERT;
-+	    need_set_size |= RESIZE_VERT;
- 	    if (using_footer)
- 		fix_size = TRUE;
- 	}
-@@ -3330,10 +3326,11 @@
- 	    prev_tearoff = using_tearoff;
- 	}
- #endif
--	if (need_set_size)
-+	if (need_set_size != 0)
- 	{
- #ifdef FEAT_GUI_GTK
--	    long    c = Columns;
-+	    long    prev_Columns = Columns;
-+	    long    prev_Rows = Rows;
- #endif
- 	    /* Adjust the size of the window to make the text area keep the
- 	     * same size and to avoid that part of our window is off-screen
-@@ -3349,11 +3346,14 @@
- 	     * If you remove this, please test this command for resizing
- 	     * effects (with optional left scrollbar): ":vsp|q|vsp|q|vsp|q".
- 	     * Don't do this while starting up though.
--	     * And don't change Rows, it may have be reduced intentionally
--	     * when adding menu/toolbar/tabline. */
--	    if (!gui.starting)
-+	     * Don't change Rows when adding menu/toolbar/tabline.
-+	     * Don't change Columns when adding vertical toolbar. */
-+	    if (!gui.starting && need_set_size != (RESIZE_VERT | RESIZE_HOR))
- 		(void)char_avail();
--	    Columns = c;
-+	    if ((need_set_size & RESIZE_VERT) == 0)
-+		Rows = prev_Rows;
-+	    if ((need_set_size & RESIZE_HOR) == 0)
-+		Columns = prev_Columns;
- #endif
- 	}
- #ifdef FEAT_WINDOWS
-@@ -3879,6 +3879,21 @@
-  * Scrollbar stuff:
-  */
- 
-+/*
-+ * Called when something in the window layout has changed.
-+ */
-+    void
-+gui_may_update_scrollbars()
-+{
-+    if (gui.in_use && starting == 0)
-+    {
-+	out_flush();
-+	gui_init_which_components(NULL);
-+	gui_update_scrollbars(TRUE);
-+    }
-+    need_mouse_correct = TRUE;
-+}
-+
-     void
- gui_update_scrollbars(force)
-     int		force;	    /* Force all scrollbars to get updated */
-@@ -4407,7 +4422,7 @@
-     if (curwin->w_p_wrap)
- 	return FALSE;
- 
--    if (curwin->w_leftcol == scrollbar_value)
-+    if ((long_u)curwin->w_leftcol == scrollbar_value)
- 	return FALSE;
- 
-     curwin->w_leftcol = (colnr_T)scrollbar_value;
-@@ -4420,7 +4435,7 @@
- 	    && longest_lnum < curwin->w_botline
- 	    && !virtual_active())
-     {
--	if (scrollbar_value > scroll_line_len(curwin->w_cursor.lnum))
-+	if (scrollbar_value > (long_u)scroll_line_len(curwin->w_cursor.lnum))
- 	{
- 	    curwin->w_cursor.lnum = longest_lnum;
- 	    curwin->w_cursor.col = 0;
-@@ -4666,11 +4681,10 @@
- /*
-  * Find window where the mouse pointer "y" coordinate is in.
-  */
--/*ARGSUSED*/
-     static win_T *
- xy2win(x, y)
--    int		x;
--    int		y;
-+    int		x UNUSED;
-+    int		y UNUSED;
- {
- #ifdef FEAT_WINDOWS
-     int		row;
-@@ -4990,6 +5004,19 @@
-     char_u	*p;
-     regmatch_T	regmatch;
-     int		save_did_emsg = did_emsg;
-+    static int  busy = FALSE;
-+
-+    /* When the screen is being updated we should not change buffers and
-+     * windows structures, it may cause freed memory to be used.  Also don't
-+     * do this recursively (pressing "Find" quickly several times. */
-+    if (updating_screen || busy)
-+	return FALSE;
-+
-+    /* refuse replace when text cannot be changed */
-+    if ((type == FRD_REPLACE || type == FRD_REPLACEALL) && text_locked())
-+	return FALSE;
-+
-+    busy = TRUE;
- 
-     ga_init2(&ga, 1, 100);
-     if (type == FRD_REPLACEALL)
-@@ -5080,6 +5107,7 @@
-     }
- 
-     vim_free(ga.ga_data);
-+    busy = FALSE;
-     return (ga.ga_len > 0);
- }
- 
-@@ -5120,11 +5148,10 @@
-  * of dropped files, they will be freed in this function, and caller can't use
-  * fnames after call this function.
-  */
--/*ARGSUSED*/
-     void
- gui_handle_drop(x, y, modifiers, fnames, count)
--    int		x;
--    int		y;
-+    int		x UNUSED;
-+    int		y UNUSED;
-     int_u	modifiers;
-     char_u	**fnames;
-     int		count;
-diff -Naur vim72.orig/src/gui_gtk.c vim72/src/gui_gtk.c
---- vim72.orig/src/gui_gtk.c	2008-07-31 12:48:20.000000000 -0700
-+++ vim72/src/gui_gtk.c	2009-09-12 08:38:54.000000000 -0700
-@@ -285,14 +285,14 @@
-     return image;
- }
- 
--/*ARGSUSED*/
-     static gint
--toolbar_button_focus_in_event(GtkWidget *widget, GdkEventFocus *event, gpointer data)
--{
--    /* When we're in a GtkPlug, we don't have window focus events, only widget focus.
--     * To emulate stand-alone gvim, if a button gets focus (e.g., <Tab> into GtkPlug)
--     * immediately pass it to mainwin.
--     */
-+toolbar_button_focus_in_event(GtkWidget *widget UNUSED,
-+			      GdkEventFocus *event UNUSED,
-+			      gpointer data UNUSED)
-+{
-+    /* When we're in a GtkPlug, we don't have window focus events, only widget
-+     * focus.  To emulate stand-alone gvim, if a button gets focus (e.g.,
-+     * <Tab> into GtkPlug) immediately pass it to mainwin. */
-     if (gtk_socket_id != 0)
- 	gtk_widget_grab_focus(gui.drawarea);
- 
-@@ -585,9 +585,8 @@
-     gtk_menu_prepend(GTK_MENU(menu->submenu_id), menu->tearoff_handle);
- }
- 
--/*ARGSUSED*/
-     static void
--menu_item_activate(GtkWidget *widget, gpointer data)
-+menu_item_activate(GtkWidget *widget UNUSED, gpointer data)
- {
-     gui_menu_cb((vimmenu_T *)data);
- 
-@@ -1202,9 +1201,8 @@
- #endif
- 
- #ifndef USE_FILE_CHOOSER
--/*ARGSUSED*/
-     static void
--browse_ok_cb(GtkWidget *widget, gpointer cbdata)
-+browse_ok_cb(GtkWidget *widget UNUSED, gpointer cbdata)
- {
-     gui_T *vw = (gui_T *)cbdata;
- 
-@@ -1218,9 +1216,8 @@
- 	gtk_main_quit();
- }
- 
--/*ARGSUSED*/
-     static void
--browse_cancel_cb(GtkWidget *widget, gpointer cbdata)
-+browse_cancel_cb(GtkWidget *widget UNUSED, gpointer cbdata)
- {
-     gui_T *vw = (gui_T *)cbdata;
- 
-@@ -1234,9 +1231,8 @@
- 	gtk_main_quit();
- }
- 
--/*ARGSUSED*/
-     static gboolean
--browse_destroy_cb(GtkWidget * widget)
-+browse_destroy_cb(GtkWidget *widget UNUSED)
- {
-     if (gui.browse_fname != NULL)
-     {
-@@ -1262,14 +1258,13 @@
-  * initdir			initial directory, NULL for current dir
-  * filter			not used (file name filter)
-  */
--/*ARGSUSED*/
-     char_u *
--gui_mch_browse(int saving,
-+gui_mch_browse(int saving UNUSED,
- 	       char_u *title,
- 	       char_u *dflt,
--	       char_u *ext,
-+	       char_u *ext UNUSED,
- 	       char_u *initdir,
--	       char_u *filter)
-+	       char_u *filter UNUSED)
- {
- #ifdef USE_FILE_CHOOSER
-     GtkWidget		*fc;
-@@ -1377,7 +1372,6 @@
-  * dflt				default name
-  * initdir			initial directory, NULL for current dir
-  */
--/*ARGSUSED*/
-     char_u *
- gui_mch_browsedir(
- 	       char_u *title,
-@@ -1460,7 +1454,6 @@
- }
- 
- # ifdef FEAT_GUI_GNOME
--/* ARGSUSED */
-     static int
- gui_gnome_dialog( int	type,
- 		char_u	*title,
-@@ -1611,7 +1604,6 @@
-     GtkWidget	*dialog;
- } CancelData;
- 
--/* ARGSUSED */
-     static void
- dlg_button_clicked(GtkWidget * widget, ButtonData *data)
- {
-@@ -1622,7 +1614,6 @@
- /*
-  * This makes the Escape key equivalent to the cancel button.
-  */
--/*ARGSUSED*/
-     static int
- dlg_key_press_event(GtkWidget *widget, GdkEventKey *event, CancelData *data)
- {
-@@ -1655,7 +1646,6 @@
- 	gtk_main_quit();
- }
- 
--/* ARGSUSED */
-     int
- gui_mch_dialog(	int	type,		/* type of dialog */
- 		char_u	*title,		/* title of dialog */
-@@ -2215,7 +2205,6 @@
-     GtkDialog	*dialog;	    /* Widget of the dialog */
- } DialogInfo;
- 
--/*ARGSUSED2*/
-     static gboolean
- dialog_key_press_event_cb(GtkWidget *widget, GdkEventKey *event, gpointer data)
- {
-@@ -2398,14 +2387,13 @@
-  * Note: The push_in output argument seems to affect scrolling of huge
-  * menus that don't fit on the screen.	Leave it at the default for now.
-  */
--/*ARGSUSED0*/
-     static void
--popup_menu_position_func(GtkMenu *menu,
-+popup_menu_position_func(GtkMenu *menu UNUSED,
- 			 gint *x, gint *y,
- # ifdef HAVE_GTK2
--			 gboolean *push_in,
-+			 gboolean *push_in UNUSED,
- # endif
--			 gpointer user_data)
-+			 gpointer user_data UNUSED)
- {
-     gdk_window_get_origin(gui.drawarea->window, x, y);
- 
-@@ -2464,13 +2452,12 @@
-     GtkWidget *all;	/* 'Replace All' action button */
- } SharedFindReplace;
- 
--static SharedFindReplace find_widgets = { NULL, };
--static SharedFindReplace repl_widgets = { NULL, };
-+static SharedFindReplace find_widgets = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
-+static SharedFindReplace repl_widgets = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
- 
--/* ARGSUSED */
-     static int
- find_key_press_event(
--		GtkWidget	*widget,
-+		GtkWidget	*widget UNUSED,
- 		GdkEventKey	*event,
- 		SharedFindReplace *frdp)
- {
-@@ -2962,9 +2949,8 @@
- /*
-  * Callback for actions of the find and replace dialogs
-  */
--/*ARGSUSED*/
-     static void
--find_replace_cb(GtkWidget *widget, gpointer data)
-+find_replace_cb(GtkWidget *widget UNUSED, gpointer data)
- {
-     int			flags;
-     char_u		*find_text;
-@@ -3010,9 +2996,8 @@
- }
- 
- /* our usual callback function */
--/*ARGSUSED*/
-     static void
--entry_activate_cb(GtkWidget *widget, gpointer data)
-+entry_activate_cb(GtkWidget *widget UNUSED, gpointer data)
- {
-     gtk_widget_grab_focus(GTK_WIDGET(data));
- }
-@@ -3055,10 +3040,9 @@
- /*
-  * ":helpfind"
-  */
--/*ARGSUSED*/
-     void
- ex_helpfind(eap)
--    exarg_T	*eap;
-+    exarg_T	*eap UNUSED;
- {
-     /* This will fail when menus are not loaded.  Well, it's only for
-      * backwards compatibility anyway. */
-diff -Naur vim72.orig/src/gui_gtk_f.c vim72/src/gui_gtk_f.c
---- vim72.orig/src/gui_gtk_f.c	2007-05-07 12:38:02.000000000 -0700
-+++ vim72/src/gui_gtk_f.c	2009-09-12 08:42:25.000000000 -0700
-@@ -227,14 +227,14 @@
- 
-     if (!form_type)
-     {
--	GtkTypeInfo form_info =
--	{
--	    "GtkForm",
--	    sizeof(GtkForm),
--	    sizeof(GtkFormClass),
--	    (GtkClassInitFunc) gtk_form_class_init,
--	    (GtkObjectInitFunc) gtk_form_init
--	};
-+	GtkTypeInfo form_info;
-+
-+	vim_memset(&form_info, 0, sizeof(form_info));
-+	form_info.type_name = "GtkForm";
-+	form_info.object_size = sizeof(GtkForm);
-+	form_info.class_size = sizeof(GtkFormClass);
-+	form_info.class_init_func = (GtkClassInitFunc)gtk_form_class_init;
-+	form_info.object_init_func = (GtkObjectInitFunc)gtk_form_init;
- 
- 	form_type = gtk_type_unique(GTK_TYPE_CONTAINER, &form_info);
-     }
-@@ -611,10 +611,9 @@
-     }
- }
- 
--/*ARGSUSED1*/
-     static void
- gtk_form_forall(GtkContainer	*container,
--		gboolean	include_internals,
-+		gboolean	include_internals UNUSED,
- 		GtkCallback	callback,
- 		gpointer	callback_data)
- {
-@@ -786,9 +785,8 @@
-  * them or discards them, depending on whether we are obscured
-  * or not.
-  */
--/*ARGSUSED1*/
-     static GdkFilterReturn
--gtk_form_filter(GdkXEvent *gdk_xevent, GdkEvent *event, gpointer data)
-+gtk_form_filter(GdkXEvent *gdk_xevent, GdkEvent *event UNUSED, gpointer data)
- {
-     XEvent *xevent;
-     GtkForm *form;
-@@ -821,9 +819,10 @@
-  * there is no corresponding event in GTK, so we have
-  * to get the events from a filter
-  */
--/*ARGSUSED1*/
-     static GdkFilterReturn
--gtk_form_main_filter(GdkXEvent *gdk_xevent, GdkEvent *event, gpointer data)
-+gtk_form_main_filter(GdkXEvent *gdk_xevent,
-+		     GdkEvent *event UNUSED,
-+		     gpointer data)
- {
-     XEvent *xevent;
-     GtkForm *form;
-@@ -861,11 +860,9 @@
- gtk_form_set_static_gravity(GdkWindow *window, gboolean use_static)
- {
- #ifdef HAVE_GTK2
--    gboolean static_gravity_supported;
--
--    static_gravity_supported = gdk_window_set_static_gravities(window,
--							       use_static);
--    g_return_if_fail(static_gravity_supported);
-+    /* We don't check if static gravity is actually supported, because it
-+     * results in an annoying assertion error message. */
-+    gdk_window_set_static_gravities(window, use_static);
- #else
-     XSetWindowAttributes xattributes;
- 
-@@ -911,9 +908,8 @@
- #endif
- }
- 
--/*ARGSUSED0*/
-     static void
--gtk_form_child_map(GtkWidget *widget, gpointer user_data)
-+gtk_form_child_map(GtkWidget *widget UNUSED, gpointer user_data)
- {
-     GtkFormChild *child;
- 
-@@ -923,9 +919,8 @@
-     gdk_window_show(child->window);
- }
- 
--/*ARGSUSED0*/
-     static void
--gtk_form_child_unmap(GtkWidget *widget, gpointer user_data)
-+gtk_form_child_unmap(GtkWidget *widget UNUSED, gpointer user_data)
- {
-     GtkFormChild *child;
- 
-diff -Naur vim72.orig/src/gui_gtk_x11.c vim72/src/gui_gtk_x11.c
---- vim72.orig/src/gui_gtk_x11.c	2008-07-04 03:46:24.000000000 -0700
-+++ vim72/src/gui_gtk_x11.c	2009-09-12 08:42:22.000000000 -0700
-@@ -107,6 +107,7 @@
-     TARGET_UTF8_STRING,
-     TARGET_STRING,
-     TARGET_COMPOUND_TEXT,
-+    TARGET_HTML,
-     TARGET_TEXT,
-     TARGET_TEXT_URI_LIST,
-     TARGET_TEXT_PLAIN,
-@@ -123,6 +124,7 @@
-     {VIMENC_ATOM_NAME,	0, TARGET_VIMENC},
-     {VIM_ATOM_NAME,	0, TARGET_VIM},
- #ifdef FEAT_MBYTE
-+    {"text/html",	0, TARGET_HTML},
-     {"UTF8_STRING",	0, TARGET_UTF8_STRING},
- #endif
-     {"COMPOUND_TEXT",	0, TARGET_COMPOUND_TEXT},
-@@ -140,6 +142,7 @@
- {
-     {"text/uri-list",	0, TARGET_TEXT_URI_LIST},
- # ifdef FEAT_MBYTE
-+    {"text/html",	0, TARGET_HTML},
-     {"UTF8_STRING",	0, TARGET_UTF8_STRING},
- # endif
-     {"STRING",		0, TARGET_STRING},
-@@ -178,6 +181,7 @@
-  * Atoms used to control/reference X11 selections.
-  */
- #ifdef FEAT_MBYTE
-+static GdkAtom html_atom = GDK_NONE;
- static GdkAtom utf8_string_atom = GDK_NONE;
- #endif
- #ifndef HAVE_GTK2
-@@ -412,6 +416,7 @@
- #endif
- #if defined(FEAT_GUI_GNOME) && defined(FEAT_SESSION)
- static const char *restart_command = NULL;
-+static       char *abs_restart_command = NULL;
- #endif
- static int found_iconic_arg = FALSE;
- 
-@@ -449,8 +454,10 @@
- 	char_u buf[MAXPATHL];
- 
- 	if (mch_FullName((char_u *)argv[0], buf, (int)sizeof(buf), TRUE) == OK)
--	    /* Tiny leak; doesn't matter, and usually we don't even get here */
--	    restart_command = (char *)vim_strsave(buf);
-+	{
-+	    abs_restart_command = (char *)vim_strsave(buf);
-+	    restart_command = abs_restart_command;
-+	}
-     }
- #endif
- 
-@@ -611,6 +618,9 @@
- gui_mch_free_all()
- {
-     vim_free(gui_argv);
-+#if defined(FEAT_GUI_GNOME) && defined(FEAT_SESSION)
-+    vim_free(abs_restart_command);
-+#endif
- }
- #endif
- 
-@@ -619,9 +629,10 @@
-  * Doesn't seem possible, since check_copy_area() relies on
-  * this information.  --danielk
-  */
--/*ARGSUSED*/
-     static gint
--visibility_event(GtkWidget *widget, GdkEventVisibility *event, gpointer data)
-+visibility_event(GtkWidget *widget UNUSED,
-+		 GdkEventVisibility *event,
-+		 gpointer data UNUSED)
- {
-     gui.visibility = event->state;
-     /*
-@@ -638,9 +649,10 @@
- /*
-  * Redraw the corresponding portions of the screen.
-  */
--/*ARGSUSED*/
-     static gint
--expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data)
-+expose_event(GtkWidget *widget UNUSED,
-+	     GdkEventExpose *event,
-+	     gpointer data UNUSED)
- {
-     /* Skip this when the GUI isn't set up yet, will redraw later. */
-     if (gui.starting)
-@@ -668,9 +680,10 @@
- /*
-  * Handle changes to the "Comm" property
-  */
--/*ARGSUSED2*/
-     static gint
--property_event(GtkWidget *widget, GdkEventProperty *event, gpointer data)
-+property_event(GtkWidget *widget,
-+	       GdkEventProperty *event,
-+	       gpointer data UNUSED)
- {
-     if (event->type == GDK_PROPERTY_NOTIFY
- 	    && event->state == (int)GDK_PROPERTY_NEW_VALUE
-@@ -740,9 +753,8 @@
-     blink_state = BLINK_NONE;
- }
- 
--/*ARGSUSED*/
-     static gint
--blink_cb(gpointer data)
-+blink_cb(gpointer data UNUSED)
- {
-     if (blink_state == BLINK_ON)
-     {
-@@ -781,9 +793,10 @@
-     }
- }
- 
--/*ARGSUSED*/
-     static gint
--enter_notify_event(GtkWidget *widget, GdkEventCrossing *event, gpointer data)
-+enter_notify_event(GtkWidget *widget UNUSED,
-+		   GdkEventCrossing *event UNUSED,
-+		   gpointer data UNUSED)
- {
-     if (blink_state == BLINK_NONE)
- 	gui_mch_start_blink();
-@@ -795,9 +808,10 @@
-     return FALSE;
- }
- 
--/*ARGSUSED*/
-     static gint
--leave_notify_event(GtkWidget *widget, GdkEventCrossing *event, gpointer data)
-+leave_notify_event(GtkWidget *widget UNUSED,
-+		   GdkEventCrossing *event UNUSED,
-+		   gpointer data UNUSED)
- {
-     if (blink_state != BLINK_NONE)
- 	gui_mch_stop_blink();
-@@ -805,9 +819,10 @@
-     return FALSE;
- }
- 
--/*ARGSUSED*/
-     static gint
--focus_in_event(GtkWidget *widget, GdkEventFocus *event, gpointer data)
-+focus_in_event(GtkWidget *widget,
-+	       GdkEventFocus *event UNUSED,
-+	       gpointer data UNUSED)
- {
-     gui_focus_change(TRUE);
- 
-@@ -826,9 +841,10 @@
-     return TRUE;
- }
- 
--/*ARGSUSED*/
-     static gint
--focus_out_event(GtkWidget *widget, GdkEventFocus *event, gpointer data)
-+focus_out_event(GtkWidget *widget UNUSED,
-+	        GdkEventFocus *event UNUSED,
-+		gpointer data UNUSED)
- {
-     gui_focus_change(FALSE);
- 
-@@ -956,9 +972,10 @@
- /*
-  * Main keyboard handler:
-  */
--/*ARGSUSED*/
-     static gint
--key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer data)
-+key_press_event(GtkWidget *widget UNUSED,
-+		GdkEventKey *event,
-+		gpointer data UNUSED)
- {
- #ifdef HAVE_GTK2
-     /* 256 bytes is way over the top, but for safety let's reduce it only
-@@ -1225,9 +1242,10 @@
- }
- 
- #if defined(FEAT_XIM) && defined(HAVE_GTK2)
--/*ARGSUSED0*/
-     static gboolean
--key_release_event(GtkWidget *widget, GdkEventKey *event, gpointer data)
-+key_release_event(GtkWidget *widget UNUSED,
-+		  GdkEventKey *event,
-+		  gpointer data UNUSED)
- {
-     /*
-      * GTK+ 2 input methods may do fancy stuff on key release events too.
-@@ -1243,11 +1261,10 @@
-  * Selection handlers:
-  */
- 
--/*ARGSUSED*/
-     static gint
--selection_clear_event(GtkWidget		*widget,
-+selection_clear_event(GtkWidget		*widget UNUSED,
- 		      GdkEventSelection	*event,
--		      gpointer		user_data)
-+		      gpointer		user_data UNUSED)
- {
-     if (event->selection == clip_plus.gtk_sel_atom)
- 	clip_lose_selection(&clip_plus);
-@@ -1265,12 +1282,11 @@
- #define RS_FAIL	2	/* selection_received_cb() called and failed */
- static int received_selection = RS_NONE;
- 
--/*ARGSUSED*/
-     static void
--selection_received_cb(GtkWidget		*widget,
-+selection_received_cb(GtkWidget		*widget UNUSED,
- 		      GtkSelectionData	*data,
--		      guint		time_,
--		      gpointer		user_data)
-+		      guint		time_ UNUSED,
-+		      gpointer		user_data UNUSED)
- {
-     VimClipboard    *cbd;
-     char_u	    *text;
-@@ -1352,6 +1368,24 @@
- 	    else
- 		text = tmpbuf_utf8;
- 	}
-+	else if (len >= 2 && text[0] == 0xff && text[1] == 0xfe)
-+	{
-+	    vimconv_T conv;
-+
-+	    /* UTF-16, we get this for HTML */
-+	    conv.vc_type = CONV_NONE;
-+	    convert_setup_ext(&conv, (char_u *)"utf-16le", FALSE, p_enc, TRUE);
-+
-+	    if (conv.vc_type != CONV_NONE)
-+	    {
-+		text += 2;
-+		len -= 2;
-+		tmpbuf = string_convert(&conv, text, &len);
-+		convert_setup(&conv, NULL, NULL);
-+	    }
-+	    if (tmpbuf != NULL)
-+		text = tmpbuf;
-+	}
-     }
- #else /* !HAVE_GTK2 */
- # ifdef FEAT_MBYTE
-@@ -1414,13 +1448,12 @@
-  * Prepare our selection data for passing it to the external selection
-  * client.
-  */
--/*ARGSUSED*/
-     static void
--selection_get_cb(GtkWidget	    *widget,
-+selection_get_cb(GtkWidget	    *widget UNUSED,
- 		 GtkSelectionData   *selection_data,
- 		 guint		    info,
--		 guint		    time_,
--		 gpointer	    user_data)
-+		 guint		    time_ UNUSED,
-+		 gpointer	    user_data UNUSED)
- {
-     char_u	    *string;
-     char_u	    *tmpbuf;
-@@ -1440,6 +1473,7 @@
- 
-     if (info != (guint)TARGET_STRING
- #ifdef FEAT_MBYTE
-+	    && (!clip_html || info != (guint)TARGET_HTML)
- 	    && info != (guint)TARGET_UTF8_STRING
- 	    && info != (guint)TARGET_VIMENC
- #endif
-@@ -1475,6 +1509,40 @@
-     }
- 
- #ifdef FEAT_MBYTE
-+    else if (info == (guint)TARGET_HTML)
-+    {
-+	vimconv_T conv;
-+
-+	/* Since we get utf-16, we probably should set it as well. */
-+	conv.vc_type = CONV_NONE;
-+	convert_setup_ext(&conv, p_enc, TRUE, (char_u *)"utf-16le", FALSE);
-+	if (conv.vc_type != CONV_NONE)
-+	{
-+	    tmpbuf = string_convert(&conv, string, &length);
-+	    convert_setup(&conv, NULL, NULL);
-+	    vim_free(string);
-+	    string = tmpbuf;
-+	}
-+
-+	/* Prepend the BOM: "fffe" */
-+	if (string != NULL)
-+	{
-+	    tmpbuf = alloc(length + 2);
-+	    tmpbuf[0] = 0xff;
-+	    tmpbuf[1] = 0xfe;
-+	    mch_memmove(tmpbuf + 2, string, (size_t)length);
-+	    vim_free(string);
-+	    string = tmpbuf;
-+	    length += 2;
-+
-+	    selection_data->type = selection_data->target;
-+	    selection_data->format = 16;	/* 16 bits per char */
-+	    gtk_selection_data_set(selection_data, html_atom, 16,
-+							      string, length);
-+	    vim_free(string);
-+	}
-+	return;
-+    }
-     else if (info == (guint)TARGET_VIMENC)
-     {
- 	int l = STRLEN(p_enc);
-@@ -1678,7 +1746,7 @@
- 
- 	offshoot = dx > dy ? dx : dy;
- 
--	/* Make a linearly declaying timer delay with a threshold of 5 at a
-+	/* Make a linearly decaying timer delay with a threshold of 5 at a
- 	 * distance of 127 pixels from the main window.
- 	 *
- 	 * One could think endlessly about the most ergonomic variant here.
-@@ -1707,9 +1775,8 @@
- /*
-  * Timer used to recognize multiple clicks of the mouse button.
-  */
--/*ARGSUSED0*/
-     static gint
--motion_repeat_timer_cb(gpointer data)
-+motion_repeat_timer_cb(gpointer data UNUSED)
- {
-     int		    x;
-     int		    y;
-@@ -1749,9 +1816,10 @@
-     return FALSE;
- }
- 
--/*ARGSUSED2*/
-     static gint
--motion_notify_event(GtkWidget *widget, GdkEventMotion *event, gpointer data)
-+motion_notify_event(GtkWidget *widget,
-+		    GdkEventMotion *event,
-+		    gpointer data UNUSED)
- {
-     if (event->is_hint)
-     {
-@@ -1777,9 +1845,10 @@
-  * by our own timeout mechanism instead of the one provided by GTK+ itself.
-  * This is due to the way the generic VIM code is recognizing multiple clicks.
-  */
--/*ARGSUSED2*/
-     static gint
--button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer data)
-+button_press_event(GtkWidget *widget,
-+		   GdkEventButton *event,
-+		   gpointer data UNUSED)
- {
-     int button;
-     int repeated_click = FALSE;
-@@ -1855,9 +1924,10 @@
-  * GTK+ 2 doesn't handle mouse buttons 4, 5, 6 and 7 the same way as GTK+ 1.
-  * Instead, it abstracts scrolling via the new GdkEventScroll.
-  */
--/*ARGSUSED2*/
-     static gboolean
--scroll_event(GtkWidget *widget, GdkEventScroll *event, gpointer data)
-+scroll_event(GtkWidget *widget,
-+	     GdkEventScroll *event,
-+	     gpointer data UNUSED)
- {
-     int	    button;
-     int_u   vim_modifiers;
-@@ -1896,9 +1966,10 @@
- #endif /* HAVE_GTK2 */
- 
- 
--/*ARGSUSED*/
-     static gint
--button_release_event(GtkWidget *widget, GdkEventButton *event, gpointer data)
-+button_release_event(GtkWidget *widget UNUSED,
-+		     GdkEventButton *event,
-+		     gpointer data UNUSED)
- {
-     int x, y;
-     int_u vim_modifiers;
-@@ -2100,7 +2171,6 @@
- /*
-  * DND receiver.
-  */
--/*ARGSUSED2*/
-     static void
- drag_data_received_cb(GtkWidget		*widget,
- 		      GdkDragContext	*context,
-@@ -2109,7 +2179,7 @@
- 		      GtkSelectionData	*data,
- 		      guint		info,
- 		      guint		time_,
--		      gpointer		user_data)
-+		      gpointer		user_data UNUSED)
- {
-     GdkModifierType state;
- 
-@@ -2143,7 +2213,6 @@
-  * be abandoned and pop up a dialog asking the user for confirmation if
-  * necessary.
-  */
--/*ARGSUSED0*/
-     static void
- sm_client_check_changed_any(GnomeClient	    *client,
- 			    gint	    key,
-@@ -2251,7 +2320,6 @@
-  * for confirmation if necessary.  Save the current editing session and tell
-  * the session manager how to restart Vim.
-  */
--/*ARGSUSED1*/
-     static gboolean
- sm_client_save_yourself(GnomeClient	    *client,
- 			gint		    phase,
-@@ -2339,7 +2407,6 @@
-  * here since "save_yourself" has been emitted before (unless serious trouble
-  * is happening).
-  */
--/*ARGSUSED0*/
-     static void
- sm_client_die(GnomeClient *client, gpointer data)
- {
-@@ -2379,10 +2446,9 @@
- /*
-  * GTK tells us that XSMP needs attention
-  */
--/*ARGSUSED*/
-     static gboolean
- local_xsmp_handle_requests(source, condition, data)
--    GIOChannel		*source;
-+    GIOChannel		*source UNUSED;
-     GIOCondition	condition;
-     gpointer		data;
- {
-@@ -2480,16 +2546,18 @@
-  * WM_SAVE_YOURSELF hack it actually stores the session...  And yes,
-  * it should work with KDE as well.
-  */
--/*ARGSUSED1*/
-     static GdkFilterReturn
--global_event_filter(GdkXEvent *xev, GdkEvent *event, gpointer data)
-+global_event_filter(GdkXEvent *xev,
-+		    GdkEvent *event UNUSED,
-+		    gpointer data UNUSED)
- {
-     XEvent *xevent = (XEvent *)xev;
- 
-     if (xevent != NULL
- 	    && xevent->type == ClientMessage
- 	    && xevent->xclient.message_type == GET_X_ATOM(wm_protocols_atom)
--	    && xevent->xclient.data.l[0] == GET_X_ATOM(save_yourself_atom))
-+	    && (long_u)xevent->xclient.data.l[0]
-+					    == GET_X_ATOM(save_yourself_atom))
-     {
- 	out_flush();
- 	ml_sync_all(FALSE, FALSE); /* preserve all swap files */
-@@ -2512,7 +2580,6 @@
- /*
-  * GDK handler for X ClientMessage events.
-  */
--/*ARGSUSED2*/
-     static GdkFilterReturn
- gdk_wm_protocols_filter(GdkXEvent *xev, GdkEvent *event, gpointer data)
- {
-@@ -2558,9 +2625,8 @@
- /*
-  * Setup the window icon & xcmdsrv comm after the main window has been realized.
-  */
--/*ARGSUSED*/
-     static void
--mainwin_realize(GtkWidget *widget, gpointer data)
-+mainwin_realize(GtkWidget *widget UNUSED, gpointer data UNUSED)
- {
- /* If you get an error message here, you still need to unpack the runtime
-  * archive! */
-@@ -2712,11 +2778,10 @@
- }
- 
- #ifdef HAVE_GTK_MULTIHEAD
--/*ARGSUSED1*/
-     static void
- mainwin_screen_changed_cb(GtkWidget  *widget,
--			  GdkScreen  *previous_screen,
--			  gpointer   data)
-+			  GdkScreen  *previous_screen UNUSED,
-+			  gpointer   data UNUSED)
- {
-     if (!gtk_widget_has_screen(widget))
- 	return;
-@@ -2757,9 +2822,8 @@
-  * Don't try to set any VIM scrollbar sizes anywhere here. I'm relying on the
-  * fact that the main VIM engine doesn't take them into account anywhere.
-  */
--/*ARGSUSED1*/
-     static void
--drawarea_realize_cb(GtkWidget *widget, gpointer data)
-+drawarea_realize_cb(GtkWidget *widget, gpointer data UNUSED)
- {
-     GtkWidget *sbar;
- 
-@@ -2789,9 +2853,8 @@
- /*
-  * Properly clean up on shutdown.
-  */
--/*ARGSUSED0*/
-     static void
--drawarea_unrealize_cb(GtkWidget *widget, gpointer data)
-+drawarea_unrealize_cb(GtkWidget *widget UNUSED, gpointer data UNUSED)
- {
-     /* Don't write messages to the GUI anymore */
-     full_screen = FALSE;
-@@ -2827,11 +2890,10 @@
- #endif
- }
- 
--/*ARGSUSED0*/
-     static void
--drawarea_style_set_cb(GtkWidget	*widget,
--		      GtkStyle	*previous_style,
--		      gpointer	data)
-+drawarea_style_set_cb(GtkWidget	*widget UNUSED,
-+		      GtkStyle	*previous_style UNUSED,
-+		      gpointer	data UNUSED)
- {
-     gui_mch_new_colors();
- }
-@@ -2840,9 +2902,10 @@
-  * Callback routine for the "delete_event" signal on the toplevel window.
-  * Tries to vim gracefully, or refuses to exit with changed buffers.
-  */
--/*ARGSUSED*/
-     static gint
--delete_event_cb(GtkWidget *widget, GdkEventAny *event, gpointer data)
-+delete_event_cb(GtkWidget *widget UNUSED,
-+		GdkEventAny *event UNUSED,
-+		gpointer data UNUSED)
- {
-     gui_shell_closed();
-     return TRUE;
-@@ -2964,7 +3027,7 @@
- 
-     /* At start-up, don't try to set the hints until the initial
-      * values have been used (those that dictate our initial size)
--     * Let forced (i.e., correct) values thruogh always.
-+     * Let forced (i.e., correct) values through always.
-      */
-     if (!(force_width && force_height)  &&  init_window_hints_state > 0)
-     {
-@@ -3142,9 +3205,8 @@
- /*
-  * Handle selecting an item in the tab line popup menu.
-  */
--/*ARGSUSED*/
-     static void
--tabline_menu_handler(GtkMenuItem *item, gpointer user_data)
-+tabline_menu_handler(GtkMenuItem *item UNUSED, gpointer user_data)
- {
-     /* Add the string cmd into input buffer */
-     send_tabline_menu_event(clicked_page, (int)(long)user_data);
-@@ -3244,13 +3306,12 @@
- /*
-  * Handle selecting one of the tabs.
-  */
--/*ARGSUSED*/
-     static void
- on_select_tab(
--	GtkNotebook	*notebook,
--	GtkNotebookPage *page,
-+	GtkNotebook	*notebook UNUSED,
-+	GtkNotebookPage *page UNUSED,
- 	gint		idx,
--	gpointer	data)
-+	gpointer	data UNUSED)
- {
-     if (!ignore_tabline_evt)
-     {
-@@ -3460,6 +3521,7 @@
- 
-     /* Initialise atoms */
- #ifdef FEAT_MBYTE
-+    html_atom = gdk_atom_intern("text/html", FALSE);
-     utf8_string_atom = gdk_atom_intern("UTF8_STRING", FALSE);
- #endif
- #ifndef HAVE_GTK2
-@@ -3784,7 +3846,7 @@
- #endif
- 
-     if (gtk_socket_id != 0)
--	/* make sure keybord input can go to the drawarea */
-+	/* make sure keyboard input can go to the drawarea */
- 	GTK_WIDGET_SET_FLAGS(gui.drawarea, GTK_CAN_FOCUS);
- 
-     /*
-@@ -3922,10 +3984,10 @@
- /*
-  * This signal informs us about the need to rearrange our sub-widgets.
-  */
--/*ARGSUSED*/
-     static gint
--form_configure_event(GtkWidget *widget, GdkEventConfigure *event,
--		     gpointer data)
-+form_configure_event(GtkWidget *widget UNUSED,
-+		     GdkEventConfigure *event,
-+		     gpointer data UNUSED)
- {
-     int usable_height = event->height;
- 
-@@ -3948,9 +4010,8 @@
-  * We can't do much more here than to trying to preserve what had been done,
-  * since the window is already inevitably going away.
-  */
--/*ARGSUSED0*/
-     static void
--mainwin_destroy_cb(GtkObject *object, gpointer data)
-+mainwin_destroy_cb(GtkObject *object UNUSED, gpointer data UNUSED)
- {
-     /* Don't write messages to the GUI anymore */
-     full_screen = FALSE;
-@@ -3980,9 +4041,8 @@
-  * scrollbar init.), actually do the standard hinst and stop the timer.
-  * We'll not let the default hints be set while this timer's active.
-  */
--/*ARGSUSED*/
-     static gboolean
--check_startup_plug_hints(gpointer data)
-+check_startup_plug_hints(gpointer data UNUSED)
- {
-     if (init_window_hints_state == 1)
-     {
-@@ -4055,7 +4115,7 @@
- 	    Columns = w;
- 	if (mask & HeightValue)
- 	{
--	    if (p_window > h - 1 || !option_was_set((char_u *)"window"))
-+	    if (p_window > (long)h - 1 || !option_was_set((char_u *)"window"))
- 		p_window = h - 1;
- 	    Rows = h;
- 	}
-@@ -4070,14 +4130,14 @@
- 
- 	if (mask & (XValue | YValue))
- 	{
--	    int w, h;
--	    gui_mch_get_screen_dimensions(&w, &h);
--	    h += p_ghr + get_menu_tool_height();
--	    w += get_menu_tool_width();
-+	    int ww, hh;
-+	    gui_mch_get_screen_dimensions(&ww, &hh);
-+	    hh += p_ghr + get_menu_tool_height();
-+	    ww += get_menu_tool_width();
- 	    if (mask & XNegative)
--		x += w - pixel_width;
-+		x += ww - pixel_width;
- 	    if (mask & YNegative)
--		y += h - pixel_height;
-+		y += hh - pixel_height;
- #ifdef HAVE_GTK2
- 	    gtk_window_move(GTK_WINDOW(gui.mainwin), x, y);
- #else
-@@ -4229,9 +4289,8 @@
- }
- 
- 
--/*ARGSUSED0*/
-     void
--gui_mch_exit(int rc)
-+gui_mch_exit(int rc UNUSED)
- {
-     if (gui.mainwin != NULL)
- 	gtk_widget_destroy(gui.mainwin);
-@@ -4286,7 +4345,6 @@
-  * report the new size through form_configure_event().  That caused the window
-  * layout to be messed up.
-  */
--/*ARGSUSED0*/
-     static gboolean
- force_shell_resize_idle(gpointer data)
- {
-@@ -4314,12 +4372,11 @@
- /*
-  * Set the windows size.
-  */
--/*ARGSUSED2*/
-     void
- gui_mch_set_shellsize(int width, int height,
--		      int min_width,  int min_height,
--		      int base_width, int base_height,
--		      int direction)
-+		      int min_width UNUSED,  int min_height UNUSED,
-+		      int base_width UNUSED, int base_height UNUSED,
-+		      int direction UNUSED)
- {
- #ifndef HAVE_GTK2
-     /* Hack: When the form already is at the desired size, the window might
-@@ -4413,9 +4470,8 @@
- }
- 
- #if defined(FEAT_TITLE) || defined(PROTO)
--/*ARGSUSED*/
-     void
--gui_mch_settitle(char_u *title, char_u *icon)
-+gui_mch_settitle(char_u *title, char_u *icon UNUSED)
- {
- # ifdef HAVE_GTK2
-     if (title != NULL && output_conv.vc_type != CONV_NONE)
-@@ -4493,7 +4549,6 @@
-  * Get a font structure for highlighting.
-  * "cbdata" is a pointer to the global gui structure.
-  */
--/*ARGSUSED*/
-     static void
- font_sel_ok(GtkWidget *wgt, gpointer cbdata)
- {
-@@ -4509,7 +4564,6 @@
- 	gtk_main_quit();
- }
- 
--/*ARGSUSED*/
-     static void
- font_sel_cancel(GtkWidget *wgt, gpointer cbdata)
- {
-@@ -4520,7 +4574,6 @@
- 	gtk_main_quit();
- }
- 
--/*ARGSUSED*/
-     static void
- font_sel_destroy(GtkWidget *wgt, gpointer cbdata)
- {
-@@ -4620,7 +4673,6 @@
- /*
-  * Try to load the requested fontset.
-  */
--/*ARGSUSED2*/
-     GuiFontset
- gui_mch_get_fontset(char_u *name, int report_error, int fixed_width)
- {
-@@ -4677,6 +4729,9 @@
-     if (oldval != NULL && *oldval != NUL)
- 	gtk_font_selection_dialog_set_font_name(
- 		GTK_FONT_SELECTION_DIALOG(gui.fontdlg), (char *)oldval);
-+    else
-+	gtk_font_selection_dialog_set_font_name(
-+		GTK_FONT_SELECTION_DIALOG(gui.fontdlg), DEFAULT_FONT);
- 
-     if (gui.fontname)
-     {
-@@ -4764,6 +4819,9 @@
- 	if (oldname != oldval)
- 	    vim_free(oldname);
-     }
-+    else
-+	gtk_font_selection_dialog_set_font_name(
-+		GTK_FONT_SELECTION_DIALOG(dialog), DEFAULT_FONT);
- 
-     response = gtk_dialog_run(GTK_DIALOG(dialog));
- 
-@@ -4863,7 +4921,7 @@
-     styled_font[1] = &gui.ital_font;
-     styled_font[2] = &gui.boldital_font;
- 
--    /* First free whatever was freviously there. */
-+    /* First free whatever was previously there. */
-     for (i = 0; i < 3; ++i)
- 	if (*styled_font[i])
- 	{
-@@ -5012,9 +5070,8 @@
-  * Initialize Vim to use the font or fontset with the given name.
-  * Return FAIL if the font could not be loaded, OK otherwise.
-  */
--/*ARGSUSED1*/
-     int
--gui_mch_init_font(char_u *font_name, int fontset)
-+gui_mch_init_font(char_u *font_name, int fontset UNUSED)
- {
- #ifdef HAVE_GTK2
-     PangoFontDescription    *font_desc;
-@@ -5326,9 +5383,8 @@
- /*
-  * Return the name of font "font" in allocated memory.
-  */
--/*ARGSUSED*/
-     char_u *
--gui_mch_get_fontname(GuiFont font, char_u *name)
-+gui_mch_get_fontname(GuiFont font, char_u *name UNUSED)
- {
- # ifdef HAVE_GTK2
-     if (font != NOFONT)
-@@ -5732,7 +5788,7 @@
- {
-     int			i;
-     int			offset;
--    const static int	val[8] = {1, 0, 0, 0, 1, 2, 2, 2 };
-+    static const int	val[8] = {1, 0, 0, 0, 1, 2, 2, 2 };
-     int			y = FILL_Y(row + 1) - 1;
- 
-     /* Undercurl: draw curl at the bottom of the character cell. */
-@@ -6085,12 +6141,15 @@
- # ifdef FEAT_MBYTE
- 	    if (enc_utf8)
- 	    {
--		c = utf_ptr2char(p);
-+		int pcc[MAX_MCO];
-+
-+		/* TODO: use the composing characters */
-+		c = utfc_ptr2char_len(p, &pcc, len - (p - s));
- 		if (c >= 0x10000)	/* show chars > 0xffff as ? */
- 		    c = 0xbf;
- 		buf[textlen].byte1 = c >> 8;
- 		buf[textlen].byte2 = c;
--		p += utf_ptr2len(p);
-+		p += utfc_ptr2len_len(p, len - (p - s));
- 		width += utf_char2cells(c);
- 	    }
- 	    else
-@@ -6114,8 +6173,8 @@
- 	if (has_mbyte)
- 	{
- 	    width = 0;
--	    for (p = s; p < s + len; p += (*mb_ptr2len)(p))
--		width += (*mb_ptr2cells)(p);
-+	    for (p = s; p < s + len; p += (*mb_ptr2len_len)(p, len - (p - s)))
-+		width += (*mb_ptr2cells_len)(p, len - (p - s));
- 	}
- 	else
- # endif
-@@ -6402,7 +6461,6 @@
- /*
-  * Callback function, used when data is available on the SNiFF connection.
-  */
--/* ARGSUSED */
-     static void
- sniff_request_cb(
-     gpointer	data,
-@@ -6665,12 +6723,14 @@
- {
-     GdkAtom	target;
-     unsigned	i;
--    int		nbytes;
--    char_u	*buffer;
-     time_t	start;
- 
-     for (i = 0; i < N_SELECTION_TARGETS; ++i)
-     {
-+#ifdef FEAT_MBYTE
-+	if (!clip_html && selection_targets[i].info == TARGET_HTML)
-+	    continue;
-+#endif
- 	received_selection = RS_NONE;
- 	target = gdk_atom_intern(selection_targets[i].target, FALSE);
- 
-@@ -6690,30 +6750,14 @@
-     }
- 
-     /* Final fallback position - use the X CUT_BUFFER0 store */
--    nbytes = 0;
--    buffer = (char_u *)XFetchBuffer(GDK_WINDOW_XDISPLAY(gui.mainwin->window),
--				    &nbytes, 0);
--    if (nbytes > 0)
--    {
--	/* Got something */
--	clip_yank_selection(MCHAR, buffer, (long)nbytes, cbd);
--	if (p_verbose > 0)
--	{
--	    verbose_enter();
--	    smsg((char_u *)_("Used CUT_BUFFER0 instead of empty selection"));
--	    verbose_leave();
--	}
--    }
--    if (buffer != NULL)
--	XFree(buffer);
-+    yank_cut_buffer0(GDK_WINDOW_XDISPLAY(gui.mainwin->window), cbd);
- }
- 
- /*
-  * Disown the selection.
-  */
--/*ARGSUSED*/
-     void
--clip_mch_lose_selection(VimClipboard *cbd)
-+clip_mch_lose_selection(VimClipboard *cbd UNUSED)
- {
-     /* WEIRD: when using NULL to actually disown the selection, we lose the
-      * selection the first time we own it. */
-@@ -6741,9 +6785,8 @@
-  * Send the current selection to the clipboard.  Do nothing for X because we
-  * will fill in the selection only when requested by another app.
-  */
--/*ARGSUSED*/
-     void
--clip_mch_set_selection(VimClipboard *cbd)
-+clip_mch_set_selection(VimClipboard *cbd UNUSED)
- {
- }
- 
-@@ -6950,7 +6993,7 @@
- 	    else
- 		id &= ~1;	/* they are always even (why?) */
- 	}
--	else if (shape < sizeof(mshape_ids) / sizeof(int))
-+	else if (shape < (int)(sizeof(mshape_ids) / sizeof(int)))
- 	    id = mshape_ids[shape];
- 	else
- 	    return;
-diff -Naur vim72.orig/src/gui_motif.c vim72/src/gui_motif.c
---- vim72.orig/src/gui_motif.c	2008-06-07 06:06:33.000000000 -0700
-+++ vim72/src/gui_motif.c	2009-09-12 08:39:05.000000000 -0700
-@@ -117,10 +117,9 @@
-  * Call-back routines.
-  */
- 
--/* ARGSUSED */
-     static void
- scroll_cb(w, client_data, call_data)
--    Widget	w;
-+    Widget	w UNUSED;
-     XtPointer	client_data, call_data;
- {
-     scrollbar_T *sb;
-@@ -136,11 +135,11 @@
- }
- 
- #ifdef FEAT_GUI_TABLINE
--/*ARGSUSED*/
-     static void
- tabline_cb(w, client_data, call_data)
--    Widget	w;
--    XtPointer	client_data, call_data;
-+    Widget	w UNUSED;
-+    XtPointer	client_data UNUSED;
-+    XtPointer	call_data;
- {
-     XmNotebookCallbackStruct *nptr;
- 
-@@ -149,11 +148,11 @@
- 	send_tabline_event(nptr->page_number);
- }
- 
--/*ARGSUSED*/
-     static void
- tabline_button_cb(w, client_data, call_data)
-     Widget	w;
--    XtPointer	client_data, call_data;
-+    XtPointer	client_data UNUSED;
-+    XtPointer	call_data UNUSED;
- {
-     int		cmd, tab_idx;
- 
-@@ -166,11 +165,10 @@
- /*
-  * Tabline single mouse click timeout handler
-  */
--/*ARGSUSED*/
-     static void
- motif_tabline_timer_cb (timed_out, interval_id)
-     XtPointer		timed_out;
--    XtIntervalId	*interval_id;
-+    XtIntervalId	*interval_id UNUSED;
- {
-     *((int *)timed_out) = TRUE;
- }
-@@ -203,13 +201,12 @@
-     return FALSE;
- }
- 
--/*ARGSUSED*/
-     static void
- tabline_menu_cb(w, closure, e, continue_dispatch)
-     Widget	w;
--    XtPointer	closure;
-+    XtPointer	closure UNUSED;
-     XEvent	*e;
--    Boolean	*continue_dispatch;
-+    Boolean	*continue_dispatch UNUSED;
- {
-     Widget			tab_w;
-     XButtonPressedEvent		*event;
-@@ -277,11 +274,10 @@
-     XtManageChild(tabLine_menu);
- }
- 
--/*ARGSUSED*/
-     static void
- tabline_balloon_cb(beval, state)
-     BalloonEval	*beval;
--    int		state;
-+    int		state UNUSED;
- {
-     int		nr;
-     tabpage_T	*tp;
-@@ -642,13 +638,12 @@
- #endif
- }
- 
--/*ARGSUSED*/
-     void
- gui_mch_set_text_area_pos(x, y, w, h)
--    int	    x;
--    int	    y;
--    int	    w;
--    int	    h;
-+    int	    x UNUSED;
-+    int	    y UNUSED;
-+    int	    w UNUSED;
-+    int	    h UNUSED;
- {
- #ifdef FEAT_TOOLBAR
-     /* Give keyboard focus to the textArea instead of the toolbar. */
-@@ -1261,7 +1256,7 @@
-     if (menu->icon_builtin || gui_find_bitmap(menu->name, buf, "xpm") == FAIL)
-     {
- 	if (menu->iconidx >= 0 && menu->iconidx
--		   < (sizeof(built_in_pixmaps) / sizeof(built_in_pixmaps[0])))
-+	       < (int)(sizeof(built_in_pixmaps) / sizeof(built_in_pixmaps[0])))
- 	    xpm = built_in_pixmaps[menu->iconidx];
- 	else
- 	    xpm = tb_blank_xpm;
-@@ -1716,10 +1711,9 @@
-     }
- }
- 
--/* ARGSUSED */
-     void
- gui_mch_show_popupmenu(menu)
--    vimmenu_T *menu;
-+    vimmenu_T *menu UNUSED;
- {
- #ifdef MOTIF_POPUP
-     XmMenuPosition(menu->submenu_id, gui_x11_get_last_mouse_event());
-@@ -2046,9 +2040,8 @@
- /*
-  * Callback routine for dialog mnemonic processing.
-  */
--/*ARGSUSED*/
-     static void
--mnemonic_event(Widget w, XtPointer call_data, XKeyEvent *event)
-+mnemonic_event(Widget w, XtPointer call_data UNUSED, XKeyEvent *event)
- {
-     do_mnemonic(w, event->keycode);
- }
-@@ -2287,13 +2280,12 @@
-  * Put up a file requester.
-  * Returns the selected name in allocated memory, or NULL for Cancel.
-  */
--/* ARGSUSED */
-     char_u *
- gui_mch_browse(saving, title, dflt, ext, initdir, filter)
--    int		saving;		/* select file to write */
-+    int		saving UNUSED;	/* select file to write */
-     char_u	*title;		/* title for the window */
-     char_u	*dflt;		/* default name */
--    char_u	*ext;		/* not used (extension added) */
-+    char_u	*ext UNUSED;	/* not used (extension added) */
-     char_u	*initdir;	/* initial directory, NULL for current dir */
-     char_u	*filter;	/* file name filter */
- {
-@@ -2413,12 +2405,11 @@
- /*
-  * Process callback from Dialog cancel actions.
-  */
--/* ARGSUSED */
-     static void
- DialogCancelCB(w, client_data, call_data)
--    Widget	w;		/*  widget id		*/
--    XtPointer	client_data;	/*  data from application   */
--    XtPointer	call_data;	/*  data from widget class  */
-+    Widget	w UNUSED;		/*  widget id		*/
-+    XtPointer	client_data UNUSED;	/*  data from application   */
-+    XtPointer	call_data UNUSED;	/*  data from widget class  */
- {
-     if (browse_fname != NULL)
-     {
-@@ -2431,12 +2422,11 @@
- /*
-  * Process callback from Dialog actions.
-  */
--/* ARGSUSED */
-     static void
- DialogAcceptCB(w, client_data, call_data)
--    Widget	w;		/*  widget id		*/
--    XtPointer	client_data;	/*  data from application   */
--    XtPointer	call_data;	/*  data from widget class  */
-+    Widget	w UNUSED;		/*  widget id		*/
-+    XtPointer	client_data UNUSED;	/*  data from application   */
-+    XtPointer	call_data;		/*  data from widget class  */
- {
-     XmFileSelectionBoxCallbackStruct *fcb;
- 
-@@ -2467,13 +2457,12 @@
-  * Callback function for the textfield.  When CR is hit this works like
-  * hitting the "OK" button, ESC like "Cancel".
-  */
--/* ARGSUSED */
-     static void
- keyhit_callback(w, client_data, event, cont)
-     Widget		w;
--    XtPointer		client_data;
-+    XtPointer		client_data UNUSED;
-     XEvent		*event;
--    Boolean		*cont;
-+    Boolean		*cont UNUSED;
- {
-     char	buf[2];
-     KeySym	key_sym;
-@@ -2490,12 +2479,11 @@
- 	XmTextFieldClearSelection(w, XtLastTimestampProcessed(gui.dpy));
- }
- 
--/* ARGSUSED */
-     static void
- butproc(w, client_data, call_data)
--    Widget	w;
-+    Widget	w UNUSED;
-     XtPointer	client_data;
--    XtPointer	call_data;
-+    XtPointer	call_data UNUSED;
- {
-     dialogStatus = (int)(long)client_data + 1;
- }
-@@ -2567,10 +2555,9 @@
- }
- #endif
- 
--/* ARGSUSED */
-     int
- gui_mch_dialog(type, title, message, button_names, dfltbutton, textfield)
--    int		type;
-+    int		type UNUSED;
-     char_u	*title;
-     char_u	*message;
-     char_u	*button_names;
-@@ -3197,7 +3184,7 @@
- 		XmNchildren, &children,
- 		XmNnumChildren, &numChildren, NULL);
- 	borders += tst + tmh;
--	for (i = 0; i < numChildren; i++)
-+	for (i = 0; i < (int)numChildren; i++)
- 	{
- 	    whgt = 0;
- 	    XtVaGetValues(children[i], XmNheight, &whgt, NULL);
-@@ -3237,13 +3224,12 @@
-  * I have to use footer help for backwards compatability.  Hopefully both will
-  * get implemented and the user will have a choice.
-  */
--/*ARGSUSED*/
-     static void
- toolbarbutton_enter_cb(w, client_data, event, cont)
--    Widget	w;
-+    Widget	w UNUSED;
-     XtPointer	client_data;
--    XEvent	*event;
--    Boolean	*cont;
-+    XEvent	*event UNUSED;
-+    Boolean	*cont UNUSED;
- {
-     vimmenu_T	*menu = (vimmenu_T *) client_data;
- 
-@@ -3254,13 +3240,12 @@
-     }
- }
- 
--/*ARGSUSED*/
-     static void
- toolbarbutton_leave_cb(w, client_data, event, cont)
--    Widget	w;
--    XtPointer	client_data;
--    XEvent	*event;
--    Boolean	*cont;
-+    Widget	w UNUSED;
-+    XtPointer	client_data UNUSED;
-+    XEvent	*event UNUSED;
-+    Boolean	*cont UNUSED;
- {
-     gui_mch_set_footer((char_u *) "");
- }
-@@ -3492,10 +3477,9 @@
- /*
-  * Set the fontlist for Widget "id" to use gui.menu_fontset or gui.menu_font.
-  */
--/*ARGSUSED*/
-     void
- gui_motif_menu_fontlist(id)
--    Widget  id;
-+    Widget  id UNUSED;
- {
- #ifdef FEAT_MENU
- #ifdef FONTSET_ALWAYS
-@@ -3566,8 +3550,8 @@
-     Widget cancel;
- } SharedFindReplace;
- 
--static SharedFindReplace find_widgets = { NULL };
--static SharedFindReplace repl_widgets = { NULL };
-+static SharedFindReplace find_widgets = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
-+static SharedFindReplace repl_widgets = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
- 
- static void find_replace_destroy_callback __ARGS((Widget w, XtPointer client_data, XtPointer call_data));
- static void find_replace_dismiss_callback __ARGS((Widget w, XtPointer client_data, XtPointer call_data));
-@@ -3576,12 +3560,11 @@
- static void find_replace_keypress __ARGS((Widget w, SharedFindReplace * frdp, XKeyEvent * event));
- static void find_replace_dialog_create __ARGS((char_u *entry_text, int do_replace));
- 
--/*ARGSUSED*/
-     static void
- find_replace_destroy_callback(w, client_data, call_data)
--    Widget	w;
-+    Widget	w UNUSED;
-     XtPointer	client_data;
--    XtPointer	call_data;
-+    XtPointer	call_data UNUSED;
- {
-     SharedFindReplace *cd = (SharedFindReplace *)client_data;
- 
-@@ -3590,12 +3573,11 @@
- 	cd->dialog = (Widget)0;
- }
- 
--/*ARGSUSED*/
-     static void
- find_replace_dismiss_callback(w, client_data, call_data)
--    Widget	w;
-+    Widget	w UNUSED;
-     XtPointer	client_data;
--    XtPointer	call_data;
-+    XtPointer	call_data UNUSED;
- {
-     SharedFindReplace *cd = (SharedFindReplace *)client_data;
- 
-@@ -3603,22 +3585,20 @@
- 	XtUnmanageChild(cd->dialog);
- }
- 
--/*ARGSUSED*/
-     static void
- entry_activate_callback(w, client_data, call_data)
--    Widget	w;
-+    Widget	w UNUSED;
-     XtPointer	client_data;
--    XtPointer	call_data;
-+    XtPointer	call_data UNUSED;
- {
-     XmProcessTraversal((Widget)client_data, XmTRAVERSE_CURRENT);
- }
- 
--/*ARGSUSED*/
-     static void
- find_replace_callback(w, client_data, call_data)
--    Widget	w;
-+    Widget	w UNUSED;
-     XtPointer	client_data;
--    XtPointer	call_data;
-+    XtPointer	call_data UNUSED;
- {
-     long_u	flags = (long_u)client_data;
-     char	*find_text, *repl_text;
-@@ -3668,10 +3648,9 @@
- 	XtFree(repl_text);
- }
- 
--/*ARGSUSED*/
-     static void
- find_replace_keypress(w, frdp, event)
--    Widget		w;
-+    Widget		w UNUSED;
-     SharedFindReplace	*frdp;
-     XKeyEvent		*event;
- {
-diff -Naur vim72.orig/src/gui_x11.c vim72/src/gui_x11.c
---- vim72.orig/src/gui_x11.c	2008-06-08 08:13:45.000000000 -0700
-+++ vim72/src/gui_x11.c	2009-09-12 08:39:05.000000000 -0700
-@@ -570,22 +570,20 @@
-  * Call-back routines.
-  */
- 
--/* ARGSUSED */
-     static void
- gui_x11_timer_cb(timed_out, interval_id)
-     XtPointer	    timed_out;
--    XtIntervalId    *interval_id;
-+    XtIntervalId    *interval_id UNUSED;
- {
-     *((int *)timed_out) = TRUE;
- }
- 
--/* ARGSUSED */
-     static void
- gui_x11_visibility_cb(w, dud, event, dum)
--    Widget	w;
--    XtPointer	dud;
-+    Widget	w UNUSED;
-+    XtPointer	dud UNUSED;
-     XEvent	*event;
--    Boolean	*dum;
-+    Boolean	*dum UNUSED;
- {
-     if (event->type != VisibilityNotify)
- 	return;
-@@ -603,13 +601,12 @@
-     gui_mch_update();
- }
- 
--/* ARGSUSED */
-     static void
- gui_x11_expose_cb(w, dud, event, dum)
--    Widget	w;
--    XtPointer	dud;
-+    Widget	w UNUSED;
-+    XtPointer	dud UNUSED;
-     XEvent	*event;
--    Boolean	*dum;
-+    Boolean	*dum UNUSED;
- {
-     XExposeEvent	*gevent;
-     int			new_x;
-@@ -680,13 +677,12 @@
- }
- #endif
- 
--/* ARGSUSED */
-     static void
- gui_x11_resize_window_cb(w, dud, event, dum)
--    Widget	w;
--    XtPointer	dud;
-+    Widget	w UNUSED;
-+    XtPointer	dud UNUSED;
-     XEvent	*event;
--    Boolean	*dum;
-+    Boolean	*dum UNUSED;
- {
-     static int lastWidth, lastHeight;
- 
-@@ -727,35 +723,32 @@
- #endif
- }
- 
--/* ARGSUSED */
-     static void
- gui_x11_focus_change_cb(w, data, event, dum)
--    Widget	w;
--    XtPointer	data;
-+    Widget	w UNUSED;
-+    XtPointer	data UNUSED;
-     XEvent	*event;
--    Boolean	*dum;
-+    Boolean	*dum UNUSED;
- {
-     gui_focus_change(event->type == FocusIn);
- }
- 
--/* ARGSUSED */
-     static void
- gui_x11_enter_cb(w, data, event, dum)
--    Widget	w;
--    XtPointer	data;
--    XEvent	*event;
--    Boolean	*dum;
-+    Widget	w UNUSED;
-+    XtPointer	data UNUSED;
-+    XEvent	*event UNUSED;
-+    Boolean	*dum UNUSED;
- {
-     gui_focus_change(TRUE);
- }
- 
--/* ARGSUSED */
-     static void
- gui_x11_leave_cb(w, data, event, dum)
--    Widget	w;
--    XtPointer	data;
--    XEvent	*event;
--    Boolean	*dum;
-+    Widget	w UNUSED;
-+    XtPointer	data UNUSED;
-+    XEvent	*event UNUSED;
-+    Boolean	*dum UNUSED;
- {
-     gui_focus_change(FALSE);
- }
-@@ -766,13 +759,12 @@
- # endif
- #endif
- 
--/* ARGSUSED */
-     void
- gui_x11_key_hit_cb(w, dud, event, dum)
--    Widget	w;
--    XtPointer	dud;
-+    Widget	w UNUSED;
-+    XtPointer	dud UNUSED;
-     XEvent	*event;
--    Boolean	*dum;
-+    Boolean	*dum UNUSED;
- {
-     XKeyPressedEvent	*ev_press;
- #ifdef FEAT_XIM
-@@ -1078,13 +1070,12 @@
- #endif
- }
- 
--/* ARGSUSED */
-     static void
- gui_x11_mouse_cb(w, dud, event, dum)
--    Widget	w;
--    XtPointer	dud;
-+    Widget	w UNUSED;
-+    XtPointer	dud UNUSED;
-     XEvent	*event;
--    Boolean	*dum;
-+    Boolean	*dum UNUSED;
- {
-     static XtIntervalId timer = (XtIntervalId)0;
-     static int	timed_out = TRUE;
-@@ -1210,11 +1201,11 @@
-     while (arg < *argc)
-     {
- 	/* Look for argv[arg] in cmdline_options[] table */
--	for (i = 0; i < XtNumber(cmdline_options); i++)
-+	for (i = 0; i < (int)XtNumber(cmdline_options); i++)
- 	    if (strcmp(argv[arg], cmdline_options[i].option) == 0)
- 		break;
- 
--	if (i < XtNumber(cmdline_options))
-+	if (i < (int)XtNumber(cmdline_options))
- 	{
- 	    /* Remember finding "-rv" or "-reverse" */
- 	    if (strcmp("-rv", argv[arg]) == 0
-@@ -1319,12 +1310,11 @@
- 
- static void local_xsmp_handle_requests __ARGS((XtPointer c, int *s, XtInputId *i));
- 
--/*ARGSUSED*/
-     static void
- local_xsmp_handle_requests(c, s, i)
--    XtPointer	c;
--    int		*s;
--    XtInputId	*i;
-+    XtPointer	c UNUSED;
-+    int		*s UNUSED;
-+    XtInputId	*i UNUSED;
- {
-     if (xsmp_handle_requests() == FAIL)
- 	XtRemoveInput(_xsmp_xtinputid);
-@@ -1438,7 +1428,7 @@
- 	    Columns = w;
- 	if (mask & HeightValue)
- 	{
--	    if (p_window > h - 1 || !option_was_set((char_u *)"window"))
-+	    if (p_window > (long)h - 1 || !option_was_set((char_u *)"window"))
- 		p_window = h - 1;
- 	    Rows = h;
- 	}
-@@ -1587,6 +1577,8 @@
-     XtCloseDisplay(gui.dpy);
-     gui.dpy = NULL;
-     vimShell = (Widget)0;
-+    vim_free(gui_argv);
-+    gui_argv = NULL;
- }
- 
- /*
-@@ -1751,16 +1743,17 @@
- }
- #endif
- 
--/*ARGSUSED*/
-     void
- gui_mch_exit(rc)
--    int		rc;
-+    int		rc UNUSED;
- {
- #if 0
-     /* Lesstif gives an error message here, and so does Solaris.  The man page
-      * says that this isn't needed when exiting, so just skip it. */
-     XtCloseDisplay(gui.dpy);
- #endif
-+    vim_free(gui_argv);
-+    gui_argv = NULL;
- }
- 
- /*
-@@ -1795,7 +1788,6 @@
- 	NULL);
- }
- 
--/*ARGSUSED*/
-     void
- gui_mch_set_shellsize(width, height, min_width, min_height,
- 		    base_width, base_height, direction)
-@@ -1805,7 +1797,7 @@
-     int		min_height;
-     int		base_width;
-     int		base_height;
--    int		direction;
-+    int		direction UNUSED;
- {
- #ifdef FEAT_XIM
-     height += xim_get_status_area_height(),
-@@ -1843,11 +1835,10 @@
-  * If "fontset" is TRUE, load the "font_name" as a fontset.
-  * Return FAIL if the font could not be loaded, OK otherwise.
-  */
--/*ARGSUSED*/
-     int
- gui_mch_init_font(font_name, do_fontset)
-     char_u	*font_name;
--    int		do_fontset;
-+    int		do_fontset UNUSED;
- {
-     XFontStruct	*font = NULL;
- 
-@@ -2025,10 +2016,9 @@
-  * Return the name of font "font" in allocated memory.
-  * Don't know how to get the actual name, thus use the provided name.
-  */
--/*ARGSUSED*/
-     char_u *
- gui_mch_get_fontname(font, name)
--    GuiFont font;
-+    GuiFont font UNUSED;
-     char_u  *name;
- {
-     if (name == NULL)
-@@ -2450,7 +2440,7 @@
- 	*colorPtr = colortable[closest];
-     }
- 
--    free(colortable);
-+    vim_free(colortable);
-     return OK;
- }
- 
-@@ -2517,7 +2507,7 @@
- {
-     int			i;
-     int			offset;
--    const static int	val[8] = {1, 0, 0, 0, 1, 2, 2, 2 };
-+    static const int	val[8] = {1, 0, 0, 0, 1, 2, 2, 2 };
- 
-     XSetForeground(gui.dpy, gui.text_gc, prev_sp_color);
-     for (i = FILL_X(col); i < FILL_X(col + cells); ++i)
-@@ -2565,8 +2555,10 @@
- # ifdef FEAT_XFONTSET
- 	    if (current_fontset != NULL)
- 	    {
--		if (c >= 0x10000 && sizeof(wchar_t) <= 2)
-+#  ifdef SMALL_WCHAR_T
-+		if (c >= 0x10000)
- 		    c = 0xbf;		/* show chars > 0xffff as ? */
-+#  endif
- 		((wchar_t *)buf)[wlen] = c;
- 	    }
- 	    else
-@@ -3132,11 +3124,11 @@
-     /* Nothing to do in X */
- }
- 
--/* ARGSUSED */
-     void
- gui_x11_menu_cb(w, client_data, call_data)
--    Widget	w;
--    XtPointer	client_data, call_data;
-+    Widget	w UNUSED;
-+    XtPointer	client_data;
-+    XtPointer	call_data UNUSED;
- {
-     gui_menu_cb((vimmenu_T *)client_data);
- }
-@@ -3149,13 +3141,12 @@
-  * Function called when window closed.	Works like ":qa".
-  * Should put up a requester!
-  */
--/*ARGSUSED*/
-     static void
- gui_x11_wm_protocol_handler(w, client_data, event, dum)
--    Widget	w;
--    XtPointer	client_data;
-+    Widget	w UNUSED;
-+    XtPointer	client_data UNUSED;
-     XEvent	*event;
--    Boolean	*dum;
-+    Boolean	*dum UNUSED;
- {
-     /*
-      * Only deal with Client messages.
-@@ -3168,7 +3159,7 @@
-      * exit.  That can be cancelled though, thus Vim shouldn't exit here.
-      * Just sync our swap files.
-      */
--    if (((XClientMessageEvent *)event)->data.l[0] ==
-+    if ((Atom)((XClientMessageEvent *)event)->data.l[0] ==
- 						  wm_atoms[SAVE_YOURSELF_IDX])
-     {
- 	out_flush();
-@@ -3181,7 +3172,7 @@
- 	return;
-     }
- 
--    if (((XClientMessageEvent *)event)->data.l[0] !=
-+    if ((Atom)((XClientMessageEvent *)event)->data.l[0] !=
- 						  wm_atoms[DELETE_WINDOW_IDX])
- 	return;
- 
-@@ -3192,13 +3183,12 @@
- /*
-  * Function called when property changed. Check for incoming commands
-  */
--/*ARGSUSED*/
-     static void
- gui_x11_send_event_handler(w, client_data, event, dum)
--    Widget	w;
--    XtPointer	client_data;
-+    Widget	w UNUSED;
-+    XtPointer	client_data UNUSED;
-     XEvent	*event;
--    Boolean	*dum;
-+    Boolean	*dum UNUSED;
- {
-     XPropertyEvent *e = (XPropertyEvent *) event;
- 
-@@ -3273,11 +3263,10 @@
-     }
- }
- 
--/* ARGSUSED */
-     static void
- gui_x11_blink_cb(timed_out, interval_id)
--    XtPointer	    timed_out;
--    XtIntervalId    *interval_id;
-+    XtPointer	    timed_out UNUSED;
-+    XtIntervalId    *interval_id UNUSED;
- {
-     if (blink_state == BLINK_ON)
-     {
-@@ -3439,47 +3428,37 @@
-     char_u	    *signfile;
- {
-     XpmAttributes   attrs;
--    XImage	    *sign;
-+    XImage	    *sign = NULL;
-     int		    status;
- 
-     /*
-      * Setup the color substitution table.
-      */
--    sign = NULL;
-     if (signfile[0] != NUL && signfile[0] != '-')
-     {
--	sign = (XImage *)alloc(sizeof(XImage));
--	if (sign != NULL)
-+	XpmColorSymbol color[5] =
- 	{
--	    XpmColorSymbol color[5] =
--	    {
--		{"none", NULL, 0},
--		{"iconColor1", NULL, 0},
--		{"bottomShadowColor", NULL, 0},
--		{"topShadowColor", NULL, 0},
--		{"selectColor", NULL, 0}
--	    };
--	    attrs.valuemask = XpmColorSymbols;
--	    attrs.numsymbols = 2;
--	    attrs.colorsymbols = color;
--	    attrs.colorsymbols[0].pixel = gui.back_pixel;
--	    attrs.colorsymbols[1].pixel = gui.norm_pixel;
--	    status = XpmReadFileToImage(gui.dpy, (char *)signfile,
-+	    {"none", NULL, 0},
-+	    {"iconColor1", NULL, 0},
-+	    {"bottomShadowColor", NULL, 0},
-+	    {"topShadowColor", NULL, 0},
-+	    {"selectColor", NULL, 0}
-+	};
-+	attrs.valuemask = XpmColorSymbols;
-+	attrs.numsymbols = 2;
-+	attrs.colorsymbols = color;
-+	attrs.colorsymbols[0].pixel = gui.back_pixel;
-+	attrs.colorsymbols[1].pixel = gui.norm_pixel;
-+	status = XpmReadFileToImage(gui.dpy, (char *)signfile,
- 							 &sign, NULL, &attrs);
--
--	    if (status == 0)
--	    {
--		/* Sign width is fixed at two columns now.
--		if (sign->width > gui.sign_width)
--		    gui.sign_width = sign->width + 8; */
--	    }
--	    else
--	    {
--		vim_free(sign);
--		sign = NULL;
--		EMSG(_(e_signdata));
--	    }
-+	if (status == 0)
-+	{
-+	    /* Sign width is fixed at two columns now.
-+	    if (sign->width > gui.sign_width)
-+	        gui.sign_width = sign->width + 8; */
- 	}
-+	else
-+	    EMSG(_(e_signdata));
-     }
- 
-     return (void *)sign;
-@@ -3489,8 +3468,7 @@
- gui_mch_destroy_sign(sign)
-     void *sign;
- {
--    XFree(((XImage *)sign)->data);
--    vim_free(sign);
-+    XDestroyImage((XImage*)sign);
- }
- #endif
- 
-diff -Naur vim72.orig/src/gui_xmdlg.c vim72/src/gui_xmdlg.c
---- vim72.orig/src/gui_xmdlg.c	2008-06-21 09:05:32.000000000 -0700
-+++ vim72/src/gui_xmdlg.c	2009-09-12 08:39:05.000000000 -0700
-@@ -369,10 +369,10 @@
-     char	buf[TEMP_BUF_SIZE];
-     XmString	items[MAX_ENTRIES_IN_LIST];
-     int		i;
--    int		index;
-+    int		idx;
- 
--    for (index = (int)ENCODING; index < (int)NONE; ++index)
--	count[index] = 0;
-+    for (idx = (int)ENCODING; idx < (int)NONE; ++idx)
-+	count[idx] = 0;
- 
-     /* First we insert the wild char into every single list. */
-     if (fix != ENCODING)
-@@ -448,7 +448,7 @@
- 
- 	    items[i] = XmStringCreateLocalized(list[ENCODING][i]);
- 
--	    if (i < n_items)
-+	    if (i < (int)n_items)
- 	    {
- 		/* recycle old button */
- 		XtVaSetValues(children[i],
-@@ -481,7 +481,7 @@
- 
- 	/* Destroy all the outstanding menu items.
- 	 */
--	for (i = count[ENCODING]; i < n_items; ++i)
-+	for (i = count[ENCODING]; i < (int)n_items; ++i)
- 	{
- 	    XtUnmanageChild(children[i]);
- 	    XtDestroyWidget(children[i]);
-@@ -503,14 +503,14 @@
-     /*
-      * Now loop trough the remaining lists and set them up.
-      */
--    for (index = (int)NAME; index < (int)NONE; ++index)
-+    for (idx = (int)NAME; idx < (int)NONE; ++idx)
-     {
- 	Widget w;
- 
--	if (fix == (enum ListSpecifier)index)
-+	if (fix == (enum ListSpecifier)idx)
- 	    continue;
- 
--	switch ((enum ListSpecifier)index)
-+	switch ((enum ListSpecifier)idx)
- 	{
- 	    case NAME:
- 		w = data->list[NAME];
-@@ -525,28 +525,27 @@
- 		w = (Widget)0;	/* for lint */
- 	}
- 
--	for (i = 0; i < count[index]; ++i)
-+	for (i = 0; i < count[idx]; ++i)
- 	{
--	    items[i] = XmStringCreateLocalized(list[index][i]);
--	    XtFree(list[index][i]);
-+	    items[i] = XmStringCreateLocalized(list[idx][i]);
-+	    XtFree(list[idx][i]);
- 	}
- 	XmListDeleteAllItems(w);
--	XmListAddItems(w, items, count[index], 1);
--	if (data->sel[index])
-+	XmListAddItems(w, items, count[idx], 1);
-+	if (data->sel[idx])
- 	{
- 	    XmStringFree(items[0]);
--	    items[0] = XmStringCreateLocalized(data->sel[index]);
-+	    items[0] = XmStringCreateLocalized(data->sel[idx]);
- 	    XmListSelectItem(w, items[0], False);
- 	    XmListSetBottomItem(w, items[0]);
- 	}
--	for (i = 0; i < count[index]; ++i)
-+	for (i = 0; i < count[idx]; ++i)
- 	    XmStringFree(items[i]);
-     }
- }
- 
--/*ARGSUSED*/
-     static void
--stoggle_callback(Widget w,
-+stoggle_callback(Widget w UNUSED,
- 	SharedFontSelData *data,
- 	XmToggleButtonCallbackStruct *call_data)
- {
-@@ -695,25 +694,24 @@
- 	int	    n;
- 	XmString    str;
- 	Arg	    args[4];
--	char	    *msg = _("no specific match");
-+	char	    *nomatch_msg = _("no specific match");
- 
- 	n = 0;
--	str = XmStringCreateLocalized(msg);
-+	str = XmStringCreateLocalized(nomatch_msg);
- 	XtSetArg(args[n], XmNlabelString, str); ++n;
- 	XtSetValues(data->sample, args, n);
- 	apply_fontlist(data->sample);
--	XmTextSetString(data->name, msg);
-+	XmTextSetString(data->name, nomatch_msg);
- 	XmStringFree(str);
- 
- 	return False;
-     }
- }
- 
--/*ARGSUSED*/
-     static void
- encoding_callback(Widget w,
- 	SharedFontSelData *data,
--	XtPointer dummy)
-+	XtPointer dummy UNUSED)
- {
-     XmString str;
-     XmListCallbackStruct fake_data;
-@@ -752,11 +750,10 @@
-     do_choice(w, data, call_data, SIZE);
- }
- 
--/*ARGSUSED*/
-     static void
--cancel_callback(Widget w,
-+cancel_callback(Widget w UNUSED,
- 	SharedFontSelData *data,
--	XmListCallbackStruct *call_data)
-+	XmListCallbackStruct *call_data UNUSED)
- {
-     if (data->sel[ENCODING])
-     {
-@@ -789,11 +786,10 @@
-     data->exit = True;
- }
- 
--/*ARGSUSED*/
-     static void
--ok_callback(Widget w,
-+ok_callback(Widget w UNUSED,
- 	SharedFontSelData *data,
--	XmPushButtonCallbackStruct *call_data)
-+	XmPushButtonCallbackStruct *call_data UNUSED)
- {
-     char    *pattern;
-     char    **name;
-@@ -886,21 +882,21 @@
-     {
- 	int	i;
- 	int	max;
--	int	index = 0;
-+	int	idx = 0;
- 	int	size;
--	char	str[128];
-+	char	buf[128];
- 
- 	for (i = 0, max = 0; i < data->num; i++)
- 	{
--	    get_part(fn(data, i), 7, str);
--	    size = atoi(str);
-+	    get_part(fn(data, i), 7, buf);
-+	    size = atoi(buf);
- 	    if ((size > max) && (size < MAX_DISPLAY_SIZE))
- 	    {
--		index = i;
-+		idx = i;
- 		max = size;
- 	    }
- 	}
--	strcpy(big_font, fn(data, index));
-+	strcpy(big_font, fn(data, idx));
-     }
-     data->old = XLoadQueryFont(XtDisplay(parent), big_font);
-     data->old_list = gui_motif_create_fontlist(data->old);
-@@ -1217,28 +1213,28 @@
- 
- 	if (i != 0)
- 	{
--	    char name[TEMP_BUF_SIZE];
--	    char style[TEMP_BUF_SIZE];
--	    char size[TEMP_BUF_SIZE];
--	    char encoding[TEMP_BUF_SIZE];
-+	    char namebuf[TEMP_BUF_SIZE];
-+	    char stylebuf[TEMP_BUF_SIZE];
-+	    char sizebuf[TEMP_BUF_SIZE];
-+	    char encodingbuf[TEMP_BUF_SIZE];
- 	    char *found;
- 
- 	    found = names[0];
- 
--	    name_part(found, name);
--	    style_part(found, style);
--	    size_part(found, size, data->in_pixels);
--	    encoding_part(found, encoding);
--
--	    if (strlen(name) > 0
--		    && strlen(style) > 0
--		    && strlen(size) > 0
--		    && strlen(encoding) > 0)
-+	    name_part(found, namebuf);
-+	    style_part(found, stylebuf);
-+	    size_part(found, sizebuf, data->in_pixels);
-+	    encoding_part(found, encodingbuf);
-+
-+	    if (strlen(namebuf) > 0
-+		    && strlen(stylebuf) > 0
-+		    && strlen(sizebuf) > 0
-+		    && strlen(encodingbuf) > 0)
- 	    {
--		data->sel[NAME] = XtNewString(name);
--		data->sel[STYLE] = XtNewString(style);
--		data->sel[SIZE] = XtNewString(size);
--		data->sel[ENCODING] = XtNewString(encoding);
-+		data->sel[NAME] = XtNewString(namebuf);
-+		data->sel[STYLE] = XtNewString(stylebuf);
-+		data->sel[SIZE] = XtNewString(sizebuf);
-+		data->sel[ENCODING] = XtNewString(encodingbuf);
- 		data->font_name = XtNewString(names[0]);
- 		display_sample(data);
- 		XmTextSetString(data->name, data->font_name);
-diff -Naur vim72.orig/src/gui_xmebw.c vim72/src/gui_xmebw.c
---- vim72.orig/src/gui_xmebw.c	2007-09-06 03:57:51.000000000 -0700
-+++ vim72/src/gui_xmebw.c	2009-09-12 08:39:05.000000000 -0700
-@@ -235,13 +235,12 @@
-     return tmp;
- }
- 
--/*ARGSUSED*/
-     static int
- alloc_color(Display	*display,
- 	Colormap	colormap,
- 	char		*colorname,
- 	XColor		*xcolor,
--	void		*closure)
-+	void		*closure UNUSED)
- {
-     int status;
- 
-@@ -595,9 +594,10 @@
- 		       XtHeight(eb), eb->primitive.highlight_thickness);
- }
- 
--/*ARGSUSED*/
-     static void
--draw_pixmap(XmEnhancedButtonWidget eb, XEvent *event, Region region)
-+draw_pixmap(XmEnhancedButtonWidget eb,
-+	    XEvent *event UNUSED,
-+	    Region region UNUSED)
- {
-     Pixmap	pix;
-     GC		gc = eb->label.normal_GC;
-@@ -641,7 +641,7 @@
-     height = eb->core.height - 2 * y;
-     if (h < height)
- 	height = h;
--    if (depth == eb->core.depth)
-+    if (depth == (int)eb->core.depth)
- 	XCopyArea(XtDisplay(eb), pix, XtWindow(eb), gc, 0, 0,
- 		width, height, x, y);
-     else if (depth == 1)
-@@ -731,9 +731,11 @@
- 	eb->label.normal_GC = tmp_gc;
- }
- 
--/*ARGSUSED*/
-     static void
--Enter(Widget wid, XEvent *event, String *params, Cardinal *num_params)
-+Enter(Widget wid,
-+      XEvent *event,
-+      String *params UNUSED,
-+      Cardinal *num_params UNUSED)
- {
-     XmEnhancedButtonWidget eb = (XmEnhancedButtonWidget) wid;
-     XmPushButtonCallbackStruct call_value;
-@@ -818,9 +820,11 @@
-     }
- }
- 
--/*ARGSUSED*/
-     static void
--Leave(Widget wid, XEvent *event, String *params, Cardinal *num_params)
-+Leave(Widget wid,
-+      XEvent *event,
-+      String *params UNUSED,
-+      Cardinal *num_params UNUSED)
- {
-     XmEnhancedButtonWidget eb = (XmEnhancedButtonWidget)wid;
-     XmPushButtonCallbackStruct call_value;
-@@ -976,9 +980,8 @@
-     }
- }
- 
--/*ARGSUSED*/
-     static void
--Initialize(Widget rq, Widget ebw, ArgList args, Cardinal *n)
-+Initialize(Widget rq, Widget ebw, ArgList args UNUSED, Cardinal *n UNUSED)
- {
-     XmEnhancedButtonWidget  request = (XmEnhancedButtonWidget)rq;
-     XmEnhancedButtonWidget  eb = (XmEnhancedButtonWidget)ebw;
-@@ -1056,9 +1059,12 @@
-     free_pixmaps((XmEnhancedButtonWidget)w);
- }
- 
--/*ARGSUSED*/
-     static Boolean
--SetValues(Widget current, Widget request, Widget new, ArgList args, Cardinal *n)
-+SetValues(Widget current,
-+	  Widget request UNUSED,
-+	  Widget new,
-+	  ArgList args UNUSED,
-+	  Cardinal *n UNUSED)
- {
-     XmEnhancedButtonWidget  cur = (XmEnhancedButtonWidget) current;
-     XmEnhancedButtonWidget  eb = (XmEnhancedButtonWidget) new;
-@@ -1108,7 +1114,7 @@
- 		if ((win_x < 0) || (win_y < 0))
- 		    return False;
- 
--		if ((win_x > r_width) || (win_y > r_height))
-+		if ((win_x > (int)r_width) || (win_y > (int)r_height))
- 		    return False;
- 		draw_highlight(eb);
- 		draw_shadows(eb);
-@@ -1256,7 +1262,7 @@
-     }
-     else
-     {
--	int adjust = 0;
-+	adjust = 0;
- 
- #if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
- 	/*
-@@ -1268,12 +1274,11 @@
- 	{
- 	    case XmEXTERNAL_HIGHLIGHT:
- 		adjust = (eb->primitive.highlight_thickness -
--			(eb->pushbutton.default_button_shadow_thickness ?
--			 Xm3D_ENHANCE_PIXEL : 0));
-+			 (eb->pushbutton.default_button_shadow_thickness
-+			  ?  Xm3D_ENHANCE_PIXEL : 0));
- 		break;
- 
- 	    case XmINTERNAL_HIGHLIGHT:
--		adjust = 0;
- 		break;
- 
- 	    default:
-diff -Naur vim72.orig/src/hardcopy.c vim72/src/hardcopy.c
---- vim72.orig/src/hardcopy.c	2008-01-11 12:46:20.000000000 -0800
-+++ vim72/src/hardcopy.c	2009-09-12 08:38:41.000000000 -0700
-@@ -442,12 +442,11 @@
- /*
-  * Print the page header.
-  */
--/*ARGSUSED*/
-     static void
- prt_header(psettings, pagenum, lnum)
-     prt_settings_T  *psettings;
-     int		pagenum;
--    linenr_T	lnum;
-+    linenr_T	lnum UNUSED;
- {
-     int		width = psettings->chars_per_line;
-     int		page_line;
-@@ -1881,7 +1880,7 @@
- 	return FALSE;
- 
-     /* Find type of DSC comment */
--    for (comment = 0; comment < NUM_ELEMENTS(prt_dsc_table); comment++)
-+    for (comment = 0; comment < (int)NUM_ELEMENTS(prt_dsc_table); comment++)
- 	if (prt_resfile_strncmp(0, prt_dsc_table[comment].string,
- 					    prt_dsc_table[comment].len) == 0)
- 	    break;
-@@ -2454,12 +2453,11 @@
- }
- #endif
- 
--/*ARGSUSED*/
-     int
- mch_print_init(psettings, jobname, forceit)
-     prt_settings_T *psettings;
-     char_u	*jobname;
--    int		forceit;
-+    int		forceit UNUSED;
- {
-     int		i;
-     char	*paper_name;
-@@ -2514,7 +2512,7 @@
-     if (!(props & ENC_8BIT) && ((*p_pmcs != NUL) || !(props & ENC_UNICODE)))
-     {
- 	p_mbenc_first = NULL;
--	for (cmap = 0; cmap < NUM_ELEMENTS(prt_ps_mbfonts); cmap++)
-+	for (cmap = 0; cmap < (int)NUM_ELEMENTS(prt_ps_mbfonts); cmap++)
- 	    if (prt_match_encoding((char *)p_encoding, &prt_ps_mbfonts[cmap],
- 								    &p_mbenc))
- 	    {
-@@ -2642,7 +2640,7 @@
- 	paper_name = "A4";
- 	paper_strlen = 2;
-     }
--    for (i = 0; i < PRT_MEDIASIZE_LEN; ++i)
-+    for (i = 0; i < (int)PRT_MEDIASIZE_LEN; ++i)
- 	if (STRLEN(prt_mediasize[i].name) == (unsigned)paper_strlen
- 		&& STRNICMP(prt_mediasize[i].name, paper_name,
- 							   paper_strlen) == 0)
-@@ -3308,10 +3306,9 @@
-     return !prt_file_error;
- }
- 
--/*ARGSUSED*/
-     int
- mch_print_begin_page(str)
--    char_u	*str;
-+    char_u	*str UNUSED;
- {
-     int		page_num[2];
- 
-@@ -3379,11 +3376,10 @@
- #endif
- }
- 
--/*ARGSUSED*/
-     int
- mch_print_text_out(p, len)
-     char_u	*p;
--    int		len;
-+    int		len UNUSED;
- {
-     int		need_break;
-     char_u	ch;
-diff -Naur vim72.orig/src/if_cscope.c vim72/src/if_cscope.c
---- vim72.orig/src/if_cscope.c	2008-06-24 09:32:34.000000000 -0700
-+++ vim72/src/if_cscope.c	2009-09-12 08:41:09.000000000 -0700
-@@ -46,7 +46,6 @@
- static int	    cs_find __ARGS((exarg_T *eap));
- static int	    cs_find_common __ARGS((char *opt, char *pat, int, int, int));
- static int	    cs_help __ARGS((exarg_T *eap));
--static void	    cs_init __ARGS((void));
- static void	    clear_csinfo __ARGS((int i));
- static int	    cs_insert_filelist __ARGS((char *, char *, char *,
- 			struct stat *));
-@@ -66,7 +65,10 @@
- static int	    cs_show __ARGS((exarg_T *eap));
- 
- 
--static csinfo_T	    csinfo[CSCOPE_MAX_CONNECTIONS];
-+static csinfo_T *   csinfo = NULL;
-+static int	    csinfo_size = 0;	/* number of items allocated in
-+					   csinfo[] */
-+
- static int	    eap_arg_len;    /* length of eap->arg, set in
- 				       cs_lookup_cmd() */
- static cscmd_T	    cs_cmds[] =
-@@ -74,7 +76,7 @@
-     { "add",	cs_add,
- 		N_("Add a new database"),     "add file|dir [pre-path] [flags]", 0 },
-     { "find",	cs_find,
--		N_("Query for a pattern"),    FIND_USAGE, 1 },
-+		N_("Query for a pattern"),    "find c|d|e|f|g|i|s|t name", 1 },
-     { "help",	cs_help,
- 		N_("Show this message"),      "help", 0 },
-     { "kill",	cs_kill,
-@@ -83,7 +85,7 @@
- 		N_("Reinit all connections"), "reset", 0 },
-     { "show",	cs_show,
- 		N_("Show connections"),       "show", 0 },
--    { NULL }
-+    { NULL, NULL, NULL, NULL, 0 }
- };
- 
-     static void
-@@ -93,12 +95,125 @@
-     (void)EMSG2(_("E560: Usage: cs[cope] %s"), cs_cmds[(int)x].usage);
- }
- 
-+#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
-+
-+static enum
-+{
-+    EXP_CSCOPE_SUBCMD,	/* expand ":cscope" sub-commands */
-+    EXP_SCSCOPE_SUBCMD,	/* expand ":scscope" sub-commands */
-+    EXP_CSCOPE_FIND,	/* expand ":cscope find" arguments */
-+    EXP_CSCOPE_KILL	/* expand ":cscope kill" arguments */
-+} expand_what;
-+
-+/*
-+ * Function given to ExpandGeneric() to obtain the cscope command
-+ * expansion.
-+ */
-+    char_u *
-+get_cscope_name(xp, idx)
-+    expand_T	*xp UNUSED;
-+    int		idx;
-+{
-+    int		current_idx;
-+    int		i;
-+
-+    switch (expand_what)
-+    {
-+    case EXP_CSCOPE_SUBCMD:
-+	/* Complete with sub-commands of ":cscope":
-+	 * add, find, help, kill, reset, show */
-+	return (char_u *)cs_cmds[idx].name;
-+    case EXP_SCSCOPE_SUBCMD:
-+	/* Complete with sub-commands of ":scscope": same sub-commands as
-+	 * ":cscope" but skip commands which don't support split windows */
-+	for (i = 0, current_idx = 0; cs_cmds[i].name != NULL; i++)
-+	    if (cs_cmds[i].cansplit)
-+		if (current_idx++ == idx)
-+		    break;
-+	return (char_u *)cs_cmds[i].name;
-+    case EXP_CSCOPE_FIND:
-+	{
-+	    const char *query_type[] =
-+	    {
-+		"c", "d", "e", "f", "g", "i", "s", "t", NULL
-+	    };
-+
-+	    /* Complete with query type of ":cscope find {query_type}".
-+	     * {query_type} can be letters (c, d, ... t) or numbers (0, 1,
-+	     * ..., 8) but only complete with letters, since numbers are
-+	     * redundant. */
-+	    return (char_u *)query_type[idx];
-+	}
-+    case EXP_CSCOPE_KILL:
-+	{
-+	    static char	connection[5];
-+
-+	    /* ":cscope kill" accepts connection numbers or partial names of
-+	     * the pathname of the cscope database as argument.  Only complete
-+	     * with connection numbers. -1 can also be used to kill all
-+	     * connections. */
-+	    for (i = 0, current_idx = 0; i < csinfo_size; i++)
-+	    {
-+		if (csinfo[i].fname == NULL)
-+		    continue;
-+		if (current_idx++ == idx)
-+		{
-+		    vim_snprintf(connection, sizeof(connection), "%d", i);
-+		    return (char_u *)connection;
-+		}
-+	    }
-+	    return (current_idx == idx && idx > 0) ? (char_u *)"-1" : NULL;
-+	}
-+    default:
-+	return NULL;
-+    }
-+}
-+
-+/*
-+ * Handle command line completion for :cscope command.
-+ */
-+    void
-+set_context_in_cscope_cmd(xp, arg, cmdidx)
-+    expand_T	*xp;
-+    char_u	*arg;
-+    cmdidx_T	cmdidx;
-+{
-+    char_u	*p;
-+
-+    /* Default: expand subcommands */
-+    xp->xp_context = EXPAND_CSCOPE;
-+    xp->xp_pattern = arg;
-+    expand_what = (cmdidx == CMD_scscope)
-+			? EXP_SCSCOPE_SUBCMD : EXP_CSCOPE_SUBCMD;
-+
-+    /* (part of) subcommand already typed */
-+    if (*arg != NUL)
-+    {
-+	p = skiptowhite(arg);
-+	if (*p != NUL)		    /* past first word */
-+	{
-+	    xp->xp_pattern = skipwhite(p);
-+	    if (*skiptowhite(xp->xp_pattern) != NUL)
-+		xp->xp_context = EXPAND_NOTHING;
-+	    else if (STRNICMP(arg, "add", p - arg) == 0)
-+		xp->xp_context = EXPAND_FILES;
-+	    else if (STRNICMP(arg, "kill", p - arg) == 0)
-+		expand_what = EXP_CSCOPE_KILL;
-+	    else if (STRNICMP(arg, "find", p - arg) == 0)
-+		expand_what = EXP_CSCOPE_FIND;
-+	    else
-+		xp->xp_context = EXPAND_NOTHING;
-+	}
-+    }
-+}
-+
-+#endif /* FEAT_CMDL_COMPL */
-+
- /*
-  * PRIVATE: do_cscope_general
-  *
-- * find the command, print help if invalid, and the then call the
-- * corresponding command function,
-- * called from do_cscope and do_scscope
-+ * Find the command, print help if invalid, and then call the corresponding
-+ * command function.
-  */
-     static void
- do_cscope_general(eap, make_split)
-@@ -107,7 +222,6 @@
- {
-     cscmd_T *cmdp;
- 
--    cs_init();
-     if ((cmdp = cs_lookup_cmd(eap)) == NULL)
-     {
- 	cs_help(eap);
-@@ -168,8 +282,6 @@
- {
-     int ret = FALSE;
- 
--    cs_init();
--
-     if (*eap->arg == NUL)
-     {
- 	(void)EMSG(_("E562: Usage: cstag <ident>"));
-@@ -325,7 +437,7 @@
-     if (num < 0 || num > 4 || (num > 0 && !dbpath))
- 	return FALSE;
- 
--    for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
-+    for (i = 0; i < csinfo_size; i++)
-     {
- 	if (!csinfo[i].fname)
- 	    continue;
-@@ -379,10 +491,9 @@
-  *
-  * MAXPATHL 256
-  */
--/* ARGSUSED */
-     static int
- cs_add(eap)
--    exarg_T *eap;
-+    exarg_T *eap UNUSED;
- {
-     char *fname, *ppath, *flags = NULL;
- 
-@@ -569,7 +680,7 @@
-     short i;
-     short cnt = 0;
- 
--    for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
-+    for (i = 0; i < csinfo_size; i++)
-     {
- 	if (csinfo[i].fname != NULL)
- 	    cnt++;
-@@ -659,6 +770,7 @@
- {
-     char *cmd;
-     short search;
-+    char *pat;
- 
-     switch (csoption[0])
-     {
-@@ -692,10 +804,17 @@
- 	return NULL;
-     }
- 
--    if ((cmd = (char *)alloc((unsigned)(strlen(pattern) + 2))) == NULL)
-+    /* Skip white space before the patter, except for text and pattern search,
-+     * they may want to use the leading white space. */
-+    pat = pattern;
-+    if (search != 4 && search != 6)
-+	while vim_iswhite(*pat)
-+	    ++pat;
-+
-+    if ((cmd = (char *)alloc((unsigned)(strlen(pat) + 2))) == NULL)
- 	return NULL;
- 
--    (void)sprintf(cmd, "%d%s", search, pattern);
-+    (void)sprintf(cmd, "%d%s", search, pat);
- 
-     return cmd;
- } /* cs_create_cmd */
-@@ -869,7 +988,7 @@
- 	vim_free(ppath);
- 
- #if defined(UNIX)
--	if (execl("/bin/sh", "sh", "-c", cmd, NULL) == -1)
-+	if (execl("/bin/sh", "sh", "-c", cmd, (char *)NULL) == -1)
- 	    PERROR(_("cs_create_connection exec failed"));
- 
- 	exit(127);
-@@ -989,7 +1108,8 @@
- {
-     int i;
-     char *cmd;
--    int nummatches[CSCOPE_MAX_CONNECTIONS], totmatches;
-+    int *nummatches;
-+    int totmatches;
- #ifdef FEAT_QUICKFIX
-     char cmdletter;
-     char *qfpos;
-@@ -1000,13 +1120,17 @@
-     if (cmd == NULL)
- 	return FALSE;
- 
-+    nummatches = (int *)alloc(sizeof(int)*csinfo_size);
-+    if (nummatches == NULL)
-+	return FALSE;
-+
-     /* send query to all open connections, then count the total number
-      * of matches so we can alloc matchesp all in one swell foop
-      */
--    for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
-+    for (i = 0; i < csinfo_size; i++)
- 	nummatches[i] = 0;
-     totmatches = 0;
--    for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
-+    for (i = 0; i < csinfo_size; i++)
-     {
- 	if (csinfo[i].fname == NULL || csinfo[i].to_fp == NULL)
- 	    continue;
-@@ -1031,7 +1155,10 @@
- 	char *buf;
- 
- 	if (!verbose)
-+	{
-+	    vim_free(nummatches);
- 	    return FALSE;
-+	}
- 
- 	buf = (char *)alloc((unsigned)(strlen(opt) + strlen(pat) + strlen(nf)));
- 	if (buf == NULL)
-@@ -1042,6 +1169,7 @@
- 	    (void)EMSG(buf);
- 	    vim_free(buf);
- 	}
-+	vim_free(nummatches);
- 	return FALSE;
-     }
- 
-@@ -1094,6 +1222,7 @@
- 		(void)EMSG(buf);
- 		vim_free(buf);
- 	    }
-+	    vim_free(nummatches);
- 	    return FALSE;
- 	}
-     }
-@@ -1141,6 +1270,7 @@
- 	}
- 	mch_remove(tmp);
- 	vim_free(tmp);
-+	vim_free(nummatches);
- 	return TRUE;
-     }
-     else
-@@ -1152,6 +1282,7 @@
- 	/* read output */
- 	cs_fill_results((char *)pat, totmatches, nummatches, &matches,
- 							 &contexts, &matched);
-+	vim_free(nummatches);
- 	if (matches == NULL)
- 	    return FALSE;
- 
-@@ -1167,20 +1298,36 @@
-  *
-  * print help
-  */
--/* ARGSUSED */
-     static int
- cs_help(eap)
--    exarg_T *eap;
-+    exarg_T *eap UNUSED;
- {
-     cscmd_T *cmdp = cs_cmds;
- 
-     (void)MSG_PUTS(_("cscope commands:\n"));
-     while (cmdp->name != NULL)
-     {
--	(void)smsg((char_u *)_("%-5s: %-30s (Usage: %s)"),
--				      cmdp->name, _(cmdp->help), cmdp->usage);
-+	char *help = _(cmdp->help);
-+	int  space_cnt = 30 - vim_strsize((char_u *)help);
-+
-+	/* Use %*s rather than %30s to ensure proper alignment in utf-8 */
-+	if (space_cnt < 0)
-+	    space_cnt = 0;
-+	(void)smsg((char_u *)_("%-5s: %s%*s (Usage: %s)"),
-+				      cmdp->name,
-+				      help, space_cnt, " ",
-+				      cmdp->usage);
- 	if (strcmp(cmdp->name, "find") == 0)
--	    MSG_PUTS(FIND_HELP);
-+	    MSG_PUTS(_("\n"
-+		       "       c: Find functions calling this function\n"
-+		       "       d: Find functions called by this function\n"
-+		       "       e: Find this egrep pattern\n"
-+		       "       f: Find this file\n"
-+		       "       g: Find this definition\n"
-+		       "       i: Find files #including this file\n"
-+		       "       s: Find this C symbol\n"
-+		       "       t: Find assignments to\n"));
-+
- 	cmdp++;
-     }
- 
-@@ -1189,26 +1336,6 @@
- } /* cs_help */
- 
- 
--/*
-- * PRIVATE: cs_init
-- *
-- * initialize cscope structure if not already
-- */
--    static void
--cs_init()
--{
--    short i;
--    static int init_already = FALSE;
--
--    if (init_already)
--	return;
--
--    for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
--	clear_csinfo(i);
--
--    init_already = TRUE;
--} /* cs_init */
--
-     static void
- clear_csinfo(i)
-     int	    i;
-@@ -1257,13 +1384,12 @@
-  *
-  * insert a new cscope database filename into the filelist
-  */
--/*ARGSUSED*/
-     static int
- cs_insert_filelist(fname, ppath, flags, sb)
-     char *fname;
-     char *ppath;
-     char *flags;
--    struct stat *sb;
-+    struct stat *sb UNUSED;
- {
-     short	i, j;
- #ifndef UNIX
-@@ -1306,7 +1432,7 @@
- #endif
- 
-     i = -1; /* can be set to the index of an empty item in csinfo */
--    for (j = 0; j < CSCOPE_MAX_CONNECTIONS; j++)
-+    for (j = 0; j < csinfo_size; j++)
-     {
- 	if (csinfo[j].fname != NULL
- #if defined(UNIX)
-@@ -1333,9 +1459,25 @@
- 
-     if (i == -1)
-     {
--	if (p_csverbose)
--	    (void)EMSG(_("E569: maximum number of cscope connections reached"));
--	return -1;
-+	i = csinfo_size;
-+	if (csinfo_size == 0)
-+	{
-+	    /* First time allocation: allocate only 1 connection. It should
-+	     * be enough for most users.  If more is needed, csinfo will be
-+	     * reallocated. */
-+	    csinfo_size = 1;
-+	    csinfo = (csinfo_T *)alloc_clear(sizeof(csinfo_T));
-+	}
-+	else
-+	{
-+	    /* Reallocate space for more connections. */
-+	    csinfo_size *= 2;
-+	    csinfo = vim_realloc(csinfo, sizeof(csinfo_T)*csinfo_size);
-+	}
-+	if (csinfo == NULL)
-+	    return -1;
-+	for (j = csinfo_size/2; j < csinfo_size; j++)
-+	    clear_csinfo(j);
-     }
- 
-     if ((csinfo[i].fname = (char *)alloc((unsigned)strlen(fname)+1)) == NULL)
-@@ -1419,10 +1561,9 @@
-  *
-  * nuke em
-  */
--/* ARGSUSED */
-     static int
- cs_kill(eap)
--    exarg_T *eap;
-+    exarg_T *eap UNUSED;
- {
-     char *stok;
-     short i;
-@@ -1443,15 +1584,14 @@
- 	/* It must be part of a name.  We will try to find a match
- 	 * within all the names in the csinfo data structure
- 	 */
--	for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
-+	for (i = 0; i < csinfo_size; i++)
- 	{
- 	    if (csinfo[i].fname != NULL && strstr(csinfo[i].fname, stok))
- 		break;
- 	}
-     }
- 
--    if ((i >= CSCOPE_MAX_CONNECTIONS || i < -1 || csinfo[i].fname == NULL)
--	    && i != -1)
-+    if ((i != -1) && (i >= csinfo_size || i < -1 || csinfo[i].fname == NULL))
-     {
- 	if (p_csverbose)
- 	    (void)EMSG2(_("E261: cscope connection %s not found"), stok);
-@@ -1460,7 +1600,7 @@
-     {
- 	if (i == -1)
- 	{
--	    for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
-+	    for (i = 0; i < csinfo_size; i++)
- 	    {
- 		if (csinfo[i].fname)
- 		    cs_kill_execute(i, csinfo[i].fname);
-@@ -1720,7 +1860,7 @@
-     if (buf == NULL)
- 	return;
- 
--    for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
-+    for (i = 0; i < csinfo_size; i++)
-     {
- 	if (nummatches_a[i] < 1)
- 	    continue;
-@@ -1792,7 +1932,7 @@
-     if ((cntxts = (char **)alloc(sizeof(char *) * totmatches)) == NULL)
- 	goto parse_out;
- 
--    for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
-+    for (i = 0; i < csinfo_size; i++)
-     {
- 	if (nummatches_a[i] < 1)
- 	    continue;
-@@ -2099,7 +2239,6 @@
- /*
-  * Used to catch and ignore SIGALRM below.
-  */
--/* ARGSUSED */
-     static RETSIGTYPE
- sig_handler SIGDEFARG(sigarg)
- {
-@@ -2239,19 +2378,21 @@
-  *
-  * calls cs_kill on all cscope connections then reinits
-  */
--/* ARGSUSED */
-     static int
- cs_reset(eap)
--    exarg_T *eap;
-+    exarg_T *eap UNUSED;
- {
-     char	**dblist = NULL, **pplist = NULL, **fllist = NULL;
-     int	i;
-     char buf[20]; /* for sprintf " (#%d)" */
- 
-+    if (csinfo_size == 0)
-+	return CSCOPE_SUCCESS;
-+
-     /* malloc our db and ppath list */
--    dblist = (char **)alloc(CSCOPE_MAX_CONNECTIONS * sizeof(char *));
--    pplist = (char **)alloc(CSCOPE_MAX_CONNECTIONS * sizeof(char *));
--    fllist = (char **)alloc(CSCOPE_MAX_CONNECTIONS * sizeof(char *));
-+    dblist = (char **)alloc(csinfo_size * sizeof(char *));
-+    pplist = (char **)alloc(csinfo_size * sizeof(char *));
-+    fllist = (char **)alloc(csinfo_size * sizeof(char *));
-     if (dblist == NULL || pplist == NULL || fllist == NULL)
-     {
- 	vim_free(dblist);
-@@ -2260,7 +2401,7 @@
- 	return CSCOPE_FAILURE;
-     }
- 
--    for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
-+    for (i = 0; i < csinfo_size; i++)
-     {
- 	dblist[i] = csinfo[i].fname;
- 	pplist[i] = csinfo[i].ppath;
-@@ -2270,7 +2411,7 @@
-     }
- 
-     /* rebuild the cscope connection list */
--    for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
-+    for (i = 0; i < csinfo_size; i++)
-     {
- 	if (dblist[i] != NULL)
- 	{
-@@ -2355,10 +2496,9 @@
-  *
-  * show all cscope connections
-  */
--/* ARGSUSED */
-     static int
- cs_show(eap)
--    exarg_T *eap;
-+    exarg_T *eap UNUSED;
- {
-     short i;
-     if (cs_cnt_connections() == 0)
-@@ -2368,7 +2508,7 @@
- 	MSG_PUTS_ATTR(
- 	    _(" # pid    database name                       prepend path\n"),
- 	    hl_attr(HLF_T));
--	for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
-+	for (i = 0; i < csinfo_size; i++)
- 	{
- 	    if (csinfo[i].fname == NULL)
- 		continue;
-@@ -2397,8 +2537,10 @@
- {
-     int i;
- 
--    for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
-+    for (i = 0; i < csinfo_size; i++)
- 	cs_release_csp(i, TRUE);
-+    vim_free(csinfo);
-+    csinfo_size = 0;
- }
- 
- #endif	/* FEAT_CSCOPE */
-diff -Naur vim72.orig/src/if_cscope.h vim72/src/if_cscope.h
---- vim72.orig/src/if_cscope.h	2007-09-02 07:51:08.000000000 -0700
-+++ vim72/src/if_cscope.h	2009-09-12 08:41:09.000000000 -0700
-@@ -25,7 +25,6 @@
- 
- #define CSCOPE_SUCCESS		0
- #define CSCOPE_FAILURE		-1
--#define CSCOPE_MAX_CONNECTIONS	8   /* you actually need more? */
- 
- #define	CSCOPE_DBFILE		"cscope.out"
- #define	CSCOPE_PROMPT		">> "
-@@ -42,17 +41,6 @@
-  * f 7name	Find this file
-  * i 8name	Find files #including this file
-  */
--#define	FIND_USAGE "find c|d|e|f|g|i|s|t name"
--#define FIND_HELP "\n\
--       c: Find functions calling this function\n\
--       d: Find functions called by this function\n\
--       e: Find this egrep pattern\n\
--       f: Find this file\n\
--       g: Find this definition\n\
--       i: Find files #including this file\n\
--       s: Find this C symbol\n\
--       t: Find assignments to\n"
--
- 
- typedef struct {
-     char *  name;
-diff -Naur vim72.orig/src/if_mzsch.c vim72/src/if_mzsch.c
---- vim72.orig/src/if_mzsch.c	2007-07-01 09:44:49.000000000 -0700
-+++ vim72/src/if_mzsch.c	2009-09-12 08:41:03.000000000 -0700
-@@ -667,13 +667,11 @@
-     static void CALLBACK
- timer_proc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime)
- # elif defined(FEAT_GUI_GTK)
--/*ARGSUSED*/
-     static gint
--timer_proc(gpointer data)
-+timer_proc(gpointer data UNUSED)
- # elif defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA)
--/* ARGSUSED */
-     static void
--timer_proc(XtPointer timed_out, XtIntervalId *interval_id)
-+timer_proc(XtPointer timed_out UNUSED, XtIntervalId *interval_id UNUSED)
- # elif defined(FEAT_GUI_MAC)
-     pascal void
- timer_proc(EventLoopTimerRef theTimer, void *userData)
-@@ -1958,9 +1956,9 @@
- 	    curbuf = savebuf;
- 	    raise_vim_exn(_("cannot delete line"));
- 	}
--	deleted_lines_mark((linenr_T)n, 1L);
- 	if (buf->buf == curwin->w_buffer)
- 	    mz_fix_cursor(n, n + 1, -1);
-+	deleted_lines_mark((linenr_T)n, 1L);
- 
- 	curbuf = savebuf;
- 
-@@ -2065,9 +2063,9 @@
- 		    curbuf = savebuf;
- 		    raise_vim_exn(_("cannot delete line"));
- 		}
--	    deleted_lines_mark((linenr_T)lo, (long)old_len);
- 	    if (buf->buf == curwin->w_buffer)
- 		mz_fix_cursor(lo, hi, -old_len);
-+	    deleted_lines_mark((linenr_T)lo, (long)old_len);
- 	}
- 
- 	curbuf = savebuf;
-diff -Naur vim72.orig/src/if_perl.xs vim72/src/if_perl.xs
---- vim72.orig/src/if_perl.xs	2008-07-17 13:55:09.000000000 -0700
-+++ vim72/src/if_perl.xs	2009-09-12 08:41:16.000000000 -0700
-@@ -136,6 +136,9 @@
- #  define Perl_newXS_flags dll_Perl_newXS_flags
- #endif
- # define Perl_sv_free dll_Perl_sv_free
-+# if (PERL_REVISION == 5) && (PERL_VERSION >= 10)
-+#  define Perl_sv_free2 dll_Perl_sv_free2
-+# endif
- # define Perl_sv_isa dll_Perl_sv_isa
- # define Perl_sv_magic dll_Perl_sv_magic
- # define Perl_sv_setiv dll_Perl_sv_setiv
-@@ -163,7 +166,7 @@
- # define Perl_Isv_yes_ptr dll_Perl_Isv_yes_ptr
- # define boot_DynaLoader dll_boot_DynaLoader
- 
--# define Perl_sys_init3 dll_Perl_sys_init3
-+# define Perl_sys_init dll_Perl_sys_init
- # define Perl_sys_term dll_Perl_sys_term
- # define Perl_ISv_ptr dll_Perl_ISv_ptr
- # define Perl_Istack_max_ptr dll_Perl_Istack_max_ptr
-@@ -268,7 +271,8 @@
- static void (*boot_DynaLoader)_((pTHX_ CV*));
- 
- #if (PERL_REVISION == 5) && (PERL_VERSION >= 10)
--static void (*Perl_sys_init3)(int* argc, char*** argv, char*** env);
-+static void (*Perl_sv_free2)(pTHX_ SV*);
-+static void (*Perl_sys_init)(int* argc, char*** argv);
- static void (*Perl_sys_term)(void);
- static SV** (*Perl_ISv_ptr)(register PerlInterpreter*);
- static SV*** (*Perl_Istack_max_ptr)(register PerlInterpreter*);
-@@ -367,7 +371,8 @@
-     {"Perl_TXpv_ptr", (PERL_PROC*)&Perl_TXpv_ptr},
-     {"Perl_Tna_ptr", (PERL_PROC*)&Perl_Tna_ptr},
- #else
--    {"Perl_sys_init3", (PERL_PROC*)&Perl_sys_init3},
-+    {"Perl_sv_free2", (PERL_PROC*)&Perl_sv_free2},
-+    {"Perl_sys_init", (PERL_PROC*)&Perl_sys_init},
-     {"Perl_sys_term", (PERL_PROC*)&Perl_sys_term},
-     {"Perl_ISv_ptr", (PERL_PROC*)&Perl_ISv_ptr},
-     {"Perl_Istack_sp_ptr", (PERL_PROC*)&Perl_Istack_sp_ptr},
-@@ -455,7 +460,7 @@
-     static char *argv[] = { "", "-e", "" };
- 
- #if (PERL_REVISION == 5) && (PERL_VERSION >= 10)
--    Perl_sys_init3(&argc, (char***)&argv, NULL);
-+    Perl_sys_init(&argc, (char***)&argv);
- #endif
-     perl_interp = perl_alloc();
-     perl_construct(perl_interp);
-@@ -715,9 +720,11 @@
- #ifdef HAVE_SANDBOX
-     if (sandbox)
-     {
-+# ifndef MAKE_TEST  /* avoid a warning for unreachable code */
- 	if ((safe = perl_get_sv( "VIM::safe", FALSE )) == NULL || !SvTRUE(safe))
- 	    EMSG(_("E299: Perl evaluation forbidden in sandbox without the Safe module"));
- 	else
-+# endif
- 	{
- 	    PUSHMARK(SP);
- 	    XPUSHs(safe);
-@@ -1228,9 +1235,8 @@
- 		    if (u_savedel(lnum, 1) == OK)
- 		    {
- 			ml_delete(lnum, 0);
-+			check_cursor();
- 			deleted_lines_mark(lnum, 1L);
--			if (aco.save_buf == curbuf)
--			    check_cursor();
- 		    }
- 
- 		    /* restore curwin/curbuf and a few other things */
-diff -Naur vim72.orig/src/if_python.c vim72/src/if_python.c
---- vim72.orig/src/if_python.c	2008-07-17 14:09:32.000000000 -0700
-+++ vim72/src/if_python.c	2009-09-12 08:41:03.000000000 -0700
-@@ -531,6 +531,12 @@
- 	if (PythonMod_Init())
- 	    goto fail;
- 
-+	/* Remove the element from sys.path that was added because of our
-+	 * argv[0] value in PythonMod_Init().  Previously we used an empty
-+	 * string, but dependinding on the OS we then get an empty entry or
-+	 * the current directory in sys.path. */
-+	PyRun_SimpleString("import sys; sys.path = filter(lambda x: x != '/must>not&exist', sys.path)");
-+
- 	/* the first python thread is vim's, release the lock */
- 	Python_SaveThread();
- 
-@@ -1090,9 +1096,8 @@
- 
- /* Vim module - Implementation
-  */
--/*ARGSUSED*/
-     static PyObject *
--VimCommand(PyObject *self, PyObject *args)
-+VimCommand(PyObject *self UNUSED, PyObject *args)
- {
-     char *cmd;
-     PyObject *result;
-@@ -1145,14 +1150,23 @@
- 
-     /* Check if we run into a recursive loop.  The item must be in lookupDict
-      * then and we can use it again. */
--    sprintf(ptrBuf, PRINTF_DECIMAL_LONG_U, (long_u)our_tv);
--    result = PyDict_GetItemString(lookupDict, ptrBuf);
--    if (result != NULL)
--	Py_INCREF(result);
--    else if (our_tv->v_type == VAR_STRING)
-+    if ((our_tv->v_type == VAR_LIST && our_tv->vval.v_list != NULL)
-+	    || (our_tv->v_type == VAR_DICT && our_tv->vval.v_dict != NULL))
-+    {
-+	sprintf(ptrBuf, PRINTF_DECIMAL_LONG_U,
-+	        our_tv->v_type == VAR_LIST ? (long_u)our_tv->vval.v_list
-+		                           : (long_u)our_tv->vval.v_dict);
-+	result = PyDict_GetItemString(lookupDict, ptrBuf);
-+	if (result != NULL)
-+	{
-+	    Py_INCREF(result);
-+	    return result;
-+	}
-+    }
-+
-+    if (our_tv->v_type == VAR_STRING)
-     {
- 	result = Py_BuildValue("s", our_tv->vval.v_string);
--	PyDict_SetItemString(lookupDict, ptrBuf, result);
-     }
-     else if (our_tv->v_type == VAR_NUMBER)
-     {
-@@ -1161,7 +1175,6 @@
- 	/* For backwards compatibility numbers are stored as strings. */
- 	sprintf(buf, "%ld", (long)our_tv->vval.v_number);
- 	result = Py_BuildValue("s", buf);
--	PyDict_SetItemString(lookupDict, ptrBuf, result);
-     }
- # ifdef FEAT_FLOAT
-     else if (our_tv->v_type == VAR_FLOAT)
-@@ -1170,7 +1183,6 @@
- 
- 	sprintf(buf, "%f", our_tv->vval.v_float);
- 	result = Py_BuildValue("s", buf);
--	PyDict_SetItemString(lookupDict, ptrBuf, result);
-     }
- # endif
-     else if (our_tv->v_type == VAR_LIST)
-@@ -1179,10 +1191,11 @@
- 	listitem_T	*curr;
- 
- 	result = PyList_New(0);
--	PyDict_SetItemString(lookupDict, ptrBuf, result);
- 
- 	if (list != NULL)
- 	{
-+	    PyDict_SetItemString(lookupDict, ptrBuf, result);
-+
- 	    for (curr = list->lv_first; curr != NULL; curr = curr->li_next)
- 	    {
- 		newObj = VimToPython(&curr->li_tv, depth + 1, lookupDict);
-@@ -1194,7 +1207,6 @@
-     else if (our_tv->v_type == VAR_DICT)
-     {
- 	result = PyDict_New();
--	PyDict_SetItemString(lookupDict, ptrBuf, result);
- 
- 	if (our_tv->vval.v_dict != NULL)
- 	{
-@@ -1203,6 +1215,8 @@
- 	    hashitem_T	*hi;
- 	    dictitem_T	*di;
- 
-+	    PyDict_SetItemString(lookupDict, ptrBuf, result);
-+
- 	    for (hi = ht->ht_array; todo > 0; ++hi)
- 	    {
- 		if (!HASHITEM_EMPTY(hi))
-@@ -1227,9 +1241,8 @@
- }
- #endif
- 
--/*ARGSUSED*/
-     static PyObject *
--VimEval(PyObject *self, PyObject *args)
-+VimEval(PyObject *self UNUSED, PyObject *args)
- {
- #ifdef FEAT_EVAL
-     char	*expr;
-@@ -1879,9 +1892,8 @@
- /* Buffer list object - Implementation
-  */
- 
--/*ARGSUSED*/
-     static PyInt
--BufListLength(PyObject *self)
-+BufListLength(PyObject *self UNUSED)
- {
-     buf_T	*b = firstbuf;
-     PyInt	n = 0;
-@@ -1895,9 +1907,8 @@
-     return n;
- }
- 
--/*ARGSUSED*/
-     static PyObject *
--BufListItem(PyObject *self, PyInt n)
-+BufListItem(PyObject *self UNUSED, PyInt n)
- {
-     buf_T *b;
- 
-@@ -2195,9 +2206,8 @@
- 
- /* Window list object - Implementation
-  */
--/*ARGSUSED*/
-     static PyInt
--WinListLength(PyObject *self)
-+WinListLength(PyObject *self UNUSED)
- {
-     win_T	*w = firstwin;
-     PyInt	n = 0;
-@@ -2211,9 +2221,8 @@
-     return n;
- }
- 
--/*ARGSUSED*/
-     static PyObject *
--WinListItem(PyObject *self, PyInt n)
-+WinListItem(PyObject *self UNUSED, PyInt n)
- {
-     win_T *w;
- 
-@@ -2259,9 +2268,8 @@
- 
- /* Current items object - Implementation
-  */
--/*ARGSUSED*/
-     static PyObject *
--CurrentGetattr(PyObject *self, char *name)
-+CurrentGetattr(PyObject *self UNUSED, char *name)
- {
-     if (strcmp(name, "buffer") == 0)
- 	return (PyObject *)BufferNew(curbuf);
-@@ -2280,9 +2288,8 @@
-     }
- }
- 
--/*ARGSUSED*/
-     static int
--CurrentSetattr(PyObject *self, char *name, PyObject *value)
-+CurrentSetattr(PyObject *self UNUSED, char *name, PyObject *value)
- {
-     if (strcmp(name, "line") == 0)
-     {
-@@ -2345,7 +2352,8 @@
- {
-     PyObject *mod;
-     PyObject *dict;
--    static char *(argv[2]) = {"", NULL};
-+    /* The special value is removed from sys.path in Python_Init(). */
-+    static char *(argv[2]) = {"/must>not&exist/foo", NULL};
- 
-     /* Fixups... */
-     BufferType.ob_type = &PyType_Type;
-@@ -2489,9 +2497,9 @@
- 	    PyErr_SetVim(_("cannot delete line"));
- 	else
- 	{
--	    deleted_lines_mark((linenr_T)n, 1L);
- 	    if (buf == curwin->w_buffer)
- 		py_fix_cursor((linenr_T)n, (linenr_T)n + 1, (linenr_T)-1);
-+	    deleted_lines_mark((linenr_T)n, 1L);
- 	}
- 
- 	curbuf = savebuf;
-@@ -2588,10 +2596,9 @@
- 		    break;
- 		}
- 	    }
--	    deleted_lines_mark((linenr_T)lo, (long)i);
--
- 	    if (buf == curwin->w_buffer)
- 		py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)-n);
-+	    deleted_lines_mark((linenr_T)lo, (long)i);
- 	}
- 
- 	curbuf = savebuf;
-diff -Naur vim72.orig/src/if_ruby.c vim72/src/if_ruby.c
---- vim72.orig/src/if_ruby.c	2007-09-10 01:40:38.000000000 -0700
-+++ vim72/src/if_ruby.c	2009-09-12 08:39:07.000000000 -0700
-@@ -492,7 +492,7 @@
-     }
- }
- 
--static VALUE vim_message(VALUE self, VALUE str)
-+static VALUE vim_message(VALUE self UNUSED, VALUE str)
- {
-     char *buff, *p;
- 
-@@ -505,20 +505,20 @@
-     return Qnil;
- }
- 
--static VALUE vim_set_option(VALUE self, VALUE str)
-+static VALUE vim_set_option(VALUE self UNUSED, VALUE str)
- {
-     do_set((char_u *)STR2CSTR(str), 0);
-     update_screen(NOT_VALID);
-     return Qnil;
- }
- 
--static VALUE vim_command(VALUE self, VALUE str)
-+static VALUE vim_command(VALUE self UNUSED, VALUE str)
- {
-     do_cmdline_cmd((char_u *)STR2CSTR(str));
-     return Qnil;
- }
- 
--static VALUE vim_evaluate(VALUE self, VALUE str)
-+static VALUE vim_evaluate(VALUE self UNUSED, VALUE str)
- {
- #ifdef FEAT_EVAL
-     char_u *value = eval_to_string((char_u *)STR2CSTR(str), NULL, TRUE);
-@@ -580,7 +580,7 @@
-     return INT2NUM(n);
- }
- 
--static VALUE buffer_s_aref(VALUE self, VALUE num)
-+static VALUE buffer_s_aref(VALUE self UNUSED, VALUE num)
- {
-     buf_T *b;
-     int n = NUM2INT(num);
-@@ -629,7 +629,9 @@
- 	return line ? rb_str_new2(line) : Qnil;
-     }
-     rb_raise(rb_eIndexError, "index %d out of buffer", n);
-+#ifndef __GNUC__
-     return Qnil; /* For stop warning */
-+#endif
- }
- 
- static VALUE buffer_aref(VALUE self, VALUE num)
-@@ -668,7 +670,9 @@
-     else
-     {
- 	rb_raise(rb_eIndexError, "index %d out of buffer", n);
-+#ifndef __GNUC__
- 	return Qnil; /* For stop warning */
-+#endif
-     }
-     return str;
- }
-@@ -789,7 +793,7 @@
-     return get_buffer_line(curbuf, curwin->w_cursor.lnum);
- }
- 
--static VALUE set_current_line(VALUE self, VALUE str)
-+static VALUE set_current_line(VALUE self UNUSED, VALUE str)
- {
-     return set_buffer_line(curbuf, curwin->w_cursor.lnum, str);
- }
-@@ -815,7 +819,7 @@
- #endif
- }
- 
--static VALUE window_s_aref(VALUE self, VALUE num)
-+static VALUE window_s_aref(VALUE self UNUSED, VALUE num)
- {
-     win_T *w;
-     int n = NUM2INT(num);
-@@ -897,7 +901,7 @@
-     return Qnil;
- }
- 
--static VALUE f_p(int argc, VALUE *argv, VALUE self)
-+static VALUE f_p(int argc, VALUE *argv, VALUE self UNUSED)
- {
-     int i;
-     VALUE str = rb_str_new("", 0);
-diff -Naur vim72.orig/src/if_tcl.c vim72/src/if_tcl.c
---- vim72.orig/src/if_tcl.c	2007-05-07 12:50:14.000000000 -0700
-+++ vim72/src/if_tcl.c	2009-09-12 08:39:13.000000000 -0700
-@@ -161,7 +161,7 @@
- # endif
- 
- /*
-- * Declare HANDLE for perl.dll and function pointers.
-+ * Declare HANDLE for tcl.dll and function pointers.
-  */
- static HANDLE hTclLib = NULL;
- Tcl_Interp* (*dll_Tcl_CreateInterp)();
-@@ -182,7 +182,7 @@
-  * Make all runtime-links of tcl.
-  *
-  * 1. Get module handle using LoadLibraryEx.
-- * 2. Get pointer to perl function by GetProcAddress.
-+ * 2. Get pointer to tcl function by GetProcAddress.
-  * 3. Repeat 2, until get all functions will be used.
-  *
-  * Parameter 'libname' provides name of DLL.
-@@ -290,10 +290,9 @@
-  */
- #define TCL_EXIT	5
- 
--/* ARGSUSED */
-     static int
- exitcmd(dummy, interp, objc, objv)
--    ClientData dummy;
-+    ClientData dummy UNUSED;
-     Tcl_Interp *interp;
-     int objc;
-     Tcl_Obj *CONST objv[];
-@@ -315,10 +314,9 @@
-     return TCL_ERROR;
- }
- 
--/* ARGSUSED */
-     static int
- catchcmd(dummy, interp, objc, objv)
--    ClientData	dummy;
-+    ClientData	dummy UNUSED;
-     Tcl_Interp	*interp;
-     int		objc;
-     Tcl_Obj	*CONST objv[];
-@@ -356,10 +354,9 @@
- /*
-  *  "::vim::beep" - what Vi[m] does best :-)
-  */
--/* ARGSUSED */
-     static int
- beepcmd(dummy, interp, objc, objv)
--    ClientData dummy;
-+    ClientData dummy UNUSED;
-     Tcl_Interp *interp;
-     int objc;
-     Tcl_Obj *CONST objv[];
-@@ -378,10 +375,9 @@
-  *  "::vim::buffer {N}" - create buffer command for buffer N.
-  *  "::vim::buffer new" - create a new buffer (not implemented)
-  */
--/* ARGSUSED */
-     static int
- buffercmd(dummy, interp, objc, objv)
--    ClientData dummy;
-+    ClientData dummy UNUSED;
-     Tcl_Interp *interp;
-     int objc;
-     Tcl_Obj *CONST objv[];
-@@ -475,10 +471,9 @@
- /*
-  * "::vim::window list" - create list of window commands.
-  */
--/* ARGSUSED */
-     static int
- windowcmd(dummy, interp, objc, objv)
--    ClientData	dummy;
-+    ClientData	dummy UNUSED;
-     Tcl_Interp	*interp;
-     int		objc;
-     Tcl_Obj	*CONST objv[];
-@@ -1130,10 +1125,9 @@
- }
- 
- 
--/* ARGSUSED */
-     static int
- commandcmd(dummy, interp, objc, objv)
--    ClientData	dummy;
-+    ClientData	dummy UNUSED;
-     Tcl_Interp	*interp;
-     int		objc;
-     Tcl_Obj	*CONST objv[];
-@@ -1145,10 +1139,9 @@
-     return err;
- }
- 
--/* ARGSUSED */
-     static int
- optioncmd(dummy, interp, objc, objv)
--    ClientData	dummy;
-+    ClientData	dummy UNUSED;
-     Tcl_Interp	*interp;
-     int		objc;
-     Tcl_Obj	*CONST objv[];
-@@ -1160,10 +1153,9 @@
-     return err;
- }
- 
--/* ARGSUSED */
-     static int
- exprcmd(dummy, interp, objc, objv)
--    ClientData	dummy;
-+    ClientData	dummy UNUSED;
-     Tcl_Interp	*interp;
-     int		objc;
-     Tcl_Obj	*CONST objv[];
-@@ -1584,11 +1576,10 @@
-     I/O Channel
- ********************************************/
- 
--/* ARGSUSED */
-     static int
- channel_close(instance, interp)
-     ClientData	instance;
--    Tcl_Interp	*interp;
-+    Tcl_Interp	*interp UNUSED;
- {
-     int		err = 0;
- 
-@@ -1602,12 +1593,11 @@
-     return err;
- }
- 
--/* ARGSUSED */
-     static int
- channel_input(instance, buf, bufsiz, errptr)
--    ClientData	instance;
--    char	*buf;
--    int		bufsiz;
-+    ClientData	instance UNUSED;
-+    char	*buf UNUSED;
-+    int		bufsiz UNUSED;
-     int		*errptr;
- {
- 
-@@ -1659,21 +1649,19 @@
-     return result;
- }
- 
--/* ARGSUSED */
-     static void
- channel_watch(instance, mask)
--    ClientData	instance;
--    int		mask;
-+    ClientData	instance UNUSED;
-+    int		mask UNUSED;
- {
-     Tcl_SetErrno(EINVAL);
- }
- 
--/* ARGSUSED */
-     static int
- channel_gethandle(instance, direction, handleptr)
--    ClientData	instance;
--    int		direction;
--    ClientData	*handleptr;
-+    ClientData	instance UNUSED;
-+    int		direction UNUSED;
-+    ClientData	*handleptr UNUSED;
- {
-     Tcl_SetErrno(EINVAL);
-     return EINVAL;
-@@ -1682,16 +1670,31 @@
- 
- static Tcl_ChannelType channel_type =
- {
--    "vimmessage",
--    NULL,   /* blockmode */
--    channel_close,
--    channel_input,
--    channel_output,
--    NULL,   /* seek */
--    NULL,   /* set option */
--    NULL,   /* get option */
--    channel_watch,
--    channel_gethandle
-+    "vimmessage",	/* typeName */
-+    NULL,		/* version */
-+    channel_close,	/* closeProc */
-+    channel_input,	/* inputProc */
-+    channel_output,	/* outputProc */
-+    NULL,		/* seekProc */
-+    NULL,		/* setOptionProc */
-+    NULL,		/* getOptionProc */
-+    channel_watch,	/* watchProc */
-+    channel_gethandle,	/* getHandleProc */
-+    NULL,		/* close2Proc */
-+    NULL,		/* blockModeProc */
-+#ifdef TCL_CHANNEL_VERSION_2
-+    NULL,		/* flushProc */
-+    NULL,		/* handlerProc */
-+#endif
-+#ifdef TCL_CHANNEL_VERSION_3
-+    NULL,		/* wideSeekProc */
-+#endif
-+#ifdef TCL_CHANNEL_VERSION_4
-+    NULL,		/* threadActionProc */
-+#endif
-+#ifdef TCL_CHANNEL_VERSION_5
-+    NULL		/* truncateProc */
-+#endif
- };
- 
- /**********************************
-diff -Naur vim72.orig/src/if_xcmdsrv.c vim72/src/if_xcmdsrv.c
---- vim72.orig/src/if_xcmdsrv.c	2008-07-18 06:05:03.000000000 -0700
-+++ vim72/src/if_xcmdsrv.c	2009-09-12 08:38:41.000000000 -0700
-@@ -682,7 +682,7 @@
-      * Scan all of the names out of the property.
-      */
-     ga_init2(&ga, 1, 100);
--    for (p = regProp; (p - regProp) < numItems; p++)
-+    for (p = regProp; (long_u)(p - regProp) < numItems; p++)
-     {
- 	entry = p;
- 	while (*p != 0 && !isspace(*p))
-@@ -736,7 +736,7 @@
- 		+ serverReply.ga_len;
- 	    e.id = w;
- 	    ga_init2(&e.strings, 1, 100);
--	    memcpy(p, &e, sizeof(e));
-+	    mch_memmove(p, &e, sizeof(e));
- 	    serverReply.ga_len++;
- 	}
-     }
-@@ -969,7 +969,7 @@
-      */
-     returnValue = (int_u)None;
-     entry = NULL;	/* Not needed, but eliminates compiler warning. */
--    for (p = regProp; (p - regProp) < numItems; )
-+    for (p = regProp; (long_u)(p - regProp) < numItems; )
-     {
- 	entry = p;
- 	while (*p != 0 && !isspace(*p))
-@@ -986,7 +986,7 @@
- 
-     if (loose != NULL && returnValue == (int_u)None && !IsSerialName(name))
-     {
--	for (p = regProp; (p - regProp) < numItems; )
-+	for (p = regProp; (long_u)(p - regProp) < numItems; )
- 	{
- 	    entry = p;
- 	    while (*p != 0 && !isspace(*p))
-@@ -1018,7 +1018,7 @@
- 	p++;
- 	count = numItems - (p - regProp);
- 	if (count > 0)
--	    memcpy(entry, p, count);
-+	    mch_memmove(entry, p, count);
- 	XChangeProperty(dpy, RootWindow(dpy, 0), registryProperty, XA_STRING,
- 			8, PropModeReplace, regProp,
- 			(int)(numItems - (p - entry)));
-@@ -1056,7 +1056,7 @@
- 	return;
- 
-     /* Scan the property for the window id.  */
--    for (p = regProp; (p - regProp) < numItems; )
-+    for (p = regProp; (long_u)(p - regProp) < numItems; )
-     {
- 	if (*p != 0)
- 	{
-@@ -1072,7 +1072,7 @@
- 		p++;
- 		lastHalf = numItems - (p - regProp);
- 		if (lastHalf > 0)
--		    memcpy(entry, p, lastHalf);
-+		    mch_memmove(entry, p, lastHalf);
- 		numItems = (entry - regProp) + lastHalf;
- 		p = entry;
- 		continue;
-@@ -1196,7 +1196,7 @@
-      * one time;  each iteration through the outer loop handles a
-      * single command or result.
-      */
--    for (p = propInfo; (p - propInfo) < numItems; )
-+    for (p = propInfo; (long_u)(p - propInfo) < numItems; )
-     {
- 	/*
- 	 * Ignore leading NULs; each command or result starts with a
-@@ -1230,7 +1230,7 @@
- 	    serial = (char_u *)"";
- 	    script = NULL;
- 	    enc = NULL;
--	    while (p - propInfo < numItems && *p == '-')
-+	    while ((long_u)(p - propInfo) < numItems && *p == '-')
- 	    {
- 		switch (p[1])
- 		{
-@@ -1333,7 +1333,7 @@
- 	    res = (char_u *)"";
- 	    code = 0;
- 	    enc = NULL;
--	    while ((p-propInfo) < numItems && *p == '-')
-+	    while ((long_u)(p - propInfo) < numItems && *p == '-')
- 	    {
- 		switch (p[1])
- 		{
-@@ -1401,7 +1401,7 @@
- 	    gotWindow = 0;
- 	    str = (char_u *)"";
- 	    enc = NULL;
--	    while ((p-propInfo) < numItems && *p == '-')
-+	    while ((long_u)(p - propInfo) < numItems && *p == '-')
- 	    {
- 		switch (p[1])
- 		{
-@@ -1489,11 +1489,10 @@
- /*
-  * Another X Error handler, just used to check for errors.
-  */
--/* ARGSUSED */
-     static int
- x_error_check(dpy, error_event)
--    Display	*dpy;
--    XErrorEvent	*error_event;
-+    Display	*dpy UNUSED;
-+    XErrorEvent	*error_event UNUSED;
- {
-     got_x_error = TRUE;
-     return 0;
-diff -Naur vim72.orig/src/macros.h vim72/src/macros.h
---- vim72.orig/src/macros.h	2007-08-04 04:44:18.000000000 -0700
-+++ vim72/src/macros.h	2009-09-12 08:38:51.000000000 -0700
-@@ -127,15 +127,31 @@
- #ifdef FEAT_LANGMAP
- /*
-  * Adjust chars in a language according to 'langmap' option.
-- * NOTE that there is NO overhead if 'langmap' is not set; but even
-- * when set we only have to do 2 ifs and an array lookup.
-+ * 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.
-  */
--# define LANGMAP_ADJUST(c, condition) do { \
--	if (*p_langmap && (condition) && !KeyStuffed && (c) >= 0 && (c) < 256) \
--	    c = langmap_mapchar[c]; \
-+# ifdef FEAT_MBYTE
-+#  define LANGMAP_ADJUST(c, condition) \
-+    do { \
-+        if (*p_langmap && (condition) && !KeyStuffed && (c) >= 0) \
-+	{ \
-+	    if ((c) < 256) \
-+		c = langmap_mapchar[c]; \
-+	    else \
-+		c = langmap_adjust_mb(c); \
-+	} \
-     } while (0)
-+# else
-+#  define LANGMAP_ADJUST(c, condition) \
-+    do { \
-+        if (*p_langmap && (condition) && !KeyStuffed && (c) >= 0 && (c) < 256) \
-+            c = langmap_mapchar[c]; \
-+    } while (0)
-+# endif
-+#else
-+# define LANGMAP_ADJUST(c, condition) /* nop */
- #endif
- 
- /*
-@@ -268,7 +284,7 @@
- # define mb_cptr2len(p)	    (enc_utf8 ? utf_ptr2len(p) : (*mb_ptr2len)(p))
- 
- # define MB_COPY_CHAR(f, t) if (has_mbyte) mb_copy_char(&f, &t); else *t++ = *f++
--# define MB_CHARLEN(p)	    (has_mbyte ? mb_charlen(p) : STRLEN(p))
-+# define MB_CHARLEN(p)	    (has_mbyte ? mb_charlen(p) : (int)STRLEN(p))
- # define PTR2CHAR(p)	    (has_mbyte ? mb_ptr2char(p) : (int)*(p))
- #else
- # define mb_ptr_adv(p)		++p
-diff -Naur vim72.orig/src/main.c vim72/src/main.c
---- vim72.orig/src/main.c	2008-07-24 01:40:56.000000000 -0700
-+++ vim72/src/main.c	2009-09-12 08:38:51.000000000 -0700
-@@ -645,11 +645,12 @@
- 
- #ifdef FEAT_VIMINFO
-     /*
--     * Read in registers, history etc, but not marks, from the viminfo file
-+     * Read in registers, history etc, but not marks, from the viminfo file.
-+     * This is where v:oldfiles gets filled.
-      */
-     if (*p_viminfo != NUL)
-     {
--	read_viminfo(NULL, TRUE, FALSE, FALSE);
-+	read_viminfo(NULL, VIF_WANT_INFO | VIF_GET_OLDFILES);
- 	TIME_MSG("reading viminfo");
-     }
- #endif
-@@ -1457,7 +1458,8 @@
- 	++initstr;
-     }
- 
--    if (TOLOWER_ASC(initstr[0]) == 'g' || initstr[0] == 'k')
-+    /* "gvim" starts the GUI.  Also accept "Gvim" for MS-Windows. */
-+    if (TOLOWER_ASC(initstr[0]) == 'g')
-     {
- 	main_start_gui();
- #ifdef FEAT_GUI
-@@ -1503,12 +1505,12 @@
-  *
-  * Also find the --server... arguments and --socketid and --windowid
-  */
--/*ARGSUSED*/
-     static void
- early_arg_scan(parmp)
--    mparm_T	*parmp;
-+    mparm_T	*parmp UNUSED;
- {
--#if defined(FEAT_XCLIPBOARD) || defined(FEAT_CLIENTSERVER)
-+#if defined(FEAT_XCLIPBOARD) || defined(FEAT_CLIENTSERVER) \
-+	|| !defined(FEAT_NETBEANS_INTG)
-     int		argc = parmp->argc;
-     char	**argv = parmp->argv;
-     int		i;
-@@ -1580,6 +1582,14 @@
- 	else if (STRICMP(argv[i], "--echo-wid") == 0)
- 	    echo_wid_arg = TRUE;
- # endif
-+# ifndef FEAT_NETBEANS_INTG
-+	else if (strncmp(argv[i], "-nb", (size_t)3) == 0)
-+        {
-+            mch_errmsg(_("'-nb' cannot be used: not enabled at compile time\n"));
-+            mch_exit(2);
-+        }
-+# endif
-+
-     }
- #endif
- }
-@@ -2361,7 +2371,7 @@
-      * Is there any other system that cannot do this?
-      */
-     close(0);
--    dup(2);
-+    ignored = dup(2);
- #endif
- }
- 
-@@ -2369,10 +2379,9 @@
-  * Create the requested number of windows and edit buffers in them.
-  * Also does recovery if "recoverymode" set.
-  */
--/*ARGSUSED*/
-     static void
- create_windows(parmp)
--    mparm_T	*parmp;
-+    mparm_T	*parmp UNUSED;
- {
- #ifdef FEAT_WINDOWS
-     int		dorewind;
-@@ -3840,10 +3849,9 @@
-  * return an allocated string.  Otherwise return "data".
-  * "*tofree" is set to the result when it needs to be freed later.
-  */
--/*ARGSUSED*/
-     char_u *
- serverConvert(client_enc, data, tofree)
--    char_u *client_enc;
-+    char_u *client_enc UNUSED;
-     char_u *data;
-     char_u **tofree;
- {
-diff -Naur vim72.orig/src/Makefile vim72/src/Makefile
---- vim72.orig/src/Makefile	2008-08-09 07:50:04.000000000 -0700
-+++ vim72/src/Makefile	2009-09-12 08:39:07.000000000 -0700
-@@ -105,8 +105,8 @@
- # 4. "make test"  {{{1
- #	This is optional.  This will run Vim scripts on a number of test
- #	files, and compare the produced output with the expected output.
--#	If all is well, you will get the "ALL DONE" message in the end.  See
--#	below (search for "/^test").
-+#	If all is well, you will get the "ALL DONE" message in the end.  If a
-+#	test fails you get "TEST FAILURE".  See below (search for "/^test").
- #
- # 5. "make install"  {{{1
- #	If the new Vim seems to be working OK you can install it and the
-@@ -533,6 +533,11 @@
- #CFLAGS = -g -DDEBUG -Wall -Wshadow -Wmissing-prototypes
- #CFLAGS = -g -O2 '-DSTARTUPTIME="vimstartup"' -fno-strength-reduce -Wall -Wmissing-prototypes
- 
-+# Use this with GCC to check for mistakes, unused arguments, etc.
-+#CFLAGS = -g -Wall -Wextra -Wmissing-prototypes -Wunreachable-code
-+#PYTHON_CFLAGS_EXTRA = -Wno-missing-field-initializers
-+#MZSCHEME_CFLAGS_EXTRA = -Wno-unreachable-code
-+
- # EFENCE - Electric-Fence malloc debugging: catches memory accesses beyond
- # allocated memory (and makes every malloc()/free() very slow).
- # Electric Fence is free (search ftp sites).
-@@ -551,7 +556,13 @@
- # }}}
- 
- # LINT - for running lint
-+#  For standard Unix lint
-+LINT = lint
- LINT_OPTIONS = -beprxzF
-+#  For splint
-+#  It doesn't work well, crashes on include files and non-ascii characters.
-+#LINT = splint
-+#LINT_OPTIONS = +unixlib -weak -macrovarprefixexclude -showfunc -linelen 9999
- 
- # PROFILING - Uncomment the next two lines to do profiling with gcc and gprof.
- # Might not work with GUI or Perl.
-@@ -1259,16 +1270,16 @@
- #     This is for cproto 3 patchlevel 8 or below
- #     __inline, __attribute__ and __extension__ are not recognized by cproto
- #     G_IMPLEMENT_INLINES is to avoid functions defined in glib/gutils.h.
--NO_ATTR = -D__inline= -D__inline__= -DG_IMPLEMENT_INLINES \
--	  -D"__attribute__\\(x\\)=" -D"__asm__\\(x\\)=" \
--	  -D__extension__= -D__restrict="" \
--	  -D__gnuc_va_list=char -D__builtin_va_list=char
-+#NO_ATTR = -D__inline= -D__inline__= -DG_IMPLEMENT_INLINES \
-+#	  -D"__attribute__\\(x\\)=" -D"__asm__\\(x\\)=" \
-+#	  -D__extension__= -D__restrict="" \
-+#	  -D__gnuc_va_list=char -D__builtin_va_list=char
- 
- #
--#     This is for cproto 3 patchlevel 9 or above (currently 4.6)
-+#     This is for cproto 3 patchlevel 9 or above (currently 4.6, 4.7g)
- #     __inline and __attribute__ are now recognized by cproto
- #     -D"foo()=" is not supported by all compilers so do not use it
--# NO_ATTR=
-+NO_ATTR=
- #
- #     maybe the "/usr/bin/cc -E" has to be adjusted for some systems
- # This is for cproto 3.5 patchlevel 3:
-@@ -1432,6 +1443,7 @@
- 	$(SNIFF_SRC) $(WORKSHOP_SRC) $(WSDEBUG_SRC) $(NETBEANS_SRC)
- #LINT_SRC = $(SRC)
- #LINT_SRC = $(ALL_SRC)
-+#LINT_SRC = $(BASIC_SRC)
- 
- OBJ = \
- 	objects/buffer.o \
-@@ -1737,7 +1749,8 @@
- # messages.  Don't worry about that.
- # If there is a real error, there will be a difference between "test.out" and
- # a "test99.ok" file.
--# If everything is alright, the final message will be "ALL DONE".
-+# If everything is alright, the final message will be "ALL DONE".  If not you
-+# get "TEST FAILURE".
- #
- test check:
- 	$(MAKE) -f Makefile $(VIMTARGET)
-@@ -2272,12 +2285,12 @@
- 
- # Run lint.  Clean up the *.ln files that are sometimes left behind.
- lint:
--	lint $(LINT_OPTIONS) $(LINT_CFLAGS) $(LINT_EXTRA) $(LINT_SRC)
-+	$(LINT) $(LINT_OPTIONS) $(LINT_CFLAGS) $(LINT_EXTRA) $(LINT_SRC)
- 	-rm -f *.ln
- 
- # Check dosinst.c with lint.
- lintinstall:
--	lint $(LINT_OPTIONS) -DWIN32 -DUNIX_LINT dosinst.c
-+	$(LINT) $(LINT_OPTIONS) -DWIN32 -DUNIX_LINT dosinst.c
- 	-rm -f dosinst.ln
- 
- ###########################################################################
-@@ -2421,7 +2434,7 @@
- 	$(CCC) -o $@ if_xcmdsrv.c
- 
- objects/if_mzsch.o: if_mzsch.c
--	$(CCC) -o $@ if_mzsch.c
-+	$(CCC) -o $@ $(MZSCHEME_CFLAGS_EXTRA) if_mzsch.c
- 
- objects/if_perl.o: auto/if_perl.c
- 	$(CCC) -o $@ auto/if_perl.c
-@@ -2430,7 +2443,7 @@
- 	$(CCC) -o $@ if_perlsfio.c
- 
- objects/if_python.o: if_python.c
--	$(CCC) -o $@ if_python.c
-+	$(CCC) -o $@ $(PYTHON_CFLAGS_EXTRA) if_python.c
- 
- objects/if_ruby.o: if_ruby.c
- 	$(CCC) -o $@ if_ruby.c
-diff -Naur vim72.orig/src/mark.c vim72/src/mark.c
---- vim72.orig/src/mark.c	2008-08-08 15:06:49.000000000 -0700
-+++ vim72/src/mark.c	2009-09-12 08:38:41.000000000 -0700
-@@ -884,10 +884,9 @@
- /*
-  * print the jumplist
-  */
--/*ARGSUSED*/
-     void
- ex_jumps(eap)
--    exarg_T	*eap;
-+    exarg_T	*eap UNUSED;
- {
-     int		i;
-     char_u	*name;
-@@ -933,10 +932,9 @@
- /*
-  * print the changelist
-  */
--/*ARGSUSED*/
-     void
- ex_changes(eap)
--    exarg_T	*eap;
-+    exarg_T	*eap UNUSED;
- {
-     int		i;
-     char_u	*name;
-@@ -1023,6 +1021,9 @@
-     int		fnum = curbuf->b_fnum;
-     linenr_T	*lp;
-     win_T	*win;
-+#ifdef FEAT_WINDOWS
-+    tabpage_T	*tab;
-+#endif
- 
-     if (line2 < line1 && amount_after == 0L)	    /* nothing to do */
- 	return;
-@@ -1064,7 +1065,7 @@
- 	/* quickfix marks */
- 	qf_mark_adjust(NULL, line1, line2, amount, amount_after);
- 	/* location lists */
--	FOR_ALL_WINDOWS(win)
-+	FOR_ALL_TAB_WINDOWS(tab, win)
- 	    qf_mark_adjust(win, line1, line2, amount, amount_after);
- #endif
- 
-@@ -1086,7 +1087,7 @@
-     /*
-      * Adjust items in all windows related to the current buffer.
-      */
--    FOR_ALL_WINDOWS(win)
-+    FOR_ALL_TAB_WINDOWS(tab, win)
-     {
- #ifdef FEAT_JUMPLIST
- 	if (!cmdmod.lockmarks)
-@@ -1627,15 +1628,17 @@
- 
- /*
-  * Handle marks in the viminfo file:
-- * fp_out == NULL   read marks for current buffer only
-- * fp_out != NULL   copy marks for buffers not in buffer list
-+ * fp_out != NULL: copy marks for buffers not in buffer list
-+ * fp_out == NULL && (flags & VIF_WANT_MARKS): read marks for curbuf only
-+ * fp_out == NULL && (flags & VIF_GET_OLDFILES | VIF_FORCEIT): fill v:oldfiles
-  */
-     void
--copy_viminfo_marks(virp, fp_out, count, eof)
-+copy_viminfo_marks(virp, fp_out, count, eof, flags)
-     vir_T	*virp;
-     FILE	*fp_out;
-     int		count;
-     int		eof;
-+    int		flags;
- {
-     char_u	*line = virp->vir_line;
-     buf_T	*buf;
-@@ -1647,10 +1650,23 @@
-     char_u	*p;
-     char_u	*name_buf;
-     pos_T	pos;
-+#ifdef FEAT_EVAL
-+    list_T	*list = NULL;
-+#endif
- 
-     if ((name_buf = alloc(LSIZE)) == NULL)
- 	return;
-     *name_buf = NUL;
-+
-+#ifdef FEAT_EVAL
-+    if (fp_out == NULL && (flags & (VIF_GET_OLDFILES | VIF_FORCEIT)))
-+    {
-+	list = list_alloc();
-+	if (list != NULL)
-+	    set_vim_var_list(VV_OLDFILES, list);
-+    }
-+#endif
-+
-     num_marked_files = get_viminfo_parameter('\'');
-     while (!eof && (count < num_marked_files || fp_out == NULL))
-     {
-@@ -1681,6 +1697,11 @@
- 	    p++;
- 	*p = NUL;
- 
-+#ifdef FEAT_EVAL
-+	if (list != NULL)
-+	    list_append_string(list, str, -1);
-+#endif
-+
- 	/*
- 	 * If fp_out == NULL, load marks for current buffer.
- 	 * If fp_out != NULL, copy marks for buffers not in buflist.
-@@ -1688,7 +1709,7 @@
- 	load_marks = copy_marks_out = FALSE;
- 	if (fp_out == NULL)
- 	{
--	    if (curbuf->b_ffname != NULL)
-+	    if ((flags & VIF_WANT_MARKS) && curbuf->b_ffname != NULL)
- 	    {
- 		if (*name_buf == NUL)	    /* only need to do this once */
- 		    home_replace(NULL, curbuf->b_ffname, name_buf, LSIZE, TRUE);
-diff -Naur vim72.orig/src/mbyte.c vim72/src/mbyte.c
---- vim72.orig/src/mbyte.c	2008-07-14 05:38:05.000000000 -0700
-+++ vim72/src/mbyte.c	2009-09-12 08:39:52.000000000 -0700
-@@ -127,7 +127,10 @@
- static int dbcs_char2len __ARGS((int c));
- static int dbcs_char2bytes __ARGS((int c, char_u *buf));
- static int dbcs_ptr2len __ARGS((char_u *p));
-+static int dbcs_ptr2len_len __ARGS((char_u *p, int size));
-+static int utf_ptr2cells_len __ARGS((char_u *p, int size));
- static int dbcs_char2cells __ARGS((int c));
-+static int dbcs_ptr2cells_len __ARGS((char_u *p, int size));
- static int dbcs_ptr2char __ARGS((char_u *p));
- 
- /* Lookup table to quickly get the length in bytes of a UTF-8 character from
-@@ -606,9 +609,11 @@
-     if (enc_utf8)
-     {
- 	mb_ptr2len = utfc_ptr2len;
-+	mb_ptr2len_len = utfc_ptr2len_len;
- 	mb_char2len = utf_char2len;
- 	mb_char2bytes = utf_char2bytes;
- 	mb_ptr2cells = utf_ptr2cells;
-+	mb_ptr2cells_len = utf_ptr2cells_len;
- 	mb_char2cells = utf_char2cells;
- 	mb_off2cells = utf_off2cells;
- 	mb_ptr2char = utf_ptr2char;
-@@ -617,9 +622,11 @@
-     else if (enc_dbcs != 0)
-     {
- 	mb_ptr2len = dbcs_ptr2len;
-+	mb_ptr2len_len = dbcs_ptr2len_len;
- 	mb_char2len = dbcs_char2len;
- 	mb_char2bytes = dbcs_char2bytes;
- 	mb_ptr2cells = dbcs_ptr2cells;
-+	mb_ptr2cells_len = dbcs_ptr2cells_len;
- 	mb_char2cells = dbcs_char2cells;
- 	mb_off2cells = dbcs_off2cells;
- 	mb_ptr2char = dbcs_ptr2char;
-@@ -628,9 +635,11 @@
-     else
-     {
- 	mb_ptr2len = latin_ptr2len;
-+	mb_ptr2len_len = latin_ptr2len_len;
- 	mb_char2len = latin_char2len;
- 	mb_char2bytes = latin_char2bytes;
- 	mb_ptr2cells = latin_ptr2cells;
-+	mb_ptr2cells_len = latin_ptr2cells_len;
- 	mb_char2cells = latin_char2cells;
- 	mb_off2cells = latin_off2cells;
- 	mb_ptr2char = latin_ptr2char;
-@@ -717,7 +726,7 @@
- 		     * where mblen() returns 0 for invalid character.
- 		     * Therefore, following condition includes 0.
- 		     */
--		    (void)mblen(NULL, 0);	/* First reset the state. */
-+		    ignored = mblen(NULL, 0);	/* First reset the state. */
- 		    if (mblen(buf, (size_t)1) <= 0)
- 			n = 2;
- 		    else
-@@ -1015,10 +1024,9 @@
-  * Return length in bytes of character "c".
-  * Returns 1 for a single-byte character.
-  */
--/* ARGSUSED */
-     int
- latin_char2len(c)
--    int		c;
-+    int		c UNUSED;
- {
-     return 1;
- }
-@@ -1070,7 +1078,6 @@
-  * Get byte length of character at "*p" but stop at a NUL.
-  * For UTF-8 this includes following composing characters.
-  * Returns 0 when *p is NUL.
-- *
-  */
-     int
- latin_ptr2len(p)
-@@ -1092,6 +1099,40 @@
-     return len;
- }
- 
-+/*
-+ * mb_ptr2len_len() function pointer.
-+ * Like mb_ptr2len(), but limit to read "size" bytes.
-+ * Returns 0 for an empty string.
-+ * Returns 1 for an illegal char or an incomplete byte sequence.
-+ */
-+    int
-+latin_ptr2len_len(p, size)
-+    char_u	*p;
-+    int		size;
-+{
-+    if (size < 1 || *p == NUL)
-+	return 0;
-+    return 1;
-+}
-+
-+    static int
-+dbcs_ptr2len_len(p, size)
-+    char_u	*p;
-+    int		size;
-+{
-+    int		len;
-+
-+    if (size < 1 || *p == NUL)
-+	return 0;
-+    if (size == 1)
-+	return 1;
-+    /* Check that second byte is not missing. */
-+    len = MB_BYTE2LEN(*p);
-+    if (len == 2 && p[1] == NUL)
-+	len = 1;
-+    return len;
-+}
-+
- struct interval
- {
-     unsigned short first;
-@@ -1248,10 +1289,9 @@
-  * Return the number of display cells character at "*p" occupies.
-  * This doesn't take care of unprintable characters, use ptr2cells() for that.
-  */
--/*ARGSUSED*/
-     int
- latin_ptr2cells(p)
--    char_u	*p;
-+    char_u	*p UNUSED;
- {
-     return 1;
- }
-@@ -1289,14 +1329,62 @@
- }
- 
- /*
-+ * mb_ptr2cells_len() function pointer.
-+ * Like mb_ptr2cells(), but limit string length to "size".
-+ * For an empty string or truncated character returns 1.
-+ */
-+    int
-+latin_ptr2cells_len(p, size)
-+    char_u	*p UNUSED;
-+    int		size UNUSED;
-+{
-+    return 1;
-+}
-+
-+    static int
-+utf_ptr2cells_len(p, size)
-+    char_u	*p;
-+    int		size;
-+{
-+    int		c;
-+
-+    /* Need to convert to a wide character. */
-+    if (size > 0 && *p >= 0x80)
-+    {
-+	if (utf_ptr2len_len(p, size) < utf8len_tab[*p])
-+	    return 1;
-+	c = utf_ptr2char(p);
-+	/* An illegal byte is displayed as <xx>. */
-+	if (utf_ptr2len(p) == 1 || c == NUL)
-+	    return 4;
-+	/* If the char is ASCII it must be an overlong sequence. */
-+	if (c < 0x80)
-+	    return char2cells(c);
-+	return utf_char2cells(c);
-+    }
-+    return 1;
-+}
-+
-+    static int
-+dbcs_ptr2cells_len(p, size)
-+    char_u	*p;
-+    int		size;
-+{
-+    /* Number of cells is equal to number of bytes, except for euc-jp when
-+     * the first byte is 0x8e. */
-+    if (size <= 1 || (enc_dbcs == DBCS_JPNU && *p == 0x8e))
-+	return 1;
-+    return MB_BYTE2LEN(*p);
-+}
-+
-+/*
-  * mb_char2cells() function pointer.
-  * Return the number of display cells character "c" occupies.
-  * Only takes care of multi-byte chars, not "^C" and such.
-  */
--/*ARGSUSED*/
-     int
- latin_char2cells(c)
--    int		c;
-+    int		c UNUSED;
- {
-     return 1;
- }
-@@ -1318,11 +1406,10 @@
-  * Return number of display cells for char at ScreenLines[off].
-  * We make sure that the offset used is less than "max_off".
-  */
--/*ARGSUSED*/
-     int
- latin_off2cells(off, max_off)
--    unsigned	off;
--    unsigned	max_off;
-+    unsigned	off UNUSED;
-+    unsigned	max_off UNUSED;
- {
-     return 1;
- }
-@@ -1720,6 +1807,7 @@
- /*
-  * Return the number of bytes the UTF-8 encoding of the character at "p[size]"
-  * takes.  This includes following composing characters.
-+ * Returns 0 for an empty string.
-  * Returns 1 for an illegal char or an incomplete byte sequence.
-  */
-     int
-@@ -1732,7 +1820,7 @@
-     int		prevlen;
- #endif
- 
--    if (*p == NUL)
-+    if (size < 1 || *p == NUL)
- 	return 0;
-     if (p[0] < 0x80 && (size == 1 || p[1] < 0x80)) /* be quick for ASCII */
- 	return 1;
-@@ -2419,11 +2507,10 @@
-  * Return offset from "p" to the first byte of the character it points into.
-  * Returns 0 when already at the first byte of a character.
-  */
--/*ARGSUSED*/
-     int
- latin_head_off(base, p)
--    char_u	*base;
--    char_u	*p;
-+    char_u	*base UNUSED;
-+    char_u	*p UNUSED;
- {
-     return 0;
- }
-@@ -2540,7 +2627,6 @@
-     return (int)(p - q);
- }
- 
--#if defined(FEAT_EVAL) || defined(PROTO)
- /*
-  * Copy a character from "*fp" to "*tp" and advance the pointers.
-  */
-@@ -2555,7 +2641,6 @@
-     *tp += l;
-     *fp += l;
- }
--#endif
- 
- /*
-  * Return the offset from "p" to the first byte of a character.  When "p" is
-@@ -3133,7 +3218,7 @@
- 	else
- 	    s = p + 1;
-     }
--    for (i = 0; s[i] != NUL && s + i < buf + sizeof(buf) - 1; ++i)
-+    for (i = 0; s[i] != NUL && i < (int)sizeof(buf) - 1; ++i)
-     {
- 	if (s[i] == '_' || s[i] == '-')
- 	    buf[i] = '-';
-@@ -3180,7 +3265,7 @@
- 
- # if defined(USE_ICONV) || defined(PROTO)
- 
--static char_u *iconv_string __ARGS((vimconv_T *vcp, char_u *str, int slen, int *unconvlenp));
-+static char_u *iconv_string __ARGS((vimconv_T *vcp, char_u *str, int slen, int *unconvlenp, int *resultlenp));
- 
- /*
-  * Call iconv_open() with a check if iconv() works properly (there are broken
-@@ -3241,13 +3326,15 @@
-  * If "unconvlenp" is not NULL handle the string ending in an incomplete
-  * sequence and set "*unconvlenp" to the length of it.
-  * Returns the converted string in allocated memory.  NULL for an error.
-+ * If resultlenp is not NULL, sets it to the result length in bytes.
-  */
-     static char_u *
--iconv_string(vcp, str, slen, unconvlenp)
-+iconv_string(vcp, str, slen, unconvlenp, resultlenp)
-     vimconv_T	*vcp;
-     char_u	*str;
-     int		slen;
-     int		*unconvlenp;
-+    int		*resultlenp;
- {
-     const char	*from;
-     size_t	fromlen;
-@@ -3333,6 +3420,9 @@
- 	/* Not enough room or skipping illegal sequence. */
- 	done = to - (char *)result;
-     }
-+
-+    if (resultlenp != NULL)
-+	*resultlenp = (int)(to - (char *)result);
-     return result;
- }
- 
-@@ -3584,9 +3674,10 @@
-  * Callback invoked when the user finished preediting.
-  * Put the final string into the input buffer.
-  */
--/*ARGSUSED0*/
-     static void
--im_commit_cb(GtkIMContext *context, const gchar *str, gpointer data)
-+im_commit_cb(GtkIMContext *context UNUSED,
-+	     const gchar *str,
-+	     gpointer data UNUSED)
- {
-     int	slen = (int)STRLEN(str);
-     int	add_to_input = TRUE;
-@@ -3672,9 +3763,8 @@
- /*
-  * Callback invoked after start to the preedit.
-  */
--/*ARGSUSED*/
-     static void
--im_preedit_start_cb(GtkIMContext *context, gpointer data)
-+im_preedit_start_cb(GtkIMContext *context UNUSED, gpointer data UNUSED)
- {
- #ifdef XIM_DEBUG
-     xim_log("im_preedit_start_cb()\n");
-@@ -3689,9 +3779,8 @@
- /*
-  * Callback invoked after end to the preedit.
-  */
--/*ARGSUSED*/
-     static void
--im_preedit_end_cb(GtkIMContext *context, gpointer data)
-+im_preedit_end_cb(GtkIMContext *context UNUSED, gpointer data UNUSED)
- {
- #ifdef XIM_DEBUG
-     xim_log("im_preedit_end_cb()\n");
-@@ -3750,9 +3839,8 @@
-  * remaining input from within the "retrieve_surrounding" signal handler, this
-  * might not be necessary.  Gotta ask on vim-dev for opinions.
-  */
--/*ARGSUSED1*/
-     static void
--im_preedit_changed_cb(GtkIMContext *context, gpointer data)
-+im_preedit_changed_cb(GtkIMContext *context, gpointer data UNUSED)
- {
-     char    *preedit_string = NULL;
-     int	    cursor_index    = 0;
-@@ -4618,11 +4706,10 @@
-     }
- }
- 
--/*ARGSUSED*/
-     void
- im_set_position(row, col)
--    int		row;
--    int		col;
-+    int		row UNUSED;
-+    int		col UNUSED;
- {
-     xim_set_preedit();
- }
-@@ -4929,12 +5016,11 @@
- static void xim_instantiate_cb __ARGS((Display *display, XPointer client_data, XPointer	call_data));
- static void xim_destroy_cb __ARGS((XIM im, XPointer client_data, XPointer call_data));
- 
--/*ARGSUSED*/
-     static void
- xim_instantiate_cb(display, client_data, call_data)
-     Display	*display;
--    XPointer	client_data;
--    XPointer	call_data;
-+    XPointer	client_data UNUSED;
-+    XPointer	call_data UNUSED;
- {
-     Window	x11_window;
-     Display	*x11_display;
-@@ -4954,12 +5040,11 @@
- 					 xim_instantiate_cb, NULL);
- }
- 
--/*ARGSUSED*/
-     static void
- xim_destroy_cb(im, client_data, call_data)
--    XIM		im;
--    XPointer	client_data;
--    XPointer	call_data;
-+    XIM		im UNUSED;
-+    XPointer	client_data UNUSED;
-+    XPointer	call_data UNUSED;
- {
-     Window	x11_window;
-     Display	*x11_display;
-@@ -5278,9 +5363,10 @@
-     }
- }
- 
--/*ARGSUSED*/
-     static void
--preedit_start_cbproc(XIC xic, XPointer client_data, XPointer call_data)
-+preedit_start_cbproc(XIC thexic UNUSED,
-+	             XPointer client_data UNUSED,
-+		     XPointer call_data UNUSED)
- {
- #ifdef XIM_DEBUG
-     xim_log("xim_decide_input_style()\n");
-@@ -5312,9 +5398,10 @@
- static GSList *key_press_event_queue = NULL;
- static gboolean processing_queued_event = FALSE;
- 
--/*ARGSUSED*/
-     static void
--preedit_draw_cbproc(XIC xic, XPointer client_data, XPointer call_data)
-+preedit_draw_cbproc(XIC thexic UNUSED,
-+		    XPointer client_data UNUSED,
-+		    XPointer call_data)
- {
-     XIMPreeditDrawCallbackStruct *draw_data;
-     XIMText	*text;
-@@ -5386,7 +5473,7 @@
- 			draw_feedback = (char *)alloc(draw_data->chg_first
- 							      + text->length);
- 		    else
--			draw_feedback = realloc(draw_feedback,
-+			draw_feedback = vim_realloc(draw_feedback,
- 					 draw_data->chg_first + text->length);
- 		    if (draw_feedback != NULL)
- 		    {
-@@ -5453,18 +5540,20 @@
-     return -1;
- }
- 
--/*ARGSUSED*/
-     static void
--preedit_caret_cbproc(XIC xic, XPointer client_data, XPointer call_data)
-+preedit_caret_cbproc(XIC thexic UNUSED,
-+		     XPointer client_data UNUSED,
-+		     XPointer call_data UNUSED)
- {
- #ifdef XIM_DEBUG
-     xim_log("preedit_caret_cbproc()\n");
- #endif
- }
- 
--/*ARGSUSED*/
-     static void
--preedit_done_cbproc(XIC xic, XPointer client_data, XPointer call_data)
-+preedit_done_cbproc(XIC thexic UNUSED,
-+		    XPointer client_data UNUSED,
-+		    XPointer call_data UNUSED)
- {
- #ifdef XIM_DEBUG
-     xim_log("preedit_done_cbproc()\n");
-@@ -5503,9 +5592,8 @@
-     }
- }
- 
--/*ARGSUSED*/
-     int
--xim_queue_key_press_event(GdkEventKey *event, int down)
-+xim_queue_key_press_event(GdkEventKey *event, int down UNUSED)
- {
- #ifdef XIM_DEBUG
-     xim_log("xim_queue_key_press_event()\n");
-@@ -5521,9 +5609,8 @@
-     return TRUE;
- }
- 
--/*ARGSUSED*/
-     static void
--preedit_callback_setup(GdkIC *ic)
-+preedit_callback_setup(GdkIC *ic UNUSED)
- {
-     XIC xxic;
-     XVaNestedList preedit_attr;
-@@ -5548,9 +5635,8 @@
-     XFree(preedit_attr);
- }
- 
--/*ARGSUSED*/
-     static void
--reset_state_setup(GdkIC *ic)
-+reset_state_setup(GdkIC *ic UNUSED)
- {
- #ifdef USE_X11R6_XIM
-     /* don't change the input context when we call reset */
-@@ -5756,8 +5842,25 @@
-     char_u	*from;
-     char_u	*to;
- {
-+    return convert_setup_ext(vcp, from, TRUE, to, TRUE);
-+}
-+
-+/*
-+ * As convert_setup(), but only when from_unicode_is_utf8 is TRUE will all
-+ * "from" unicode charsets be considered utf-8.  Same for "to".
-+ */
-+    int
-+convert_setup_ext(vcp, from, from_unicode_is_utf8, to, to_unicode_is_utf8)
-+    vimconv_T	*vcp;
-+    char_u	*from;
-+    int		from_unicode_is_utf8;
-+    char_u	*to;
-+    int		to_unicode_is_utf8;
-+{
-     int		from_prop;
-     int		to_prop;
-+    int		from_is_utf8;
-+    int		to_is_utf8;
- 
-     /* Reset to no conversion. */
- # ifdef USE_ICONV
-@@ -5775,37 +5878,46 @@
- 
-     from_prop = enc_canon_props(from);
-     to_prop = enc_canon_props(to);
--    if ((from_prop & ENC_LATIN1) && (to_prop & ENC_UNICODE))
-+    if (from_unicode_is_utf8)
-+	from_is_utf8 = from_prop & ENC_UNICODE;
-+    else
-+	from_is_utf8 = from_prop == ENC_UNICODE;
-+    if (to_unicode_is_utf8)
-+	to_is_utf8 = to_prop & ENC_UNICODE;
-+    else
-+	to_is_utf8 = to_prop == ENC_UNICODE;
-+
-+    if ((from_prop & ENC_LATIN1) && to_is_utf8)
-     {
- 	/* Internal latin1 -> utf-8 conversion. */
- 	vcp->vc_type = CONV_TO_UTF8;
- 	vcp->vc_factor = 2;	/* up to twice as long */
-     }
--    else if ((from_prop & ENC_LATIN9) && (to_prop & ENC_UNICODE))
-+    else if ((from_prop & ENC_LATIN9) && to_is_utf8)
-     {
- 	/* Internal latin9 -> utf-8 conversion. */
- 	vcp->vc_type = CONV_9_TO_UTF8;
- 	vcp->vc_factor = 3;	/* up to three as long (euro sign) */
-     }
--    else if ((from_prop & ENC_UNICODE) && (to_prop & ENC_LATIN1))
-+    else if (from_is_utf8 && (to_prop & ENC_LATIN1))
-     {
- 	/* Internal utf-8 -> latin1 conversion. */
- 	vcp->vc_type = CONV_TO_LATIN1;
-     }
--    else if ((from_prop & ENC_UNICODE) && (to_prop & ENC_LATIN9))
-+    else if (from_is_utf8 && (to_prop & ENC_LATIN9))
-     {
- 	/* Internal utf-8 -> latin9 conversion. */
- 	vcp->vc_type = CONV_TO_LATIN9;
-     }
- #ifdef WIN3264
-     /* Win32-specific codepage <-> codepage conversion without iconv. */
--    else if (((from_prop & ENC_UNICODE) || encname2codepage(from) > 0)
--	    && ((to_prop & ENC_UNICODE) || encname2codepage(to) > 0))
-+    else if ((from_is_utf8 || encname2codepage(from) > 0)
-+	    && (to_is_utf8 || encname2codepage(to) > 0))
-     {
- 	vcp->vc_type = CONV_CODEPAGE;
- 	vcp->vc_factor = 2;	/* up to twice as long */
--	vcp->vc_cpfrom = (from_prop & ENC_UNICODE) ? 0 : encname2codepage(from);
--	vcp->vc_cpto = (to_prop & ENC_UNICODE) ? 0 : encname2codepage(to);
-+	vcp->vc_cpfrom = from_is_utf8 ? 0 : encname2codepage(from);
-+	vcp->vc_cpto = to_is_utf8 ? 0 : encname2codepage(to);
-     }
- #endif
- #ifdef MACOS_X
-@@ -5813,7 +5925,7 @@
-     {
- 	vcp->vc_type = CONV_MAC_LATIN1;
-     }
--    else if ((from_prop & ENC_MACROMAN) && (to_prop & ENC_UNICODE))
-+    else if ((from_prop & ENC_MACROMAN) && to_is_utf8)
-     {
- 	vcp->vc_type = CONV_MAC_UTF8;
- 	vcp->vc_factor = 2;	/* up to twice as long */
-@@ -5822,7 +5934,7 @@
-     {
- 	vcp->vc_type = CONV_LATIN1_MAC;
-     }
--    else if ((from_prop & ENC_UNICODE) && (to_prop & ENC_MACROMAN))
-+    else if (from_is_utf8 && (to_prop & ENC_MACROMAN))
-     {
- 	vcp->vc_type = CONV_UTF8_MAC;
-     }
-@@ -5832,8 +5944,8 @@
-     {
- 	/* Use iconv() for conversion. */
- 	vcp->vc_fd = (iconv_t)my_iconv_open(
--		(to_prop & ENC_UNICODE) ? (char_u *)"utf-8" : to,
--		(from_prop & ENC_UNICODE) ? (char_u *)"utf-8" : from);
-+		to_is_utf8 ? (char_u *)"utf-8" : to,
-+		from_is_utf8 ? (char_u *)"utf-8" : from);
- 	if (vcp->vc_fd != (iconv_t)-1)
- 	{
- 	    vcp->vc_type = CONV_ICONV;
-@@ -6089,9 +6201,7 @@
- 
- # ifdef USE_ICONV
- 	case CONV_ICONV:	/* conversion with output_conv.vc_fd */
--	    retval = iconv_string(vcp, ptr, len, unconvlenp);
--	    if (retval != NULL && lenp != NULL)
--		*lenp = (int)STRLEN(retval);
-+	    retval = iconv_string(vcp, ptr, len, unconvlenp, lenp);
- 	    break;
- # endif
- # ifdef WIN3264
-diff -Naur vim72.orig/src/memline.c vim72/src/memline.c
---- vim72.orig/src/memline.c	2008-07-13 09:19:22.000000000 -0700
-+++ vim72/src/memline.c	2009-09-12 08:37:35.000000000 -0700
-@@ -1554,10 +1554,15 @@
- 	    for (i = 0; i < num_files; ++i)
- 		if (fullpathcmp(p, files[i], TRUE) & FPC_SAME)
- 		{
-+		    /* Remove the name from files[i].  Move further entries
-+		     * down.  When the array becomes empty free it here, since
-+		     * FreeWild() won't be called below. */
- 		    vim_free(files[i]);
--		    --num_files;
--		    for ( ; i < num_files; ++i)
--			files[i] = files[i + 1];
-+		    if (--num_files == 0)
-+			vim_free(files);
-+		    else
-+			for ( ; i < num_files; ++i)
-+			    files[i] = files[i + 1];
- 		}
- 	}
- 	if (nr > 0)
-@@ -3522,7 +3527,7 @@
- 	    if (errno == EINVAL || errno == ENOENT)
- 	    {
- 		/* Found non-symlink or not existing file, stop here.
--		 * When at the first level use the unmodifed name, skip the
-+		 * When at the first level use the unmodified name, skip the
- 		 * call to vim_FullName(). */
- 		if (depth == 1)
- 		    return FAIL;
-@@ -3766,8 +3771,10 @@
-     set_vim_var_string(VV_SWAPCHOICE, NULL, -1);
- 
-     /* Trigger SwapExists autocommands with <afile> set to the file being
--     * edited. */
-+     * edited.  Disallow changing directory here. */
-+    ++allbuf_lock;
-     apply_autocmds(EVENT_SWAPEXISTS, buf->b_fname, NULL, FALSE, NULL);
-+    --allbuf_lock;
- 
-     set_vim_var_string(VV_SWAPNAME, NULL, -1);
- 
-@@ -3793,6 +3800,7 @@
-  *
-  * Note: If BASENAMELEN is not correct, you will get error messages for
-  *	 not being able to open the swapfile
-+ * Note: May trigger SwapExists autocmd, pointers may change!
-  */
-     static char_u *
- findswapname(buf, dirp, old_fname)
-@@ -4560,7 +4568,7 @@
- 			buf->b_ml.ml_chunksize + curix,
- 			(buf->b_ml.ml_usedchunks - curix) *
- 			sizeof(chunksize_T));
--	    /* Compute length of first half of lines in the splitted chunk */
-+	    /* Compute length of first half of lines in the split chunk */
- 	    size = 0;
- 	    linecnt = 0;
- 	    while (curline < buf->b_ml.ml_line_count
-diff -Naur vim72.orig/src/menu.c vim72/src/menu.c
---- vim72.orig/src/menu.c	2008-06-21 12:53:43.000000000 -0700
-+++ vim72/src/menu.c	2009-09-12 08:38:51.000000000 -0700
-@@ -231,7 +231,7 @@
- 		if (skipdigits(menu_path + 7) == p)
- 		{
- 		    menuarg.iconidx = atoi((char *)menu_path + 7);
--		    if (menuarg.iconidx >= TOOLBAR_NAME_COUNT)
-+		    if (menuarg.iconidx >= (int)TOOLBAR_NAME_COUNT)
- 			menuarg.iconidx = -1;
- 		    else
- 			menuarg.icon_builtin = TRUE;
-@@ -239,7 +239,7 @@
- 	    }
- 	    else
- 	    {
--		for (i = 0; i < TOOLBAR_NAME_COUNT; ++i)
-+		for (i = 0; i < (int)TOOLBAR_NAME_COUNT; ++i)
- 		    if (STRNCMP(toolbar_names[i], menu_path, p - menu_path)
- 									 == 0)
- 		    {
-@@ -1120,6 +1120,7 @@
- 	parent = menu;
- 	menu = menu->children;
-     }
-+    vim_free(path_name);
- 
-     /* Now we have found the matching menu, and we list the mappings */
- 						    /* Highlight title */
-@@ -1340,10 +1341,9 @@
-  * Function given to ExpandGeneric() to obtain the list of (sub)menus (not
-  * entries).
-  */
--/*ARGSUSED*/
-     char_u *
- get_menu_name(xp, idx)
--    expand_T	*xp;
-+    expand_T	*xp UNUSED;
-     int		idx;
- {
-     static vimmenu_T	*menu = NULL;
-@@ -1377,10 +1377,9 @@
-  * Function given to ExpandGeneric() to obtain the list of menus and menu
-  * entries.
-  */
--/*ARGSUSED*/
-     char_u *
- get_menu_names(xp, idx)
--    expand_T	*xp;
-+    expand_T	*xp UNUSED;
-     int		idx;
- {
-     static vimmenu_T	*menu = NULL;
-@@ -1738,10 +1737,9 @@
- /*
-  * Return TRUE if the menu is the tearoff menu.
-  */
--/*ARGSUSED*/
-     static int
- menu_is_tearoff(name)
--    char_u *name;
-+    char_u *name UNUSED;
- {
- #ifdef FEAT_GUI
-     return (STRCMP(name, TEAR_STRING) == 0);
-@@ -2342,10 +2340,9 @@
-  * This function is also defined without the +multi_lang feature, in which
-  * case the commands are ignored.
-  */
--/*ARGSUSED*/
-     void
- ex_menutranslate(eap)
--    exarg_T	*eap;
-+    exarg_T	*eap UNUSED;
- {
- #ifdef FEAT_MULTI_LANG
-     char_u		*arg = eap->arg;
-diff -Naur vim72.orig/src/message.c vim72/src/message.c
---- vim72.orig/src/message.c	2008-07-09 11:24:55.000000000 -0700
-+++ vim72/src/message.c	2009-09-12 08:40:50.000000000 -0700
-@@ -107,7 +107,7 @@
- }
- 
- #if defined(FEAT_EVAL) || defined(FEAT_X11) || defined(USE_XSMP) \
--    || defined(PROTO)
-+    || defined(FEAT_GUI_GTK) || defined(PROTO)
- /*
-  * Like msg() but keep it silent when 'verbosefile' is set.
-  */
-@@ -818,10 +818,9 @@
- /*
-  * ":messages" command.
-  */
--/*ARGSUSED*/
-     void
- ex_messages(eap)
--    exarg_T	*eap;
-+    exarg_T	*eap UNUSED;
- {
-     struct msg_hist *p;
-     char_u	    *s;
-@@ -976,7 +975,7 @@
- 		    }
- 		}
- 		else if (msg_scrolled > Rows - 2
--				     && (c == 'j' || c == K_DOWN || c == 'd'))
-+			 && (c == 'j' || c == K_DOWN || c == 'd' || c == 'f'))
- 		    c = K_IGNORE;
- 	    }
- 	} while ((had_got_int && c == Ctrl_C)
-@@ -2504,7 +2503,6 @@
- 	    break;
- 
- 	case 'u':		/* Up half a page */
--	case K_PAGEUP:
- 	    scroll = -(Rows / 2);
- 	    break;
- 
-@@ -2513,10 +2511,12 @@
- 	    break;
- 
- 	case 'b':		/* one page back */
-+	case K_PAGEUP:
- 	    scroll = -(Rows - 1);
- 	    break;
- 
- 	case ' ':		/* one extra page */
-+	case 'f':
- 	case K_PAGEDOWN:
- 	case K_LEFTMOUSE:
- 	    scroll = Rows - 1;
-@@ -2552,7 +2552,6 @@
- 	    {
- 		/* Jump to the choices of the dialog. */
- 		retval = TRUE;
--		lines_left = Rows - 1;
- 	    }
- 	    else
- #endif
-@@ -2560,6 +2559,9 @@
- 		got_int = TRUE;
- 		quit_more = TRUE;
- 	    }
-+	    /* When there is some more output (wrapping line) display that
-+	     * without another prompt. */
-+	    lines_left = Rows - 1;
- 	    break;
- 
- #ifdef FEAT_CLIPBOARD
-@@ -3020,11 +3022,7 @@
-     if (*p_vfile != NUL)
- 	verbose_write(s, maxlen);
- 
--    if (redir_fd != NULL
--#ifdef FEAT_EVAL
--			  || redir_reg || redir_vname
--#endif
--				       )
-+    if (redirecting())
-     {
- 	/* If the string doesn't start with CR or NL, go to msg_col */
- 	if (*s != '\n' && *s != '\r')
-@@ -3071,6 +3069,16 @@
-     }
- }
- 
-+    int
-+redirecting()
-+{
-+    return redir_fd != NULL
-+#ifdef FEAT_EVAL
-+			  || redir_reg || redir_vname
-+#endif
-+				       ;
-+}
-+
- /*
-  * Before giving verbose message.
-  * Must always be called paired with verbose_leave()!
-@@ -3281,15 +3289,15 @@
-  * A '&' in a button name becomes a shortcut, so each '&' should be before a
-  * different letter.
-  */
--/* ARGSUSED */
-     int
- do_dialog(type, title, message, buttons, dfltbutton, textfield)
--    int		type;
--    char_u	*title;
-+    int		type UNUSED;
-+    char_u	*title UNUSED;
-     char_u	*message;
-     char_u	*buttons;
-     int		dfltbutton;
--    char_u	*textfield;	/* IObuff for inputdialog(), NULL otherwise */
-+    char_u	*textfield UNUSED;	/* IObuff for inputdialog(), NULL
-+					   otherwise */
- {
-     int		oldState;
-     int		retval = 0;
-@@ -3309,7 +3317,10 @@
-     {
- 	c = gui_mch_dialog(type, title, message, buttons, dfltbutton,
- 								   textfield);
--	msg_end_prompt();
-+	/* avoid a hit-enter prompt without clearing the cmdline */
-+	need_wait_return = FALSE;
-+	emsg_on_display = FALSE;
-+	cmdline_row = msg_row;
- 
- 	/* Flush output to avoid that further messages and redrawing is done
- 	 * in the wrong order. */
-@@ -4009,7 +4020,7 @@
- 	if (*p != '%')
- 	{
- 	    char    *q = strchr(p + 1, '%');
--	    size_t  n = (q == NULL) ? STRLEN(p) : (q - p);
-+	    size_t  n = (q == NULL) ? STRLEN(p) : (size_t)(q - p);
- 
- 	    /* Copy up to the next '%' or NUL without any changes. */
- 	    if (str_l < str_m)
-@@ -4256,7 +4267,8 @@
- 				  precision <= (size_t)0x7fffffffL ? precision
- 						       : (size_t)0x7fffffffL);
- #endif
--			str_arg_l = (q == NULL) ? precision : q - str_arg;
-+			str_arg_l = (q == NULL) ? precision
-+						      : (size_t)(q - str_arg);
- 		    }
- 		    break;
- 
-@@ -4356,7 +4368,8 @@
- 					    get_a_arg(arg_idx);
- #else
- # if defined(FEAT_EVAL)
--					    tvs != NULL ? tv_nr(tvs, &arg_idx) :
-+					    tvs != NULL ? (unsigned)
-+							tv_nr(tvs, &arg_idx) :
- # endif
- 						va_arg(ap, unsigned int);
- #endif
-@@ -4369,7 +4382,8 @@
- 					    get_a_arg(arg_idx);
- #else
- # if defined(FEAT_EVAL)
--					    tvs != NULL ? tv_nr(tvs, &arg_idx) :
-+					    tvs != NULL ? (unsigned long)
-+							tv_nr(tvs, &arg_idx) :
- # endif
- 						va_arg(ap, unsigned long int);
- #endif
-@@ -4556,7 +4570,13 @@
- 			remove_trailing_zeroes = TRUE;
- 		    }
- 
--		    if (fmt_spec == 'f' && abs_f > 1.0e307)
-+		    if (fmt_spec == 'f' &&
-+#ifdef VAX
-+			    abs_f > 1.0e38
-+#else
-+			    abs_f > 1.0e307
-+#endif
-+			    )
- 		    {
- 			/* Avoid a buffer overflow */
- 			strcpy(tmp, "inf");
-@@ -4585,61 +4605,62 @@
- 			if (remove_trailing_zeroes)
- 			{
- 			    int i;
--			    char *p;
-+			    char *tp;
- 
- 			    /* Using %g or %G: remove superfluous zeroes. */
- 			    if (fmt_spec == 'f')
--				p = tmp + str_arg_l - 1;
-+				tp = tmp + str_arg_l - 1;
- 			    else
- 			    {
--				p = (char *)vim_strchr((char_u *)tmp,
-+				tp = (char *)vim_strchr((char_u *)tmp,
- 						 fmt_spec == 'e' ? 'e' : 'E');
--				if (p != NULL)
-+				if (tp != NULL)
- 				{
- 				    /* Remove superfluous '+' and leading
- 				     * zeroes from the exponent. */
--				    if (p[1] == '+')
-+				    if (tp[1] == '+')
- 				    {
- 					/* Change "1.0e+07" to "1.0e07" */
--					STRMOVE(p + 1, p + 2);
-+					STRMOVE(tp + 1, tp + 2);
- 					--str_arg_l;
- 				    }
--				    i = (p[1] == '-') ? 2 : 1;
--				    while (p[i] == '0')
-+				    i = (tp[1] == '-') ? 2 : 1;
-+				    while (tp[i] == '0')
- 				    {
- 					/* Change "1.0e07" to "1.0e7" */
--					STRMOVE(p + i, p + i + 1);
-+					STRMOVE(tp + i, tp + i + 1);
- 					--str_arg_l;
- 				    }
--				    --p;
-+				    --tp;
- 				}
- 			    }
- 
--			    if (p != NULL && !precision_specified)
-+			    if (tp != NULL && !precision_specified)
- 				/* Remove trailing zeroes, but keep the one
- 				 * just after a dot. */
--				while (p > tmp + 2 && *p == '0' && p[-1] != '.')
-+				while (tp > tmp + 2 && *tp == '0'
-+							     && tp[-1] != '.')
- 				{
--				    STRMOVE(p, p + 1);
--				    --p;
-+				    STRMOVE(tp, tp + 1);
-+				    --tp;
- 				    --str_arg_l;
- 				}
- 			}
- 			else
- 			{
--			    char *p;
-+			    char *tp;
- 
- 			    /* Be consistent: some printf("%e") use 1.0e+12
- 			     * and some 1.0e+012.  Remove one zero in the last
- 			     * case. */
--			    p = (char *)vim_strchr((char_u *)tmp,
-+			    tp = (char *)vim_strchr((char_u *)tmp,
- 						 fmt_spec == 'e' ? 'e' : 'E');
--			    if (p != NULL && (p[1] == '+' || p[1] == '-')
--					  && p[2] == '0'
--					  && vim_isdigit(p[3])
--					  && vim_isdigit(p[4]))
-+			    if (tp != NULL && (tp[1] == '+' || tp[1] == '-')
-+					  && tp[2] == '0'
-+					  && vim_isdigit(tp[3])
-+					  && vim_isdigit(tp[4]))
- 			    {
--				STRMOVE(p + 2, p + 3);
-+				STRMOVE(tp + 2, tp + 3);
- 				--str_arg_l;
- 			    }
- 			}
-@@ -4685,7 +4706,8 @@
- 			size_t avail = str_m - str_l;
- 
- 			vim_memset(str + str_l, zero_padding ? '0' : ' ',
--					     (size_t)pn > avail ? avail : pn);
-+					     (size_t)pn > avail ? avail
-+								: (size_t)pn);
- 		    }
- 		    str_l += pn;
- 		}
-@@ -4712,7 +4734,8 @@
- 			size_t avail = str_m - str_l;
- 
- 			mch_memmove(str + str_l, str_arg,
--					     (size_t)zn > avail ? avail : zn);
-+					     (size_t)zn > avail ? avail
-+								: (size_t)zn);
- 		    }
- 		    str_l += zn;
- 		}
-@@ -4727,7 +4750,8 @@
- 			size_t avail = str_m-str_l;
- 
- 			vim_memset(str + str_l, '0',
--					     (size_t)zn > avail ? avail : zn);
-+					     (size_t)zn > avail ? avail
-+								: (size_t)zn);
- 		    }
- 		    str_l += zn;
- 		}
-@@ -4746,7 +4770,7 @@
- 
- 			mch_memmove(str + str_l,
- 				str_arg + zero_padding_insertion_ind,
--				(size_t)sn > avail ? avail : sn);
-+				(size_t)sn > avail ? avail : (size_t)sn);
- 		    }
- 		    str_l += sn;
- 		}
-@@ -4766,7 +4790,8 @@
- 			size_t avail = str_m - str_l;
- 
- 			vim_memset(str + str_l, ' ',
--					     (size_t)pn > avail ? avail : pn);
-+					     (size_t)pn > avail ? avail
-+								: (size_t)pn);
- 		    }
- 		    str_l += pn;
- 		}
-diff -Naur vim72.orig/src/misc1.c vim72/src/misc1.c
---- vim72.orig/src/misc1.c	2008-07-12 12:20:53.000000000 -0700
-+++ vim72/src/misc1.c	2009-09-12 08:41:27.000000000 -0700
-@@ -2188,12 +2188,11 @@
-  *
-  * return FAIL for failure, OK otherwise
-  */
--/*ARGSUSED*/
-     int
- del_bytes(count, fixpos_arg, use_delcombine)
-     long	count;
-     int		fixpos_arg;
--    int		use_delcombine;	    /* 'delcombine' option applies */
-+    int		use_delcombine UNUSED;	    /* 'delcombine' option applies */
- {
-     char_u	*oldp, *newp;
-     colnr_T	oldlen;
-@@ -2346,12 +2345,13 @@
-     int		undo;		/* if TRUE, prepare for undo */
- {
-     long	n;
-+    linenr_T	first = curwin->w_cursor.lnum;
- 
-     if (nlines <= 0)
- 	return;
- 
-     /* save the deleted lines for undo */
--    if (undo && u_savedel(curwin->w_cursor.lnum, nlines) == FAIL)
-+    if (undo && u_savedel(first, nlines) == FAIL)
- 	return;
- 
-     for (n = 0; n < nlines; )
-@@ -2359,18 +2359,21 @@
- 	if (curbuf->b_ml.ml_flags & ML_EMPTY)	    /* nothing to delete */
- 	    break;
- 
--	ml_delete(curwin->w_cursor.lnum, TRUE);
-+	ml_delete(first, TRUE);
- 	++n;
- 
- 	/* If we delete the last line in the file, stop */
--	if (curwin->w_cursor.lnum > curbuf->b_ml.ml_line_count)
-+	if (first > curbuf->b_ml.ml_line_count)
- 	    break;
-     }
--    /* adjust marks, mark the buffer as changed and prepare for displaying */
--    deleted_lines_mark(curwin->w_cursor.lnum, n);
- 
-+    /* Correct the cursor position before calling deleted_lines_mark(), it may
-+     * trigger a callback to display the cursor. */
-     curwin->w_cursor.col = 0;
-     check_cursor_lnum();
-+
-+    /* adjust marks, mark the buffer as changed and prepare for displaying */
-+    deleted_lines_mark(first, n);
- }
- 
-     int
-@@ -2622,6 +2625,8 @@
- 
- /*
-  * Like deleted_lines(), but adjust marks first.
-+ * Make sure the cursor is on a valid line before calling, a GUI callback may
-+ * be triggered to display the cursor.
-  */
-     void
- deleted_lines_mark(lnum, count)
-@@ -2717,6 +2722,9 @@
-     long	xtra;
- {
-     win_T	*wp;
-+#ifdef FEAT_WINDOWS
-+    tabpage_T	*tp;
-+#endif
-     int		i;
- #ifdef FEAT_JUMPLIST
-     int		cols;
-@@ -2769,7 +2777,7 @@
- 		    curbuf->b_changelistlen = JUMPLISTSIZE - 1;
- 		    mch_memmove(curbuf->b_changelist, curbuf->b_changelist + 1,
- 					  sizeof(pos_T) * (JUMPLISTSIZE - 1));
--		    FOR_ALL_WINDOWS(wp)
-+		    FOR_ALL_TAB_WINDOWS(tp, wp)
- 		    {
- 			/* Correct position in changelist for other windows on
- 			 * this buffer. */
-@@ -2777,7 +2785,7 @@
- 			    --wp->w_changelistidx;
- 		    }
- 		}
--		FOR_ALL_WINDOWS(wp)
-+		FOR_ALL_TAB_WINDOWS(tp, wp)
- 		{
- 		    /* For other windows, if the position in the changelist is
- 		     * at the end it stays at the end. */
-@@ -2796,7 +2804,7 @@
- #endif
-     }
- 
--    FOR_ALL_WINDOWS(wp)
-+    FOR_ALL_TAB_WINDOWS(tp, wp)
-     {
- 	if (wp->w_buffer == curbuf)
- 	{
-@@ -2955,6 +2963,8 @@
-     int	    col;		/* column for message; non-zero when in insert
- 				   mode and 'showmode' is on */
- {
-+    static char *w_readonly = N_("W10: Warning: Changing a readonly file");
-+
-     if (curbuf->b_did_warn == FALSE
- 	    && curbufIsChanged() == 0
- #ifdef FEAT_AUTOCMD
-@@ -2977,8 +2987,10 @@
- 	if (msg_row == Rows - 1)
- 	    msg_col = col;
- 	msg_source(hl_attr(HLF_W));
--	MSG_PUTS_ATTR(_("W10: Warning: Changing a readonly file"),
--						   hl_attr(HLF_W) | MSG_HIST);
-+	MSG_PUTS_ATTR(_(w_readonly), hl_attr(HLF_W) | MSG_HIST);
-+#ifdef FEAT_EVAL
-+	set_vim_var_string(VV_WARNINGMSG, (char_u *)_(w_readonly), -1);
-+#endif
- 	msg_clr_eos();
- 	(void)msg_end();
- 	if (msg_silent == 0 && !silent_mode)
-@@ -3245,9 +3257,9 @@
- 
-     /* When using ":silent" assume that <CR> was entered. */
-     if (mouse_used != NULL)
--	MSG_PUTS(_("Type number or click with mouse (<Enter> cancels): "));
-+	MSG_PUTS(_("Type number and <Enter> or click with mouse (empty cancels): "));
-     else
--	MSG_PUTS(_("Choice number (<Enter> cancels): "));
-+	MSG_PUTS(_("Type number and <Enter> (empty cancels): "));
- 
-     /* Set the state such that text can be selected/copied/pasted and we still
-      * get mouse events. */
-@@ -3264,6 +3276,7 @@
- 	cmdline_row = msg_row - 1;
- 	need_wait_return = FALSE;
- 	msg_didany = FALSE;
-+	msg_didout = FALSE;
-     }
-     else
- 	cmdline_row = save_cmdline_row;
-@@ -4141,10 +4154,9 @@
- /*
-  * Function given to ExpandGeneric() to obtain an environment variable name.
-  */
--/*ARGSUSED*/
-     char_u *
- get_env_name(xp, idx)
--    expand_T	*xp;
-+    expand_T	*xp UNUSED;
-     int		idx;
- {
- # if defined(AMIGA) || defined(__MRC__) || defined(__SC__)
-@@ -4736,9 +4748,9 @@
- 	 * If it is then restrict the search to below this line and try again.
- 	 */
- 	line = ml_get(pos->lnum);
--	for (p = line; *p && (unsigned)(p - line) < pos->col; ++p)
-+	for (p = line; *p && (colnr_T)(p - line) < pos->col; ++p)
- 	    p = skip_string(p);
--	if ((unsigned)(p - line) <= pos->col)
-+	if ((colnr_T)(p - line) <= pos->col)
- 	    break;
- 	cur_maxcomment = curwin->w_cursor.lnum - pos->lnum - 1;
- 	if (cur_maxcomment <= 0)
-@@ -6269,7 +6281,7 @@
-      * check for that.
-      */
-     if ((State & INSERT)
--	    && curwin->w_cursor.col < STRLEN(linecopy)
-+	    && curwin->w_cursor.col < (colnr_T)STRLEN(linecopy)
- 	    && linecopy[curwin->w_cursor.col] == ')')
- 	linecopy[curwin->w_cursor.col] = NUL;
- 
-@@ -8522,11 +8534,25 @@
-     for (setsuf = p_su; *setsuf; )
-     {
- 	setsuflen = copy_option_part(&setsuf, suf_buf, MAXSUFLEN, ".,");
--	if (fnamelen >= setsuflen
--		&& fnamencmp(suf_buf, fname + fnamelen - setsuflen,
--					      (size_t)setsuflen) == 0)
--	    break;
--	setsuflen = 0;
-+	if (setsuflen == 0)
-+	{
-+	    char_u *tail = gettail(fname);
-+
-+	    /* empty entry: match name without a '.' */
-+	    if (vim_strchr(tail, '.') == NULL)
-+	    {
-+		setsuflen = 1;
-+		break;
-+	    }
-+	}
-+	else
-+	{
-+	    if (fnamelen >= setsuflen
-+		    && fnamencmp(suf_buf, fname + fnamelen - setsuflen,
-+						  (size_t)setsuflen) == 0)
-+		break;
-+	    setsuflen = 0;
-+	}
-     }
-     return (setsuflen != 0);
- }
-@@ -9188,7 +9214,7 @@
- 		else if (vim_strpbrk(p, (char_u *)"$~") != NULL)
- 		{
- 		    vim_free(p);
--		    ga_clear(&ga);
-+		    ga_clear_strings(&ga);
- 		    i = mch_expand_wildcards(num_pat, pat, num_file, file,
- 								       flags);
- 		    recursive = FALSE;
-diff -Naur vim72.orig/src/misc2.c vim72/src/misc2.c
---- vim72.orig/src/misc2.c	2008-07-23 12:12:56.000000000 -0700
-+++ vim72/src/misc2.c	2009-09-12 08:38:43.000000000 -0700
-@@ -496,7 +496,8 @@
- {
-     colnr_T len;
- #ifdef FEAT_VIRTUALEDIT
--    colnr_T oldcol = curwin->w_cursor.col + curwin->w_cursor.coladd;
-+    colnr_T oldcol = curwin->w_cursor.col;
-+    colnr_T oldcoladd = curwin->w_cursor.col + curwin->w_cursor.coladd;
- #endif
- 
-     len = (colnr_T)STRLEN(ml_get_curline());
-@@ -535,7 +536,13 @@
-     if (oldcol == MAXCOL)
- 	curwin->w_cursor.coladd = 0;
-     else if (ve_flags == VE_ALL)
--	curwin->w_cursor.coladd = oldcol - curwin->w_cursor.col;
-+    {
-+	if (oldcoladd > curwin->w_cursor.col)
-+	    curwin->w_cursor.coladd = oldcoladd - curwin->w_cursor.col;
-+	else
-+	    /* avoid weird number when there is a miscalculation or overflow */
-+	    curwin->w_cursor.coladd = 0;
-+    }
- #endif
- }
- 
-@@ -873,7 +880,7 @@
- 	    /* 3. check for available memory: call mch_avail_mem() */
- 	    if (mch_avail_mem(TRUE) < KEEP_ROOM && !releasing)
- 	    {
--		vim_free((char *)p);	/* System is low... no go! */
-+		free((char *)p);	/* System is low... no go! */
- 		p = NULL;
- 	    }
- 	    else
-@@ -1010,6 +1017,9 @@
- # if defined(FEAT_PROFILE)
-     do_cmdline_cmd((char_u *)"profdel *");
- # endif
-+# if defined(FEAT_KEYMAP)
-+    do_cmdline_cmd((char_u *)"set keymap=");
-+#endif
- 
- # ifdef FEAT_TITLE
-     free_titles();
-@@ -1034,6 +1044,9 @@
-     free_regexp_stuff();
-     free_tag_stuff();
-     free_cd_dir();
-+# ifdef FEAT_SIGNS
-+    free_signs();
-+# endif
- # ifdef FEAT_EVAL
-     set_expr_line(NULL);
- # endif
-@@ -1062,11 +1075,12 @@
- 
- #ifdef FEAT_QUICKFIX
-     {
--	win_T	*win;
-+	win_T	    *win;
-+	tabpage_T   *tab;
- 
- 	qf_free_all(NULL);
- 	/* Free all location lists */
--	FOR_ALL_WINDOWS(win)
-+	FOR_ALL_TAB_WINDOWS(tab, win)
- 	    qf_free_all(win);
-     }
- #endif
-@@ -1257,7 +1271,6 @@
-     return escaped_string;
- }
- 
--#if !defined(BACKSLASH_IN_FILENAME) || defined(FEAT_EVAL) || defined(PROTO)
- /*
-  * Return TRUE when 'shell' has "csh" in the tail.
-  */
-@@ -1266,9 +1279,7 @@
- {
-     return (strstr((char *)gettail(p_sh), "csh") != NULL);
- }
--#endif
- 
--#if defined(FEAT_EVAL) || defined(PROTO)
- /*
-  * Escape "string" for use as a shell argument with system().
-  * This uses single quotes, except when we know we need to use double qoutes
-@@ -1391,7 +1402,6 @@
- 
-     return escaped_string;
- }
--#endif
- 
- /*
-  * Like vim_strsave(), but make all characters uppercase.
-@@ -2565,7 +2575,7 @@
-     int		key;
-     int		dlen = 0;
- 
--    key = find_special_key(srcp, &modifiers, keycode);
-+    key = find_special_key(srcp, &modifiers, keycode, FALSE);
-     if (key == 0)
- 	return 0;
- 
-@@ -2601,10 +2611,11 @@
-  * returns 0 if there is no match.
-  */
-     int
--find_special_key(srcp, modp, keycode)
-+find_special_key(srcp, modp, keycode, keep_x_key)
-     char_u	**srcp;
-     int		*modp;
--    int		keycode; /* prefer key code, e.g. K_DEL instead of DEL */
-+    int		keycode;     /* prefer key code, e.g. K_DEL instead of DEL */
-+    int		keep_x_key;  /* don't translate xHome to Home key */
- {
-     char_u	*last_dash;
-     char_u	*end_of_name;
-@@ -2672,7 +2683,8 @@
- 	    else
- 	    {
- 		key = get_special_key_code(last_dash + 1);
--		key = handle_x_keys(key);
-+		if (!keep_x_key)
-+		    key = handle_x_keys(key);
- 	    }
- 
- 	    /*
-@@ -2829,7 +2841,7 @@
- get_key_name(i)
-     int	    i;
- {
--    if (i >= KEY_NAMES_TABLE_LEN)
-+    if (i >= (int)KEY_NAMES_TABLE_LEN)
- 	return NULL;
-     return  key_names_table[i].name;
- }
-@@ -3857,7 +3869,8 @@
-      * use filename.
-      */
- #ifdef UNIX
--    int			ffv_dev;	/* device number (-1 if not set) */
-+    int			ffv_dev_valid;	/* ffv_dev and ffv_ino were set */
-+    dev_t		ffv_dev;	/* device number */
-     ino_t		ffv_ino;	/* inode number */
- #endif
-     /* The memory for this struct is allocated according to the length of
-@@ -4047,13 +4060,12 @@
-  * This function silently ignores a few errors, vim_findfile() will have
-  * limited functionality then.
-  */
--/*ARGSUSED*/
-     void *
- vim_findfile_init(path, filename, stopdirs, level, free_visited, find_what,
- 					   search_ctx_arg, tagfile, rel_fname)
-     char_u	*path;
-     char_u	*filename;
--    char_u	*stopdirs;
-+    char_u	*stopdirs UNUSED;
-     int		level;
-     int		free_visited;
-     int		find_what;
-@@ -4698,7 +4710,8 @@
- 				stackp->ffs_filearray_cur = i + 1;
- 				ff_push(search_ctx, stackp);
- 
--				simplify_filename(file_path);
-+				if (!path_with_url(file_path))
-+				    simplify_filename(file_path);
- 				if (mch_dirname(ff_expand_buffer, MAXPATHL)
- 									== OK)
- 				{
-@@ -5050,10 +5063,9 @@
-     {
- 	if (
- #ifdef UNIX
--		!url
--		    ? (vp->ffv_dev == st.st_dev
--			&& vp->ffv_ino == st.st_ino)
--		    :
-+		!url ? (vp->ffv_dev_valid && vp->ffv_dev == st.st_dev
-+						  && vp->ffv_ino == st.st_ino)
-+		     :
- #endif
- 		fnamecmp(vp->ffv_fname, ff_expand_buffer) == 0
- 	   )
-@@ -5078,14 +5090,14 @@
- #ifdef UNIX
- 	if (!url)
- 	{
-+	    vp->ffv_dev_valid = TRUE;
- 	    vp->ffv_ino = st.st_ino;
- 	    vp->ffv_dev = st.st_dev;
- 	    vp->ffv_fname[0] = NUL;
- 	}
- 	else
- 	{
--	    vp->ffv_ino = 0;
--	    vp->ffv_dev = -1;
-+	    vp->ffv_dev_valid = FALSE;
- #endif
- 	    STRCPY(vp->ffv_fname, ff_expand_buffer);
- #ifdef UNIX
-diff -Naur vim72.orig/src/move.c vim72/src/move.c
---- vim72.orig/src/move.c	2008-07-12 09:26:47.000000000 -0700
-+++ vim72/src/move.c	2009-09-12 08:38:31.000000000 -0700
-@@ -280,18 +280,20 @@
- 
- 	if (curwin->w_botline <= curbuf->b_ml.ml_line_count)
- 	{
--	    if (curwin->w_cursor.lnum < curwin->w_botline
--		    && ((long)curwin->w_cursor.lnum
-+	    if (curwin->w_cursor.lnum < curwin->w_botline)
-+	    {
-+	      if (((long)curwin->w_cursor.lnum
- 					     >= (long)curwin->w_botline - p_so
- #ifdef FEAT_FOLDING
- 			|| hasAnyFolding(curwin)
- #endif
- 			))
--	    {
-+	      {
- 		lineoff_T	loff;
- 
--		/* Cursor is above botline, check if there are 'scrolloff'
--		 * window lines below the cursor.  If not, need to scroll. */
-+		/* Cursor is (a few lines) above botline, check if there are
-+		 * 'scrolloff' window lines below the cursor.  If not, need to
-+		 * scroll. */
- 		n = curwin->w_empty_rows;
- 		loff.lnum = curwin->w_cursor.lnum;
- #ifdef FEAT_FOLDING
-@@ -317,6 +319,10 @@
- 		if (n >= p_so)
- 		    /* sufficient context, no need to scroll */
- 		    check_botline = FALSE;
-+	      }
-+	      else
-+		  /* sufficient context, no need to scroll */
-+		  check_botline = FALSE;
- 	    }
- 	    if (check_botline)
- 	    {
-@@ -509,6 +515,9 @@
-     /* Approximate the value of w_botline */
-     wp->w_botline += lnum - wp->w_topline;
-     wp->w_topline = lnum;
-+#ifdef FEAT_AUTOCMD
-+    wp->w_topline_was_set = TRUE;
-+#endif
- #ifdef FEAT_DIFF
-     wp->w_topfill = 0;
- #endif
-@@ -1229,11 +1238,10 @@
- /*
-  * Scroll the current window down by "line_count" logical lines.  "CTRL-Y"
-  */
--/*ARGSUSED*/
-     void
- scrolldown(line_count, byfold)
-     long	line_count;
--    int		byfold;		/* TRUE: count a closed fold as one line */
-+    int		byfold UNUSED;	/* TRUE: count a closed fold as one line */
- {
-     long	done = 0;	/* total # of physical lines done */
-     int		wrow;
-@@ -1340,11 +1348,10 @@
- /*
-  * Scroll the current window up by "line_count" logical lines.  "CTRL-E"
-  */
--/*ARGSUSED*/
-     void
- scrollup(line_count, byfold)
-     long	line_count;
--    int		byfold;		/* TRUE: count a closed fold as one line */
-+    int		byfold UNUSED;	/* TRUE: count a closed fold as one line */
- {
- #if defined(FEAT_FOLDING) || defined(FEAT_DIFF)
-     linenr_T	lnum;
-diff -Naur vim72.orig/src/nbdebug.c vim72/src/nbdebug.c
---- vim72.orig/src/nbdebug.c	2008-06-22 08:38:58.000000000 -0700
-+++ vim72/src/nbdebug.c	2009-09-12 08:35:50.000000000 -0700
-@@ -33,7 +33,6 @@
- u_int		 nb_dlevel = 0;		/* nb_debug verbosity level */
- 
- void		 nbdb(char *, ...);
--void		 nbtrace(char *, ...);
- 
- static int	 lookup(char *);
- #ifdef USE_NB_ERRORHANDLER
-@@ -100,25 +99,6 @@
- }    /* end nbdebug_log_init */
- 
- 
--
--
--void
--nbtrace(
--	char		*fmt,
--	...)
--{
--	va_list		 ap;
--
--	if (nb_debug!= NULL && (nb_dlevel & (NB_TRACE | NB_TRACE_VERBOSE))) {
--		va_start(ap, fmt);
--		vfprintf(nb_debug, fmt, ap);
--		va_end(ap);
--		fflush(nb_debug);
--	}
--
--}    /* end nbtrace */
--
--
- void
- nbdbg(
- 	char		*fmt,
-@@ -136,23 +116,6 @@
- }    /* end nbdbg */
- 
- 
--void
--nbprt(
--	char		*fmt,
--	...)
--{
--	va_list		 ap;
--
--	if (nb_debug != NULL && nb_dlevel & NB_PRINT) {
--		va_start(ap, fmt);
--		vfprintf(nb_debug, fmt, ap);
--		va_end(ap);
--		fflush(nb_debug);
--	}
--
--}    /* end nbprt */
--
--
- static int
- lookup(
- 	char		*file)
-diff -Naur vim72.orig/src/nbdebug.h vim72/src/nbdebug.h
---- vim72.orig/src/nbdebug.h	2008-06-22 07:31:50.000000000 -0700
-+++ vim72/src/nbdebug.h	2009-09-12 08:35:50.000000000 -0700
-@@ -43,8 +43,6 @@
- 
- 
- void		 nbdbg(char *, ...);
--void		 nbprt(char *, ...);
--void		 nbtrace(char *, ...);
- 
- void nbdebug_wait __ARGS((u_int wait_flags, char *wait_var, u_int wait_secs));
- void nbdebug_log_init __ARGS((char *log_var, char *level_var));
-@@ -70,19 +68,5 @@
- {
- }
- 
--void
--nbprt(
--	char		*fmt,
--	...)
--{
--}
--
--void
--nbtrace(
--	char		*fmt,
--	...)
--{
--}
--
- #endif /* NBDEBUG */
- #endif /* NBDEBUG_H */
-diff -Naur vim72.orig/src/netbeans.c vim72/src/netbeans.c
---- vim72.orig/src/netbeans.c	2008-07-13 09:19:54.000000000 -0700
-+++ vim72/src/netbeans.c	2009-09-12 08:42:14.000000000 -0700
-@@ -32,6 +32,7 @@
- /* WinSock API is separated from C API, thus we can't use read(), write(),
-  * errno... */
- # define sock_errno WSAGetLastError()
-+# undef ECONNREFUSED
- # define ECONNREFUSED WSAECONNREFUSED
- # ifdef EINTR
- #  undef EINTR
-@@ -700,7 +701,6 @@
- /*
-  * Read and process a command from netbeans.
-  */
--/*ARGSUSED*/
- #if defined(FEAT_GUI_W32) || defined(PROTO)
- /* Use this one when generating prototypes, the others are static. */
-     void
-@@ -708,12 +708,15 @@
- #else
- # ifdef FEAT_GUI_MOTIF
-     static void
--messageFromNetbeans(XtPointer clientData, int *unused1, XtInputId *unused2)
-+messageFromNetbeans(XtPointer clientData UNUSED,
-+		    int *unused1 UNUSED,
-+		    XtInputId *unused2 UNUSED)
- # endif
- # ifdef FEAT_GUI_GTK
-     static void
--messageFromNetbeans(gpointer clientData, gint unused1,
--						    GdkInputCondition unused2)
-+messageFromNetbeans(gpointer clientData UNUSED,
-+		    gint unused1 UNUSED,
-+		    GdkInputCondition unused2 UNUSED)
- # endif
- #endif
- {
-@@ -1043,7 +1046,7 @@
- 	nbdebug(("EVT: %s", buf));
- /*	nb_send(buf, "netbeans_end");    avoid "write failed" messages */
- 	if (sd >= 0)
--	    sock_write(sd, buf, (int)STRLEN(buf));  /* ignore errors */
-+	    ignored = sock_write(sd, buf, (int)STRLEN(buf));
-     }
- }
- 
-@@ -1493,7 +1496,8 @@
- 		    return FAIL;
- 		}
- 		first = *pos;
--		nbdebug(("    FIRST POS: line %d, col %d\n", first.lnum, first.col));
-+		nbdebug(("    FIRST POS: line %d, col %d\n",
-+						      first.lnum, first.col));
- 		pos = off2pos(buf->bufp, off+count-1);
- 		if (!pos)
- 		{
-@@ -1504,7 +1508,8 @@
- 		    return FAIL;
- 		}
- 		last = *pos;
--		nbdebug(("    LAST POS: line %d, col %d\n", last.lnum, last.col));
-+		nbdebug(("    LAST POS: line %d, col %d\n",
-+							last.lnum, last.col));
- 		del_from_lnum = first.lnum;
- 		del_to_lnum = last.lnum;
- 		doupdate = 1;
-@@ -1515,7 +1520,8 @@
- 		next = off2pos(buf->bufp, off + count);
- 
- 		/* Remove part of the first line. */
--		if (first.col != 0 || (next != NULL && first.lnum == next->lnum))
-+		if (first.col != 0
-+				|| (next != NULL && first.lnum == next->lnum))
- 		{
- 		    if (first.lnum != last.lnum
- 			    || (next != NULL && first.lnum != next->lnum))
-@@ -1578,14 +1584,18 @@
- 			int id = buf_findsign_id(buf->bufp, (linenr_T)i);
- 			if (id > 0)
- 			{
--			    nbdebug(("    Deleting sign %d on line %d\n", id, i));
-+			    nbdebug(("    Deleting sign %d on line %d\n",
-+								      id, i));
- 			    buf_delsign(buf->bufp, id);
- 			}
- 			else
-+			{
- 			    nbdebug(("    No sign on line %d\n", i));
-+			}
- 		    }
- 
--		    nbdebug(("    Deleting lines %d through %d\n", del_from_lnum, del_to_lnum));
-+		    nbdebug(("    Deleting lines %d through %d\n",
-+						 del_from_lnum, del_to_lnum));
- 		    curwin->w_cursor.lnum = del_from_lnum;
- 		    curwin->w_cursor.col = 0;
- 		    del_lines(del_to_lnum - del_from_lnum + 1, FALSE);
-@@ -1921,7 +1931,7 @@
- 	    vim_free(path);
- 	    if (bufp == NULL)
- 	    {
--	    	nbdebug(("    File %s not found in setBufferNumber\n", args));
-+		nbdebug(("    File %s not found in setBufferNumber\n", args));
- 		EMSG2("E642: File %s not found in setBufferNumber", args);
- 		return FAIL;
- 	    }
-@@ -2141,7 +2151,9 @@
- #endif
- 	    }
- 	    else
-+	    {
- 		nbdebug(("    BAD POSITION in setDot: %s\n", s));
-+	    }
- 
- 	    /* gui_update_cursor(TRUE, FALSE); */
- 	    /* update_curbuf(NOT_VALID); */
-@@ -2277,9 +2289,6 @@
- 	    int serNum;
- 	    int localTypeNum;
- 	    int typeNum;
--# ifdef NBDEBUG
--	    int len;
--# endif
- 	    pos_T *pos;
- 
- 	    if (buf == NULL || buf->bufp == NULL)
-@@ -2303,13 +2312,10 @@
- 	    pos = get_off_or_lnum(buf->bufp, &args);
- 
- 	    cp = (char *)args;
--# ifdef NBDEBUG
--	    len =
--# endif
--		strtol(cp, &cp, 10);
-+	    ignored = (int)strtol(cp, &cp, 10);
- 	    args = (char_u *)cp;
- # ifdef NBDEBUG
--	    if (len != -1)
-+	    if (ignored != -1)
- 	    {
- 		nbdebug(("    partial line annotation -- Not Yet Implemented!\n"));
- 	    }
-@@ -2321,7 +2327,7 @@
- 	    }
- 	    if (pos)
- 	    {
--		coloncmd(":sign place %d line=%d name=%d buffer=%d",
-+		coloncmd(":sign place %d line=%ld name=%d buffer=%d",
- 			   serNum, pos->lnum, typeNum, buf->bufp->b_fnum);
- 		if (typeNum == curPCtype)
- 		    coloncmd(":sign jump %d buffer=%d", serNum,
-@@ -2425,7 +2431,7 @@
- 				GUARDED) == 0)
- 			    {
- 				coloncmd(
--				    ":sign place %d line=%d name=%d buffer=%d",
-+				    ":sign place %d line=%ld name=%d buffer=%d",
- 				     guardId++, lnum, GUARDED,
- 				     buf->bufp->b_fnum);
- 			    }
-@@ -2582,7 +2588,7 @@
-     va_list ap;
- 
-     va_start(ap, cmd);
--    vsprintf(buf, cmd, ap);
-+    vim_vsnprintf(buf, sizeof(buf), cmd, ap, NULL);
-     va_end(ap);
- 
-     nbdebug(("    COLONCMD %s\n", buf));
-@@ -2747,11 +2753,10 @@
-  * cursor and sends it to the debugger for evaluation.  The debugger should
-  * respond with a showBalloon command when there is a useful result.
-  */
--/*ARGSUSED*/
-     void
- netbeans_beval_cb(
- 	BalloonEval	*beval,
--	int		 state)
-+	int		 state UNUSED)
- {
-     win_T	*wp;
-     char_u	*text;
-@@ -2924,44 +2929,26 @@
- }
- 
- /*
-- * Tell netbeans a file was closed.
-+ * Tell netbeans that a file was deleted or wiped out.
-  */
-     void
--netbeans_file_closed(buf_T *bufp)
-+netbeans_file_killed(buf_T *bufp)
- {
-     int		bufno = nb_getbufno(bufp);
-     nbbuf_T	*nbbuf = nb_get_buf(bufno);
-     char	buffer[2*MAXPATHL];
- 
--    if (!haveConnection || bufno < 0)
--	return;
--
--    if (!netbeansCloseFile)
--    {
--	nbdebug(("Ignoring file_closed for %s. File was closed from IDE\n",
--		    bufp->b_ffname));
-+    if (!haveConnection || bufno == -1)
- 	return;
--    }
--
--    nbdebug(("netbeans_file_closed:\n"));
--    nbdebug(("    Closing bufno: %d", bufno));
--    if (curbuf != NULL && curbuf != bufp)
--    {
--	nbdebug(("    Curbuf bufno:  %d\n", nb_getbufno(curbuf)));
--    }
--    else if (curbuf == bufp)
--    {
--	nbdebug(("    curbuf == bufp\n"));
--    }
- 
--    if (bufno <= 0)
--	return;
-+    nbdebug(("netbeans_file_killed:\n"));
-+    nbdebug(("    Killing bufno: %d", bufno));
- 
-     sprintf(buffer, "%d:killed=%d\n", bufno, r_cmdno);
- 
-     nbdebug(("EVT: %s", buffer));
- 
--    nb_send(buffer, "netbeans_file_closed");
-+    nb_send(buffer, "netbeans_file_killed");
- 
-     if (nbbuf != NULL)
- 	nbbuf->bufp = NULL;
-@@ -3082,9 +3069,8 @@
- /*
-  * Send netbeans an unmodufied command.
-  */
--/*ARGSUSED*/
-     void
--netbeans_unmodified(buf_T *bufp)
-+netbeans_unmodified(buf_T *bufp UNUSED)
- {
- #if 0
-     char_u	buf[128];
-@@ -3391,13 +3377,12 @@
-  * buf->signmapused[]	maps buffer-local annotation IDs to an index in
-  *			globalsignmap[].
-  */
--/*ARGSUSED*/
-     static void
- addsigntype(
-     nbbuf_T	*buf,
-     int		typeNum,
-     char_u	*typeName,
--    char_u	*tooltip,
-+    char_u	*tooltip UNUSED,
-     char_u	*glyphFile,
-     int		use_fg,
-     int		fg,
-@@ -3531,7 +3516,8 @@
- 	    eol_size = 1;
- 	for (lnum = 1; lnum <= bufp->b_ml.ml_line_count; ++lnum)
- 	{
--	    char_count += (long)STRLEN(ml_get(lnum)) + eol_size;
-+	    char_count += (long)STRLEN(ml_get_buf(bufp, lnum, FALSE))
-+								   + eol_size;
- 	    /* Check for a CTRL-C every 100000 characters */
- 	    if (char_count > last_check)
- 	    {
-diff -Naur vim72.orig/src/normal.c vim72/src/normal.c
---- vim72.orig/src/normal.c	2008-07-31 13:03:08.000000000 -0700
-+++ vim72/src/normal.c	2009-09-12 08:38:51.000000000 -0700
-@@ -183,6 +183,8 @@
- static void	nv_cursorhold __ARGS((cmdarg_T *cap));
- #endif
- 
-+static char *e_noident = N_("E349: No identifier under cursor");
-+
- /*
-  * Function to be called for a Normal or Visual mode command.
-  * The argument is a cmdarg_T.
-@@ -491,14 +493,14 @@
-     int		i;
- 
-     /* Fill the index table with a one to one relation. */
--    for (i = 0; i < NV_CMDS_SIZE; ++i)
-+    for (i = 0; i < (int)NV_CMDS_SIZE; ++i)
- 	nv_cmd_idx[i] = i;
- 
-     /* Sort the commands by the command character.  */
-     qsort((void *)&nv_cmd_idx, (size_t)NV_CMDS_SIZE, sizeof(short), nv_compare);
- 
-     /* Find the first entry that can't be indexed by the command character. */
--    for (i = 0; i < NV_CMDS_SIZE; ++i)
-+    for (i = 0; i < (int)NV_CMDS_SIZE; ++i)
- 	if (i != nv_cmds[nv_cmd_idx[i]].cmd_char)
- 	    break;
-     nv_max_linear = i - 1;
-@@ -559,11 +561,10 @@
- /*
-  * Execute a command in Normal mode.
-  */
--/*ARGSUSED*/
-     void
- normal_cmd(oap, toplevel)
-     oparg_T	*oap;
--    int		toplevel;		/* TRUE when called from main() */
-+    int		toplevel UNUSED;	/* TRUE when called from main() */
- {
-     cmdarg_T	ca;			/* command arguments */
-     int		c;
-@@ -578,6 +579,9 @@
-     static int	old_mapped_len = 0;
- #endif
-     int		idx;
-+#ifdef FEAT_EVAL
-+    int		set_prevcount = FALSE;
-+#endif
- 
-     vim_memset(&ca, 0, sizeof(ca));	/* also resets ca.retval */
-     ca.oap = oap;
-@@ -613,7 +617,12 @@
-     /* When not finishing an operator and no register name typed, reset the
-      * count. */
-     if (!finish_op && !oap->regname)
-+    {
- 	ca.opcount = 0;
-+#ifdef FEAT_EVAL
-+	set_prevcount = TRUE;
-+#endif
-+    }
- 
- #ifdef FEAT_AUTOCMD
-     /* Restore counts from before receiving K_CURSORHOLD.  This means after
-@@ -641,10 +650,7 @@
-      * Get the command character from the user.
-      */
-     c = safe_vgetc();
--
--#ifdef FEAT_LANGMAP
-     LANGMAP_ADJUST(c, TRUE);
--#endif
- 
- #ifdef FEAT_VISUAL
-     /*
-@@ -717,7 +723,15 @@
- 	     * command, so that v:count can be used in an expression mapping
- 	     * right after the count. */
- 	    if (toplevel && stuff_empty())
--		set_vcount(ca.count0, ca.count0 == 0 ? 1 : ca.count0);
-+	    {
-+		long count = ca.count0;
-+
-+		/* multiply with ca.opcount the same way as below */
-+		if (ca.opcount != 0)
-+		    count = ca.opcount * (count == 0 ? 1 : count);
-+		set_vcount(count, count == 0 ? 1 : count, set_prevcount);
-+		set_prevcount = FALSE;  /* only set v:prevcount once */
-+	    }
- #endif
- 	    if (ctrl_w)
- 	    {
-@@ -726,9 +740,7 @@
- 	    }
- 	    ++no_zero_mapping;		/* don't map zero here */
- 	    c = plain_vgetc();
--#ifdef FEAT_LANGMAP
- 	    LANGMAP_ADJUST(c, TRUE);
--#endif
- 	    --no_zero_mapping;
- 	    if (ctrl_w)
- 	    {
-@@ -751,9 +763,7 @@
- 	    ++no_mapping;
- 	    ++allow_keys;		/* no mapping for nchar, but keys */
- 	    c = plain_vgetc();		/* get next character */
--#ifdef FEAT_LANGMAP
- 	    LANGMAP_ADJUST(c, TRUE);
--#endif
- 	    --no_mapping;
- 	    --allow_keys;
- #ifdef FEAT_CMDL_INFO
-@@ -804,7 +814,7 @@
-      * Only set v:count when called from main() and not a stuffed command.
-      */
-     if (toplevel && stuff_empty())
--	set_vcount(ca.count0, ca.count1);
-+	set_vcount(ca.count0, ca.count1, set_prevcount);
- #endif
- 
-     /*
-@@ -941,9 +951,7 @@
- 	     * "gr", "g'" and "g`".
- 	     */
- 	    ca.nchar = plain_vgetc();
--#ifdef FEAT_LANGMAP
- 	    LANGMAP_ADJUST(ca.nchar, TRUE);
--#endif
- #ifdef FEAT_CMDL_INFO
- 	    need_flushbuf |= add_to_showcmd(ca.nchar);
- #endif
-@@ -1044,10 +1052,8 @@
- 		}
- #endif
- 
--#ifdef FEAT_LANGMAP
- 		/* adjust chars > 127, except after "tTfFr" commands */
- 		LANGMAP_ADJUST(*cp, !lang);
--#endif
- #ifdef FEAT_RIGHTLEFT
- 		/* adjust Hebrew mapped char */
- 		if (p_hkmap && lang && KeyTyped)
-@@ -1132,7 +1138,8 @@
- 	out_flush();
- #endif
- #ifdef FEAT_AUTOCMD
--    did_cursorhold = FALSE;
-+    if (ca.cmdchar != K_IGNORE)
-+	did_cursorhold = FALSE;
- #endif
- 
-     State = NORMAL;
-@@ -2180,10 +2187,9 @@
- /*
-  * Handle the "g@" operator: call 'operatorfunc'.
-  */
--/*ARGSUSED*/
-     static void
- op_function(oap)
--    oparg_T	*oap;
-+    oparg_T	*oap UNUSED;
- {
- #ifdef FEAT_EVAL
-     char_u	*(argv[1]);
-@@ -3509,7 +3515,7 @@
- 	if (find_type & FIND_STRING)
- 	    EMSG(_("E348: No string under cursor"));
- 	else
--	    EMSG(_("E349: No identifier under cursor"));
-+	    EMSG(_(e_noident));
- 	return 0;
-     }
-     ptr += col;
-@@ -3701,13 +3707,13 @@
- #ifdef FEAT_VISUAL
-     if (VIsual_active && !char_avail())
-     {
--	int		i = lt(VIsual, curwin->w_cursor);
-+	int		cursor_bot = lt(VIsual, curwin->w_cursor);
- 	long		lines;
- 	colnr_T		leftcol, rightcol;
- 	linenr_T	top, bot;
- 
- 	/* Show the size of the Visual area. */
--	if (i)
-+	if (cursor_bot)
- 	{
- 	    top = VIsual.lnum;
- 	    bot = curwin->w_cursor.lnum;
-@@ -3726,14 +3732,23 @@
- 
- 	if (VIsual_mode == Ctrl_V)
- 	{
-+#ifdef FEAT_LINEBREAK
-+	    char_u *saved_sbr = p_sbr;
-+
-+	    /* Make 'sbr' empty for a moment to get the correct size. */
-+	    p_sbr = empty_option;
-+#endif
- 	    getvcols(curwin, &curwin->w_cursor, &VIsual, &leftcol, &rightcol);
-+#ifdef FEAT_LINEBREAK
-+	    p_sbr = saved_sbr;
-+#endif
- 	    sprintf((char *)showcmd_buf, "%ldx%ld", lines,
- 					      (long)(rightcol - leftcol + 1));
- 	}
- 	else if (VIsual_mode == 'V' || VIsual.lnum != curwin->w_cursor.lnum)
- 	    sprintf((char *)showcmd_buf, "%ld", lines);
- 	else
--	    sprintf((char *)showcmd_buf, "%ld", (long)(i
-+	    sprintf((char *)showcmd_buf, "%ld", (long)(cursor_bot
- 		    ? curwin->w_cursor.col - VIsual.col
- 		    : VIsual.col - curwin->w_cursor.col) + (*p_sel != 'e'));
- 	showcmd_buf[SHOWCMD_COLS] = NUL;	/* truncate */
-@@ -4083,10 +4098,9 @@
-  * Command character that doesn't do anything, but unlike nv_ignore() does
-  * start edit().  Used for "startinsert" executed while starting up.
-  */
--/*ARGSUSED */
-     static void
- nv_nop(cap)
--    cmdarg_T	*cap;
-+    cmdarg_T	*cap UNUSED;
- {
- }
- 
-@@ -4611,9 +4625,7 @@
- 	    ++no_mapping;
- 	    ++allow_keys;   /* no mapping for nchar, but allow key codes */
- 	    nchar = plain_vgetc();
--#ifdef FEAT_LANGMAP
- 	    LANGMAP_ADJUST(nchar, TRUE);
--#endif
- 	    --no_mapping;
- 	    --allow_keys;
- #ifdef FEAT_CMDL_INFO
-@@ -4969,9 +4981,7 @@
- 		++no_mapping;
- 		++allow_keys;   /* no mapping for nchar, but allow key codes */
- 		nchar = plain_vgetc();
--#ifdef FEAT_LANGMAP
- 		LANGMAP_ADJUST(nchar, TRUE);
--#endif
- 		--no_mapping;
- 		--allow_keys;
- #ifdef FEAT_CMDL_INFO
-@@ -5228,7 +5238,7 @@
- 	if (cap->oap->op_type != OP_NOP
- 		&& (cap->oap->start.lnum > curbuf->b_ml.ml_line_count
- 		    || cap->oap->start.col >
--					 STRLEN(ml_get(cap->oap->start.lnum))))
-+			       (colnr_T)STRLEN(ml_get(cap->oap->start.lnum))))
- 	    clearopbeep(cap->oap);
-     }
- }
-@@ -5469,6 +5479,20 @@
- 		STRCPY(buf, "he! ");
- 	    else
- 	    {
-+		/* An external command will probably use an argument starting
-+		 * with "-" as an option.  To avoid trouble we skip the "-". */
-+		while (*ptr == '-' && n > 0)
-+		{
-+		    ++ptr;
-+		    --n;
-+		}
-+		if (n == 0)
-+		{
-+		    EMSG(_(e_noident));	 /* found dashes only */
-+		    vim_free(buf);
-+		    return;
-+		}
-+
- 		/* When a count is given, turn it into a range.  Is this
- 		 * really what we want? */
- 		isman = (STRCMP(kp, "man") == 0);
-@@ -5511,37 +5535,59 @@
-     /*
-      * Now grab the chars in the identifier
-      */
--    if (cmdchar == '*')
--	aux_ptr = (char_u *)(p_magic ? "/.*~[^$\\" : "/^$\\");
--    else if (cmdchar == '#')
--	aux_ptr = (char_u *)(p_magic ? "/?.*~[^$\\" : "/?^$\\");
--    else if (cmdchar == 'K' && !kp_help)
--	aux_ptr = (char_u *)" \t\\\"|!";
--    else
--	/* Don't escape spaces and Tabs in a tag with a backslash */
--	aux_ptr = (char_u *)"\\|\"";
--
--    p = buf + STRLEN(buf);
--    while (n-- > 0)
--    {
--	/* put a backslash before \ and some others */
--	if (vim_strchr(aux_ptr, *ptr) != NULL)
--	    *p++ = '\\';
--#ifdef FEAT_MBYTE
--	/* When current byte is a part of multibyte character, copy all bytes
--	 * of that character. */
--	if (has_mbyte)
-+    if (cmdchar == 'K' && !kp_help)
-+    {
-+	/* 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)
- 	{
--	    int i;
--	    int len = (*mb_ptr2len)(ptr) - 1;
--
--	    for (i = 0; i < len && n >= 1; ++i, --n)
--		*p++ = *ptr++;
-+	    vim_free(buf);
-+	    return;
- 	}
-+	buf = (char_u *)vim_realloc(buf, STRLEN(buf) + STRLEN(p) + 1);
-+	if (buf == NULL)
-+	{
-+	    vim_free(buf);
-+	    vim_free(p);
-+	    return;
-+	}
-+	STRCAT(buf, p);
-+	vim_free(p);
-+    }
-+    else
-+    {
-+	if (cmdchar == '*')
-+	    aux_ptr = (char_u *)(p_magic ? "/.*~[^$\\" : "/^$\\");
-+	else if (cmdchar == '#')
-+	    aux_ptr = (char_u *)(p_magic ? "/?.*~[^$\\" : "/?^$\\");
-+	else
-+	    /* Don't escape spaces and Tabs in a tag with a backslash */
-+	    aux_ptr = (char_u *)"\\|\"\n*?[";
-+
-+	p = buf + STRLEN(buf);
-+	while (n-- > 0)
-+	{
-+	    /* put a backslash before \ and some others */
-+	    if (vim_strchr(aux_ptr, *ptr) != NULL)
-+		*p++ = '\\';
-+#ifdef FEAT_MBYTE
-+	    /* When current byte is a part of multibyte character, copy all
-+	     * bytes of that character. */
-+	    if (has_mbyte)
-+	    {
-+		int i;
-+		int len = (*mb_ptr2len)(ptr) - 1;
-+
-+		for (i = 0; i < len && n >= 1; ++i, --n)
-+		    *p++ = *ptr++;
-+	    }
- #endif
--	*p++ = *ptr++;
-+	    *p++ = *ptr++;
-+	}
-+	*p = NUL;
-     }
--    *p = NUL;
- 
-     /*
-      * Execute the command.
-@@ -5767,7 +5813,10 @@
-     for (n = cap->count1; n > 0; --n)
-     {
- 	if ((!PAST_LINE && oneright() == FAIL)
--		|| (PAST_LINE && *ml_get_cursor() == NUL))
-+#ifdef FEAT_VISUAL
-+		|| (PAST_LINE && *ml_get_cursor() == NUL)
-+#endif
-+		)
- 	{
- 	    /*
- 	     *	  <Space> wraps to next line if 'whichwrap' has 's'.
-@@ -6728,6 +6777,8 @@
-     /* Visual mode "r" */
-     if (VIsual_active)
-     {
-+	if (got_int)
-+	    reset_VIsual();
- 	nv_operator(cap);
- 	return;
-     }
-@@ -7784,7 +7835,7 @@
- 	else
- 	    i = curwin->w_leftcol;
- 	/* Go to the middle of the screen line.  When 'number' is on and lines
--	 * are wrapping the middle can be more to the left.*/
-+	 * are wrapping the middle can be more to the left. */
- 	if (cap->nchar == 'm')
- 	    i += (W_WIDTH(curwin) - curwin_col_off()
- 		    + ((curwin->w_p_wrap && i > 0)
-@@ -9192,10 +9243,9 @@
- }
- 
- #ifdef FEAT_SNIFF
--/*ARGSUSED*/
-     static void
- nv_sniff(cap)
--    cmdarg_T	*cap;
-+    cmdarg_T	*cap UNUSED;
- {
-     ProcessSniffRequests();
- }
-@@ -9211,10 +9261,9 @@
- #endif
- 
- #ifdef FEAT_DND
--/*ARGSUSED*/
-     static void
- nv_drop(cap)
--    cmdarg_T	*cap;
-+    cmdarg_T	*cap UNUSED;
- {
-     do_put('~', BACKWARD, 1L, PUT_CURSEND);
- }
-@@ -9226,7 +9275,6 @@
-  * When waiting for a character for 'updatetime' K_CURSORHOLD is put in the
-  * input buffer.  "did_cursorhold" is set to avoid retriggering.
-  */
--/*ARGSUSED*/
-     static void
- nv_cursorhold(cap)
-     cmdarg_T	*cap;
-diff -Naur vim72.orig/src/ops.c vim72/src/ops.c
---- vim72.orig/src/ops.c	2008-06-21 13:08:59.000000000 -0700
-+++ vim72/src/ops.c	2009-09-12 08:40:50.000000000 -0700
-@@ -72,11 +72,11 @@
-  */
- struct block_def
- {
--    int		startspaces;	/* 'extra' cols of first char */
--    int		endspaces;	/* 'extra' cols of first char */
-+    int		startspaces;	/* 'extra' cols before first char */
-+    int		endspaces;	/* 'extra' cols after last char */
-     int		textlen;	/* chars in block */
--    char_u	*textstart;	/* pointer to 1st char in block */
--    colnr_T	textcol;	/* cols of chars (at least part.) in block */
-+    char_u	*textstart;	/* pointer to 1st char (partially) in block */
-+    colnr_T	textcol;	/* index of chars (partially) in block */
-     colnr_T	start_vcol;	/* start col of 1st char wholly inside block */
-     colnr_T	end_vcol;	/* start col of 1st char wholly after block */
- #ifdef FEAT_VISUALEXTRA
-@@ -382,18 +382,16 @@
- {
-     int			left = (oap->op_type == OP_LSHIFT);
-     int			oldstate = State;
--    int			total, split;
--    char_u		*newp, *oldp, *midp, *ptr;
-+    int			total;
-+    char_u		*newp, *oldp;
-     int			oldcol = curwin->w_cursor.col;
-     int			p_sw = (int)curbuf->b_p_sw;
-     int			p_ts = (int)curbuf->b_p_ts;
-     struct block_def	bd;
--    int			internal = 0;
-     int			incr;
--    colnr_T		vcol, col = 0, ws_vcol;
-+    colnr_T		ws_vcol;
-     int			i = 0, j = 0;
-     int			len;
--
- #ifdef FEAT_RIGHTLEFT
-     int			old_p_ri = p_ri;
- 
-@@ -456,67 +454,90 @@
-     }
-     else /* left */
-     {
--	vcol = oap->start_vcol;
--	/* walk vcol past ws to be removed */
--	for (midp = oldp + bd.textcol;
--	      vcol < (oap->start_vcol + total) && vim_iswhite(*midp); )
--	{
--	    incr = lbr_chartabsize_adv(&midp, (colnr_T)vcol);
--	    vcol += incr;
--	}
--	/* internal is the block-internal ws replacing a split TAB */
--	if (vcol > (oap->start_vcol + total))
--	{
--	    /* we have to split the TAB *(midp-1) */
--	    internal = vcol - (oap->start_vcol + total);
--	}
--	/* if 'expandtab' is not set, use TABs */
-+	colnr_T	    destination_col;	/* column to which text in block will
-+					   be shifted */
-+	char_u	    *verbatim_copy_end;	/* end of the part of the line which is
-+					   copied verbatim */
-+	colnr_T	    verbatim_copy_width;/* the (displayed) width of this part
-+					   of line */
-+	unsigned    fill;		/* nr of spaces that replace a TAB */
-+	unsigned    new_line_len;	/* the length of the line after the
-+					   block shift */
-+	size_t	    block_space_width;
-+	size_t	    shift_amount;
-+	char_u	    *non_white = bd.textstart;
-+	colnr_T	    non_white_col;
- 
--	split = bd.startspaces + internal;
--	if (split > 0)
--	{
--	    if (!curbuf->b_p_et)
--	    {
--		for (ptr = oldp, col = 0; ptr < oldp+bd.textcol; )
--		    col += lbr_chartabsize_adv(&ptr, (colnr_T)col);
-+	/*
-+	 * Firstly, let's find the first non-whitespace character that is
-+	 * displayed after the block's start column and the character's column
-+	 * number. Also, let's calculate the width of all the whitespace
-+	 * characters that are displayed in the block and precede the searched
-+	 * non-whitespace character.
-+	 */
- 
--		/* col+1 now equals the start col of the first char of the
--		 * block (may be < oap.start_vcol if we're splitting a TAB) */
--		i = ((col % p_ts) + split) / p_ts; /* number of tabs */
--	    }
--	    if (i)
--		j = ((col % p_ts) + split) % p_ts; /* number of spp */
--	    else
--		j = split;
--	}
-+	/* If "bd.startspaces" is set, "bd.textstart" points to the character,
-+	 * the part of which is displayed at the block's beginning. Let's start
-+	 * searching from the next character. */
-+	if (bd.startspaces)
-+	    mb_ptr_adv(non_white);
- 
--	newp = alloc_check(bd.textcol + i + j + (unsigned)STRLEN(midp) + 1);
--	if (newp == NULL)
--	    return;
--	vim_memset(newp, NUL, (size_t)(bd.textcol + i + j + STRLEN(midp) + 1));
-+	/* The character's column is in "bd.start_vcol".  */
-+	non_white_col = bd.start_vcol;
- 
--	/* copy first part we want to keep */
--	mch_memmove(newp, oldp, (size_t)bd.textcol);
--	/* Now copy any TABS and spp to ensure correct alignment! */
--	while (vim_iswhite(*midp))
-+	while (vim_iswhite(*non_white))
- 	{
--	    if (*midp == TAB)
--		i++;
--	    else /*space */
--		j++;
--	    midp++;
-+	    incr = lbr_chartabsize_adv(&non_white, non_white_col);
-+	    non_white_col += incr;
- 	}
--	/* We might have an extra TAB worth of spp now! */
--	if (j / p_ts && !curbuf->b_p_et)
-+
-+	block_space_width = non_white_col - oap->start_vcol;
-+	/* We will shift by "total" or "block_space_width", whichever is less.
-+	 */
-+	shift_amount = (block_space_width < (size_t)total
-+					 ? block_space_width : (size_t)total);
-+
-+	/* The column to which we will shift the text.  */
-+	destination_col = (colnr_T)(non_white_col - shift_amount);
-+
-+	/* Now let's find out how much of the beginning of the line we can
-+	 * reuse without modification.  */
-+	verbatim_copy_end = bd.textstart;
-+	verbatim_copy_width = bd.start_vcol;
-+
-+	/* If "bd.startspaces" is set, "bd.textstart" points to the character
-+	 * preceding the block. We have to subtract its width to obtain its
-+	 * column number.  */
-+	if (bd.startspaces)
-+	    verbatim_copy_width -= bd.start_char_vcols;
-+	while (verbatim_copy_width < destination_col)
- 	{
--	    i++;
--	    j -= p_ts;
-+	    incr = lbr_chartabsize(verbatim_copy_end, verbatim_copy_width);
-+	    if (verbatim_copy_width + incr > destination_col)
-+		break;
-+	    verbatim_copy_width += incr;
-+	    mb_ptr_adv(verbatim_copy_end);
- 	}
--	copy_chars(newp + bd.textcol, (size_t)i, TAB);
--	copy_spaces(newp + bd.textcol + i, (size_t)j);
- 
--	/* the end */
--	STRMOVE(newp + STRLEN(newp), midp);
-+	/* If "destination_col" is different from the width of the initial
-+	 * part of the line that will be copied, it means we encountered a tab
-+	 * character, which we will have to partly replace with spaces.  */
-+	fill = destination_col - verbatim_copy_width;
-+
-+	/* The replacement line will consist of:
-+	 * - the beginning of the original line up to "verbatim_copy_end",
-+	 * - "fill" number of spaces,
-+	 * - the rest of the line, pointed to by non_white.  */
-+	new_line_len = (unsigned)(verbatim_copy_end - oldp)
-+		       + fill
-+		       + (unsigned)STRLEN(non_white) + 1;
-+
-+	newp = alloc_check(new_line_len);
-+	if (newp == NULL)
-+	    return;
-+	mch_memmove(newp, oldp, (size_t)(verbatim_copy_end - oldp));
-+	copy_spaces(newp + (verbatim_copy_end - oldp), (size_t)fill);
-+	STRMOVE(newp + (verbatim_copy_end - oldp) + fill, non_white);
-     }
-     /* replace the line */
-     ml_replace(curwin->w_cursor.lnum, newp, FALSE);
-@@ -1122,6 +1143,8 @@
-     return OK;
- }
- 
-+static int execreg_lastc = NUL;
-+
- /*
-  * execute a yank register: copy it into the stuff buffer
-  *
-@@ -1134,7 +1157,6 @@
-     int	    addcr;		/* always add '\n' to end of line */
-     int	    silent;		/* set "silent" flag in typeahead buffer */
- {
--    static int	lastc = NUL;
-     long	i;
-     char_u	*p;
-     int		retval = OK;
-@@ -1142,12 +1164,12 @@
- 
-     if (regname == '@')			/* repeat previous one */
-     {
--	if (lastc == NUL)
-+	if (execreg_lastc == NUL)
- 	{
- 	    EMSG(_("E748: No previously used register"));
- 	    return FAIL;
- 	}
--	regname = lastc;
-+	regname = execreg_lastc;
-     }
- 					/* check for valid regname */
-     if (regname == '%' || regname == '#' || !valid_yank_reg(regname, FALSE))
-@@ -1155,7 +1177,7 @@
- 	emsg_invreg(regname);
- 	return FAIL;
-     }
--    lastc = regname;
-+    execreg_lastc = regname;
- 
- #ifdef FEAT_CLIPBOARD
-     regname = may_get_selection(regname);
-@@ -2209,12 +2231,15 @@
-     {
- 	for (; pos.lnum <= oap->end.lnum; ++pos.lnum)
- 	{
-+	    int one_change;
-+
- 	    block_prep(oap, &bd, pos.lnum, FALSE);
- 	    pos.col = bd.textcol;
--	    did_change = swapchars(oap->op_type, &pos, bd.textlen);
-+	    one_change = swapchars(oap->op_type, &pos, bd.textlen);
-+	    did_change |= one_change;
- 
- # ifdef FEAT_NETBEANS_INTG
--	    if (usingNetbeans && did_change)
-+	    if (usingNetbeans && one_change)
- 	    {
- 		char_u *ptr = ml_get_buf(curbuf, pos.lnum, FALSE);
- 
-@@ -4848,7 +4873,8 @@
-  * - textlen includes the first/last char to be (partly) deleted
-  * - start/endspaces is the number of columns that are taken by the
-  *   first/last deleted char minus the number of columns that have to be
-- *   deleted.  for yank and tilde:
-+ *   deleted.
-+ * for yank and tilde:
-  * - textlen includes the first/last char to be wholly yanked
-  * - start/endspaces is the number of columns of the first/last yanked char
-  *   that are to be yanked.
-@@ -5312,11 +5338,14 @@
- 
-     /* We only get here (hopefully) if line[0] == '"' */
-     str = virp->vir_line + 1;
-+
-+    /* If the line starts with "" this is the y_previous register. */
-     if (*str == '"')
-     {
- 	set_prev = TRUE;
- 	str++;
-     }
-+
-     if (!ASCII_ISALNUM(*str) && *str != '-')
-     {
- 	if (viminfo_error("E577: ", _("Illegal register name"), virp->vir_line))
-@@ -5326,6 +5355,14 @@
-     get_yank_register(*str++, FALSE);
-     if (!force && y_current->y_array != NULL)
- 	do_it = FALSE;
-+
-+    if (*str == '@')
-+    {
-+	/* "x@: register x used for @@ */
-+	if (force || execreg_lastc == NUL)
-+	    execreg_lastc = str[-1];
-+    }
-+
-     size = 0;
-     limit = 100;	/* Optimized for registers containing <= 100 lines */
-     if (do_it)
-@@ -5335,7 +5372,7 @@
- 	vim_free(y_current->y_array);
- 	array = y_current->y_array =
- 		       (char_u **)alloc((unsigned)(limit * sizeof(char_u *)));
--	str = skipwhite(str);
-+	str = skipwhite(skiptowhite(str));
- 	if (STRNCMP(str, "CHAR", 4) == 0)
- 	    y_current->y_type = MCHAR;
- #ifdef FEAT_VISUAL
-@@ -5418,6 +5455,7 @@
-     max_kbyte = get_viminfo_parameter('s');
-     if (max_kbyte == 0)
- 	return;
-+
-     for (i = 0; i < NUM_REGISTERS; i++)
-     {
- 	if (y_regs[i].y_array == NULL)
-@@ -5472,7 +5510,10 @@
- 	if (y_previous == &y_regs[i])
- 	    fprintf(fp, "\"");
- 	c = get_register_name(i);
--	fprintf(fp, "\"%c\t%s\t%d\n", c, type,
-+	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
-@@ -5550,6 +5591,29 @@
-     if (dpy != NULL && str != NULL && motion_type >= 0
- 					       && len < 1024*1024 && len > 0)
-     {
-+#ifdef FEAT_MBYTE
-+	/* The CUT_BUFFER0 is supposed to always contain latin1.  Convert from
-+	 * 'enc' when it is a multi-byte encoding.  When 'enc' is an 8-bit
-+	 * encoding conversion usually doesn't work, so keep the text as-is.
-+	 */
-+	if (has_mbyte)
-+	{
-+	    char_u	*conv_str = str;
-+	    vimconv_T	vc;
-+
-+	    vc.vc_type = CONV_NONE;
-+	    if (convert_setup(&vc, p_enc, (char_u *)"latin1") == OK)
-+	    {
-+		conv_str = string_convert(&vc, str, (int*)&len);
-+		if (conv_str != NULL)
-+		{
-+		    vim_free(str);
-+		    str = conv_str;
-+		}
-+		convert_setup(&vc, NULL, NULL);
-+	    }
-+	}
-+#endif
- 	XStoreBuffer(dpy, (char *)str, (int)len, 0);
- 	XFlush(dpy);
-     }
-@@ -6258,11 +6322,20 @@
- 
- 	    if (VIsual_mode == Ctrl_V)
- 	    {
-+#ifdef FEAT_LINEBREAK
-+		char_u * saved_sbr = p_sbr;
-+
-+		/* Make 'sbr' empty for a moment to get the correct size. */
-+		p_sbr = empty_option;
-+#endif
- 		oparg.is_VIsual = 1;
- 		oparg.block_mode = TRUE;
- 		oparg.op_type = OP_NOP;
- 		getvcols(curwin, &min_pos, &max_pos,
- 					  &oparg.start_vcol, &oparg.end_vcol);
-+#ifdef FEAT_LINEBREAK
-+		p_sbr = saved_sbr;
-+#endif
- 		if (curwin->w_curswant == MAXCOL)
- 		    oparg.end_vcol = MAXCOL;
- 		/* Swap the start, end vcol if needed */
-@@ -6366,7 +6439,7 @@
- 	    {
- 		getvcols(curwin, &min_pos, &max_pos, &min_pos.col,
- 								&max_pos.col);
--		sprintf((char *)buf1, _("%ld Cols; "),
-+		vim_snprintf((char *)buf1, sizeof(buf1), _("%ld Cols; "),
- 			(long)(oparg.end_vcol - oparg.start_vcol + 1));
- 	    }
- 	    else
-@@ -6374,13 +6447,15 @@
- 
- 	    if (char_count_cursor == byte_count_cursor
- 						  && char_count == byte_count)
--		sprintf((char *)IObuff, _("Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Bytes"),
-+		vim_snprintf((char *)IObuff, IOSIZE,
-+			_("Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Bytes"),
- 			buf1, line_count_selected,
- 			(long)curbuf->b_ml.ml_line_count,
- 			word_count_cursor, word_count,
- 			byte_count_cursor, byte_count);
- 	    else
--		sprintf((char *)IObuff, _("Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld Bytes"),
-+		vim_snprintf((char *)IObuff, IOSIZE,
-+			_("Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld Bytes"),
- 			buf1, line_count_selected,
- 			(long)curbuf->b_ml.ml_line_count,
- 			word_count_cursor, word_count,
-@@ -6392,20 +6467,22 @@
- 	{
- 	    p = ml_get_curline();
- 	    validate_virtcol();
--	    col_print(buf1, (int)curwin->w_cursor.col + 1,
-+	    col_print(buf1, sizeof(buf1), (int)curwin->w_cursor.col + 1,
- 		    (int)curwin->w_virtcol + 1);
--	    col_print(buf2, (int)STRLEN(p), linetabsize(p));
-+	    col_print(buf2, sizeof(buf2), (int)STRLEN(p), linetabsize(p));
- 
- 	    if (char_count_cursor == byte_count_cursor
- 		    && char_count == byte_count)
--		sprintf((char *)IObuff, _("Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"),
-+		vim_snprintf((char *)IObuff, IOSIZE,
-+		    _("Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"),
- 		    (char *)buf1, (char *)buf2,
- 		    (long)curwin->w_cursor.lnum,
- 		    (long)curbuf->b_ml.ml_line_count,
- 		    word_count_cursor, word_count,
- 		    byte_count_cursor, byte_count);
- 	    else
--		sprintf((char *)IObuff, _("Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of %ld"),
-+		vim_snprintf((char *)IObuff, IOSIZE,
-+		    _("Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of %ld"),
- 		    (char *)buf1, (char *)buf2,
- 		    (long)curwin->w_cursor.lnum,
- 		    (long)curbuf->b_ml.ml_line_count,
-diff -Naur vim72.orig/src/option.c vim72/src/option.c
---- vim72.orig/src/option.c	2008-07-18 06:05:33.000000000 -0700
-+++ vim72/src/option.c	2009-09-12 08:42:20.000000000 -0700
-@@ -387,6 +387,9 @@
-     char_u	*def_val[2];	/* default values for variable (vi and vim) */
- #ifdef FEAT_EVAL
-     scid_T	scriptID;	/* script in which the option was last set */
-+# define SCRIPTID_INIT , 0
-+#else
-+# define SCRIPTID_INIT
- #endif
- };
- 
-@@ -400,8 +403,9 @@
- #define P_NUM		0x02	/* the option is numeric */
- #define P_STRING	0x04	/* the option is a string */
- #define P_ALLOCED	0x08	/* the string option is in allocated memory,
--				    must use vim_free() when assigning new
--				    value. Not set if default is the same. */
-+				   must use free_string_option() when
-+				   assigning new value. Not set if default is
-+				   the same. */
- #define P_EXPAND	0x10	/* environment expansion.  NOTE: P_EXPAND can
- 				   never be used for local or hidden options! */
- #define P_NODEFAULT	0x40	/* don't set to default value */
-@@ -477,7 +481,7 @@
- #else
- 			    (char_u *)224L,
- #endif
--					    (char_u *)0L}},
-+					    (char_u *)0L} SCRIPTID_INIT},
-     {"antialias",   "anti", P_BOOL|P_VI_DEF|P_VIM|P_RCLR,
- #if defined(FEAT_GUI) && defined(MACOS_X)
- 			    (char_u *)&p_antialias, PV_NONE,
-@@ -486,35 +490,35 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)FALSE, (char_u *)FALSE}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"arabic",	    "arab", P_BOOL|P_VI_DEF|P_VIM,
- #ifdef FEAT_ARABIC
- 			    (char_u *)VAR_WIN, PV_ARAB,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"arabicshape", "arshape", P_BOOL|P_VI_DEF|P_VIM|P_RCLR,
- #ifdef FEAT_ARABIC
- 			    (char_u *)&p_arshape, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)TRUE, (char_u *)0L}},
-+			    {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
-     {"allowrevins", "ari",  P_BOOL|P_VI_DEF|P_VIM,
- #ifdef FEAT_RIGHTLEFT
- 			    (char_u *)&p_ari, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"altkeymap",   "akm",  P_BOOL|P_VI_DEF,
- #ifdef FEAT_FKMAP
- 			    (char_u *)&p_altkeymap, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"ambiwidth",  "ambw",  P_STRING|P_VI_DEF|P_RCLR,
- #if defined(FEAT_MBYTE)
- 			    (char_u *)&p_ambw, PV_NONE,
-@@ -523,27 +527,27 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
- #ifdef FEAT_AUTOCHDIR
-     {"autochdir",  "acd",   P_BOOL|P_VI_DEF,
- 			    (char_u *)&p_acd, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
- #endif
-     {"autoindent",  "ai",   P_BOOL|P_VI_DEF,
- 			    (char_u *)&p_ai, PV_AI,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"autoprint",   "ap",   P_BOOL|P_VI_DEF,
- 			    (char_u *)NULL, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"autoread",    "ar",   P_BOOL|P_VI_DEF,
- 			    (char_u *)&p_ar, PV_AR,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"autowrite",   "aw",   P_BOOL|P_VI_DEF,
- 			    (char_u *)&p_aw, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"autowriteall","awa",  P_BOOL|P_VI_DEF,
- 			    (char_u *)&p_awa, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"background",  "bg",   P_STRING|P_VI_DEF|P_RCLR,
- 			    (char_u *)&p_bg, PV_NONE,
- 			    {
-@@ -552,13 +556,13 @@
- #else
- 			    (char_u *)"light",
- #endif
--					    (char_u *)0L}},
-+					    (char_u *)0L} SCRIPTID_INIT},
-     {"backspace",   "bs",   P_STRING|P_VI_DEF|P_VIM|P_COMMA|P_NODUP,
- 			    (char_u *)&p_bs, PV_NONE,
--			    {(char_u *)"", (char_u *)0L}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-     {"backup",	    "bk",   P_BOOL|P_VI_DEF|P_VIM,
- 			    (char_u *)&p_bk, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(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
-@@ -566,10 +570,10 @@
- #else
- 			    {(char_u *)"auto", (char_u *)"auto"}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"backupdir",   "bdir", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP|P_SECURE,
- 			    (char_u *)&p_bdir, PV_NONE,
--			    {(char_u *)DFLT_BDIR, (char_u *)0L}},
-+			    {(char_u *)DFLT_BDIR, (char_u *)0L} SCRIPTID_INIT},
-     {"backupext",   "bex",  P_STRING|P_VI_DEF|P_NFNAME,
- 			    (char_u *)&p_bex, PV_NONE,
- 			    {
-@@ -578,7 +582,7 @@
- #else
- 			    (char_u *)"~",
- #endif
--					    (char_u *)0L}},
-+					    (char_u *)0L} SCRIPTID_INIT},
-     {"backupskip",  "bsk",  P_STRING|P_VI_DEF|P_COMMA,
- #ifdef FEAT_WILDIGN
- 			    (char_u *)&p_bsk, PV_NONE,
-@@ -587,40 +591,40 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
- #ifdef FEAT_BEVAL
-     {"balloondelay","bdlay",P_NUM|P_VI_DEF,
- 			    (char_u *)&p_bdlay, PV_NONE,
--			    {(char_u *)600L, (char_u *)0L}},
-+			    {(char_u *)600L, (char_u *)0L} SCRIPTID_INIT},
-     {"ballooneval", "beval",P_BOOL|P_VI_DEF|P_NO_MKRC,
- 			    (char_u *)&p_beval, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
- # ifdef FEAT_EVAL
-     {"balloonexpr", "bexpr", P_STRING|P_ALLOCED|P_VI_DEF|P_VIM,
- 			    (char_u *)&p_bexpr, PV_BEXPR,
--			    {(char_u *)"", (char_u *)0L}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
- # endif
- #endif
-     {"beautify",    "bf",   P_BOOL|P_VI_DEF,
- 			    (char_u *)NULL, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"binary",	    "bin",  P_BOOL|P_VI_DEF|P_RSTAT,
- 			    (char_u *)&p_bin, PV_BIN,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"bioskey",	    "biosk",P_BOOL|P_VI_DEF,
- #ifdef MSDOS
- 			    (char_u *)&p_biosk, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)TRUE, (char_u *)0L}},
-+			    {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
-     {"bomb",	    NULL,   P_BOOL|P_NO_MKRC|P_VI_DEF|P_RSTAT,
- #ifdef FEAT_MBYTE
- 			    (char_u *)&p_bomb, PV_BOMB,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"breakat",	    "brk",  P_STRING|P_VI_DEF|P_RALL|P_FLAGLIST,
- #ifdef FEAT_LINEBREAK
- 			    (char_u *)&p_breakat, PV_NONE,
-@@ -629,7 +633,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"browsedir",   "bsdir",P_STRING|P_VI_DEF,
- #ifdef FEAT_BROWSE
- 			    (char_u *)&p_bsdir, PV_NONE,
-@@ -638,7 +642,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"bufhidden",   "bh",   P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB,
- #if defined(FEAT_QUICKFIX)
- 			    (char_u *)&p_bh, PV_BH,
-@@ -647,11 +651,11 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"buflisted",   "bl",   P_BOOL|P_VI_DEF|P_NOGLOB,
- 			    (char_u *)&p_bl, PV_BL,
- 			    {(char_u *)1L, (char_u *)0L}
--			    },
-+			    SCRIPTID_INIT},
-     {"buftype",	    "bt",   P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB,
- #if defined(FEAT_QUICKFIX)
- 			    (char_u *)&p_bt, PV_BT,
-@@ -660,7 +664,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"casemap",	    "cmp",   P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
- #ifdef FEAT_MBYTE
- 			    (char_u *)&p_cmp, PV_NONE,
-@@ -669,7 +673,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"cdpath",	    "cd",   P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP,
- #ifdef FEAT_SEARCHPATH
- 			    (char_u *)&p_cdpath, PV_NONE,
-@@ -678,7 +682,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"cedit",	    NULL,   P_STRING,
- #ifdef FEAT_CMDWIN
- 			    (char_u *)&p_cedit, PV_NONE,
-@@ -687,7 +691,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"charconvert",  "ccv", P_STRING|P_VI_DEF|P_SECURE,
- #if defined(FEAT_MBYTE) && defined(FEAT_EVAL)
- 			    (char_u *)&p_ccv, PV_NONE,
-@@ -696,14 +700,14 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"cindent",	    "cin",  P_BOOL|P_VI_DEF|P_VIM,
- #ifdef FEAT_CINDENT
- 			    (char_u *)&p_cin, PV_CIN,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"cinkeys",	    "cink", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP,
- #ifdef FEAT_CINDENT
- 			    (char_u *)&p_cink, PV_CINK,
-@@ -712,14 +716,14 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"cinoptions",  "cino", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP,
- #ifdef FEAT_CINDENT
- 			    (char_u *)&p_cino, PV_CINO,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)"", (char_u *)0L}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-     {"cinwords",    "cinw", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP,
- #if defined(FEAT_SMARTINDENT) || defined(FEAT_CINDENT)
- 			    (char_u *)&p_cinw, PV_CINW,
-@@ -729,7 +733,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"clipboard",   "cb",   P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
- #ifdef FEAT_CLIPBOARD
- 			    (char_u *)&p_cb, PV_NONE,
-@@ -743,20 +747,20 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)"", (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"cmdheight",   "ch",   P_NUM|P_VI_DEF|P_RALL,
- 			    (char_u *)&p_ch, PV_NONE,
--			    {(char_u *)1L, (char_u *)0L}},
-+			    {(char_u *)1L, (char_u *)0L} SCRIPTID_INIT},
-     {"cmdwinheight", "cwh", P_NUM|P_VI_DEF,
- #ifdef FEAT_CMDWIN
- 			    (char_u *)&p_cwh, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)7L, (char_u *)0L}},
-+			    {(char_u *)7L, (char_u *)0L} SCRIPTID_INIT},
-     {"columns",	    "co",   P_NUM|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RCLR,
- 			    (char_u *)&Columns, PV_NONE,
--			    {(char_u *)80L, (char_u *)0L}},
-+			    {(char_u *)80L, (char_u *)0L} SCRIPTID_INIT},
-     {"comments",    "com",  P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP,
- #ifdef FEAT_COMMENTS
- 			    (char_u *)&p_com, PV_COM,
-@@ -766,7 +770,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"commentstring", "cms", P_STRING|P_ALLOCED|P_VI_DEF,
- #ifdef FEAT_FOLDING
- 			    (char_u *)&p_cms, PV_CMS,
-@@ -775,12 +779,12 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
- 			    /* P_PRI_MKRC isn't needed here, optval_default()
- 			     * always returns TRUE for 'compatible' */
-     {"compatible",  "cp",   P_BOOL|P_RALL,
- 			    (char_u *)&p_cp, PV_NONE,
--			    {(char_u *)TRUE, (char_u *)FALSE}},
-+			    {(char_u *)TRUE, (char_u *)FALSE} SCRIPTID_INIT},
-     {"complete",    "cpt",  P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP,
- #ifdef FEAT_INS_EXPAND
- 			    (char_u *)&p_cpt, PV_CPT,
-@@ -789,7 +793,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"completefunc", "cfu", P_STRING|P_ALLOCED|P_VI_DEF|P_SECURE,
- #ifdef FEAT_COMPL_FUNC
- 			    (char_u *)&p_cfu, PV_CFU,
-@@ -798,7 +802,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"completeopt",   "cot",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
- #ifdef FEAT_INS_EXPAND
- 			    (char_u *)&p_cot, PV_NONE,
-@@ -807,34 +811,35 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"confirm",     "cf",   P_BOOL|P_VI_DEF,
- #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
- 			    (char_u *)&p_confirm, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"conskey",	    "consk",P_BOOL|P_VI_DEF,
- #ifdef MSDOS
- 			    (char_u *)&p_consk, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"copyindent",  "ci",   P_BOOL|P_VI_DEF|P_VIM,
- 			    (char_u *)&p_ci, PV_CI,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"cpoptions",   "cpo",  P_STRING|P_VIM|P_RALL|P_FLAGLIST,
- 			    (char_u *)&p_cpo, PV_NONE,
--			    {(char_u *)CPO_VI, (char_u *)CPO_VIM}},
-+			    {(char_u *)CPO_VI, (char_u *)CPO_VIM}
-+			    SCRIPTID_INIT},
-     {"cscopepathcomp", "cspc", P_NUM|P_VI_DEF|P_VIM,
- #ifdef FEAT_CSCOPE
- 			    (char_u *)&p_cspc, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)0L, (char_u *)0L}},
-+			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
-     {"cscopeprg",   "csprg", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
- #ifdef FEAT_CSCOPE
- 			    (char_u *)&p_csprg, PV_NONE,
-@@ -843,7 +848,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"cscopequickfix", "csqf", P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
- #if defined(FEAT_CSCOPE) && defined(FEAT_QUICKFIX)
- 			    (char_u *)&p_csqf, PV_NONE,
-@@ -852,45 +857,45 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"cscopetag",   "cst",  P_BOOL|P_VI_DEF|P_VIM,
- #ifdef FEAT_CSCOPE
- 			    (char_u *)&p_cst, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)0L, (char_u *)0L}},
-+			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
-     {"cscopetagorder", "csto", P_NUM|P_VI_DEF|P_VIM,
- #ifdef FEAT_CSCOPE
- 			    (char_u *)&p_csto, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)0L, (char_u *)0L}},
-+			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
-     {"cscopeverbose", "csverb", P_BOOL|P_VI_DEF|P_VIM,
- #ifdef FEAT_CSCOPE
- 			    (char_u *)&p_csverbose, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)0L, (char_u *)0L}},
-+			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
-     {"cursorcolumn", "cuc", P_BOOL|P_VI_DEF|P_RWIN,
- #ifdef FEAT_SYN_HL
- 			    (char_u *)VAR_WIN, PV_CUC,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"cursorline",   "cul", P_BOOL|P_VI_DEF|P_RWIN,
- #ifdef FEAT_SYN_HL
- 			    (char_u *)VAR_WIN, PV_CUL,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"debug",	    NULL,   P_STRING|P_VI_DEF,
- 			    (char_u *)&p_debug, PV_NONE,
--			    {(char_u *)"", (char_u *)0L}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-     {"define",	    "def",  P_STRING|P_ALLOCED|P_VI_DEF,
- #ifdef FEAT_FIND_ID
- 			    (char_u *)&p_def, PV_DEF,
-@@ -899,28 +904,28 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"delcombine", "deco",  P_BOOL|P_VI_DEF|P_VIM,
- #ifdef FEAT_MBYTE
- 			    (char_u *)&p_deco, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"dictionary",  "dict", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP,
- #ifdef FEAT_INS_EXPAND
- 			    (char_u *)&p_dict, PV_DICT,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)"", (char_u *)0L}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-     {"diff",	    NULL,   P_BOOL|P_VI_DEF|P_RWIN|P_NOGLOB,
- #ifdef FEAT_DIFF
- 			    (char_u *)VAR_WIN, PV_DIFF,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"diffexpr",    "dex",  P_STRING|P_VI_DEF|P_SECURE,
- #if defined(FEAT_DIFF) && defined(FEAT_EVAL)
- 			    (char_u *)&p_dex, PV_NONE,
-@@ -929,7 +934,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"diffopt",	    "dip",  P_STRING|P_ALLOCED|P_VI_DEF|P_RWIN|P_COMMA|P_NODUP,
- #ifdef FEAT_DIFF
- 			    (char_u *)&p_dip, PV_NONE,
-@@ -938,20 +943,20 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)"", (char_u *)NULL}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"digraph",	    "dg",   P_BOOL|P_VI_DEF|P_VIM,
- #ifdef FEAT_DIGRAPHS
- 			    (char_u *)&p_dg, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"directory",   "dir",  P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP|P_SECURE,
- 			    (char_u *)&p_dir, PV_NONE,
--			    {(char_u *)DFLT_DIR, (char_u *)0L}},
-+			    {(char_u *)DFLT_DIR, (char_u *)0L} SCRIPTID_INIT},
-     {"display",	    "dy",   P_STRING|P_VI_DEF|P_COMMA|P_RALL|P_NODUP,
- 			    (char_u *)&p_dy, PV_NONE,
--			    {(char_u *)"", (char_u *)0L}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-     {"eadirection", "ead",  P_STRING|P_VI_DEF,
- #ifdef FEAT_VERTSPLIT
- 			    (char_u *)&p_ead, PV_NONE,
-@@ -960,10 +965,10 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"edcompatible","ed",   P_BOOL|P_VI_DEF,
- 			    (char_u *)&p_ed, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"encoding",    "enc",  P_STRING|P_VI_DEF|P_RCLR,
- #ifdef FEAT_MBYTE
- 			    (char_u *)&p_enc, PV_NONE,
-@@ -972,19 +977,19 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"endofline",   "eol",  P_BOOL|P_NO_MKRC|P_VI_DEF|P_RSTAT,
- 			    (char_u *)&p_eol, PV_EOL,
--			    {(char_u *)TRUE, (char_u *)0L}},
-+			    {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
-     {"equalalways", "ea",   P_BOOL|P_VI_DEF|P_RALL,
- 			    (char_u *)&p_ea, PV_NONE,
--			    {(char_u *)TRUE, (char_u *)0L}},
-+			    {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
-     {"equalprg",    "ep",   P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
- 			    (char_u *)&p_ep, PV_EP,
--			    {(char_u *)"", (char_u *)0L}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-     {"errorbells",  "eb",   P_BOOL|P_VI_DEF,
- 			    (char_u *)&p_eb, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"errorfile",   "ef",   P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
- #ifdef FEAT_QUICKFIX
- 			    (char_u *)&p_ef, PV_NONE,
-@@ -993,32 +998,32 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"errorformat", "efm",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
- #ifdef FEAT_QUICKFIX
- 			    (char_u *)&p_efm, PV_EFM,
--			    {(char_u *)DFLT_EFM, (char_u *)0L},
-+			    {(char_u *)DFLT_EFM, (char_u *)0L}
- #else
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"esckeys",	    "ek",   P_BOOL|P_VIM,
- 			    (char_u *)&p_ek, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)TRUE}},
-+			    {(char_u *)FALSE, (char_u *)TRUE} SCRIPTID_INIT},
-     {"eventignore", "ei",   P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
- #ifdef FEAT_AUTOCMD
- 			    (char_u *)&p_ei, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)"", (char_u *)0L}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-     {"expandtab",   "et",   P_BOOL|P_VI_DEF|P_VIM,
- 			    (char_u *)&p_et, PV_ET,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"exrc",	    "ex",   P_BOOL|P_VI_DEF|P_SECURE,
- 			    (char_u *)&p_exrc, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"fileencoding","fenc", P_STRING|P_ALLOCED|P_VI_DEF|P_RSTAT|P_RBUF|P_NO_MKRC,
- #ifdef FEAT_MBYTE
- 			    (char_u *)&p_fenc, PV_FENC,
-@@ -1027,7 +1032,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"fileencodings","fencs", P_STRING|P_VI_DEF|P_COMMA,
- #ifdef FEAT_MBYTE
- 			    (char_u *)&p_fencs, PV_NONE,
-@@ -1036,13 +1041,14 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"fileformat",  "ff",   P_STRING|P_ALLOCED|P_VI_DEF|P_RSTAT|P_NO_MKRC,
- 			    (char_u *)&p_ff, PV_FF,
--			    {(char_u *)DFLT_FF, (char_u *)0L}},
-+			    {(char_u *)DFLT_FF, (char_u *)0L} SCRIPTID_INIT},
-     {"fileformats", "ffs",  P_STRING|P_VIM|P_COMMA|P_NODUP,
- 			    (char_u *)&p_ffs, PV_NONE,
--			    {(char_u *)DFLT_FFS_VI, (char_u *)DFLT_FFS_VIM}},
-+			    {(char_u *)DFLT_FFS_VI, (char_u *)DFLT_FFS_VIM}
-+			    SCRIPTID_INIT},
-     {"filetype",    "ft",   P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB|P_NFNAME,
- #ifdef FEAT_AUTOCMD
- 			    (char_u *)&p_ft, PV_FT,
-@@ -1051,7 +1057,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"fillchars",   "fcs",  P_STRING|P_VI_DEF|P_RALL|P_COMMA|P_NODUP,
- #if defined(FEAT_WINDOWS) || defined(FEAT_FOLDING)
- 			    (char_u *)&p_fcs, PV_NONE,
-@@ -1060,27 +1066,27 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)"", (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"fkmap",	    "fk",   P_BOOL|P_VI_DEF,
- #ifdef FEAT_FKMAP
- 			    (char_u *)&p_fkmap, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"flash",	    "fl",   P_BOOL|P_VI_DEF,
- 			    (char_u *)NULL, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
- #ifdef FEAT_FOLDING
-     {"foldclose",   "fcl",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP|P_RWIN,
- 			    (char_u *)&p_fcl, PV_NONE,
--			    {(char_u *)"", (char_u *)0L}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-     {"foldcolumn",  "fdc",  P_NUM|P_VI_DEF|P_RWIN,
- 			    (char_u *)VAR_WIN, PV_FDC,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"foldenable",  "fen",  P_BOOL|P_VI_DEF|P_RWIN,
- 			    (char_u *)VAR_WIN, PV_FEN,
--			    {(char_u *)TRUE, (char_u *)0L}},
-+			    {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
-     {"foldexpr",    "fde",  P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|P_RWIN,
- # ifdef FEAT_EVAL
- 			    (char_u *)VAR_WIN, PV_FDE,
-@@ -1089,33 +1095,34 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL, (char_u *)0L}
- # endif
--			    },
-+			    SCRIPTID_INIT},
-     {"foldignore",  "fdi",  P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|P_RWIN,
- 			    (char_u *)VAR_WIN, PV_FDI,
--			    {(char_u *)"#", (char_u *)NULL}},
-+			    {(char_u *)"#", (char_u *)NULL} SCRIPTID_INIT},
-     {"foldlevel",   "fdl",  P_NUM|P_VI_DEF|P_RWIN,
- 			    (char_u *)VAR_WIN, PV_FDL,
--			    {(char_u *)0L, (char_u *)0L}},
-+			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
-     {"foldlevelstart","fdls", P_NUM|P_VI_DEF,
- 			    (char_u *)&p_fdls, PV_NONE,
--			    {(char_u *)-1L, (char_u *)0L}},
-+			    {(char_u *)-1L, (char_u *)0L} SCRIPTID_INIT},
-     {"foldmarker",  "fmr",  P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|
- 						       P_RWIN|P_COMMA|P_NODUP,
- 			    (char_u *)VAR_WIN, PV_FMR,
--			    {(char_u *)"{{{,}}}", (char_u *)NULL}},
-+			    {(char_u *)"{{{,}}}", (char_u *)NULL}
-+			    SCRIPTID_INIT},
-     {"foldmethod",  "fdm",  P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|P_RWIN,
- 			    (char_u *)VAR_WIN, PV_FDM,
--			    {(char_u *)"manual", (char_u *)NULL}},
-+			    {(char_u *)"manual", (char_u *)NULL} SCRIPTID_INIT},
-     {"foldminlines","fml",  P_NUM|P_VI_DEF|P_RWIN,
- 			    (char_u *)VAR_WIN, PV_FML,
--			    {(char_u *)1L, (char_u *)0L}},
-+			    {(char_u *)1L, (char_u *)0L} SCRIPTID_INIT},
-     {"foldnestmax", "fdn",  P_NUM|P_VI_DEF|P_RWIN,
- 			    (char_u *)VAR_WIN, PV_FDN,
--			    {(char_u *)20L, (char_u *)0L}},
-+			    {(char_u *)20L, (char_u *)0L} SCRIPTID_INIT},
-     {"foldopen",    "fdo",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
- 			    (char_u *)&p_fdo, PV_NONE,
- 		 {(char_u *)"block,hor,mark,percent,quickfix,search,tag,undo",
--							       (char_u *)0L}},
-+						 (char_u *)0L} SCRIPTID_INIT},
-     {"foldtext",    "fdt",  P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|P_RWIN,
- # ifdef FEAT_EVAL
- 			    (char_u *)VAR_WIN, PV_FDT,
-@@ -1124,7 +1131,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL, (char_u *)0L}
- # endif
--			    },
-+			    SCRIPTID_INIT},
- #endif
-     {"formatexpr", "fex",   P_STRING|P_ALLOCED|P_VI_DEF|P_VIM,
- #ifdef FEAT_EVAL
-@@ -1134,16 +1141,18 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"formatoptions","fo",  P_STRING|P_ALLOCED|P_VIM|P_FLAGLIST,
- 			    (char_u *)&p_fo, PV_FO,
--			    {(char_u *)DFLT_FO_VI, (char_u *)DFLT_FO_VIM}},
-+			    {(char_u *)DFLT_FO_VI, (char_u *)DFLT_FO_VIM}
-+			    SCRIPTID_INIT},
-     {"formatlistpat","flp", P_STRING|P_ALLOCED|P_VI_DEF,
- 			    (char_u *)&p_flp, PV_FLP,
--			    {(char_u *)"^\\s*\\d\\+[\\]:.)}\\t ]\\s*", (char_u *)0L}},
-+			    {(char_u *)"^\\s*\\d\\+[\\]:.)}\\t ]\\s*",
-+						 (char_u *)0L} SCRIPTID_INIT},
-     {"formatprg",   "fp",   P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
- 			    (char_u *)&p_fp, PV_NONE,
--			    {(char_u *)"", (char_u *)0L}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-     {"fsync",       "fs",   P_BOOL|P_SECURE|P_VI_DEF,
- #ifdef HAVE_FSYNC
- 			    (char_u *)&p_fs, PV_NONE,
-@@ -1152,22 +1161,22 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)FALSE, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"gdefault",    "gd",   P_BOOL|P_VI_DEF|P_VIM,
- 			    (char_u *)&p_gd, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"graphic",	    "gr",   P_BOOL|P_VI_DEF,
- 			    (char_u *)NULL, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"grepformat",  "gfm",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
- #ifdef FEAT_QUICKFIX
- 			    (char_u *)&p_gefm, PV_NONE,
--			    {(char_u *)DFLT_GREPFORMAT, (char_u *)0L},
-+			    {(char_u *)DFLT_GREPFORMAT, (char_u *)0L}
- #else
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"grepprg",	    "gp",   P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
- #ifdef FEAT_QUICKFIX
- 			    (char_u *)&p_gp, PV_GP,
-@@ -1185,15 +1194,15 @@
- 			    (char_u *)"SEARCH/NUMBERS ",
- #   else
- 			    (char_u *)"grep -n ",
--#endif
--#endif
-+#   endif
-+#  endif
- # endif
--			    (char_u *)0L},
-+			    (char_u *)0L}
- #else
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"guicursor",    "gcr",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
- #ifdef CURSOR_SHAPE
- 			    (char_u *)&p_guicursor, PV_NONE,
-@@ -1208,7 +1217,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL, (char_u *)0L}
- #endif
--				    },
-+			    SCRIPTID_INIT},
-     {"guifont",	    "gfn",  P_STRING|P_VI_DEF|P_RCLR|P_COMMA|P_NODUP,
- #ifdef FEAT_GUI
- 			    (char_u *)&p_guifont, PV_NONE,
-@@ -1217,7 +1226,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL, (char_u *)0L}
- #endif
--				    },
-+			    SCRIPTID_INIT},
-     {"guifontset",  "gfs",  P_STRING|P_VI_DEF|P_RCLR|P_COMMA,
- #if defined(FEAT_GUI) && defined(FEAT_XFONTSET)
- 			    (char_u *)&p_guifontset, PV_NONE,
-@@ -1226,7 +1235,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL, (char_u *)0L}
- #endif
--				    },
-+			    SCRIPTID_INIT},
-     {"guifontwide", "gfw",  P_STRING|P_VI_DEF|P_RCLR|P_COMMA|P_NODUP,
- #if defined(FEAT_GUI) && defined(FEAT_MBYTE)
- 			    (char_u *)&p_guifontwide, PV_NONE,
-@@ -1235,14 +1244,14 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL, (char_u *)0L}
- #endif
--				    },
-+			    SCRIPTID_INIT},
-     {"guiheadroom", "ghr",  P_NUM|P_VI_DEF,
- #if defined(FEAT_GUI_GTK) || defined(FEAT_GUI_X11)
- 			    (char_u *)&p_ghr, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)50L, (char_u *)0L}},
-+			    {(char_u *)50L, (char_u *)0L} SCRIPTID_INIT},
-     {"guioptions",  "go",   P_STRING|P_VI_DEF|P_RALL|P_FLAGLIST,
- #if defined(FEAT_GUI)
- 			    (char_u *)&p_go, PV_NONE,
-@@ -1255,14 +1264,14 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL, (char_u *)0L}
- #endif
--				    },
-+			    SCRIPTID_INIT},
-     {"guipty",	    NULL,   P_BOOL|P_VI_DEF,
- #if defined(FEAT_GUI)
- 			    (char_u *)&p_guipty, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)TRUE, (char_u *)0L}},
-+			    {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
-     {"guitablabel",  "gtl", P_STRING|P_VI_DEF|P_RWIN,
- #if defined(FEAT_GUI_TABLINE)
- 			    (char_u *)&p_gtl, PV_NONE,
-@@ -1271,7 +1280,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL, (char_u *)0L}
- #endif
--				    },
-+			    SCRIPTID_INIT},
-     {"guitabtooltip",  "gtt", P_STRING|P_VI_DEF|P_RWIN,
- #if defined(FEAT_GUI_TABLINE)
- 			    (char_u *)&p_gtt, PV_NONE,
-@@ -1280,20 +1289,21 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL, (char_u *)0L}
- #endif
--				    },
-+			    SCRIPTID_INIT},
-     {"hardtabs",    "ht",   P_NUM|P_VI_DEF,
- 			    (char_u *)NULL, PV_NONE,
--			    {(char_u *)0L, (char_u *)0L}},
-+			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
-     {"helpfile",    "hf",   P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
- 			    (char_u *)&p_hf, PV_NONE,
--			    {(char_u *)DFLT_HELPFILE, (char_u *)0L}},
-+			    {(char_u *)DFLT_HELPFILE, (char_u *)0L}
-+			    SCRIPTID_INIT},
-     {"helpheight",  "hh",   P_NUM|P_VI_DEF,
- #ifdef FEAT_WINDOWS
- 			    (char_u *)&p_hh, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)20L, (char_u *)0L}},
-+			    {(char_u *)20L, (char_u *)0L} SCRIPTID_INIT},
-     {"helplang",    "hlg",  P_STRING|P_VI_DEF|P_COMMA,
- #ifdef FEAT_MULTI_LANG
- 			    (char_u *)&p_hlg, PV_NONE,
-@@ -1302,64 +1312,65 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--    },
-+			    SCRIPTID_INIT},
-     {"hidden",	    "hid",  P_BOOL|P_VI_DEF,
- 			    (char_u *)&p_hid, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"highlight",   "hl",   P_STRING|P_VI_DEF|P_RCLR|P_COMMA|P_NODUP,
- 			    (char_u *)&p_hl, PV_NONE,
--			    {(char_u *)HIGHLIGHT_INIT, (char_u *)0L}},
-+			    {(char_u *)HIGHLIGHT_INIT, (char_u *)0L}
-+			    SCRIPTID_INIT},
-     {"history",	    "hi",   P_NUM|P_VIM,
- 			    (char_u *)&p_hi, PV_NONE,
--			    {(char_u *)0L, (char_u *)20L}},
-+			    {(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,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"hkmapp",	    "hkp",  P_BOOL|P_VI_DEF|P_VIM,
- #ifdef FEAT_RIGHTLEFT
- 			    (char_u *)&p_hkmapp, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"hlsearch",    "hls",  P_BOOL|P_VI_DEF|P_VIM|P_RALL,
- 			    (char_u *)&p_hls, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"icon",	    NULL,   P_BOOL|P_VI_DEF,
- #ifdef FEAT_TITLE
- 			    (char_u *)&p_icon, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"iconstring",  NULL,   P_STRING|P_VI_DEF,
- #ifdef FEAT_TITLE
- 			    (char_u *)&p_iconstring, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)"", (char_u *)0L}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-     {"ignorecase",  "ic",   P_BOOL|P_VI_DEF,
- 			    (char_u *)&p_ic, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"imactivatekey","imak",P_STRING|P_VI_DEF,
- #if defined(FEAT_XIM) && defined(FEAT_GUI_GTK)
- 			    (char_u *)&p_imak, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)"", (char_u *)0L}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-     {"imcmdline",   "imc",  P_BOOL|P_VI_DEF,
- #ifdef USE_IM_CONTROL
- 			    (char_u *)&p_imcmdline, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"imdisable",   "imd",  P_BOOL|P_VI_DEF,
- #ifdef USE_IM_CONTROL
- 			    (char_u *)&p_imdisable, PV_NONE,
-@@ -1371,7 +1382,7 @@
- #else
- 			    {(char_u *)FALSE, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"iminsert",    "imi",  P_NUM|P_VI_DEF,
- 			    (char_u *)&p_iminsert, PV_IMI,
- #ifdef B_IMODE_IM
-@@ -1379,7 +1390,7 @@
- #else
- 			    {(char_u *)B_IMODE_NONE, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"imsearch",    "ims",  P_NUM|P_VI_DEF,
- 			    (char_u *)&p_imsearch, PV_IMS,
- #ifdef B_IMODE_IM
-@@ -1387,7 +1398,7 @@
- #else
- 			    {(char_u *)B_IMODE_NONE, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"include",	    "inc",  P_STRING|P_ALLOCED|P_VI_DEF,
- #ifdef FEAT_FIND_ID
- 			    (char_u *)&p_inc, PV_INC,
-@@ -1396,7 +1407,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"includeexpr", "inex", P_STRING|P_ALLOCED|P_VI_DEF,
- #if defined(FEAT_FIND_ID) && defined(FEAT_EVAL)
- 			    (char_u *)&p_inex, PV_INEX,
-@@ -1405,10 +1416,10 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"incsearch",   "is",   P_BOOL|P_VI_DEF|P_VIM,
- 			    (char_u *)&p_is, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"indentexpr", "inde",  P_STRING|P_ALLOCED|P_VI_DEF|P_VIM,
- #if defined(FEAT_CINDENT) && defined(FEAT_EVAL)
- 			    (char_u *)&p_inde, PV_INDE,
-@@ -1417,7 +1428,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"indentkeys", "indk",  P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP,
- #if defined(FEAT_CINDENT) && defined(FEAT_EVAL)
- 			    (char_u *)&p_indk, PV_INDK,
-@@ -1426,13 +1437,13 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"infercase",   "inf",  P_BOOL|P_VI_DEF,
- 			    (char_u *)&p_inf, PV_INF,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"insertmode",  "im",   P_BOOL|P_VI_DEF|P_VIM,
- 			    (char_u *)&p_im, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"isfname",	    "isf",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
- 			    (char_u *)&p_isf, PV_NONE,
- 			    {
-@@ -1455,7 +1466,7 @@
- #  endif
- # endif
- #endif
--				(char_u *)0L}},
-+				(char_u *)0L} SCRIPTID_INIT},
-     {"isident",	    "isi",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
- 			    (char_u *)&p_isi, PV_NONE,
- 			    {
-@@ -1472,7 +1483,7 @@
- 			    (char_u *)"@,48-57,_,192-255",
- # endif
- #endif
--				(char_u *)0L}},
-+				(char_u *)0L} SCRIPTID_INIT},
-     {"iskeyword",   "isk",  P_STRING|P_ALLOCED|P_VIM|P_COMMA|P_NODUP,
- 			    (char_u *)&p_isk, PV_ISK,
- 			    {
-@@ -1491,7 +1502,7 @@
- 				ISK_LATIN1
- # endif
- #endif
--				}},
-+			    } SCRIPTID_INIT},
-     {"isprint",	    "isp",  P_STRING|P_VI_DEF|P_RALL|P_COMMA|P_NODUP,
- 			    (char_u *)&p_isp, PV_NONE,
- 			    {
-@@ -1507,10 +1518,10 @@
- 			    ISP_LATIN1,
- # endif
- #endif
--				(char_u *)0L}},
-+				(char_u *)0L} SCRIPTID_INIT},
-     {"joinspaces",  "js",   P_BOOL|P_VI_DEF|P_VIM,
- 			    (char_u *)&p_js, PV_NONE,
--			    {(char_u *)TRUE, (char_u *)0L}},
-+			    {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
-     {"key",	    NULL,   P_STRING|P_ALLOCED|P_VI_DEF|P_NO_MKRC,
- #ifdef FEAT_CRYPT
- 			    (char_u *)&p_key, PV_KEY,
-@@ -1519,7 +1530,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"keymap",	    "kmp",  P_STRING|P_ALLOCED|P_VI_DEF|P_RBUF|P_RSTAT|P_NFNAME|P_PRI_MKRC,
- #ifdef FEAT_KEYMAP
- 			    (char_u *)&p_keymap, PV_KMAP,
-@@ -1528,14 +1539,14 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)"", (char_u *)0L}
- #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}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-     {"keywordprg",  "kp",   P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
- 			    (char_u *)&p_kp, PV_KP,
- 			    {
-@@ -1556,7 +1567,7 @@
- # endif
- #endif
- #endif
--				(char_u *)0L}},
-+				(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,
-@@ -1565,31 +1576,31 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL,
- #endif
--				(char_u *)0L}},
-+				(char_u *)0L} SCRIPTID_INIT},
-     {"langmenu",    "lm",   P_STRING|P_VI_DEF|P_NFNAME,
- #if defined(FEAT_MENU) && defined(FEAT_MULTI_LANG)
- 			    (char_u *)&p_lm, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)"", (char_u *)0L}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-     {"laststatus",  "ls",   P_NUM|P_VI_DEF|P_RALL,
- #ifdef FEAT_WINDOWS
- 			    (char_u *)&p_ls, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)1L, (char_u *)0L}},
-+			    {(char_u *)1L, (char_u *)0L} SCRIPTID_INIT},
-     {"lazyredraw",  "lz",   P_BOOL|P_VI_DEF,
- 			    (char_u *)&p_lz, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"linebreak",   "lbr",  P_BOOL|P_VI_DEF|P_RWIN,
- #ifdef FEAT_LINEBREAK
- 			    (char_u *)VAR_WIN, PV_LBR,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"lines",	    NULL,   P_NUM|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RCLR,
- 			    (char_u *)&Rows, PV_NONE,
- 			    {
-@@ -1598,7 +1609,7 @@
- #else
- 			    (char_u *)24L,
- #endif
--					    (char_u *)0L}},
-+					    (char_u *)0L} SCRIPTID_INIT},
-     {"linespace",   "lsp",  P_NUM|P_VI_DEF|P_RCLR,
- #ifdef FEAT_GUI
- 			    (char_u *)&p_linespace, PV_NONE,
-@@ -1610,14 +1621,14 @@
- #else
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"lisp",	    NULL,   P_BOOL|P_VI_DEF,
- #ifdef FEAT_LISP
- 			    (char_u *)&p_lisp, PV_LISP,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(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,
-@@ -1626,24 +1637,24 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)"", (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"list",	    NULL,   P_BOOL|P_VI_DEF|P_RWIN,
- 			    (char_u *)VAR_WIN, PV_LIST,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"listchars",   "lcs",  P_STRING|P_VI_DEF|P_RALL|P_COMMA|P_NODUP,
- 			    (char_u *)&p_lcs, PV_NONE,
--			    {(char_u *)"eol:$", (char_u *)0L}},
-+			    {(char_u *)"eol:$", (char_u *)0L} SCRIPTID_INIT},
-     {"loadplugins", "lpl",  P_BOOL|P_VI_DEF,
- 			    (char_u *)&p_lpl, PV_NONE,
--			    {(char_u *)TRUE, (char_u *)0L}},
-+			    {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
- #ifdef FEAT_GUI_MAC
-     {"macatsui",    NULL,   P_BOOL|P_VI_DEF|P_RCLR,
- 			    (char_u *)&p_macatsui, PV_NONE,
--			    {(char_u *)TRUE, (char_u *)0L}},
-+			    {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
- #endif
-     {"magic",	    NULL,   P_BOOL|P_VI_DEF,
- 			    (char_u *)&p_magic, PV_NONE,
--			    {(char_u *)TRUE, (char_u *)0L}},
-+			    {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
-     {"makeef",	    "mef",  P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
- #ifdef FEAT_QUICKFIX
- 			    (char_u *)&p_mef, PV_NONE,
-@@ -1652,7 +1663,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"makeprg",	    "mp",   P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
- #ifdef FEAT_QUICKFIX
- 			    (char_u *)&p_mp, PV_MP,
-@@ -1665,49 +1676,52 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"matchpairs",  "mps",  P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP,
- 			    (char_u *)&p_mps, PV_MPS,
--			    {(char_u *)"(:),{:},[:]", (char_u *)0L}},
-+			    {(char_u *)"(:),{:},[:]", (char_u *)0L}
-+			    SCRIPTID_INIT},
-     {"matchtime",   "mat",  P_NUM|P_VI_DEF,
- 			    (char_u *)&p_mat, PV_NONE,
--			    {(char_u *)5L, (char_u *)0L}},
-+			    {(char_u *)5L, (char_u *)0L} SCRIPTID_INIT},
-     {"maxcombine",  "mco",  P_NUM|P_VI_DEF,
- #ifdef FEAT_MBYTE
- 			    (char_u *)&p_mco, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)2, (char_u *)0L}},
-+			    {(char_u *)2, (char_u *)0L} SCRIPTID_INIT},
-     {"maxfuncdepth", "mfd", P_NUM|P_VI_DEF,
- #ifdef FEAT_EVAL
- 			    (char_u *)&p_mfd, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)100L, (char_u *)0L}},
-+			    {(char_u *)100L, (char_u *)0L} SCRIPTID_INIT},
-     {"maxmapdepth", "mmd",  P_NUM|P_VI_DEF,
- 			    (char_u *)&p_mmd, PV_NONE,
--			    {(char_u *)1000L, (char_u *)0L}},
-+			    {(char_u *)1000L, (char_u *)0L} SCRIPTID_INIT},
-     {"maxmem",	    "mm",   P_NUM|P_VI_DEF,
- 			    (char_u *)&p_mm, PV_NONE,
--			    {(char_u *)DFLT_MAXMEM, (char_u *)0L}},
-+			    {(char_u *)DFLT_MAXMEM, (char_u *)0L}
-+			    SCRIPTID_INIT},
-     {"maxmempattern","mmp", P_NUM|P_VI_DEF,
- 			    (char_u *)&p_mmp, PV_NONE,
--			    {(char_u *)1000L, (char_u *)0L}},
-+			    {(char_u *)1000L, (char_u *)0L} SCRIPTID_INIT},
-     {"maxmemtot",   "mmt",  P_NUM|P_VI_DEF,
- 			    (char_u *)&p_mmt, PV_NONE,
--			    {(char_u *)DFLT_MAXMEMTOT, (char_u *)0L}},
-+			    {(char_u *)DFLT_MAXMEMTOT, (char_u *)0L}
-+			    SCRIPTID_INIT},
-     {"menuitems",   "mis",  P_NUM|P_VI_DEF,
- #ifdef FEAT_MENU
- 			    (char_u *)&p_mis, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)25L, (char_u *)0L}},
-+			    {(char_u *)25L, (char_u *)0L} SCRIPTID_INIT},
-     {"mesg",	    NULL,   P_BOOL|P_VI_DEF,
- 			    (char_u *)NULL, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"mkspellmem",  "msm",  P_STRING|P_VI_DEF|P_EXPAND|P_SECURE,
- #ifdef FEAT_SPELL
- 			    (char_u *)&p_msm, PV_NONE,
-@@ -1716,22 +1730,22 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--    },
-+			    SCRIPTID_INIT},
-     {"modeline",    "ml",   P_BOOL|P_VIM,
- 			    (char_u *)&p_ml, PV_ML,
--			    {(char_u *)FALSE, (char_u *)TRUE}},
-+			    {(char_u *)FALSE, (char_u *)TRUE} SCRIPTID_INIT},
-     {"modelines",   "mls",  P_NUM|P_VI_DEF,
- 			    (char_u *)&p_mls, PV_NONE,
--			    {(char_u *)5L, (char_u *)0L}},
-+			    {(char_u *)5L, (char_u *)0L} SCRIPTID_INIT},
-     {"modifiable",  "ma",   P_BOOL|P_VI_DEF|P_NOGLOB,
- 			    (char_u *)&p_ma, PV_MA,
--			    {(char_u *)TRUE, (char_u *)0L}},
-+			    {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
-     {"modified",    "mod",  P_BOOL|P_NO_MKRC|P_VI_DEF|P_RSTAT,
- 			    (char_u *)&p_mod, PV_MOD,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"more",	    NULL,   P_BOOL|P_VIM,
- 			    (char_u *)&p_more, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)TRUE}},
-+			    {(char_u *)FALSE, (char_u *)TRUE} SCRIPTID_INIT},
-     {"mouse",	    NULL,   P_STRING|P_VI_DEF|P_FLAGLIST,
- 			    (char_u *)&p_mouse, PV_NONE,
- 			    {
-@@ -1740,21 +1754,21 @@
- #else
- 				(char_u *)"",
- #endif
--				(char_u *)0L}},
-+				(char_u *)0L} SCRIPTID_INIT},
-     {"mousefocus",   "mousef", P_BOOL|P_VI_DEF,
- #ifdef FEAT_GUI
- 			    (char_u *)&p_mousef, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"mousehide",   "mh",   P_BOOL|P_VI_DEF,
- #ifdef FEAT_GUI
- 			    (char_u *)&p_mh, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)TRUE, (char_u *)0L}},
-+			    {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
-     {"mousemodel",  "mousem", P_STRING|P_VI_DEF,
- 			    (char_u *)&p_mousem, PV_NONE,
- 			    {
-@@ -1767,7 +1781,7 @@
- 				(char_u *)"extend",
- # endif
- #endif
--				(char_u *)0L}},
-+				(char_u *)0L} SCRIPTID_INIT},
-     {"mouseshape",  "mouses",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
- #ifdef FEAT_MOUSESHAPE
- 			    (char_u *)&p_mouseshape, PV_NONE,
-@@ -1776,33 +1790,34 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"mousetime",   "mouset",	P_NUM|P_VI_DEF,
- 			    (char_u *)&p_mouset, PV_NONE,
--			    {(char_u *)500L, (char_u *)0L}},
-+			    {(char_u *)500L, (char_u *)0L} SCRIPTID_INIT},
-     {"mzquantum",  "mzq",   P_NUM,
- #ifdef FEAT_MZSCHEME
- 			    (char_u *)&p_mzq, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)100L, (char_u *)100L}},
-+			    {(char_u *)100L, (char_u *)100L} SCRIPTID_INIT},
-     {"novice",	    NULL,   P_BOOL|P_VI_DEF,
- 			    (char_u *)NULL, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"nrformats",   "nf",   P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP,
- 			    (char_u *)&p_nf, PV_NF,
--			    {(char_u *)"octal,hex", (char_u *)0L}},
-+			    {(char_u *)"octal,hex", (char_u *)0L}
-+			    SCRIPTID_INIT},
-     {"number",	    "nu",   P_BOOL|P_VI_DEF|P_RWIN,
- 			    (char_u *)VAR_WIN, PV_NU,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"numberwidth", "nuw",  P_NUM|P_RWIN|P_VIM,
- #ifdef FEAT_LINEBREAK
- 			    (char_u *)VAR_WIN, PV_NUW,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)8L, (char_u *)4L}},
-+			    {(char_u *)8L, (char_u *)4L} SCRIPTID_INIT},
-     {"omnifunc",    "ofu",  P_STRING|P_ALLOCED|P_VI_DEF|P_SECURE,
- #ifdef FEAT_COMPL_FUNC
- 			    (char_u *)&p_ofu, PV_OFU,
-@@ -1811,10 +1826,10 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"open",	    NULL,   P_BOOL|P_VI_DEF,
- 			    (char_u *)NULL, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"opendevice",  "odev", P_BOOL|P_VI_DEF,
- #if defined(MSDOS) || defined(MSWIN) || defined(OS2)
- 			    (char_u *)&p_odev, PV_NONE,
-@@ -1822,13 +1837,13 @@
- 			    (char_u *)NULL, PV_NONE,
- #endif
- 			    {(char_u *)FALSE, (char_u *)FALSE}
--			    },
-+			    SCRIPTID_INIT},
-     {"operatorfunc", "opfunc", P_STRING|P_VI_DEF|P_SECURE,
- 			    (char_u *)&p_opfunc, PV_NONE,
--			    {(char_u *)"", (char_u *)0L} },
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-     {"optimize",    "opt",  P_BOOL|P_VI_DEF,
- 			    (char_u *)NULL, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"osfiletype",  "oft",  P_STRING|P_ALLOCED|P_VI_DEF,
- #ifdef FEAT_OSFILETYPE
- 			    (char_u *)&p_oft, PV_OFT,
-@@ -1837,17 +1852,17 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"paragraphs",  "para", P_STRING|P_VI_DEF,
- 			    (char_u *)&p_para, PV_NONE,
- 			    {(char_u *)"IPLPPPQPP TPHPLIPpLpItpplpipbp",
--				(char_u *)0L}},
-+				(char_u *)0L} SCRIPTID_INIT},
-     {"paste",	    NULL,   P_BOOL|P_VI_DEF|P_PRI_MKRC,
- 			    (char_u *)&p_paste, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"pastetoggle", "pt",   P_STRING|P_VI_DEF,
- 			    (char_u *)&p_pt, PV_NONE,
--			    {(char_u *)"", (char_u *)0L}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-     {"patchexpr",   "pex",  P_STRING|P_VI_DEF|P_SECURE,
- #if defined(FEAT_DIFF) && defined(FEAT_EVAL)
- 			    (char_u *)&p_pex, PV_NONE,
-@@ -1856,10 +1871,10 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"patchmode",   "pm",   P_STRING|P_VI_DEF|P_NFNAME,
- 			    (char_u *)&p_pm, PV_NONE,
--			    {(char_u *)"", (char_u *)0L}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-     {"path",	    "pa",   P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP,
- 			    (char_u *)&p_path, PV_PATH,
- 			    {
-@@ -1872,24 +1887,24 @@
- 			    (char_u *)".,/usr/include,,",
- # endif
- #endif
--				(char_u *)0L}},
-+				(char_u *)0L} SCRIPTID_INIT},
-     {"preserveindent", "pi", P_BOOL|P_VI_DEF|P_VIM,
- 			    (char_u *)&p_pi, PV_PI,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"previewheight", "pvh", P_NUM|P_VI_DEF,
- #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
- 			    (char_u *)&p_pvh, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)12L, (char_u *)0L}},
-+			    {(char_u *)12L, (char_u *)0L} SCRIPTID_INIT},
-     {"previewwindow", "pvw", P_BOOL|P_VI_DEF|P_RSTAT|P_NOGLOB,
- #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
- 			    (char_u *)VAR_WIN, PV_PVW,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"printdevice", "pdev", P_STRING|P_VI_DEF|P_SECURE,
- #ifdef FEAT_PRINTER
- 			    (char_u *)&p_pdev, PV_NONE,
-@@ -1898,7 +1913,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"printencoding", "penc", P_STRING|P_VI_DEF,
- #ifdef FEAT_POSTSCRIPT
- 			    (char_u *)&p_penc, PV_NONE,
-@@ -1907,7 +1922,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"printexpr", "pexpr",  P_STRING|P_VI_DEF,
- #ifdef FEAT_POSTSCRIPT
- 			    (char_u *)&p_pexpr, PV_NONE,
-@@ -1916,7 +1931,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"printfont", "pfn",    P_STRING|P_VI_DEF,
- #ifdef FEAT_PRINTER
- 			    (char_u *)&p_pfn, PV_NONE,
-@@ -1931,7 +1946,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"printheader", "pheader",  P_STRING|P_VI_DEF|P_GETTEXT,
- #ifdef FEAT_PRINTER
- 			    (char_u *)&p_header, PV_NONE,
-@@ -1940,7 +1955,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-    {"printmbcharset", "pmbcs",  P_STRING|P_VI_DEF,
- #if defined(FEAT_POSTSCRIPT) && defined(FEAT_MBYTE)
- 			    (char_u *)&p_pmcs, PV_NONE,
-@@ -1949,7 +1964,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"printmbfont", "pmbfn",  P_STRING|P_VI_DEF,
- #if defined(FEAT_POSTSCRIPT) && defined(FEAT_MBYTE)
- 			    (char_u *)&p_pmfn, PV_NONE,
-@@ -1958,7 +1973,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"printoptions", "popt", P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
- #ifdef FEAT_PRINTER
- 			    (char_u *)&p_popt, PV_NONE,
-@@ -1967,17 +1982,17 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"prompt",	    NULL,   P_BOOL|P_VI_DEF,
- 			    (char_u *)&p_prompt, PV_NONE,
--			    {(char_u *)TRUE, (char_u *)0L}},
-+			    {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
-     {"pumheight",   "ph",   P_NUM|P_VI_DEF,
- #ifdef FEAT_INS_EXPAND
- 			    (char_u *)&p_ph, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)0L, (char_u *)0L}},
-+			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
-     {"quoteescape", "qe",   P_STRING|P_ALLOCED|P_VI_DEF,
- #ifdef FEAT_TEXTOBJ
- 			    (char_u *)&p_qe, PV_QE,
-@@ -1986,47 +2001,47 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"readonly",    "ro",   P_BOOL|P_VI_DEF|P_RSTAT|P_NOGLOB,
- 			    (char_u *)&p_ro, PV_RO,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"redraw",	    NULL,   P_BOOL|P_VI_DEF,
- 			    (char_u *)NULL, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"redrawtime",  "rdt",  P_NUM|P_VI_DEF,
- #ifdef FEAT_RELTIME
- 			    (char_u *)&p_rdt, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)2000L, (char_u *)0L}},
-+			    {(char_u *)2000L, (char_u *)0L} SCRIPTID_INIT},
-     {"remap",	    NULL,   P_BOOL|P_VI_DEF,
- 			    (char_u *)&p_remap, PV_NONE,
--			    {(char_u *)TRUE, (char_u *)0L}},
-+			    {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
-     {"report",	    NULL,   P_NUM|P_VI_DEF,
- 			    (char_u *)&p_report, PV_NONE,
--			    {(char_u *)2L, (char_u *)0L}},
-+			    {(char_u *)2L, (char_u *)0L} SCRIPTID_INIT},
-     {"restorescreen", "rs", P_BOOL|P_VI_DEF,
- #ifdef WIN3264
- 			    (char_u *)&p_rs, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)TRUE, (char_u *)0L}},
-+			    {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
-     {"revins",	    "ri",   P_BOOL|P_VI_DEF|P_VIM,
- #ifdef FEAT_RIGHTLEFT
- 			    (char_u *)&p_ri, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"rightleft",   "rl",   P_BOOL|P_VI_DEF|P_RWIN,
- #ifdef FEAT_RIGHTLEFT
- 			    (char_u *)VAR_WIN, PV_RL,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"rightleftcmd", "rlc", P_STRING|P_ALLOCED|P_VI_DEF|P_RWIN,
- #ifdef FEAT_RIGHTLEFT
- 			    (char_u *)VAR_WIN, PV_RLC,
-@@ -2035,40 +2050,41 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"ruler",	    "ru",   P_BOOL|P_VI_DEF|P_VIM|P_RSTAT,
- #ifdef FEAT_CMDL_INFO
- 			    (char_u *)&p_ru, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"rulerformat", "ruf",  P_STRING|P_VI_DEF|P_ALLOCED|P_RSTAT,
- #ifdef FEAT_STL_OPT
- 			    (char_u *)&p_ruf, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)"", (char_u *)0L}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-     {"runtimepath", "rtp",  P_STRING|P_VI_DEF|P_EXPAND|P_COMMA|P_NODUP|P_SECURE,
- 			    (char_u *)&p_rtp, PV_NONE,
--			    {(char_u *)DFLT_RUNTIMEPATH, (char_u *)0L}},
-+			    {(char_u *)DFLT_RUNTIMEPATH, (char_u *)0L}
-+			    SCRIPTID_INIT},
-     {"scroll",	    "scr",  P_NUM|P_NO_MKRC|P_VI_DEF,
- 			    (char_u *)VAR_WIN, PV_SCROLL,
--			    {(char_u *)12L, (char_u *)0L}},
-+			    {(char_u *)12L, (char_u *)0L} SCRIPTID_INIT},
-     {"scrollbind",  "scb",  P_BOOL|P_VI_DEF,
- #ifdef FEAT_SCROLLBIND
- 			    (char_u *)VAR_WIN, PV_SCBIND,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"scrolljump",  "sj",   P_NUM|P_VI_DEF|P_VIM,
- 			    (char_u *)&p_sj, PV_NONE,
--			    {(char_u *)1L, (char_u *)0L}},
-+			    {(char_u *)1L, (char_u *)0L} SCRIPTID_INIT},
-     {"scrolloff",   "so",   P_NUM|P_VI_DEF|P_VIM|P_RALL,
- 			    (char_u *)&p_so, PV_NONE,
--			    {(char_u *)0L, (char_u *)0L}},
-+			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
-     {"scrollopt",   "sbo",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
- #ifdef FEAT_SCROLLBIND
- 			    (char_u *)&p_sbo, PV_NONE,
-@@ -2077,27 +2093,29 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"sections",    "sect", P_STRING|P_VI_DEF,
- 			    (char_u *)&p_sections, PV_NONE,
--			    {(char_u *)"SHNHH HUnhsh", (char_u *)0L}},
-+			    {(char_u *)"SHNHH HUnhsh", (char_u *)0L}
-+			    SCRIPTID_INIT},
-     {"secure",	    NULL,   P_BOOL|P_VI_DEF|P_SECURE,
- 			    (char_u *)&p_secure, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(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}},
-+			    {(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}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-     {"sessionoptions", "ssop", P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
- #ifdef FEAT_SESSION
- 			    (char_u *)&p_ssop, PV_NONE,
-@@ -2107,7 +2125,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"shell",	    "sh",   P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
- 			    (char_u *)&p_sh, PV_NONE,
- 			    {
-@@ -2136,7 +2154,7 @@
- #  endif
- # endif
- #endif /* VMS */
--				(char_u *)0L}},
-+				(char_u *)0L} SCRIPTID_INIT},
-     {"shellcmdflag","shcf", P_STRING|P_VI_DEF|P_SECURE,
- 			    (char_u *)&p_shcf, PV_NONE,
- 			    {
-@@ -2149,7 +2167,7 @@
- 			    (char_u *)"-c",
- # endif
- #endif
--				(char_u *)0L}},
-+				(char_u *)0L} SCRIPTID_INIT},
-     {"shellpipe",   "sp",   P_STRING|P_VI_DEF|P_SECURE,
- #ifdef FEAT_QUICKFIX
- 			    (char_u *)&p_sp, PV_NONE,
-@@ -2168,30 +2186,30 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--    },
-+			    SCRIPTID_INIT},
-     {"shellquote",  "shq",  P_STRING|P_VI_DEF|P_SECURE,
- 			    (char_u *)&p_shq, PV_NONE,
--			    {(char_u *)"", (char_u *)0L}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-     {"shellredir",  "srr",  P_STRING|P_VI_DEF|P_SECURE,
- 			    (char_u *)&p_srr, PV_NONE,
--			    {(char_u *)">", (char_u *)0L}},
-+			    {(char_u *)">", (char_u *)0L} SCRIPTID_INIT},
-     {"shellslash",  "ssl",   P_BOOL|P_VI_DEF,
- #ifdef BACKSLASH_IN_FILENAME
- 			    (char_u *)&p_ssl, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"shelltemp",   "stmp", P_BOOL,
- 			    (char_u *)&p_stmp, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)TRUE}},
-+			    {(char_u *)FALSE, (char_u *)TRUE} SCRIPTID_INIT},
-     {"shelltype",   "st",   P_NUM|P_VI_DEF,
- #ifdef AMIGA
- 			    (char_u *)&p_st, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)0L, (char_u *)0L}},
-+			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
-     {"shellxquote", "sxq",  P_STRING|P_VI_DEF|P_SECURE,
- 			    (char_u *)&p_sxq, PV_NONE,
- 			    {
-@@ -2200,30 +2218,31 @@
- #else
- 			    (char_u *)"",
- #endif
--				(char_u *)0L}},
-+				(char_u *)0L} SCRIPTID_INIT},
-     {"shiftround",  "sr",   P_BOOL|P_VI_DEF|P_VIM,
- 			    (char_u *)&p_sr, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"shiftwidth",  "sw",   P_NUM|P_VI_DEF,
- 			    (char_u *)&p_sw, PV_SW,
--			    {(char_u *)8L, (char_u *)0L}},
-+			    {(char_u *)8L, (char_u *)0L} SCRIPTID_INIT},
-     {"shortmess",   "shm",  P_STRING|P_VIM|P_FLAGLIST,
- 			    (char_u *)&p_shm, PV_NONE,
--			    {(char_u *)"", (char_u *)"filnxtToO"}},
-+			    {(char_u *)"", (char_u *)"filnxtToO"}
-+			    SCRIPTID_INIT},
-     {"shortname",   "sn",   P_BOOL|P_VI_DEF,
- #ifdef SHORT_FNAME
- 			    (char_u *)NULL, PV_NONE,
- #else
- 			    (char_u *)&p_sn, PV_SN,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"showbreak",   "sbr",  P_STRING|P_VI_DEF|P_RALL,
- #ifdef FEAT_LINEBREAK
- 			    (char_u *)&p_sbr, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)"", (char_u *)0L}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-     {"showcmd",	    "sc",   P_BOOL|P_VIM,
- #ifdef FEAT_CMDL_INFO
- 			    (char_u *)&p_sc, PV_NONE,
-@@ -2236,58 +2255,58 @@
- #else
- 				(char_u *)TRUE
- #endif
--				}},
-+				} SCRIPTID_INIT},
-     {"showfulltag", "sft",  P_BOOL|P_VI_DEF,
- 			    (char_u *)&p_sft, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"showmatch",   "sm",   P_BOOL|P_VI_DEF,
- 			    (char_u *)&p_sm, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"showmode",    "smd",  P_BOOL|P_VIM,
- 			    (char_u *)&p_smd, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)TRUE}},
-+			    {(char_u *)FALSE, (char_u *)TRUE} SCRIPTID_INIT},
-     {"showtabline", "stal", P_NUM|P_VI_DEF|P_RALL,
- #ifdef FEAT_WINDOWS
- 			    (char_u *)&p_stal, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)1L, (char_u *)0L}},
-+			    {(char_u *)1L, (char_u *)0L} SCRIPTID_INIT},
-     {"sidescroll",  "ss",   P_NUM|P_VI_DEF,
- 			    (char_u *)&p_ss, PV_NONE,
--			    {(char_u *)0L, (char_u *)0L}},
-+			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
-     {"sidescrolloff", "siso", P_NUM|P_VI_DEF|P_VIM|P_RBUF,
- 			    (char_u *)&p_siso, PV_NONE,
--			    {(char_u *)0L, (char_u *)0L}},
-+			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
-     {"slowopen",    "slow", P_BOOL|P_VI_DEF,
- 			    (char_u *)NULL, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"smartcase",   "scs",  P_BOOL|P_VI_DEF|P_VIM,
- 			    (char_u *)&p_scs, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"smartindent", "si",   P_BOOL|P_VI_DEF|P_VIM,
- #ifdef FEAT_SMARTINDENT
- 			    (char_u *)&p_si, PV_SI,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"smarttab",    "sta",  P_BOOL|P_VI_DEF|P_VIM,
- 			    (char_u *)&p_sta, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"softtabstop", "sts",  P_NUM|P_VI_DEF|P_VIM,
- 			    (char_u *)&p_sts, PV_STS,
--			    {(char_u *)0L, (char_u *)0L}},
-+			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
-     {"sourceany",   NULL,   P_BOOL|P_VI_DEF,
- 			    (char_u *)NULL, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"spell",	    NULL,   P_BOOL|P_VI_DEF|P_RWIN,
- #ifdef FEAT_SPELL
- 			    (char_u *)VAR_WIN, PV_SPELL,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"spellcapcheck", "spc", P_STRING|P_ALLOCED|P_VI_DEF|P_RBUF,
- #ifdef FEAT_SPELL
- 			    (char_u *)&p_spc, PV_SPC,
-@@ -2296,7 +2315,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"spellfile",   "spf",  P_STRING|P_EXPAND|P_ALLOCED|P_VI_DEF|P_SECURE|P_COMMA,
- #ifdef FEAT_SPELL
- 			    (char_u *)&p_spf, PV_SPF,
-@@ -2305,7 +2324,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"spelllang",   "spl",  P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_RBUF|P_EXPAND,
- #ifdef FEAT_SPELL
- 			    (char_u *)&p_spl, PV_SPL,
-@@ -2314,7 +2333,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"spellsuggest", "sps", P_STRING|P_VI_DEF|P_EXPAND|P_SECURE|P_COMMA,
- #ifdef FEAT_SPELL
- 			    (char_u *)&p_sps, PV_NONE,
-@@ -2323,35 +2342,35 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--    },
-+			    SCRIPTID_INIT},
-     {"splitbelow",  "sb",   P_BOOL|P_VI_DEF,
- #ifdef FEAT_WINDOWS
- 			    (char_u *)&p_sb, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"splitright",  "spr",  P_BOOL|P_VI_DEF,
- #ifdef FEAT_VERTSPLIT
- 			    (char_u *)&p_spr, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"startofline", "sol",  P_BOOL|P_VI_DEF|P_VIM,
- 			    (char_u *)&p_sol, PV_NONE,
--			    {(char_u *)TRUE, (char_u *)0L}},
-+			    {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
-     {"statusline"  ,"stl",  P_STRING|P_VI_DEF|P_ALLOCED|P_RSTAT,
- #ifdef FEAT_STL_OPT
- 			    (char_u *)&p_stl, PV_STL,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)"", (char_u *)0L}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-     {"suffixes",    "su",   P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
- 			    (char_u *)&p_su, PV_NONE,
- 			    {(char_u *)".bak,~,.o,.h,.info,.swp,.obj",
--				(char_u *)0L}},
-+				(char_u *)0L} SCRIPTID_INIT},
-     {"suffixesadd", "sua",  P_STRING|P_VI_DEF|P_ALLOCED|P_COMMA|P_NODUP,
- #ifdef FEAT_SEARCHPATH
- 			    (char_u *)&p_sua, PV_SUA,
-@@ -2360,16 +2379,16 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"swapfile",    "swf",  P_BOOL|P_VI_DEF|P_RSTAT,
- 			    (char_u *)&p_swf, PV_SWF,
--			    {(char_u *)TRUE, (char_u *)0L}},
-+			    {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
-     {"swapsync",    "sws",  P_STRING|P_VI_DEF,
- 			    (char_u *)&p_sws, PV_NONE,
--			    {(char_u *)"fsync", (char_u *)0L}},
-+			    {(char_u *)"fsync", (char_u *)0L} SCRIPTID_INIT},
-     {"switchbuf",   "swb",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
- 			    (char_u *)&p_swb, PV_NONE,
--			    {(char_u *)"", (char_u *)0L}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-     {"synmaxcol",   "smc",  P_NUM|P_VI_DEF|P_RBUF,
- #ifdef FEAT_SYN_HL
- 			    (char_u *)&p_smc, PV_SMC,
-@@ -2378,7 +2397,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"syntax",	    "syn",  P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB|P_NFNAME,
- #ifdef FEAT_SYN_HL
- 			    (char_u *)&p_syn, PV_SYN,
-@@ -2387,24 +2406,24 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"tabline",	    "tal",  P_STRING|P_VI_DEF|P_RALL,
- #ifdef FEAT_STL_OPT
- 			    (char_u *)&p_tal, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)"", (char_u *)0L}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-     {"tabpagemax",  "tpm",  P_NUM|P_VI_DEF,
- #ifdef FEAT_WINDOWS
- 			    (char_u *)&p_tpm, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)10L, (char_u *)0L}},
-+			    {(char_u *)10L, (char_u *)0L} SCRIPTID_INIT},
-     {"tabstop",	    "ts",   P_NUM|P_VI_DEF|P_RBUF,
- 			    (char_u *)&p_ts, PV_TS,
--			    {(char_u *)8L, (char_u *)0L}},
-+			    {(char_u *)8L, (char_u *)0L} SCRIPTID_INIT},
-     {"tagbsearch",  "tbs",   P_BOOL|P_VI_DEF,
- 			    (char_u *)&p_tbs, PV_NONE,
- #ifdef VMS	/* binary searching doesn't appear to work on VMS */
-@@ -2412,13 +2431,13 @@
- #else
- 			    {(char_u *)TRUE, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"taglength",   "tl",   P_NUM|P_VI_DEF,
- 			    (char_u *)&p_tl, PV_NONE,
--			    {(char_u *)0L, (char_u *)0L}},
-+			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
-     {"tagrelative", "tr",   P_BOOL|P_VIM,
- 			    (char_u *)&p_tr, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)TRUE}},
-+			    {(char_u *)FALSE, (char_u *)TRUE} SCRIPTID_INIT},
-     {"tags",	    "tag",  P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP,
- 			    (char_u *)&p_tags, PV_TAGS,
- 			    {
-@@ -2427,20 +2446,20 @@
- #else
- 			    (char_u *)"./tags,tags",
- #endif
--				(char_u *)0L}},
-+				(char_u *)0L} SCRIPTID_INIT},
-     {"tagstack",    "tgst", P_BOOL|P_VI_DEF,
- 			    (char_u *)&p_tgst, PV_NONE,
--			    {(char_u *)TRUE, (char_u *)0L}},
-+			    {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
-     {"term",	    NULL,   P_STRING|P_EXPAND|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RALL,
- 			    (char_u *)&T_NAME, PV_NONE,
--			    {(char_u *)"", (char_u *)0L}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-     {"termbidi", "tbidi",   P_BOOL|P_VI_DEF,
- #ifdef FEAT_ARABIC
- 			    (char_u *)&p_tbidi, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"termencoding", "tenc", P_STRING|P_VI_DEF|P_RCLR,
- #ifdef FEAT_MBYTE
- 			    (char_u *)&p_tenc, PV_NONE,
-@@ -2449,13 +2468,14 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"terse",	    NULL,   P_BOOL|P_VI_DEF,
- 			    (char_u *)&p_terse, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"textauto",    "ta",   P_BOOL|P_VIM,
- 			    (char_u *)&p_ta, PV_NONE,
--			    {(char_u *)DFLT_TEXTAUTO, (char_u *)TRUE}},
-+			    {(char_u *)DFLT_TEXTAUTO, (char_u *)TRUE}
-+			    SCRIPTID_INIT},
-     {"textmode",    "tx",   P_BOOL|P_VI_DEF|P_NO_MKRC,
- 			    (char_u *)&p_tx, PV_TX,
- 			    {
-@@ -2464,40 +2484,40 @@
- #else
- 			    (char_u *)FALSE,
- #endif
--				(char_u *)0L}},
-+				(char_u *)0L} SCRIPTID_INIT},
-     {"textwidth",   "tw",   P_NUM|P_VI_DEF|P_VIM,
- 			    (char_u *)&p_tw, PV_TW,
--			    {(char_u *)0L, (char_u *)0L}},
-+			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
-     {"thesaurus",   "tsr",  P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP,
- #ifdef FEAT_INS_EXPAND
- 			    (char_u *)&p_tsr, PV_TSR,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)"", (char_u *)0L}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-     {"tildeop",	    "top",  P_BOOL|P_VI_DEF|P_VIM,
- 			    (char_u *)&p_to, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"timeout",	    "to",   P_BOOL|P_VI_DEF,
- 			    (char_u *)&p_timeout, PV_NONE,
--			    {(char_u *)TRUE, (char_u *)0L}},
-+			    {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
-     {"timeoutlen",  "tm",   P_NUM|P_VI_DEF,
- 			    (char_u *)&p_tm, PV_NONE,
--			    {(char_u *)1000L, (char_u *)0L}},
-+			    {(char_u *)1000L, (char_u *)0L} SCRIPTID_INIT},
-     {"title",	    NULL,   P_BOOL|P_VI_DEF,
- #ifdef FEAT_TITLE
- 			    (char_u *)&p_title, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"titlelen",    NULL,   P_NUM|P_VI_DEF,
- #ifdef FEAT_TITLE
- 			    (char_u *)&p_titlelen, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)85L, (char_u *)0L}},
-+			    {(char_u *)85L, (char_u *)0L} SCRIPTID_INIT},
-     {"titleold",    NULL,   P_STRING|P_VI_DEF|P_GETTEXT|P_SECURE|P_NO_MKRC,
- #ifdef FEAT_TITLE
- 			    (char_u *)&p_titleold, PV_NONE,
-@@ -2507,49 +2527,50 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"titlestring", NULL,   P_STRING|P_VI_DEF,
- #ifdef FEAT_TITLE
- 			    (char_u *)&p_titlestring, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)"", (char_u *)0L}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
- #if defined(FEAT_TOOLBAR) && !defined(FEAT_GUI_W32)
-     {"toolbar",     "tb",   P_STRING|P_COMMA|P_VI_DEF|P_NODUP,
- 			    (char_u *)&p_toolbar, PV_NONE,
--			    {(char_u *)"icons,tooltips", (char_u *)0L}},
-+			    {(char_u *)"icons,tooltips", (char_u *)0L}
-+			    SCRIPTID_INIT},
- #endif
- #if defined(FEAT_TOOLBAR) && defined(FEAT_GUI_GTK) && defined(HAVE_GTK2)
-     {"toolbariconsize",	"tbis", P_STRING|P_VI_DEF,
- 			    (char_u *)&p_tbis, PV_NONE,
--			    {(char_u *)"small", (char_u *)0L}},
-+			    {(char_u *)"small", (char_u *)0L} SCRIPTID_INIT},
- #endif
-     {"ttimeout",    NULL,   P_BOOL|P_VI_DEF|P_VIM,
- 			    (char_u *)&p_ttimeout, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"ttimeoutlen", "ttm",  P_NUM|P_VI_DEF,
- 			    (char_u *)&p_ttm, PV_NONE,
--			    {(char_u *)-1L, (char_u *)0L}},
-+			    {(char_u *)-1L, (char_u *)0L} SCRIPTID_INIT},
-     {"ttybuiltin",  "tbi",  P_BOOL|P_VI_DEF,
- 			    (char_u *)&p_tbi, PV_NONE,
--			    {(char_u *)TRUE, (char_u *)0L}},
-+			    {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
-     {"ttyfast",	    "tf",   P_BOOL|P_NO_MKRC|P_VI_DEF,
- 			    (char_u *)&p_tf, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"ttymouse",    "ttym", P_STRING|P_NODEFAULT|P_NO_MKRC|P_VI_DEF,
- #if defined(FEAT_MOUSE) && (defined(UNIX) || defined(VMS))
- 			    (char_u *)&p_ttym, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)"", (char_u *)0L}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-     {"ttyscroll",   "tsl",  P_NUM|P_VI_DEF,
- 			    (char_u *)&p_ttyscroll, PV_NONE,
--			    {(char_u *)999L, (char_u *)0L}},
-+			    {(char_u *)999L, (char_u *)0L} SCRIPTID_INIT},
-     {"ttytype",	    "tty",  P_STRING|P_EXPAND|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RALL,
- 			    (char_u *)&T_NAME, PV_NONE,
--			    {(char_u *)"", (char_u *)0L}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-     {"undolevels",  "ul",   P_NUM|P_VI_DEF,
- 			    (char_u *)&p_ul, PV_NONE,
- 			    {
-@@ -2558,19 +2579,19 @@
- #else
- 			    (char_u *)100L,
- #endif
--				(char_u *)0L}},
-+				(char_u *)0L} SCRIPTID_INIT},
-     {"updatecount", "uc",   P_NUM|P_VI_DEF,
- 			    (char_u *)&p_uc, PV_NONE,
--			    {(char_u *)200L, (char_u *)0L}},
-+			    {(char_u *)200L, (char_u *)0L} SCRIPTID_INIT},
-     {"updatetime",  "ut",   P_NUM|P_VI_DEF,
- 			    (char_u *)&p_ut, PV_NONE,
--			    {(char_u *)4000L, (char_u *)0L}},
-+			    {(char_u *)4000L, (char_u *)0L} SCRIPTID_INIT},
-     {"verbose",	    "vbs",  P_NUM|P_VI_DEF,
- 			    (char_u *)&p_verbose, PV_NONE,
--			    {(char_u *)0L, (char_u *)0L}},
-+			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
-     {"verbosefile", "vfile", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
- 			    (char_u *)&p_vfile, PV_NONE,
--			    {(char_u *)"", (char_u *)0L}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-     {"viewdir",     "vdir", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
- #ifdef FEAT_SESSION
- 			    (char_u *)&p_vdir, PV_NONE,
-@@ -2579,7 +2600,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"viewoptions", "vop",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
- #ifdef FEAT_SESSION
- 			    (char_u *)&p_vop, PV_NONE,
-@@ -2588,25 +2609,25 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"viminfo",	    "vi",   P_STRING|P_COMMA|P_NODUP|P_SECURE,
- #ifdef FEAT_VIMINFO
- 			    (char_u *)&p_viminfo, PV_NONE,
- #if defined(MSDOS) || defined(MSWIN) || defined(OS2)
--			    {(char_u *)"", (char_u *)"'20,<50,s10,h,rA:,rB:"}
-+			    {(char_u *)"", (char_u *)"'100,<50,s10,h,rA:,rB:"}
- #else
- # ifdef AMIGA
- 			    {(char_u *)"",
--				 (char_u *)"'20,<50,s10,h,rdf0:,rdf1:,rdf2:"}
-+				 (char_u *)"'100,<50,s10,h,rdf0:,rdf1:,rdf2:"}
- # else
--			    {(char_u *)"", (char_u *)"'20,<50,s10,h"}
-+			    {(char_u *)"", (char_u *)"'100,<50,s10,h"}
- # endif
- #endif
- #else
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"virtualedit", "ve",   P_STRING|P_COMMA|P_NODUP|P_VI_DEF|P_VIM,
- #ifdef FEAT_VIRTUALEDIT
- 			    (char_u *)&p_ve, PV_NONE,
-@@ -2615,51 +2636,52 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"visualbell",  "vb",   P_BOOL|P_VI_DEF,
- 			    (char_u *)&p_vb, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"w300",	    NULL,   P_NUM|P_VI_DEF,
- 			    (char_u *)NULL, PV_NONE,
--			    {(char_u *)0L, (char_u *)0L}},
-+			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
-     {"w1200",	    NULL,   P_NUM|P_VI_DEF,
- 			    (char_u *)NULL, PV_NONE,
--			    {(char_u *)0L, (char_u *)0L}},
-+			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
-     {"w9600",	    NULL,   P_NUM|P_VI_DEF,
- 			    (char_u *)NULL, PV_NONE,
--			    {(char_u *)0L, (char_u *)0L}},
-+			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
-     {"warn",	    NULL,   P_BOOL|P_VI_DEF,
- 			    (char_u *)&p_warn, PV_NONE,
--			    {(char_u *)TRUE, (char_u *)0L}},
-+			    {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
-     {"weirdinvert", "wiv",  P_BOOL|P_VI_DEF|P_RCLR,
- 			    (char_u *)&p_wiv, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"whichwrap",   "ww",   P_STRING|P_VIM|P_COMMA|P_FLAGLIST,
- 			    (char_u *)&p_ww, PV_NONE,
--			    {(char_u *)"", (char_u *)"b,s"}},
-+			    {(char_u *)"", (char_u *)"b,s"} SCRIPTID_INIT},
-     {"wildchar",    "wc",   P_NUM|P_VIM,
- 			    (char_u *)&p_wc, PV_NONE,
--			    {(char_u *)(long)Ctrl_E, (char_u *)(long)TAB}},
-+			    {(char_u *)(long)Ctrl_E, (char_u *)(long)TAB}
-+			    SCRIPTID_INIT},
-     {"wildcharm",   "wcm",   P_NUM|P_VI_DEF,
- 			    (char_u *)&p_wcm, PV_NONE,
--			    {(char_u *)0L, (char_u *)0L}},
-+			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
-     {"wildignore",  "wig",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
- #ifdef FEAT_WILDIGN
- 			    (char_u *)&p_wig, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)"", (char_u *)0L}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-     {"wildmenu",    "wmnu", P_BOOL|P_VI_DEF,
- #ifdef FEAT_WILDMENU
- 			    (char_u *)&p_wmnu, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"wildmode",    "wim",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
- 			    (char_u *)&p_wim, PV_NONE,
--			    {(char_u *)"full", (char_u *)0L}},
-+			    {(char_u *)"full", (char_u *)0L} SCRIPTID_INIT},
-     {"wildoptions", "wop",  P_STRING|P_VI_DEF,
- #ifdef FEAT_CMDL_COMPL
- 			    (char_u *)&p_wop, PV_NONE,
-@@ -2668,7 +2690,7 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"winaltkeys",  "wak",  P_STRING|P_VI_DEF,
- #ifdef FEAT_WAK
- 			    (char_u *)&p_wak, PV_NONE,
-@@ -2677,67 +2699,67 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)NULL, (char_u *)0L}
- #endif
--			    },
-+			    SCRIPTID_INIT},
-     {"window",	    "wi",   P_NUM|P_VI_DEF,
- 			    (char_u *)&p_window, PV_NONE,
--			    {(char_u *)0L, (char_u *)0L}},
-+			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
-     {"winheight",   "wh",   P_NUM|P_VI_DEF,
- #ifdef FEAT_WINDOWS
- 			    (char_u *)&p_wh, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)1L, (char_u *)0L}},
-+			    {(char_u *)1L, (char_u *)0L} SCRIPTID_INIT},
-     {"winfixheight", "wfh", P_BOOL|P_VI_DEF|P_RSTAT,
- #ifdef FEAT_WINDOWS
- 			    (char_u *)VAR_WIN, PV_WFH,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"winfixwidth", "wfw", P_BOOL|P_VI_DEF|P_RSTAT,
- #ifdef FEAT_VERTSPLIT
- 			    (char_u *)VAR_WIN, PV_WFW,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"winminheight", "wmh", P_NUM|P_VI_DEF,
- #ifdef FEAT_WINDOWS
- 			    (char_u *)&p_wmh, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)1L, (char_u *)0L}},
-+			    {(char_u *)1L, (char_u *)0L} SCRIPTID_INIT},
-     {"winminwidth", "wmw", P_NUM|P_VI_DEF,
- #ifdef FEAT_VERTSPLIT
- 			    (char_u *)&p_wmw, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)1L, (char_u *)0L}},
-+			    {(char_u *)1L, (char_u *)0L} SCRIPTID_INIT},
-     {"winwidth",   "wiw",   P_NUM|P_VI_DEF,
- #ifdef FEAT_VERTSPLIT
- 			    (char_u *)&p_wiw, PV_NONE,
- #else
- 			    (char_u *)NULL, PV_NONE,
- #endif
--			    {(char_u *)20L, (char_u *)0L}},
-+			    {(char_u *)20L, (char_u *)0L} SCRIPTID_INIT},
-     {"wrap",	    NULL,   P_BOOL|P_VI_DEF|P_RWIN,
- 			    (char_u *)VAR_WIN, PV_WRAP,
--			    {(char_u *)TRUE, (char_u *)0L}},
-+			    {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
-     {"wrapmargin",  "wm",   P_NUM|P_VI_DEF,
- 			    (char_u *)&p_wm, PV_WM,
--			    {(char_u *)0L, (char_u *)0L}},
-+			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
-     {"wrapscan",    "ws",   P_BOOL|P_VI_DEF,
- 			    (char_u *)&p_ws, PV_NONE,
--			    {(char_u *)TRUE, (char_u *)0L}},
-+			    {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
-     {"write",	    NULL,   P_BOOL|P_VI_DEF,
- 			    (char_u *)&p_write, PV_NONE,
--			    {(char_u *)TRUE, (char_u *)0L}},
-+			    {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
-     {"writeany",    "wa",   P_BOOL|P_VI_DEF,
- 			    (char_u *)&p_wa, PV_NONE,
--			    {(char_u *)FALSE, (char_u *)0L}},
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"writebackup", "wb",   P_BOOL|P_VI_DEF|P_VIM,
- 			    (char_u *)&p_wb, PV_NONE,
- 			    {
-@@ -2746,15 +2768,15 @@
- #else
- 			    (char_u *)FALSE,
- #endif
--				(char_u *)0L}},
-+				(char_u *)0L} SCRIPTID_INIT},
-     {"writedelay",  "wd",   P_NUM|P_VI_DEF,
- 			    (char_u *)&p_wd, PV_NONE,
--			    {(char_u *)0L, (char_u *)0L}},
-+			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
- 
- /* terminal output codes */
- #define p_term(sss, vvv)   {sss, NULL, P_STRING|P_VI_DEF|P_RALL|P_SECURE, \
- 			    (char_u *)&vvv, PV_NONE, \
--			    {(char_u *)"", (char_u *)0L}},
-+			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
- 
-     p_term("t_AB", T_CAB)
-     p_term("t_AF", T_CAF)
-@@ -2815,7 +2837,8 @@
- 
- /* terminal key codes are not in here */
- 
--    {NULL, NULL, 0, NULL, PV_NONE, {NULL, NULL}}	/* end marker */
-+    /* end marker */
-+    {NULL, NULL, 0, NULL, PV_NONE, {NULL, NULL} SCRIPTID_INIT}
- };
- 
- #define PARAM_COUNT (sizeof(options) / sizeof(struct vimoption))
-@@ -3984,7 +4007,7 @@
- 	else
- 	{
- 	    prefix = 1;
--	    if (STRNCMP(arg, "no", 2) == 0)
-+	    if (STRNCMP(arg, "no", 2) == 0 && STRNCMP(arg, "novice", 6) != 0)
- 	    {
- 		prefix = 0;
- 		arg += 2;
-@@ -4119,11 +4142,23 @@
- 					   && options[opt_idx].var == VAR_WIN)
- 		goto skip;
- 
--	    /* Disallow changing some options from modelines */
--	    if ((opt_flags & OPT_MODELINE) && (flags & P_SECURE))
-+	    /* Disallow changing some options from modelines. */
-+	    if (opt_flags & OPT_MODELINE)
- 	    {
--		errmsg = (char_u *)_("E520: Not allowed in a modeline");
--		goto skip;
-+		if (flags & P_SECURE)
-+		{
-+		    errmsg = (char_u *)_("E520: Not allowed in a modeline");
-+		    goto skip;
-+		}
-+#ifdef FEAT_DIFF
-+		/* In diff mode some options are overruled.  This avoids that
-+		 * 'foldmethod' becomes "marker" instead of "diff" and that
-+		 * "wrap" gets set. */
-+		if (curwin->w_p_diff
-+			&& (options[opt_idx].indir == PV_FDM
-+			    || options[opt_idx].indir == PV_WRAP))
-+		    goto skip;
-+#endif
- 	    }
- 
- #ifdef HAVE_SANDBOX
-@@ -5268,6 +5303,21 @@
- }
- #endif
- 
-+#ifdef FEAT_TITLE
-+static void redraw_titles __ARGS((void));
-+
-+/*
-+ * Redraw the window title and/or tab page text later.
-+ */
-+static void redraw_titles()
-+{
-+    need_maketitle = TRUE;
-+# ifdef FEAT_WINDOWS
-+    redraw_tabline = TRUE;
-+# endif
-+}
-+#endif
-+
- /*
-  * Set a string option to a new value (without checking the effect).
-  * The string is copied into allocated memory.
-@@ -5275,14 +5325,13 @@
-  * When "set_sid" is zero set the scriptID to current_SID.  When "set_sid" is
-  * SID_NONE don't set the scriptID.  Otherwise set the scriptID to "set_sid".
-  */
--/*ARGSUSED*/
-     void
- set_string_option_direct(name, opt_idx, val, opt_flags, set_sid)
-     char_u	*name;
-     int		opt_idx;
-     char_u	*val;
-     int		opt_flags;	/* OPT_FREE, OPT_LOCAL and/or OPT_GLOBAL */
--    int		set_sid;
-+    int		set_sid UNUSED;
- {
-     char_u	*s;
-     char_u	**varp;
-@@ -5407,6 +5456,10 @@
-     int		did_chartab = FALSE;
-     char_u	**gvarp;
-     long_u	free_oldval = (options[opt_idx].flags & P_ALLOCED);
-+#ifdef FEAT_GUI
-+    /* set when changing an option that only requires a redraw in the GUI */
-+    int		redraw_gui_only = FALSE;
-+#endif
- 
-     /* Get the global option to compare with, otherwise we would have to check
-      * two values for all local options. */
-@@ -5668,7 +5721,7 @@
- 	    {
- # ifdef FEAT_TITLE
- 		/* May show a "+" in the title now. */
--		need_maketitle = TRUE;
-+		redraw_titles();
- # endif
- 		/* Add 'fileencoding' to the swap file. */
- 		ml_setflags(curbuf);
-@@ -5687,7 +5740,7 @@
- 	    {
- 		errmsg = mb_init();
- # ifdef FEAT_TITLE
--		need_maketitle = TRUE;
-+		redraw_titles();
- # endif
- 	    }
- 	}
-@@ -5766,14 +5819,28 @@
- 	/* load or unload key mapping tables */
- 	errmsg = keymap_init();
- 
--	/* When successfully installed a new keymap switch on using it. */
--	if (*curbuf->b_p_keymap != NUL && errmsg == NULL)
-+	if (errmsg == NULL)
- 	{
--	    curbuf->b_p_iminsert = B_IMODE_LMAP;
--	    if (curbuf->b_p_imsearch != B_IMODE_USE_INSERT)
--		curbuf->b_p_imsearch = B_IMODE_LMAP;
--	    set_iminsert_global();
--	    set_imsearch_global();
-+	    if (*curbuf->b_p_keymap != NUL)
-+	    {
-+		/* Installed a new keymap, switch on using it. */
-+		curbuf->b_p_iminsert = B_IMODE_LMAP;
-+		if (curbuf->b_p_imsearch != B_IMODE_USE_INSERT)
-+		    curbuf->b_p_imsearch = B_IMODE_LMAP;
-+	    }
-+	    else
-+	    {
-+		/* Cleared the keymap, may reset 'iminsert' and 'imsearch'. */
-+		if (curbuf->b_p_iminsert == B_IMODE_LMAP)
-+		    curbuf->b_p_iminsert = B_IMODE_NONE;
-+		if (curbuf->b_p_imsearch == B_IMODE_LMAP)
-+		    curbuf->b_p_imsearch = B_IMODE_USE_INSERT;
-+	    }
-+	    if ((opt_flags & OPT_LOCAL) == 0)
-+	    {
-+		set_iminsert_global();
-+		set_imsearch_global();
-+	    }
- # ifdef FEAT_WINDOWS
- 	    status_redraw_curbuf();
- # endif
-@@ -5796,7 +5863,7 @@
- 	    else
- 		curbuf->b_p_tx = FALSE;
- #ifdef FEAT_TITLE
--	    need_maketitle = TRUE;
-+	    redraw_titles();
- #endif
- 	    /* update flag in swap file */
- 	    ml_setflags(curbuf);
-@@ -5977,15 +6044,23 @@
- 	/* ":set t_Co=0" and ":set t_Co=1" do ":set t_Co=" */
- 	if (varp == &T_CCO)
- 	{
--	    t_colors = atoi((char *)T_CCO);
--	    if (t_colors <= 1)
-+	    int colors = atoi((char *)T_CCO);
-+
-+	    /* Only reinitialize colors if t_Co value has really changed to
-+	     * avoid expensive reload of colorscheme if t_Co is set to the
-+	     * same value multiple times. */
-+	    if (colors != t_colors)
- 	    {
--		if (new_value_alloced)
--		    vim_free(T_CCO);
--		T_CCO = empty_option;
-+		t_colors = colors;
-+		if (t_colors <= 1)
-+		{
-+		    if (new_value_alloced)
-+			vim_free(T_CCO);
-+		    T_CCO = empty_option;
-+		}
-+		/* We now have a different color setup, initialize it again. */
-+		init_highlight(TRUE, FALSE);
- 	    }
--	    /* We now have a different color setup, initialize it again. */
--	    init_highlight(TRUE, FALSE);
- 	}
- 	ttest(FALSE);
- 	if (varp == &T_ME)
-@@ -6055,6 +6130,7 @@
- 		    errmsg = (char_u *)N_("E596: Invalid font(s)");
- 	    }
- 	}
-+	redraw_gui_only = TRUE;
-     }
- # ifdef FEAT_XFONTSET
-     else if (varp == &p_guifontset)
-@@ -6063,6 +6139,7 @@
- 	    errmsg = (char_u *)N_("E597: can't select fontset");
- 	else if (gui.in_use && gui_init_font(p_guifontset, TRUE) != OK)
- 	    errmsg = (char_u *)N_("E598: Invalid fontset");
-+	redraw_gui_only = TRUE;
-     }
- # endif
- # ifdef FEAT_MBYTE
-@@ -6072,6 +6149,7 @@
- 	    errmsg = (char_u *)N_("E533: can't select wide font");
- 	else if (gui_get_wide_font() == FAIL)
- 	    errmsg = (char_u *)N_("E534: Invalid wide font");
-+	redraw_gui_only = TRUE;
-     }
- # endif
- #endif
-@@ -6133,13 +6211,24 @@
- #ifdef FEAT_GUI
-     /* 'guioptions' */
-     else if (varp == &p_go)
-+    {
- 	gui_init_which_components(oldval);
-+	redraw_gui_only = TRUE;
-+    }
- #endif
- 
- #if defined(FEAT_GUI_TABLINE)
-     /* 'guitablabel' */
-     else if (varp == &p_gtl)
-+    {
- 	redraw_tabline = TRUE;
-+	redraw_gui_only = TRUE;
-+    }
-+    /* 'guitabtooltip' */
-+    else if (varp == &p_gtt)
-+    {
-+	redraw_gui_only = TRUE;
-+    }
- #endif
- 
- #if defined(FEAT_MOUSE_TTY) && (defined(UNIX) || defined(VMS))
-@@ -6717,7 +6806,11 @@
- 
-     if (curwin->w_curswant != MAXCOL)
- 	curwin->w_set_curswant = TRUE;  /* in case 'showbreak' changed */
--    check_redraw(options[opt_idx].flags);
-+#ifdef FEAT_GUI
-+    /* check redraw when it's not a GUI option or the GUI is active. */
-+    if (!redraw_gui_only || gui.in_use)
-+#endif
-+	check_redraw(options[opt_idx].flags);
- 
-     return errmsg;
- }
-@@ -6932,6 +7025,7 @@
-     int		new_unnamed = FALSE;
-     int		new_autoselect = FALSE;
-     int		new_autoselectml = FALSE;
-+    int		new_html = FALSE;
-     regprog_T	*new_exclude_prog = NULL;
-     char_u	*errmsg = NULL;
-     char_u	*p;
-@@ -6955,6 +7049,11 @@
- 	    new_autoselectml = TRUE;
- 	    p += 12;
- 	}
-+	else if (STRNCMP(p, "html", 4) == 0 && (p[4] == ',' || p[4] == NUL))
-+	{
-+	    new_html = TRUE;
-+	    p += 4;
-+	}
- 	else if (STRNCMP(p, "exclude:", 8) == 0 && new_exclude_prog == NULL)
- 	{
- 	    p += 8;
-@@ -6976,6 +7075,7 @@
- 	clip_unnamed = new_unnamed;
- 	clip_autoselect = new_autoselect;
- 	clip_autoselectml = new_autoselectml;
-+	clip_html = new_html;
- 	vim_free(clip_exclude_prog);
- 	clip_exclude_prog = new_exclude_prog;
-     }
-@@ -7094,6 +7194,14 @@
- 	compatible_set();
-     }
- 
-+    /* 'list', 'number' */
-+    else if ((int *)varp == &curwin->w_p_list
-+	  || (int *)varp == &curwin->w_p_nu)
-+    {
-+	if (curwin->w_curswant != MAXCOL)
-+	    curwin->w_set_curswant = TRUE;
-+    }
-+
-     else if ((int *)varp == &curbuf->b_p_ro)
-     {
- 	/* when 'readonly' is reset globally, also reset readonlymode */
-@@ -7105,22 +7213,28 @@
- 	    curbuf->b_did_warn = FALSE;
- 
- #ifdef FEAT_TITLE
--	need_maketitle = TRUE;
-+	redraw_titles();
- #endif
-     }
- 
- #ifdef FEAT_TITLE
-     /* when 'modifiable' is changed, redraw the window title */
-     else if ((int *)varp == &curbuf->b_p_ma)
--	need_maketitle = TRUE;
-+    {
-+	redraw_titles();
-+    }
-     /* when 'endofline' is changed, redraw the window title */
-     else if ((int *)varp == &curbuf->b_p_eol)
--	need_maketitle = TRUE;
--#ifdef FEAT_MBYTE
--    /* when 'bomb' is changed, redraw the window title */
-+    {
-+	redraw_titles();
-+    }
-+# ifdef FEAT_MBYTE
-+    /* when 'bomb' is changed, redraw the window title and tab page text */
-     else if ((int *)varp == &curbuf->b_p_bomb)
--	need_maketitle = TRUE;
--#endif
-+    {
-+	redraw_titles();
-+    }
-+# endif
- #endif
- 
-     /* when 'bin' is set also set some other options */
-@@ -7128,7 +7242,7 @@
-     {
- 	set_options_bin(old_value, curbuf->b_p_bin, opt_flags);
- #ifdef FEAT_TITLE
--	need_maketitle = TRUE;
-+	redraw_titles();
- #endif
-     }
- 
-@@ -7279,7 +7393,7 @@
- 	if (!value)
- 	    save_file_ff(curbuf);	/* Buffer is unchanged */
- #ifdef FEAT_TITLE
--	need_maketitle = TRUE;
-+	redraw_titles();
- #endif
- #ifdef FEAT_AUTOCMD
- 	modified_was_set = value;
-@@ -7316,6 +7430,8 @@
-     {
- 	if (curwin->w_p_wrap)
- 	    curwin->w_leftcol = 0;
-+	if (curwin->w_curswant != MAXCOL)
-+	    curwin->w_set_curswant = TRUE;
-     }
- 
- #ifdef FEAT_WINDOWS
-@@ -7486,9 +7602,13 @@
- 	     * set. */
- 	    if (STRCMP(p_enc, "utf-8") != 0)
- 	    {
-+		static char *w_arabic = N_("W17: Arabic requires UTF-8, do ':set encoding=utf-8'");
-+
- 		msg_source(hl_attr(HLF_W));
--		MSG_ATTR(_("W17: Arabic requires UTF-8, do ':set encoding=utf-8'"),
--			hl_attr(HLF_W));
-+		MSG_ATTR(_(w_arabic), hl_attr(HLF_W));
-+#ifdef FEAT_EVAL
-+		set_vim_var_string(VV_WARNINGMSG, (char_u *)_(w_arabic), -1);
-+#endif
- 	    }
- 
- # ifdef FEAT_MBYTE
-@@ -7535,6 +7655,30 @@
- 	    curbuf->b_p_imsearch = B_IMODE_USE_INSERT;
- # endif
- 	}
-+	if (curwin->w_curswant != MAXCOL)
-+	    curwin->w_set_curswant = TRUE;
-+    }
-+
-+    else if ((int *)varp == &p_arshape)
-+    {
-+	if (curwin->w_curswant != MAXCOL)
-+	    curwin->w_set_curswant = TRUE;
-+    }
-+#endif
-+
-+#ifdef FEAT_LINEBREAK
-+    if ((int *)varp == &curwin->w_p_lbr)
-+    {
-+	if (curwin->w_curswant != MAXCOL)
-+	    curwin->w_set_curswant = TRUE;
-+    }
-+#endif
-+
-+#ifdef FEAT_RIGHTLEFT
-+    if ((int *)varp == &curwin->w_p_rl)
-+    {
-+	if (curwin->w_curswant != MAXCOL)
-+	    curwin->w_set_curswant = TRUE;
-     }
- #endif
- 
-@@ -7545,8 +7689,7 @@
-     options[opt_idx].flags |= P_WAS_SET;
- 
-     comp_col();			    /* in case 'ruler' or 'showcmd' changed */
--    if (curwin->w_curswant != MAXCOL)
--	curwin->w_set_curswant = TRUE;  /* in case 'list' changed */
-+
-     check_redraw(options[opt_idx].flags);
- 
-     return NULL;
-@@ -7714,7 +7857,7 @@
- 	newFoldLevel();
-     }
- 
--    /* 'foldminlevel' */
-+    /* 'foldminlines' */
-     else if (pp == &curwin->w_p_fml)
-     {
- 	foldUpdateAll(curwin);
-@@ -7974,6 +8117,11 @@
- 	else /* curwin->w_p_scr > curwin->w_height */
- 	    curwin->w_p_scr = curwin->w_height;
-     }
-+    if (p_hi < 0)
-+    {
-+	errmsg = e_positive;
-+	p_hi = 0;
-+    }
-     if (p_report < 0)
-     {
- 	errmsg = e_positive;
-@@ -8227,13 +8375,13 @@
- 	    {
- 		if (number == 0 && string != NULL)
- 		{
--		    int index;
-+		    int idx;
- 
- 		    /* Either we are given a string or we are setting option
- 		     * to zero. */
--		    for (index = 0; string[index] == '0'; ++index)
-+		    for (idx = 0; string[idx] == '0'; ++idx)
- 			;
--		    if (string[index] != NUL || index == 0)
-+		    if (string[idx] != NUL || idx == 0)
- 		    {
- 			/* There's another character after zeros or the string
- 			 * is empty.  In both cases, we are trying to set a
-@@ -8323,7 +8471,7 @@
-     {
- 	--arg;			    /* put arg at the '<' */
- 	modifiers = 0;
--	key = find_special_key(&arg, &modifiers, TRUE);
-+	key = find_special_key(&arg, &modifiers, TRUE, TRUE);
- 	if (modifiers)		    /* can't handle modifiers here */
- 	    key = 0;
-     }
-@@ -8813,6 +8961,28 @@
- }
- 
- /*
-+ * Free the string for one term option, if it was allocated.
-+ * Set the string to empty_option and clear allocated flag.
-+ * "var" points to the option value.
-+ */
-+    void
-+free_one_termoption(var)
-+    char_u *var;
-+{
-+    struct vimoption   *p;
-+
-+    for (p = &options[0]; p->fullname != NULL; p++)
-+	if (p->var == var)
-+	{
-+	    if (p->flags & P_ALLOCED)
-+		free_string_option(*(char_u **)(p->var));
-+	    *(char_u **)(p->var) = empty_option;
-+	    p->flags &= ~P_ALLOCED;
-+	    break;
-+	}
-+}
-+
-+/*
-  * Set the terminal option defaults to the current value.
-  * Used after setting the terminal name.
-  */
-@@ -9271,10 +9441,9 @@
- /*
-  * Check for NULL pointers in a winopt_T and replace them with empty_option.
-  */
--/*ARGSUSED*/
-     void
- check_winopt(wop)
--    winopt_T	*wop;
-+    winopt_T	*wop UNUSED;
- {
- #ifdef FEAT_FOLDING
-     check_string_option(&wop->wo_fdi);
-@@ -9296,10 +9465,9 @@
- /*
-  * Free the allocated memory inside a winopt_T.
-  */
--/*ARGSUSED*/
-     void
- clear_winopt(wop)
--    winopt_T	*wop;
-+    winopt_T	*wop UNUSED;
- {
- #ifdef FEAT_FOLDING
-     clear_string_option(&wop->wo_fdi);
-@@ -9645,7 +9813,7 @@
- 	}
- 	--p;
-     }
--    if (STRNCMP(p, "no", 2) == 0)
-+    if (STRNCMP(p, "no", 2) == 0 && STRNCMP(p, "novice", 6) != 0)
-     {
- 	xp->xp_context = EXPAND_BOOL_SETTINGS;
- 	p += 2;
-@@ -9834,7 +10002,8 @@
- 	regmatch->rm_ic = ic;
- 	if (xp->xp_context != EXPAND_BOOL_SETTINGS)
- 	{
--	    for (match = 0; match < sizeof(names) / sizeof(char *); ++match)
-+	    for (match = 0; match < (int)(sizeof(names) / sizeof(char *));
-+								      ++match)
- 		if (vim_regexec(regmatch, (char_u *)names[match], (colnr_T)0))
- 		{
- 		    if (loop == 0)
-@@ -10093,25 +10262,110 @@
- 
- #ifdef FEAT_LANGMAP
- /*
-- * Any character has an equivalent character.  This is used for keyboards that
-- * have a special language mode that sends characters above 128 (although
-- * other characters can be translated too).
-+ * Any character has an equivalent 'langmap' character.  This is used for
-+ * keyboards that have a special language mode that sends characters above
-+ * 128 (although other characters can be translated too).  The "to" field is a
-+ * Vim command character.  This avoids having to switch the keyboard back to
-+ * ASCII mode when leaving Insert mode.
-+ *
-+ * langmap_mapchar[] maps any of 256 chars to an ASCII char used for Vim
-+ * commands.
-+ * When FEAT_MBYTE is defined langmap_mapga.ga_data is a sorted table of
-+ * 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
-  */
-+typedef struct
-+{
-+    int	    from;
-+    int     to;
-+} langmap_entry_T;
-+
-+static garray_T langmap_mapga;
-+static void langmap_set_entry __ARGS((int from, int to));
- 
- /*
-- * char_u langmap_mapchar[256];
-- * Normally maps each of the 128 upper chars to an <128 ascii char; used to
-- * "translate" native lang chars in normal mode or some cases of
-- * insert mode without having to tediously switch lang mode back&forth.
-+ * Search for an entry in "langmap_mapga" for "from".  If found set the "to"
-+ * field.  If not found insert a new entry at the appropriate location.
-  */
-+    static void
-+langmap_set_entry(from, to)
-+    int    from;
-+    int    to;
-+{
-+    langmap_entry_T *entries = (langmap_entry_T *)(langmap_mapga.ga_data);
-+    int             a = 0;
-+    int             b = langmap_mapga.ga_len;
-+
-+    /* Do a binary search for an existing entry. */
-+    while (a != b)
-+    {
-+	int i = (a + b) / 2;
-+	int d = entries[i].from - from;
-+
-+	if (d == 0)
-+	{
-+	    entries[i].to = to;
-+	    return;
-+	}
-+	if (d < 0)
-+	    a = i + 1;
-+	else
-+	    b = i;
-+    }
-+
-+    if (ga_grow(&langmap_mapga, 1) != OK)
-+	return;  /* out of memory */
-+
-+    /* insert new entry at position "a" */
-+    entries = (langmap_entry_T *)(langmap_mapga.ga_data) + a;
-+    mch_memmove(entries + 1, entries,
-+			(langmap_mapga.ga_len - a) * sizeof(langmap_entry_T));
-+    ++langmap_mapga.ga_len;
-+    entries[0].from = from;
-+    entries[0].to = to;
-+}
-+
-+/*
-+ * Apply 'langmap' to multi-byte character "c" and return the result.
-+ */
-+    int
-+langmap_adjust_mb(c)
-+    int c;
-+{
-+    langmap_entry_T *entries = (langmap_entry_T *)(langmap_mapga.ga_data);
-+    int a = 0;
-+    int b = langmap_mapga.ga_len;
-+
-+    while (a != b)
-+    {
-+	int i = (a + b) / 2;
-+	int d = entries[i].from - c;
-+
-+	if (d == 0)
-+	    return entries[i].to;  /* found matching entry */
-+	if (d < 0)
-+	    a = i + 1;
-+	else
-+	    b = i;
-+    }
-+    return c;  /* no entry found, return "c" unmodified */
-+}
-+# endif
- 
-     static void
- langmap_init()
- {
-     int i;
- 
--    for (i = 0; i < 256; i++)		/* we init with a-one-to one map */
--	langmap_mapchar[i] = i;
-+    for (i = 0; i < 256; i++)
-+	langmap_mapchar[i] = i;	 /* we init with a one-to-one map */
-+# ifdef FEAT_MBYTE
-+    ga_init2(&langmap_mapga, sizeof(langmap_entry_T), 8);
-+# endif
- }
- 
- /*
-@@ -10125,7 +10379,10 @@
-     char_u  *p2;
-     int	    from, to;
- 
--    langmap_init();			    /* back to one-to-one map first */
-+#ifdef FEAT_MBYTE
-+    ga_clear(&langmap_mapga);		    /* clear the previous map first */
-+#endif
-+    langmap_init();			    /* back to one-to-one map */
- 
-     for (p = p_langmap; p[0] != NUL; )
-     {
-@@ -10175,7 +10432,13 @@
- 							     transchar(from));
- 		return;
- 	    }
--	    langmap_mapchar[from & 255] = to;
-+
-+#ifdef FEAT_MBYTE
-+	    if (from >= 256)
-+		langmap_set_entry(from, to);
-+	    else
-+#endif
-+		langmap_mapchar[from & 255] = to;
- 
- 	    /* Advance to next pair */
- 	    mb_ptr_adv(p);
-diff -Naur vim72.orig/src/os_unix.c vim72/src/os_unix.c
---- vim72.orig/src/os_unix.c	2008-08-06 04:01:40.000000000 -0700
-+++ vim72/src/os_unix.c	2009-09-12 08:41:32.000000000 -0700
-@@ -181,7 +181,8 @@
- 	&& defined(FEAT_TITLE) && !defined(FEAT_GUI_GTK)
- # define SET_SIG_ALARM
- static RETSIGTYPE sig_alarm __ARGS(SIGPROTOARG);
--static int sig_alarm_called;
-+/* volatile because it is used in signal handler sig_alarm(). */
-+static volatile int sig_alarm_called;
- #endif
- static RETSIGTYPE deathtrap __ARGS(SIGPROTOARG);
- 
-@@ -201,13 +202,16 @@
- # define SIG_ERR	((RETSIGTYPE (*)())-1)
- #endif
- 
--static int	do_resize = FALSE;
-+/* volatile because it is used in signal handler sig_winch(). */
-+static volatile int do_resize = FALSE;
- #ifndef __EMX__
- static char_u	*extra_shell_arg = NULL;
- static int	show_shell_mess = TRUE;
- #endif
--static int	deadly_signal = 0;	    /* The signal we caught */
--static int	in_mch_delay = FALSE;	    /* sleeping in mch_delay() */
-+/* volatile because it is used in signal handler deathtrap(). */
-+static volatile int deadly_signal = 0;	    /* The signal we caught */
-+/* volatile because it is used in signal handler deathtrap(). */
-+static volatile int in_mch_delay = FALSE;    /* sleeping in mch_delay() */
- 
- static int curr_tmode = TMODE_COOK;	/* contains current terminal mode */
- 
-@@ -315,12 +319,32 @@
-     {-1,	    "Unknown!", FALSE}
- };
- 
-+    int
-+mch_chdir(path)
-+    char *path;
-+{
-+    if (p_verbose >= 5)
-+    {
-+	verbose_enter();
-+	smsg((char_u *)"chdir(%s)", path);
-+	verbose_leave();
-+    }
-+# ifdef VMS
-+    return chdir(vms_fixfilename(path));
-+# else
-+    return chdir(path);
-+# endif
-+}
-+
-+/*
-+ * Write s[len] to the screen.
-+ */
-     void
- mch_write(s, len)
-     char_u	*s;
-     int		len;
- {
--    write(1, (char *)s, len);
-+    ignored = (int)write(1, (char *)s, len);
-     if (p_wd)		/* Unix is too fast, slow down a bit more */
- 	RealWaitForChar(read_cmd_fd, p_wd, NULL);
- }
-@@ -447,10 +471,9 @@
-  * Return total amount of memory available in Kbyte.
-  * Doesn't change when memory has been allocated.
-  */
--/* ARGSUSED */
-     long_u
- mch_total_mem(special)
--    int special;
-+    int special UNUSED;
- {
- # ifdef __EMX__
-     return ulimit(3, 0L) >> 10;   /* always 32MB? */
-@@ -799,12 +822,11 @@
- #endif
- 
- /*
-- * We need correct potatotypes for a signal function, otherwise mean compilers
-+ * We need correct prototypes for a signal function, otherwise mean compilers
-  * will barf when the second argument to signal() is ``wrong''.
-  * Let me try it with a few tricky defines from my own osdef.h	(jw).
-  */
- #if defined(SIGWINCH)
--/* ARGSUSED */
-     static RETSIGTYPE
- sig_winch SIGDEFARG(sigarg)
- {
-@@ -816,7 +838,6 @@
- #endif
- 
- #if defined(SIGINT)
--/* ARGSUSED */
-     static RETSIGTYPE
- catch_sigint SIGDEFARG(sigarg)
- {
-@@ -828,7 +849,6 @@
- #endif
- 
- #if defined(SIGPWR)
--/* ARGSUSED */
-     static RETSIGTYPE
- catch_sigpwr SIGDEFARG(sigarg)
- {
-@@ -848,7 +868,6 @@
- /*
-  * signal function for alarm().
-  */
--/* ARGSUSED */
-     static RETSIGTYPE
- sig_alarm SIGDEFARG(sigarg)
- {
-@@ -1065,19 +1084,23 @@
-     SIGRETURN;
- }
- 
--#ifdef _REENTRANT
-+#if defined(_REENTRANT) && defined(SIGCONT)
- /*
-  * On Solaris with multi-threading, suspending might not work immediately.
-  * Catch the SIGCONT signal, which will be used as an indication whether the
-  * suspending has been done or not.
-+ *
-+ * On Linux, signal is not always handled immediately either.
-+ * See https://bugs.launchpad.net/bugs/291373
-+ *
-+ * volatile because it is used in in signal handler sigcont_handler().
-  */
--static int sigcont_received;
-+static volatile int sigcont_received;
- static RETSIGTYPE sigcont_handler __ARGS(SIGPROTOARG);
- 
- /*
-  * signal handler for SIGCONT
-  */
--/* ARGSUSED */
-     static RETSIGTYPE
- sigcont_handler SIGDEFARG(sigarg)
- {
-@@ -1115,15 +1138,28 @@
-     }
- # endif
- 
--# ifdef _REENTRANT
-+# if defined(_REENTRANT) && defined(SIGCONT)
-     sigcont_received = FALSE;
- # endif
-     kill(0, SIGTSTP);	    /* send ourselves a STOP signal */
--# ifdef _REENTRANT
--    /* When we didn't suspend immediately in the kill(), do it now.  Happens
--     * on multi-threaded Solaris. */
--    if (!sigcont_received)
--	pause();
-+# if defined(_REENTRANT) && defined(SIGCONT)
-+    /*
-+     * Wait for the SIGCONT signal to be handled. It generally happens
-+     * immediately, but somehow not all the time. Do not call pause()
-+     * because there would be race condition which would hang Vim if
-+     * signal happened in between the test of sigcont_received and the
-+     * call to pause(). If signal is not yet received, call sleep(0)
-+     * to just yield CPU. Signal should then be received. If somehow
-+     * it's still not received, sleep 1, 2, 3 ms. Don't bother waiting
-+     * further if signal is not received after 1+2+3+4 ms (not expected
-+     * to happen).
-+     */
-+    {
-+	long wait_time;
-+	for (wait_time = 0; !sigcont_received && wait_time <= 3L; wait_time++)
-+	    /* Loop is not entered most of the time */
-+	    mch_delay(wait_time, FALSE);
-+    }
- # endif
- 
- # ifdef FEAT_TITLE
-@@ -1172,7 +1208,7 @@
- #ifdef SIGTSTP
-     signal(SIGTSTP, restricted ? SIG_IGN : SIG_DFL);
- #endif
--#ifdef _REENTRANT
-+#if defined(_REENTRANT) && defined(SIGCONT)
-     signal(SIGCONT, sigcont_handler);
- #endif
- 
-@@ -1231,7 +1267,7 @@
- reset_signals()
- {
-     catch_signals(SIG_DFL, SIG_DFL);
--#ifdef _REENTRANT
-+#if defined(_REENTRANT) && defined(SIGCONT)
-     /* SIGCONT isn't in the list, because its default action is ignore */
-     signal(SIGCONT, SIG_DFL);
- #endif
-@@ -1326,11 +1362,10 @@
- /*
-  * Check_win checks whether we have an interactive stdout.
-  */
--/* ARGSUSED */
-     int
- mch_check_win(argc, argv)
--    int	    argc;
--    char    **argv;
-+    int	    argc UNUSED;
-+    char    **argv UNUSED;
- {
- #ifdef OS2
-     /*
-@@ -1414,11 +1449,10 @@
- /*
-  * Another X Error handler, just used to check for errors.
-  */
--/* ARGSUSED */
-     static int
- x_error_check(dpy, error_event)
--    Display *dpy;
--    XErrorEvent	*error_event;
-+    Display *dpy UNUSED;
-+    XErrorEvent	*error_event UNUSED;
- {
-     got_x_error = TRUE;
-     return 0;
-@@ -1431,15 +1465,12 @@
-  */
- static int x_IOerror_check __ARGS((Display *dpy));
- 
--/* ARGSUSED */
-     static int
- x_IOerror_check(dpy)
--    Display *dpy;
-+    Display *dpy UNUSED;
- {
-     /* This function should not return, it causes exit().  Longjump instead. */
-     LONGJMP(lc_jump_env, 1);
--    /*NOTREACHED*/
--    return 0;
- }
- # endif
- 
-@@ -1448,10 +1479,9 @@
-  */
- static int x_IOerror_handler __ARGS((Display *dpy));
- 
--/* ARGSUSED */
-     static int
- x_IOerror_handler(dpy)
--    Display *dpy;
-+    Display *dpy UNUSED;
- {
-     xterm_dpy = NULL;
-     x11_window = 0;
-@@ -1460,8 +1490,6 @@
- 
-     /* This function should not return, it causes exit().  Longjump instead. */
-     LONGJMP(x_jump_env, 1);
--    /*NOTREACHED*/
--    return 0;
- }
- #endif
- 
-@@ -1706,9 +1734,9 @@
-     if (oldicon == NULL && !test_only)
-     {
- 	if (STRNCMP(T_NAME, "builtin_", 8) == 0)
--	    oldicon = T_NAME + 8;
-+	    oldicon = vim_strsave(T_NAME + 8);
- 	else
--	    oldicon = T_NAME;
-+	    oldicon = vim_strsave(T_NAME);
-     }
- 
-     return retval;
-@@ -1897,10 +1925,9 @@
- 
- #else  /* FEAT_X11 */
- 
--/*ARGSUSED*/
-     static int
- get_x11_title(test_only)
--    int	    test_only;
-+    int	    test_only UNUSED;
- {
-     return FALSE;
- }
-@@ -1912,9 +1939,9 @@
-     if (!test_only)
-     {
- 	if (STRNCMP(T_NAME, "builtin_", 8) == 0)
--	    oldicon = T_NAME + 8;
-+	    oldicon = vim_strsave(T_NAME + 8);
- 	else
--	    oldicon = T_NAME;
-+	    oldicon = vim_strsave(T_NAME);
-     }
-     return FALSE;
- }
-@@ -2414,6 +2441,12 @@
- #ifdef HAVE_FCHDIR
- 	    if (fd >= 0)
- 	    {
-+		if (p_verbose >= 5)
-+		{
-+		    verbose_enter();
-+		    MSG("fchdir() to previous dir");
-+		    verbose_leave();
-+		}
- 		l = fchdir(fd);
- 		close(fd);
- 	    }
-@@ -2438,7 +2471,7 @@
-     }
- 
-     /* Catch file names which are too long. */
--    if (retval == FAIL || STRLEN(buf) + STRLEN(fname) >= len)
-+    if (retval == FAIL || (int)(STRLEN(buf) + STRLEN(fname)) >= len)
- 	return FAIL;
- 
-     /* Do not append ".", "/dir/." is equal to "/dir". */
-@@ -2475,11 +2508,10 @@
-  * file name to remain exactly the same.
-  * Only required for file systems where case is ignored and preserved.
-  */
--/*ARGSUSED*/
-     void
- fname_case(name, len)
-     char_u	*name;
--    int		len;	    /* buffer size, only used when name gets longer */
-+    int		len UNUSED;  /* buffer size, only used when name gets longer */
- {
-     struct stat st;
-     char_u	*slash, *tail;
-@@ -2657,7 +2689,7 @@
-  */
-     vim_acl_T
- mch_get_acl(fname)
--    char_u	*fname;
-+    char_u	*fname UNUSED;
- {
-     vim_acl_T	ret = NULL;
- #ifdef HAVE_POSIX_ACL
-@@ -2717,7 +2749,7 @@
-  */
-     void
- mch_set_acl(fname, aclent)
--    char_u	*fname;
-+    char_u	*fname UNUSED;
-     vim_acl_T	aclent;
- {
-     if (aclent == NULL)
-@@ -2760,10 +2792,9 @@
- /*
-  * Set hidden flag for "name".
-  */
--/* ARGSUSED */
-     void
- mch_hide(name)
--    char_u	*name;
-+    char_u	*name UNUSED;
- {
-     /* can't hide a file */
- }
-@@ -2905,7 +2936,7 @@
-      * Ignore any errors.
-      */
- #if defined(HAVE_SIGALTSTACK) || defined(HAVE_SIGSTACK)
--    signal_stack = malloc(SIGSTKSZ);
-+    signal_stack = (char *)alloc(SIGSTKSZ);
-     init_signal_stack();
- #endif
- }
-@@ -2936,7 +2967,8 @@
-     }
- #  endif
- # endif
--# ifdef FEAT_X11
-+    /* Don't close the display for GTK 1, it is done in exit(). */
-+# if defined(FEAT_X11) && (!defined(FEAT_GUI_GTK) || defined(HAVE_GTK2))
-     if (x11_display != NULL
- #  ifdef FEAT_XCLIPBOARD
- 	    && x11_display != xterm_dpy
-@@ -3451,10 +3483,9 @@
- /*
-  * set screen mode, always fails.
-  */
--/* ARGSUSED */
-     int
- mch_screenmode(arg)
--    char_u   *arg;
-+    char_u   *arg UNUSED;
- {
-     EMSG(_(e_screenmode));
-     return FAIL;
-@@ -3926,9 +3957,9 @@
- 		 */
- 		if (fd >= 0)
- 		{
--		    dup(fd); /* To replace stdin  (file descriptor 0) */
--		    dup(fd); /* To replace stdout (file descriptor 1) */
--		    dup(fd); /* To replace stderr (file descriptor 2) */
-+		    ignored = dup(fd); /* To replace stdin  (fd 0) */
-+		    ignored = dup(fd); /* To replace stdout (fd 1) */
-+		    ignored = dup(fd); /* To replace stderr (fd 2) */
- 
- 		    /* Don't need this now that we've duplicated it */
- 		    close(fd);
-@@ -3946,7 +3977,17 @@
- 		 * children can be kill()ed.  Don't do this when using pipes,
- 		 * because stdin is not a tty, we would lose /dev/tty. */
- 		if (p_stmp)
-+		{
- 		    (void)setsid();
-+#  if defined(SIGHUP)
-+		    /* When doing "!xterm&" and 'shell' is bash: the shell
-+		     * will exit and send SIGHUP to all processes in its
-+		     * group, killing the just started process.  Ignore SIGHUP
-+		     * to avoid that. (suggested by Simon Schubert)
-+		     */
-+		    signal(SIGHUP, SIG_IGN);
-+#  endif
-+		}
- # endif
- # ifdef FEAT_GUI
- 		if (pty_slave_fd >= 0)
-@@ -3996,13 +4037,13 @@
- 
- 		    /* set up stdin/stdout/stderr for the child */
- 		    close(0);
--		    dup(pty_slave_fd);
-+		    ignored = dup(pty_slave_fd);
- 		    close(1);
--		    dup(pty_slave_fd);
-+		    ignored = dup(pty_slave_fd);
- 		    if (gui.in_use)
- 		    {
- 			close(2);
--			dup(pty_slave_fd);
-+			ignored = dup(pty_slave_fd);
- 		    }
- 
- 		    close(pty_slave_fd);    /* has been dupped, close it now */
-@@ -4013,13 +4054,13 @@
- 		    /* set up stdin for the child */
- 		    close(fd_toshell[1]);
- 		    close(0);
--		    dup(fd_toshell[0]);
-+		    ignored = dup(fd_toshell[0]);
- 		    close(fd_toshell[0]);
- 
- 		    /* set up stdout for the child */
- 		    close(fd_fromshell[0]);
- 		    close(1);
--		    dup(fd_fromshell[1]);
-+		    ignored = dup(fd_fromshell[1]);
- 		    close(fd_fromshell[1]);
- 
- # ifdef FEAT_GUI
-@@ -4027,7 +4068,7 @@
- 		    {
- 			/* set up stderr for the child */
- 			close(2);
--			dup(1);
-+			ignored = dup(1);
- 		    }
- # endif
- 		}
-@@ -4078,6 +4119,9 @@
- 		int	    fromshell_fd;
- 		garray_T    ga;
- 		int	    noread_cnt;
-+# if defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H)
-+		struct timeval  start_tv;
-+# endif
- 
- # ifdef FEAT_GUI
- 		if (pty_master_fd >= 0)
-@@ -4146,9 +4190,10 @@
- 			    {
- 				s = vim_strchr(lp + written, NL);
- 				len = write(toshell_fd, (char *)lp + written,
--					   s == NULL ? l : s - (lp + written));
-+					   s == NULL ? l
-+					      : (size_t)(s - (lp + written)));
- 			    }
--			    if (len == l)
-+			    if (len == (int)l)
- 			    {
- 				/* Finished a line, add a NL, unless this line
- 				 * should not have one. */
-@@ -4158,7 +4203,8 @@
- 					    && (lnum !=
- 						    curbuf->b_ml.ml_line_count
- 						    || curbuf->b_p_eol)))
--				    write(toshell_fd, "\n", (size_t)1);
-+				    ignored = write(toshell_fd, "\n",
-+								   (size_t)1);
- 				++lnum;
- 				if (lnum > curbuf->b_op_end.lnum)
- 				{
-@@ -4186,7 +4232,9 @@
- 		    ga_init2(&ga, 1, BUFLEN);
- 
- 		noread_cnt = 0;
--
-+# if defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H)
-+		gettimeofday(&start_tv, NULL);
-+# endif
- 		for (;;)
- 		{
- 		    /*
-@@ -4199,25 +4247,34 @@
- 		     * that a typed password is echoed for ssh or gpg command.
- 		     * Don't get characters when the child has already
- 		     * finished (wait_pid == 0).
--		     * Don't get extra characters when we already have one.
- 		     * Don't read characters unless we didn't get output for a
--		     * while, avoids that ":r !ls" eats typeahead.
-+		     * while (noread_cnt > 4), avoids that ":r !ls" eats
-+		     * typeahead.
- 		     */
- 		    len = 0;
- 		    if (!(options & SHELL_EXPAND)
- 			    && ((options &
- 					 (SHELL_READ|SHELL_WRITE|SHELL_COOKED))
- 				      != (SHELL_READ|SHELL_WRITE|SHELL_COOKED)
--#ifdef FEAT_GUI
-+# ifdef FEAT_GUI
- 						    || gui.in_use
--#endif
-+# endif
- 						    )
- 			    && wait_pid == 0
--			    && (ta_len > 0
--				|| (noread_cnt > 4
--				    && (len = ui_inchar(ta_buf,
--						       BUFLEN, 10L, 0)) > 0)))
-+			    && (ta_len > 0 || noread_cnt > 4))
- 		    {
-+		      if (ta_len == 0)
-+		      {
-+			  /* Get extra characters when we don't have any.
-+			   * Reset the counter and timer. */
-+			  noread_cnt = 0;
-+# if defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H)
-+			  gettimeofday(&start_tv, NULL);
-+# endif
-+			  len = ui_inchar(ta_buf, BUFLEN, 10L, 0);
-+		      }
-+		      if (ta_len > 0 || len > 0)
-+		      {
- 			/*
- 			 * For pipes:
- 			 * Check for CTRL-C: send interrupt signal to child.
-@@ -4271,7 +4328,8 @@
- 				ta_buf[i] = '\n';
- # ifdef FEAT_MBYTE
- 			    if (has_mbyte)
--				i += (*mb_ptr2len)(ta_buf + i) - 1;
-+				i += (*mb_ptr2len_len)(ta_buf + i,
-+							ta_len + len - i) - 1;
- # endif
- 			}
- 
-@@ -4319,9 +4377,9 @@
- 			    {
- 				ta_len -= len;
- 				mch_memmove(ta_buf, ta_buf + len, ta_len);
--				noread_cnt = 0;
- 			    }
- 			}
-+		      }
- 		    }
- 
- 		    if (got_int)
-@@ -4429,6 +4487,25 @@
- 			out_flush();
- 			if (got_int)
- 			    break;
-+
-+# if defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H)
-+			{
-+			    struct timeval  now_tv;
-+			    long	    msec;
-+
-+			    /* Avoid that we keep looping here without
-+			     * checking for a CTRL-C for a long time.  Don't
-+			     * break out too often to avoid losing typeahead. */
-+			    gettimeofday(&now_tv, NULL);
-+			    msec = (now_tv.tv_sec - start_tv.tv_sec) * 1000L
-+				+ (now_tv.tv_usec - start_tv.tv_usec) / 1000L;
-+			    if (msec > 2000)
-+			    {
-+				noread_cnt = 5;
-+				break;
-+			    }
-+			}
-+# endif
- 		    }
- 
- 		    /* If we already detected the child has finished break the
-@@ -4672,7 +4749,6 @@
-  * Returns also, when a request from Sniff is waiting -- toni.
-  * Or when a Linux GPM mouse event is waiting.
-  */
--/* ARGSUSED */
- #if defined(__BEOS__)
-     int
- #else
-@@ -4681,7 +4757,7 @@
- RealWaitForChar(fd, msec, check_for_gpm)
-     int		fd;
-     long	msec;
--    int		*check_for_gpm;
-+    int		*check_for_gpm UNUSED;
- {
-     int		ret;
- #if defined(FEAT_XCLIPBOARD) || defined(USE_XSMP) || defined(FEAT_MZSCHEME)
-@@ -5076,7 +5152,6 @@
- 
- #define SHELL_SPECIAL (char_u *)"\t \"&'$;<>()\\|"
- 
--/* ARGSUSED */
-     int
- mch_expand_wildcards(num_pat, pat, num_file, file, flags)
-     int		   num_pat;
-@@ -5498,7 +5573,7 @@
-     i = fread((char *)buffer, 1, len, fd);
-     fclose(fd);
-     mch_remove(tempname);
--    if (i != len)
-+    if (i != (int)len)
-     {
- 	/* unexpected read error */
- 	EMSG2(_(e_notread), tempname);
-@@ -5559,7 +5634,7 @@
- 	if (shell_style == STYLE_PRINT && !did_find_nul)
- 	{
- 	    /* If there is a NUL, set did_find_nul, else set check_spaces */
--	    if (len && (int)STRLEN(buffer) < len - 1)
-+	    if (len && (int)STRLEN(buffer) < (int)len - 1)
- 		did_find_nul = TRUE;
- 	    else
- 		check_spaces = TRUE;
-@@ -5851,7 +5926,9 @@
- 	     * we are going to suspend or starting an external process
- 	     * so we shouldn't  have problem with this
- 	     */
-+# ifdef SIGTSTP
- 	    signal(SIGTSTP, restricted ? SIG_IGN : SIG_DFL);
-+# endif
- 	    return 1; /* succeed */
- 	}
- 	if (gpm_fd == -2)
-@@ -6001,7 +6078,6 @@
- /*
-  * Gets info from sysmouse and adds special keys to input buf.
-  */
--/* ARGSUSED */
-     static RETSIGTYPE
- sig_sysmouse SIGDEFARG(sigarg)
- {
-@@ -6565,11 +6641,10 @@
-  * This is our chance to ask the user if they want to save,
-  * or abort the logout
-  */
--/*ARGSUSED*/
-     static void
- xsmp_handle_interaction(smc_conn, client_data)
-     SmcConn	smc_conn;
--    SmPointer	client_data;
-+    SmPointer	client_data UNUSED;
- {
-     cmdmod_T	save_cmdmod;
-     int		cancel_shutdown = False;
-@@ -6602,16 +6677,15 @@
- /*
-  * Callback that starts save-yourself.
-  */
--/*ARGSUSED*/
-     static void
- xsmp_handle_save_yourself(smc_conn, client_data, save_type,
- 					       shutdown, interact_style, fast)
-     SmcConn	smc_conn;
--    SmPointer	client_data;
--    int		save_type;
-+    SmPointer	client_data UNUSED;
-+    int		save_type UNUSED;
-     Bool	shutdown;
--    int		interact_style;
--    Bool	fast;
-+    int		interact_style UNUSED;
-+    Bool	fast UNUSED;
- {
-     /* Handle already being in saveyourself */
-     if (xsmp.save_yourself)
-@@ -6645,11 +6719,10 @@
- /*
-  * Callback to warn us of imminent death.
-  */
--/*ARGSUSED*/
-     static void
- xsmp_die(smc_conn, client_data)
--    SmcConn	smc_conn;
--    SmPointer	client_data;
-+    SmcConn	smc_conn UNUSED;
-+    SmPointer	client_data UNUSED;
- {
-     xsmp_close();
- 
-@@ -6661,11 +6734,10 @@
- /*
-  * Callback to tell us that save-yourself has completed.
-  */
--/*ARGSUSED*/
-     static void
- xsmp_save_complete(smc_conn, client_data)
--    SmcConn	smc_conn;
--    SmPointer	client_data;
-+    SmcConn	smc_conn UNUSED;
-+    SmPointer	client_data UNUSED;
- {
-     xsmp.save_yourself = False;
- }
-@@ -6675,11 +6747,10 @@
-  * Callback to tell us that an instigated shutdown was cancelled
-  * (maybe even by us)
-  */
--/*ARGSUSED*/
-     static void
- xsmp_shutdown_cancelled(smc_conn, client_data)
-     SmcConn	smc_conn;
--    SmPointer	client_data;
-+    SmPointer	client_data UNUSED;
- {
-     if (xsmp.save_yourself)
- 	SmcSaveYourselfDone(smc_conn, True);
-@@ -6691,13 +6762,12 @@
- /*
-  * Callback to tell us that a new ICE connection has been established.
-  */
--/*ARGSUSED*/
-     static void
- xsmp_ice_connection(iceConn, clientData, opening, watchData)
-     IceConn	iceConn;
--    IcePointer	clientData;
-+    IcePointer	clientData UNUSED;
-     Bool	opening;
--    IcePointer	*watchData;
-+    IcePointer	*watchData UNUSED;
- {
-     /* Intercept creation of ICE connection fd */
-     if (opening)
-@@ -6814,7 +6884,8 @@
-     if (xsmp_icefd != -1)
-     {
- 	SmcCloseConnection(xsmp.smcconn, 0, NULL);
--	vim_free(xsmp.clientid);
-+	if (xsmp.clientid != NULL)
-+	    free(xsmp.clientid);
- 	xsmp.clientid = NULL;
- 	xsmp_icefd = -1;
-     }
-diff -Naur vim72.orig/src/os_unix.h vim72/src/os_unix.h
---- vim72.orig/src/os_unix.h	2008-06-17 11:01:17.000000000 -0700
-+++ vim72/src/os_unix.h	2009-09-12 08:41:19.000000000 -0700
-@@ -124,7 +124,7 @@
- #  define SIGDUMMYARG	0, 0, (struct sigcontext *)0
- # else
- #  define SIGPROTOARG	(int)
--#  define SIGDEFARG(s)	(s) int s;
-+#  define SIGDEFARG(s)	(s) int s UNUSED;
- #  define SIGDUMMYARG	0
- # endif
- #else
-@@ -482,11 +482,6 @@
- # else
- int mch_rename __ARGS((const char *src, const char *dest));
- # endif
--# ifdef VMS
--#  define mch_chdir(s) chdir(vms_fixfilename(s))
--# else
--#  define mch_chdir(s) chdir(s)
--# endif
- # ifndef VMS
- #  ifdef __MVS__
-   /* on OS390 Unix getenv() doesn't return a pointer to persistent
-diff -Naur vim72.orig/src/proto/buffer.pro vim72/src/proto/buffer.pro
---- vim72.orig/src/proto/buffer.pro	2008-08-09 07:31:21.000000000 -0700
-+++ vim72/src/proto/buffer.pro	2009-09-12 08:38:11.000000000 -0700
-@@ -37,13 +37,12 @@
- int otherfile __ARGS((char_u *ffname));
- void buf_setino __ARGS((buf_T *buf));
- void fileinfo __ARGS((int fullname, int shorthelp, int dont_truncate));
--void col_print __ARGS((char_u *buf, int col, int vcol));
-+void col_print __ARGS((char_u *buf, size_t buflen, int col, int vcol));
- void maketitle __ARGS((void));
- void resettitle __ARGS((void));
- void free_titles __ARGS((void));
- int build_stl_str_hl __ARGS((win_T *wp, char_u *out, size_t outlen, char_u *fmt, int use_sandbox, int fillchar, int maxwidth, struct stl_hlrec *hltab, struct stl_hlrec *tabtab));
--void get_rel_pos __ARGS((win_T *wp, char_u *str));
--int append_arg_number __ARGS((win_T *wp, char_u *buf, int add_file, int maxlen));
-+void get_rel_pos __ARGS((win_T *wp, char_u *buf, int buflen));
- char_u *fix_fname __ARGS((char_u *fname));
- void fname_expand __ARGS((buf_T *buf, char_u **ffname, char_u **sfname));
- char_u *alist_name __ARGS((aentry_T *aep));
-@@ -54,8 +53,8 @@
- void write_viminfo_bufferlist __ARGS((FILE *fp));
- char *buf_spname __ARGS((buf_T *buf));
- void buf_addsign __ARGS((buf_T *buf, int id, linenr_T lnum, int typenr));
--int buf_change_sign_type __ARGS((buf_T *buf, int markId, int typenr));
--int_u buf_getsigntype __ARGS((buf_T *buf, linenr_T lnum, int type));
-+linenr_T buf_change_sign_type __ARGS((buf_T *buf, int markId, int typenr));
-+int buf_getsigntype __ARGS((buf_T *buf, linenr_T lnum, int type));
- linenr_T buf_delsign __ARGS((buf_T *buf, int id));
- int buf_findsign __ARGS((buf_T *buf, int id));
- int buf_findsign_id __ARGS((buf_T *buf, linenr_T lnum));
-diff -Naur vim72.orig/src/proto/edit.pro vim72/src/proto/edit.pro
---- vim72.orig/src/proto/edit.pro	2008-08-09 07:31:24.000000000 -0700
-+++ vim72/src/proto/edit.pro	2009-09-12 08:38:11.000000000 -0700
-@@ -8,7 +8,7 @@
- void backspace_until_column __ARGS((int col));
- int vim_is_ctrl_x_key __ARGS((int c));
- int ins_compl_add_infercase __ARGS((char_u *str, int len, int icase, char_u *fname, int dir, int flags));
--void set_completion __ARGS((int startcol, list_T *list));
-+void set_completion __ARGS((colnr_T startcol, list_T *list));
- void ins_compl_show_pum __ARGS((void));
- char_u *find_word_start __ARGS((char_u *ptr));
- char_u *find_word_end __ARGS((char_u *ptr));
-diff -Naur vim72.orig/src/proto/eval.pro vim72/src/proto/eval.pro
---- vim72.orig/src/proto/eval.pro	2008-08-09 07:31:25.000000000 -0700
-+++ vim72/src/proto/eval.pro	2009-09-12 08:32:50.000000000 -0700
-@@ -17,7 +17,7 @@
- int eval_to_bool __ARGS((char_u *arg, int *error, char_u **nextcmd, int skip));
- char_u *eval_to_string_skip __ARGS((char_u *arg, char_u **nextcmd, int skip));
- int skip_expr __ARGS((char_u **pp));
--char_u *eval_to_string __ARGS((char_u *arg, char_u **nextcmd, int dolist));
-+char_u *eval_to_string __ARGS((char_u *arg, char_u **nextcmd, int convert));
- char_u *eval_to_string_safe __ARGS((char_u *arg, char_u **nextcmd, int use_sandbox));
- int eval_to_number __ARGS((char_u *expr));
- list_T *eval_spell_expr __ARGS((char_u *badword, char_u *expr));
-@@ -46,7 +46,9 @@
- void list_unref __ARGS((list_T *l));
- void list_free __ARGS((list_T *l, int recurse));
- dictitem_T *dict_lookup __ARGS((hashitem_T *hi));
-+char_u *list_find_str __ARGS((list_T *l, long idx));
- 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 garbage_collect __ARGS((void));
- dict_T *dict_alloc __ARGS((void));
- int dict_add_nr_str __ARGS((dict_T *d, char *key, long nr, char_u *str));
-@@ -58,8 +60,10 @@
- void set_vim_var_nr __ARGS((int idx, long val));
- long get_vim_var_nr __ARGS((int idx));
- char_u *get_vim_var_str __ARGS((int idx));
--void set_vcount __ARGS((long count, long count1));
-+list_T *get_vim_var_list __ARGS((int idx));
-+void set_vcount __ARGS((long count, long count1, int set_prevcount));
- void set_vim_var_string __ARGS((int idx, char_u *val, int len));
-+void set_vim_var_list __ARGS((int idx, list_T *val));
- void set_reg_var __ARGS((int c));
- char_u *v_exception __ARGS((char_u *oldval));
- char_u *v_throwpoint __ARGS((char_u *oldval));
-@@ -94,6 +98,7 @@
- void write_viminfo_varlist __ARGS((FILE *fp));
- int store_session_globals __ARGS((FILE *fd));
- void last_set_msg __ARGS((scid_T scriptID));
-+void ex_oldfiles __ARGS((exarg_T *eap));
- int modify_fname __ARGS((char_u *src, int *usedlen, char_u **fnamep, char_u **bufp, int *fnamelen));
- char_u *do_string_sub __ARGS((char_u *str, char_u *pat, char_u *sub, char_u *flags));
- /* vim: set ft=c : */
-diff -Naur vim72.orig/src/proto/ex_cmds.pro vim72/src/proto/ex_cmds.pro
---- vim72.orig/src/proto/ex_cmds.pro	2008-08-09 07:31:25.000000000 -0700
-+++ vim72/src/proto/ex_cmds.pro	2009-09-12 08:38:17.000000000 -0700
-@@ -9,9 +9,9 @@
- void do_bang __ARGS((int addr_count, exarg_T *eap, int forceit, int do_in, int do_out));
- void do_shell __ARGS((char_u *cmd, int flags));
- char_u *make_filter_cmd __ARGS((char_u *cmd, char_u *itmp, char_u *otmp));
--void append_redir __ARGS((char_u *buf, char_u *opt, char_u *fname));
-+void append_redir __ARGS((char_u *buf, int buflen, char_u *opt, char_u *fname));
- int viminfo_error __ARGS((char *errnum, char *message, char_u *line));
--int read_viminfo __ARGS((char_u *file, int want_info, int want_marks, int forceit));
-+int read_viminfo __ARGS((char_u *file, int flags));
- void write_viminfo __ARGS((char_u *file, int forceit));
- int viminfo_readline __ARGS((vir_T *virp));
- char_u *viminfo_readstring __ARGS((vir_T *virp, int off, int convert));
-@@ -55,5 +55,8 @@
- char_u *sign_get_text __ARGS((int typenr));
- void *sign_get_image __ARGS((int typenr));
- char_u *sign_typenr2name __ARGS((int typenr));
-+void free_signs __ARGS((void));
-+char_u *get_sign_name __ARGS((expand_T *xp, int idx));
-+void set_context_in_sign_cmd __ARGS((expand_T *xp, char_u *arg));
- void ex_drop __ARGS((exarg_T *eap));
- /* vim: set ft=c : */
-diff -Naur vim72.orig/src/proto/ex_getln.pro vim72/src/proto/ex_getln.pro
---- vim72.orig/src/proto/ex_getln.pro	2008-08-09 07:31:28.000000000 -0700
-+++ vim72/src/proto/ex_getln.pro	2009-09-12 08:36:36.000000000 -0700
-@@ -4,6 +4,7 @@
- int text_locked __ARGS((void));
- void text_locked_msg __ARGS((void));
- int curbuf_locked __ARGS((void));
-+int allbuf_locked __ARGS((void));
- char_u *getexline __ARGS((int c, void *dummy, int indent));
- char_u *getexmodeline __ARGS((int promptc, void *dummy, int indent));
- int cmdline_overstrike __ARGS((void));
-@@ -31,7 +32,7 @@
- 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))));
--char_u *globpath __ARGS((char_u *path, char_u *file));
-+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));
-diff -Naur vim72.orig/src/proto/gui.pro vim72/src/proto/gui.pro
---- vim72.orig/src/proto/gui.pro	2008-08-09 07:31:56.000000000 -0700
-+++ vim72/src/proto/gui.pro	2009-09-12 08:39:58.000000000 -0700
-@@ -43,6 +43,7 @@
- void gui_create_scrollbar __ARGS((scrollbar_T *sb, int type, win_T *wp));
- scrollbar_T *gui_find_scrollbar __ARGS((long ident));
- void gui_drag_scrollbar __ARGS((scrollbar_T *sb, long value, int still_dragging));
-+void gui_may_update_scrollbars __ARGS((void));
- void gui_update_scrollbars __ARGS((int force));
- int gui_do_scroll __ARGS((void));
- int gui_do_horiz_scroll __ARGS((void));
-diff -Naur vim72.orig/src/proto/if_cscope.pro vim72/src/proto/if_cscope.pro
---- vim72.orig/src/proto/if_cscope.pro	2008-08-09 07:31:33.000000000 -0700
-+++ vim72/src/proto/if_cscope.pro	2009-09-12 08:37:41.000000000 -0700
-@@ -1,4 +1,6 @@
- /* if_cscope.c */
-+char_u *get_cscope_name __ARGS((expand_T *xp, int idx));
-+void set_context_in_cscope_cmd __ARGS((expand_T *xp, char_u *arg, cmdidx_T cmdidx));
- void do_cscope __ARGS((exarg_T *eap));
- void do_scscope __ARGS((exarg_T *eap));
- void do_cstag __ARGS((exarg_T *eap));
-diff -Naur vim72.orig/src/proto/mark.pro vim72/src/proto/mark.pro
---- vim72.orig/src/proto/mark.pro	2008-08-09 07:31:36.000000000 -0700
-+++ vim72/src/proto/mark.pro	2009-09-12 08:32:04.000000000 -0700
-@@ -26,5 +26,5 @@
- void write_viminfo_filemarks __ARGS((FILE *fp));
- int removable __ARGS((char_u *name));
- int write_viminfo_marks __ARGS((FILE *fp_out));
--void copy_viminfo_marks __ARGS((vir_T *virp, FILE *fp_out, int count, int eof));
-+void copy_viminfo_marks __ARGS((vir_T *virp, FILE *fp_out, int count, int eof, int flags));
- /* vim: set ft=c : */
-diff -Naur vim72.orig/src/proto/mbyte.pro vim72/src/proto/mbyte.pro
---- vim72.orig/src/proto/mbyte.pro	2008-08-09 07:31:41.000000000 -0700
-+++ vim72/src/proto/mbyte.pro	2009-09-12 08:39:49.000000000 -0700
-@@ -7,10 +7,12 @@
- int latin_char2len __ARGS((int c));
- int latin_char2bytes __ARGS((int c, char_u *buf));
- int latin_ptr2len __ARGS((char_u *p));
-+int latin_ptr2len_len __ARGS((char_u *p, int size));
- int utf_char2cells __ARGS((int c));
- int latin_ptr2cells __ARGS((char_u *p));
- int utf_ptr2cells __ARGS((char_u *p));
- int dbcs_ptr2cells __ARGS((char_u *p));
-+int latin_ptr2cells_len __ARGS((char_u *p, int size));
- int latin_char2cells __ARGS((int c));
- int latin_off2cells __ARGS((unsigned off, unsigned max_off));
- int dbcs_off2cells __ARGS((unsigned off, unsigned max_off));
-@@ -85,6 +87,7 @@
- int preedit_get_status __ARGS((void));
- int im_is_preediting __ARGS((void));
- int convert_setup __ARGS((vimconv_T *vcp, char_u *from, char_u *to));
-+int convert_setup_ext __ARGS((vimconv_T *vcp, char_u *from, int from_unicode_is_utf8, char_u *to, int to_unicode_is_utf8));
- int convert_input __ARGS((char_u *ptr, int len, int maxlen));
- int convert_input_safe __ARGS((char_u *ptr, int len, int maxlen, char_u **restp, int *restlenp));
- char_u *string_convert __ARGS((vimconv_T *vcp, char_u *ptr, int *lenp));
-diff -Naur vim72.orig/src/proto/message.pro vim72/src/proto/message.pro
---- vim72.orig/src/proto/message.pro	2008-08-09 07:31:39.000000000 -0700
-+++ vim72/src/proto/message.pro	2009-09-12 08:37:30.000000000 -0700
-@@ -54,6 +54,7 @@
- void msg_clr_cmdline __ARGS((void));
- int msg_end __ARGS((void));
- void msg_check __ARGS((void));
-+int redirecting __ARGS((void));
- void verbose_enter __ARGS((void));
- void verbose_leave __ARGS((void));
- void verbose_enter_scroll __ARGS((void));
-diff -Naur vim72.orig/src/proto/misc2.pro vim72/src/proto/misc2.pro
---- vim72.orig/src/proto/misc2.pro	2008-08-09 07:31:40.000000000 -0700
-+++ vim72/src/proto/misc2.pro	2009-09-12 08:33:59.000000000 -0700
-@@ -59,7 +59,7 @@
- int handle_x_keys __ARGS((int key));
- char_u *get_special_key_name __ARGS((int c, int modifiers));
- int trans_special __ARGS((char_u **srcp, char_u *dst, int keycode));
--int find_special_key __ARGS((char_u **srcp, int *modp, int keycode));
-+int find_special_key __ARGS((char_u **srcp, int *modp, int keycode, int keep_x_key));
- int extract_modifiers __ARGS((int key, int *modp));
- int find_special_key_in_table __ARGS((int c));
- int get_special_key_code __ARGS((char_u *name));
-diff -Naur vim72.orig/src/proto/netbeans.pro vim72/src/proto/netbeans.pro
---- vim72.orig/src/proto/netbeans.pro	2008-08-09 07:31:56.000000000 -0700
-+++ vim72/src/proto/netbeans.pro	2009-09-12 08:34:15.000000000 -0700
-@@ -11,7 +11,7 @@
- void netbeans_frame_moved __ARGS((int new_x, int new_y));
- void netbeans_file_activated __ARGS((buf_T *bufp));
- void netbeans_file_opened __ARGS((buf_T *bufp));
--void netbeans_file_closed __ARGS((buf_T *bufp));
-+void netbeans_file_killed __ARGS((buf_T *bufp));
- void netbeans_inserted __ARGS((buf_T *bufp, linenr_T linenr, colnr_T col, char_u *txt, int newlen));
- void netbeans_removed __ARGS((buf_T *bufp, linenr_T linenr, colnr_T col, long len));
- void netbeans_unmodified __ARGS((buf_T *bufp));
-diff -Naur vim72.orig/src/proto/option.pro vim72/src/proto/option.pro
---- vim72.orig/src/proto/option.pro	2008-08-09 07:31:43.000000000 -0700
-+++ vim72/src/proto/option.pro	2009-09-12 08:41:35.000000000 -0700
-@@ -29,6 +29,7 @@
- int makefoldset __ARGS((FILE *fd));
- void clear_termoptions __ARGS((void));
- void free_termoptions __ARGS((void));
-+void free_one_termoption __ARGS((char_u *var));
- void set_term_defaults __ARGS((void));
- void comp_col __ARGS((void));
- char_u *get_equalprg __ARGS((void));
-@@ -44,6 +45,7 @@
- void set_context_in_set_cmd __ARGS((expand_T *xp, char_u *arg, int opt_flags));
- int ExpandSettings __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file));
- int ExpandOldSetting __ARGS((int *num_file, char_u ***file));
-+int langmap_adjust_mb __ARGS((int c));
- int has_format_option __ARGS((int x));
- int shortmess __ARGS((int x));
- void vimrc_found __ARGS((char_u *fname, char_u *envname));
-diff -Naur vim72.orig/src/proto/os_unix.pro vim72/src/proto/os_unix.pro
---- vim72.orig/src/proto/os_unix.pro	2008-08-09 07:31:44.000000000 -0700
-+++ vim72/src/proto/os_unix.pro	2009-09-12 08:41:19.000000000 -0700
-@@ -1,4 +1,5 @@
- /* os_unix.c */
-+int mch_chdir __ARGS((char *path));
- void mch_write __ARGS((char_u *s, int len));
- int mch_inchar __ARGS((char_u *buf, int maxlen, long wtime, int tb_change_cnt));
- int mch_char_avail __ARGS((void));
-diff -Naur vim72.orig/src/proto/spell.pro vim72/src/proto/spell.pro
---- vim72.orig/src/proto/spell.pro	2008-08-09 07:31:48.000000000 -0700
-+++ vim72/src/proto/spell.pro	2009-09-12 08:38:17.000000000 -0700
-@@ -22,5 +22,5 @@
- char_u *spell_to_word_end __ARGS((char_u *start, buf_T *buf));
- int spell_word_start __ARGS((int startcol));
- void spell_expand_check_cap __ARGS((colnr_T col));
--int expand_spelling __ARGS((linenr_T lnum, int col, char_u *pat, char_u ***matchp));
-+int expand_spelling __ARGS((linenr_T lnum, char_u *pat, char_u ***matchp));
- /* vim: set ft=c : */
-diff -Naur vim72.orig/src/proto/ui.pro vim72/src/proto/ui.pro
---- vim72.orig/src/proto/ui.pro	2008-08-09 07:31:52.000000000 -0700
-+++ vim72/src/proto/ui.pro	2009-09-12 08:40:50.000000000 -0700
-@@ -48,6 +48,7 @@
- void open_app_context __ARGS((void));
- void x11_setup_atoms __ARGS((Display *dpy));
- void clip_x11_request_selection __ARGS((Widget myShell, Display *dpy, VimClipboard *cbd));
-+void yank_cut_buffer0 __ARGS((Display *dpy, VimClipboard *cbd));
- void clip_x11_lose_selection __ARGS((Widget myShell, VimClipboard *cbd));
- int clip_x11_own_selection __ARGS((Widget myShell, VimClipboard *cbd));
- void clip_x11_set_selection __ARGS((VimClipboard *cbd));
-diff -Naur vim72.orig/src/proto/window.pro vim72/src/proto/window.pro
---- vim72.orig/src/proto/window.pro	2008-08-09 07:31:54.000000000 -0700
-+++ vim72/src/proto/window.pro	2009-09-12 08:40:34.000000000 -0700
-@@ -1,6 +1,7 @@
- /* window.c */
- void do_window __ARGS((int nchar, long Prenum, int xchar));
- int win_split __ARGS((int size, int flags));
-+int win_split_ins __ARGS((int size, int flags, win_T *newwin, int dir));
- int win_valid __ARGS((win_T *win));
- int win_count __ARGS((void));
- int make_windows __ARGS((int count, int vertical));
-@@ -10,9 +11,12 @@
- void win_close __ARGS((win_T *win, int free_buf));
- void win_close_othertab __ARGS((win_T *win, int free_buf, tabpage_T *tp));
- void win_free_all __ARGS((void));
-+win_T *winframe_remove __ARGS((win_T *win, int *dirp, tabpage_T *tp));
- void close_others __ARGS((int message, int forceit));
- void curwin_init __ARGS((void));
-+void win_init_empty __ARGS((win_T *wp));
- int win_alloc_first __ARGS((void));
-+void win_alloc_aucmd_win __ARGS((void));
- void win_init_size __ARGS((void));
- void free_tabpage __ARGS((tabpage_T *tp));
- int win_new_tabpage __ARGS((int after));
-@@ -30,6 +34,8 @@
- void win_enter __ARGS((win_T *wp, int undo_sync));
- win_T *buf_jump_open_win __ARGS((buf_T *buf));
- win_T *buf_jump_open_tab __ARGS((buf_T *buf));
-+void win_append __ARGS((win_T *after, win_T *wp));
-+void win_remove __ARGS((win_T *wp, tabpage_T *tp));
- int win_alloc_lines __ARGS((win_T *wp));
- void win_free_lsize __ARGS((win_T *wp));
- void shell_new_rows __ARGS((void));
-@@ -58,6 +64,8 @@
- int min_rows __ARGS((void));
- int only_one_window __ARGS((void));
- void check_lnums __ARGS((int do_curwin));
-+void make_snapshot __ARGS((int idx));
-+void restore_snapshot __ARGS((int idx, int close_curwin));
- 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));
-diff -Naur vim72.orig/src/pty.c vim72/src/pty.c
---- vim72.orig/src/pty.c	2008-06-21 11:52:58.000000000 -0700
-+++ vim72/src/pty.c	2009-09-12 08:30:44.000000000 -0700
-@@ -270,9 +270,10 @@
- }
- #endif
- 
--#if defined(HAVE_SVR4_PTYS) && !defined(PTY_DONE) && !defined(hpux)
-+#if defined(HAVE_SVR4_PTYS) && !defined(PTY_DONE) && !defined(hpux) && !defined(MACOS_X)
- 
--/* NOTE: Even though HPUX can have /dev/ptmx, the code below doesn't work! */
-+/* NOTE: Even though HPUX can have /dev/ptmx, the code below doesn't work!
-+ * Same for Mac OS X Leopard. */
- #define PTY_DONE
-     int
- OpenPTY(ttyn)
-diff -Naur vim72.orig/src/quickfix.c vim72/src/quickfix.c
---- vim72.orig/src/quickfix.c	2008-07-18 05:53:02.000000000 -0700
-+++ vim72/src/quickfix.c	2009-09-12 08:40:34.000000000 -0700
-@@ -1419,6 +1419,7 @@
-     int			opened_window = FALSE;
-     win_T		*win;
-     win_T		*altwin;
-+    int			flags;
- #endif
-     int			print_message = TRUE;
-     int			len;
-@@ -1530,7 +1531,6 @@
-     if (qf_ptr->qf_type == 1 && (!curwin->w_buffer->b_help || cmdmod.tab != 0))
-     {
- 	win_T	*wp;
--	int	n;
- 
- 	if (cmdmod.tab != 0)
- 	    wp = NULL;
-@@ -1546,13 +1546,16 @@
- 	     * Split off help window; put it at far top if no position
- 	     * specified, the current window is vertically split and narrow.
- 	     */
--	    n = WSP_HELP;
-+	    flags = WSP_HELP;
- # ifdef FEAT_VERTSPLIT
- 	    if (cmdmod.split == 0 && curwin->w_width != Columns
- 						      && curwin->w_width < 80)
--		n |= WSP_TOP;
-+		flags |= WSP_TOP;
- # endif
--	    if (win_split(0, n) == FAIL)
-+	    if (qi != &ql_info)
-+		flags |= WSP_NEWLOC;  /* don't copy the location list */
-+
-+	    if (win_split(0, flags) == FAIL)
- 		goto theend;
- 	    opened_window = TRUE;	/* close it when fail */
- 
-@@ -1562,7 +1565,6 @@
- 	    if (qi != &ql_info)	    /* not a quickfix list */
- 	    {
- 		/* The new window should use the supplied location list */
--		qf_free_all(curwin);
- 		curwin->w_llist = qi;
- 		qi->qf_refcount++;
- 	    }
-@@ -1609,10 +1611,11 @@
- 		{
- 		    goto_tabpage_win(tp, wp);
- 		    usable_win = 1;
--		    break;
-+		    goto win_found;
- 		}
- 	    }
- 	}
-+win_found:
- 
- 	/*
- 	 * If there is only one window and it is the quickfix window, create a
-@@ -1622,7 +1625,10 @@
- 	{
- 	    ll_ref = curwin->w_llist_ref;
- 
--	    if (win_split(0, WSP_ABOVE) == FAIL)
-+	    flags = WSP_ABOVE;
-+	    if (ll_ref != NULL)
-+		flags |= WSP_NEWLOC;
-+	    if (win_split(0, flags) == FAIL)
- 		goto failed;		/* not enough room for window */
- 	    opened_window = TRUE;	/* close it when fail */
- 	    p_swb = empty_option;	/* don't split again */
-@@ -1634,7 +1640,6 @@
- 	    {
- 		/* The new window should use the location list from the
- 		 * location list window */
--		qf_free_all(curwin);
- 		curwin->w_llist = ll_ref;
- 		ll_ref->qf_refcount++;
- 	    }
-@@ -2233,7 +2238,6 @@
-  * ":cclose": close the window showing the list of errors.
-  * ":lclose": close the window showing the location list
-  */
--/*ARGSUSED*/
-     void
- ex_cclose(eap)
-     exarg_T	*eap;
-@@ -2307,15 +2311,12 @@
- 	if (eap->cmdidx == CMD_copen || eap->cmdidx == CMD_cwindow)
- 	    /* Create the new window at the very bottom. */
- 	    win_goto(lastwin);
--	if (win_split(height, WSP_BELOW) == FAIL)
-+	if (win_split(height, WSP_BELOW | WSP_NEWLOC) == FAIL)
- 	    return;		/* not enough room for window */
- #ifdef FEAT_SCROLLBIND
- 	curwin->w_p_scb = FALSE;
- #endif
- 
--	/* Remove the location list for the quickfix window */
--	qf_free_all(curwin);
--
- 	if (eap->cmdidx == CMD_lopen || eap->cmdidx == CMD_lwindow)
- 	{
- 	    /*
-@@ -2339,7 +2340,13 @@
- 	    set_option_value((char_u *)"bt", 0L, (char_u *)"quickfix",
- 								   OPT_LOCAL);
- 	    set_option_value((char_u *)"bh", 0L, (char_u *)"wipe", OPT_LOCAL);
--	    set_option_value((char_u *)"diff", 0L, NULL, OPT_LOCAL);
-+#ifdef FEAT_DIFF
-+	    curwin->w_p_diff = FALSE;
-+#endif
-+#ifdef FEAT_FOLDING
-+	    set_option_value((char_u *)"fdm", 0L, (char_u *)"manual",
-+								   OPT_LOCAL);
-+#endif
- 	}
- 
- 	/* Only set the height when still in the same tab page and there is no
-@@ -2600,10 +2607,12 @@
-     curbuf->b_p_ma = FALSE;
- 
- #ifdef FEAT_AUTOCMD
-+    keep_filetype = TRUE;		/* don't detect 'filetype' */
-     apply_autocmds(EVENT_BUFREADPOST, (char_u *)"quickfix", NULL,
- 							       FALSE, curbuf);
-     apply_autocmds(EVENT_BUFWINENTER, (char_u *)"quickfix", NULL,
- 							       FALSE, curbuf);
-+    keep_filetype = FALSE;
- #endif
- 
-     /* make sure it will be redrawn */
-@@ -2759,7 +2768,7 @@
-     sprintf((char *)cmd, "%s%s%s", (char *)p_shq, (char *)eap->arg,
- 							       (char *)p_shq);
-     if (*p_sp != NUL)
--	append_redir(cmd, p_sp, fname);
-+	append_redir(cmd, len, p_sp, fname);
-     /*
-      * Output a newline if there's something else than the :make command that
-      * was typed (in which case the cursor is in column 0).
-@@ -3196,7 +3205,7 @@
- 			break;
- 		    col = regmatch.endpos[0].col
- 					    + (col == regmatch.endpos[0].col);
--		    if (col > STRLEN(ml_get_buf(buf, lnum, FALSE)))
-+		    if (col > (colnr_T)STRLEN(ml_get_buf(buf, lnum, FALSE)))
- 			break;
- 		}
- 		line_breakcheck();
-@@ -3397,14 +3406,15 @@
-     /* Init the options. */
-     buf_copy_options(newbuf, BCO_ENTER | BCO_NOHELP);
- 
--    /* set curwin/curbuf to buf and save a few things */
--    aucmd_prepbuf(&aco, newbuf);
-+    /* need to open the memfile before putting the buffer in a window */
-+    if (ml_open(newbuf) == OK)
-+    {
-+	/* set curwin/curbuf to buf and save a few things */
-+	aucmd_prepbuf(&aco, newbuf);
- 
--    /* Need to set the filename for autocommands. */
--    (void)setfname(curbuf, fname, NULL, FALSE);
-+	/* Need to set the filename for autocommands. */
-+	(void)setfname(curbuf, fname, NULL, FALSE);
- 
--    if (ml_open(curbuf) == OK)
--    {
- 	/* Create swap file now to avoid the ATTENTION message. */
- 	check_need_swap(TRUE);
- 
-@@ -3427,10 +3437,10 @@
- 		newbuf = curbuf;
- 	    }
- 	}
--    }
- 
--    /* restore curwin/curbuf and a few other things */
--    aucmd_restbuf(&aco);
-+	/* restore curwin/curbuf and a few other things */
-+	aucmd_restbuf(&aco);
-+    }
- 
-     if (!buf_valid(newbuf))
- 	return NULL;
-diff -Naur vim72.orig/src/regexp.c vim72/src/regexp.c
---- vim72.orig/src/regexp.c	2008-08-07 12:58:50.000000000 -0700
-+++ vim72/src/regexp.c	2009-09-12 08:38:31.000000000 -0700
-@@ -471,7 +471,7 @@
- 
-     if ((*pp)[1] == ':')
-     {
--	for (i = 0; i < sizeof(class_names) / sizeof(*class_names); ++i)
-+	for (i = 0; i < (int)(sizeof(class_names) / sizeof(*class_names)); ++i)
- 	    if (STRNCMP(*pp + 2, class_names[i], STRLEN(class_names[i])) == 0)
- 	    {
- 		*pp += STRLEN(class_names[i]) + 2;
-@@ -3362,12 +3362,11 @@
-  * Match a regexp against a string ("line" points to the string) or multiple
-  * lines ("line" is NULL, use reg_getline()).
-  */
--/*ARGSUSED*/
-     static long
- vim_regexec_both(line, col, tm)
-     char_u	*line;
-     colnr_T	col;		/* column to start looking for match */
--    proftime_T	*tm;		/* timeout limit or NULL */
-+    proftime_T	*tm UNUSED;	/* timeout limit or NULL */
- {
-     regprog_T	*prog;
-     char_u	*s;
-@@ -4532,7 +4531,7 @@
- 		cleanup_subexpr();
- 		if (!REG_MULTI)		/* Single-line regexp */
- 		{
--		    if (reg_endp[no] == NULL)
-+		    if (reg_startp[no] == NULL || reg_endp[no] == NULL)
- 		    {
- 			/* Backref was not set: Match an empty string. */
- 			len = 0;
-@@ -4548,7 +4547,7 @@
- 		}
- 		else				/* Multi-line regexp */
- 		{
--		    if (reg_endpos[no].lnum < 0)
-+		    if (reg_startpos[no].lnum < 0 || reg_endpos[no].lnum < 0)
- 		    {
- 			/* Backref was not set: Match an empty string. */
- 			len = 0;
-@@ -7279,13 +7278,11 @@
-     }
-     else
-     {
--	if (submatch_match->endp[no] == NULL)
-+	s = submatch_match->startp[no];
-+	if (s == NULL || submatch_match->endp[no] == NULL)
- 	    retval = NULL;
- 	else
--	{
--	    s = submatch_match->startp[no];
- 	    retval = vim_strnsave(s, (int)(submatch_match->endp[no] - s));
--	}
-     }
- 
-     return retval;
-diff -Naur vim72.orig/src/screen.c vim72/src/screen.c
---- vim72.orig/src/screen.c	2008-07-24 07:45:07.000000000 -0700
-+++ vim72/src/screen.c	2009-09-12 08:41:48.000000000 -0700
-@@ -270,11 +270,10 @@
-  * Note that when also inserting/deleting lines w_redraw_top and w_redraw_bot
-  * may become invalid and the whole window will have to be redrawn.
-  */
--/*ARGSUSED*/
-     void
- redrawWinline(lnum, invalid)
-     linenr_T	lnum;
--    int		invalid;	/* window line height is invalid now */
-+    int		invalid UNUSED;	/* window line height is invalid now */
- {
- #ifdef FEAT_FOLDING
-     int		i;
-@@ -2413,7 +2412,7 @@
- 			&& (lnume < bot->lnum
- 			    || (lnume == bot->lnum
- 				&& (bot->col - (*p_sel == 'e'))
--		>= STRLEN(ml_get_buf(wp->w_buffer, lnume, FALSE)))))))
-+		>= (colnr_T)STRLEN(ml_get_buf(wp->w_buffer, lnume, FALSE)))))))
- 	{
- 	    if (VIsual_mode == Ctrl_V)
- 	    {
-@@ -2439,9 +2438,17 @@
- 
- #ifdef FEAT_SYN_HL
-     /* Show 'cursorcolumn' in the fold line. */
--    if (wp->w_p_cuc && (int)wp->w_virtcol + txtcol < W_WIDTH(wp))
--	ScreenAttrs[off + wp->w_virtcol + txtcol] = hl_combine_attr(
--		 ScreenAttrs[off + wp->w_virtcol + txtcol], hl_attr(HLF_CUC));
-+    if (wp->w_p_cuc)
-+    {
-+	txtcol += wp->w_virtcol;
-+	if (wp->w_p_wrap)
-+	    txtcol -= wp->w_skipcol;
-+	else
-+	    txtcol -= wp->w_leftcol;
-+	if (txtcol >= 0 && txtcol < W_WIDTH(wp))
-+	    ScreenAttrs[off + txtcol] = hl_combine_attr(
-+				 ScreenAttrs[off + txtcol], hl_attr(HLF_CUC));
-+    }
- #endif
- 
-     SCREEN_LINE(row + W_WINROW(wp), W_WINCOL(wp), (int)W_WIDTH(wp),
-@@ -2541,14 +2548,13 @@
-  *
-  * Return the number of last row the line occupies.
-  */
--/* ARGSUSED */
-     static int
- win_line(wp, lnum, startrow, endrow, nochange)
-     win_T	*wp;
-     linenr_T	lnum;
-     int		startrow;
-     int		endrow;
--    int		nochange;		/* not updating for changed text */
-+    int		nochange UNUSED;	/* not updating for changed text */
- {
-     int		col;			/* visual column on screen */
-     unsigned	off;			/* offset in ScreenLines/ScreenAttrs */
-@@ -2588,6 +2594,7 @@
-     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;
-@@ -2784,9 +2791,10 @@
- 	    top = &VIsual;
- 	    bot = &curwin->w_cursor;
- 	}
-+	lnum_in_visual_area = (lnum >= top->lnum && lnum <= bot->lnum);
- 	if (VIsual_mode == Ctrl_V)	/* block mode */
- 	{
--	    if (lnum >= top->lnum && lnum <= bot->lnum)
-+	    if (lnum_in_visual_area)
- 	    {
- 		fromcol = wp->w_old_cursor_fcol;
- 		tocol = wp->w_old_cursor_lcol;
-@@ -2879,8 +2887,9 @@
- 	}
- 	else
- 	    tocol = MAXCOL;
--	if (fromcol == tocol)		/* do at least one character */
--	    tocol = fromcol + 1;	/* happens when past end of line */
-+	/* do at least one character; happens when past end of line */
-+	if (fromcol == tocol)
-+	    tocol = fromcol + 1;
- 	area_highlighting = TRUE;
- 	attr = hl_attr(HLF_I);
-     }
-@@ -3412,6 +3421,7 @@
- 			&& (*mb_ptr2cells)(ptr) > 1)
- #endif
- 		    || ((int)vcol_prev == fromcol_prev
-+			&& vcol_prev < vcol	/* not at margin */
- 			&& vcol < tocol))
- 		area_attr = attr;		/* start highlighting */
- 	    else if (area_attr != 0
-@@ -3544,7 +3554,8 @@
- 		/* Use line_attr when not in the Visual or 'incsearch' area
- 		 * (area_attr may be 0 when "noinvcur" is set). */
- 	    else if (line_attr != 0 && ((fromcol == -10 && tocol == MAXCOL)
--					|| (vcol < fromcol || vcol >= tocol)))
-+				|| vcol < fromcol || vcol_prev < fromcol_prev
-+				|| vcol >= tocol))
- 		char_attr = line_attr;
- #endif
- 	    else
-@@ -4106,6 +4117,7 @@
- # endif
- 				    (col < W_WIDTH(wp)))
- 				&& !(noinvcur
-+				    && lnum == wp->w_cursor.lnum
- 				    && (colnr_T)vcol == wp->w_virtcol)))
- 			&& lcs_eol_one >= 0)
- 		{
-@@ -4247,7 +4259,7 @@
- 	 * preedit_changed and commit.  Thus Vim can't set "im_is_active", use
- 	 * im_is_preediting() here. */
- 	if (xic != NULL
--		&& lnum == curwin->w_cursor.lnum
-+		&& lnum == wp->w_cursor.lnum
- 		&& (State & INSERT)
- 		&& !p_imdisable
- 		&& im_is_preediting()
-@@ -4256,7 +4268,7 @@
- 	    colnr_T tcol;
- 
- 	    if (preedit_end_col == MAXCOL)
--		getvcol(curwin, &(curwin->w_cursor), &tcol, NULL, NULL);
-+		getvcol(curwin, &(wp->w_cursor), &tcol, NULL, NULL);
- 	    else
- 		tcol = preedit_end_col;
- 	    if ((long)preedit_start_col <= vcol && vcol < (long)tcol)
-@@ -4353,7 +4365,13 @@
- 	    }
- #endif
- 	    if (lcs_eol == lcs_eol_one
--		    && ((area_attr != 0 && vcol == fromcol && c == NUL)
-+		    && ((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 */
- 			|| (prevcol_hl_flag == TRUE
-@@ -4447,7 +4465,8 @@
- 	if (c == NUL)
- 	{
- #ifdef FEAT_SYN_HL
--	    if (eol_hl_off > 0 && vcol - eol_hl_off == (long)wp->w_virtcol)
-+	    if (eol_hl_off > 0 && vcol - eol_hl_off == (long)wp->w_virtcol
-+		    && lnum == wp->w_cursor.lnum)
- 	    {
- 		/* highlight last char after line */
- 		--col;
-@@ -4549,7 +4568,8 @@
- 	 * highlight the cursor position itself. */
- 	if (wp->w_p_cuc && vcol == (long)wp->w_virtcol
- 		&& lnum != wp->w_cursor.lnum
--		&& draw_state == WL_LINE)
-+		&& draw_state == WL_LINE
-+		&& !lnum_in_visual_area)
- 	{
- 	    vcol_save_attr = char_attr;
- 	    char_attr = hl_combine_attr(char_attr, hl_attr(HLF_CUC));
-@@ -4652,7 +4672,7 @@
- 	    --n_skip;
- 
- 	/* Only advance the "vcol" when after the 'number' column. */
--	if (draw_state >= WL_SBR
-+	if (draw_state > WL_NR
- #ifdef FEAT_DIFF
- 		&& filler_todo <= 0
- #endif
-@@ -5119,8 +5139,8 @@
- #endif
- 
- #if defined(FEAT_GUI) || defined(UNIX)
--	    /* The bold trick makes a single row of pixels appear in the next
--	     * character.  When a bold character is removed, the next
-+	    /* The bold trick makes a single column of pixels appear in the
-+	     * next character.  When a bold character is removed, the next
- 	     * character should be redrawn too.  This happens for our own GUI
- 	     * and for some xterms. */
- 	    if (
-@@ -5723,6 +5743,13 @@
-     int		fillchar;
-     int		attr;
-     int		this_ru_col;
-+    static int  busy = FALSE;
-+
-+    /* It's possible to get here recursively when 'statusline' (indirectly)
-+     * invokes ":redrawstatus".  Simply ignore the call then. */
-+    if (busy)
-+	return;
-+    busy = TRUE;
- 
-     wp->w_redr_status = FALSE;
-     if (wp->w_status_height == 0)
-@@ -5861,6 +5888,7 @@
- 									attr);
-     }
- #endif
-+    busy = FALSE;
- }
- 
- #ifdef FEAT_STL_OPT
-@@ -6076,7 +6104,7 @@
- 				fillchar, maxwidth, hltab, tabtab);
-     len = (int)STRLEN(buf);
- 
--    while (width < maxwidth && len < sizeof(buf) - 1)
-+    while (width < maxwidth && len < (int)sizeof(buf) - 1)
-     {
- #ifdef FEAT_MBYTE
- 	len += (*mb_char2bytes)(fillchar, buf + len);
-@@ -6263,9 +6291,15 @@
-     int		pcc[MAX_MCO];
- # endif
- #endif
-+#if defined(FEAT_MBYTE) || defined(FEAT_GUI) || defined(UNIX)
-+    int		force_redraw_this;
-+    int		force_redraw_next = FALSE;
-+#endif
-+    int		need_redraw;
- 
-     if (ScreenLines == NULL || row >= screen_Rows)	/* safety check */
- 	return;
-+    off = LineOffset[row] + col;
- 
- #ifdef FEAT_MBYTE
-     /* When drawing over the right halve of a double-wide char clear out the
-@@ -6275,10 +6309,21 @@
- 	    && !gui.in_use
- # endif
- 	    && mb_fix_col(col, row) != col)
--	screen_puts_len((char_u *)" ", 1, row, col - 1, 0);
-+    {
-+	ScreenLines[off - 1] = ' ';
-+	ScreenAttrs[off - 1] = 0;
-+	if (enc_utf8)
-+	{
-+	    ScreenLinesUC[off - 1] = 0;
-+	    ScreenLinesC[0][off - 1] = 0;
-+	}
-+	/* redraw the previous cell, make it empty */
-+	screen_char(off - 1, row, col - 1);
-+	/* force the cell at "col" to be redrawn */
-+	force_redraw_next = TRUE;
-+    }
- #endif
- 
--    off = LineOffset[row] + col;
- #ifdef FEAT_MBYTE
-     max_off = LineOffset[row] + screen_Columns;
- #endif
-@@ -6342,7 +6387,12 @@
- 	}
- #endif
- 
--	if (ScreenLines[off] != c
-+#if defined(FEAT_MBYTE) || defined(FEAT_GUI) || defined(UNIX)
-+	force_redraw_this = force_redraw_next;
-+	force_redraw_next = FALSE;
-+#endif
-+
-+	need_redraw = ScreenLines[off] != c
- #ifdef FEAT_MBYTE
- 		|| (mbyte_cells == 2
- 		    && ScreenLines[off + 1] != (enc_dbcs ? ptr[1] : 0))
-@@ -6350,24 +6400,24 @@
- 		    && c == 0x8e
- 		    && ScreenLines2[off] != ptr[1])
- 		|| (enc_utf8
--		    && (ScreenLinesUC[off] != (u8char_T)u8c
-+		    && (ScreenLinesUC[off] != (u8char_T)(c >= 0x80 ? u8c : 0)
- 			|| screen_comp_differs(off, u8cc)))
- #endif
- 		|| ScreenAttrs[off] != attr
--		|| exmode_active
-+		|| exmode_active;
-+
-+	if (need_redraw
-+#if defined(FEAT_MBYTE) || defined(FEAT_GUI) || defined(UNIX)
-+		|| force_redraw_this
-+#endif
- 		)
- 	{
- #if defined(FEAT_GUI) || defined(UNIX)
- 	    /* The bold trick makes a single row of pixels appear in the next
- 	     * character.  When a bold character is removed, the next
- 	     * character should be redrawn too.  This happens for our own GUI
--	     * and for some xterms.
--	     * Force the redraw by setting the attribute to a different value
--	     * than "attr", the contents of ScreenLines[] may be needed by
--	     * mb_off2cells() further on.
--	     * Don't do this for the last drawn character, because the next
--	     * character may not be redrawn. */
--	    if (
-+	     * and for some xterms. */
-+	    if (need_redraw && ScreenLines[off] != ' ' && (
- # ifdef FEAT_GUI
- 		    gui.in_use
- # endif
-@@ -6377,23 +6427,14 @@
- # ifdef UNIX
- 		    term_is_xterm
- # endif
--	       )
-+		    ))
- 	    {
--		int		n;
-+		int	n = ScreenAttrs[off];
- 
--		n = ScreenAttrs[off];
--# ifdef FEAT_MBYTE
--		if (col + mbyte_cells < screen_Columns
--			&& (n > HL_ALL || (n & HL_BOLD))
--			&& (len < 0 ? ptr[mbyte_blen] != NUL
--					     : ptr + mbyte_blen < text + len))
--		    ScreenAttrs[off + mbyte_cells] = attr + 1;
--# else
--		if (col + 1 < screen_Columns
--			&& (n > HL_ALL || (n & HL_BOLD))
--			&& (len < 0 ? ptr[1] != NUL : ptr + 1 < text + len))
--		    ScreenLines[off + 1] = 0;
--# endif
-+		if (n > HL_ALL)
-+		    n = syn_attr2attr(n);
-+		if (n & HL_BOLD)
-+		    force_redraw_next = TRUE;
- 	    }
- #endif
- #ifdef FEAT_MBYTE
-@@ -6480,6 +6521,20 @@
- 	    ++ptr;
- 	}
-     }
-+
-+#if defined(FEAT_MBYTE) || defined(FEAT_GUI) || defined(UNIX)
-+    /* If we detected the next character needs to be redrawn, but the text
-+     * doesn't extend up to there, update the character here. */
-+    if (force_redraw_next && col < screen_Columns)
-+    {
-+# ifdef FEAT_MBYTE
-+	if (enc_dbcs != 0 && dbcs_off2cells(off, max_off) > 1)
-+	    screen_char_2(off, row, col);
-+	else
-+# endif
-+	    screen_char(off, row, col);
-+    }
-+#endif
- }
- 
- #ifdef FEAT_SEARCH_EXTRA
-@@ -7356,7 +7411,11 @@
- #endif
-     static int	    entered = FALSE;		/* avoid recursiveness */
-     static int	    done_outofmem_msg = FALSE;	/* did outofmem message */
-+#ifdef FEAT_AUTOCMD
-+    int		    retry_count = 0;
- 
-+retry:
-+#endif
-     /*
-      * Allocation of the screen buffers is done only when the size changes and
-      * when Rows and Columns have been set and we have started doing full
-@@ -7408,6 +7467,10 @@
-      */
-     FOR_ALL_TAB_WINDOWS(tp, wp)
- 	win_free_lsize(wp);
-+#ifdef FEAT_AUTOCMD
-+    if (aucmd_win != NULL)
-+	win_free_lsize(aucmd_win);
-+#endif
- 
-     new_ScreenLines = (schar_T *)lalloc((long_u)(
- 			      (Rows + 1) * Columns * sizeof(schar_T)), FALSE);
-@@ -7440,10 +7503,18 @@
- 	{
- 	    outofmem = TRUE;
- #ifdef FEAT_WINDOWS
--	    break;
-+	    goto give_up;
- #endif
- 	}
-     }
-+#ifdef FEAT_AUTOCMD
-+    if (aucmd_win != NULL && aucmd_win->w_lines == NULL
-+					&& win_alloc_lines(aucmd_win) == FAIL)
-+	outofmem = TRUE;
-+#endif
-+#ifdef FEAT_WINDOWS
-+give_up:
-+#endif
- 
- #ifdef FEAT_MBYTE
-     for (i = 0; i < p_mco; ++i)
-@@ -7628,8 +7699,17 @@
-     --RedrawingDisabled;
- 
- #ifdef FEAT_AUTOCMD
--    if (starting == 0)
-+    /*
-+     * Do not apply autocommands more than 3 times to avoid an endless loop
-+     * in case applying autocommands always changes Rows or Columns.
-+     */
-+    if (starting == 0 && ++retry_count <= 3)
-+    {
- 	apply_autocmds(EVENT_VIMRESIZED, NULL, NULL, FALSE, curbuf);
-+	/* In rare cases, autocommands may have altered Rows or Columns,
-+	 * jump back to check if we need to allocate the screen again. */
-+	goto retry;
-+    }
- #endif
- }
- 
-@@ -8590,7 +8670,6 @@
-  *
-  * Return OK for success, FAIL if the lines are not deleted.
-  */
--/*ARGSUSED*/
-     int
- screen_del_lines(off, row, line_count, end, force, wp)
-     int		off;
-@@ -8598,7 +8677,7 @@
-     int		line_count;
-     int		end;
-     int		force;		/* even when line_count > p_ttyscroll */
--    win_T	*wp;		/* NULL or window to use width from */
-+    win_T	*wp UNUSED;	/* NULL or window to use width from */
- {
-     int		j;
-     int		i;
-@@ -9416,13 +9495,15 @@
-     win_T	*wp;
-     int		always;
- {
--    char_u	buffer[70];
-+#define RULER_BUF_LEN 70
-+    char_u	buffer[RULER_BUF_LEN];
-     int		row;
-     int		fillchar;
-     int		attr;
-     int		empty_line = FALSE;
-     colnr_T	virtcol;
-     int		i;
-+    size_t	len;
-     int		o;
- #ifdef FEAT_VERTSPLIT
-     int		this_ru_col;
-@@ -9537,11 +9618,12 @@
- 	 * Some sprintfs return the length, some return a pointer.
- 	 * To avoid portability problems we use strlen() here.
- 	 */
--	sprintf((char *)buffer, "%ld,",
-+	vim_snprintf((char *)buffer, RULER_BUF_LEN, "%ld,",
- 		(wp->w_buffer->b_ml.ml_flags & ML_EMPTY)
- 		    ? 0L
- 		    : (long)(wp->w_cursor.lnum));
--	col_print(buffer + STRLEN(buffer),
-+	len = STRLEN(buffer);
-+	col_print(buffer + len, RULER_BUF_LEN - len,
- 			empty_line ? 0 : (int)wp->w_cursor.col + 1,
- 			(int)virtcol + 1);
- 
-@@ -9551,7 +9633,7 @@
- 	 * screen up on some terminals).
- 	 */
- 	i = (int)STRLEN(buffer);
--	get_rel_pos(wp, buffer + i + 1);
-+	get_rel_pos(wp, buffer + i + 1, RULER_BUF_LEN - i - 1);
- 	o = i + vim_strsize(buffer + i + 1);
- #ifdef FEAT_WINDOWS
- 	if (wp->w_status_height == 0)	/* can't use last char of screen */
-@@ -9578,7 +9660,7 @@
- 		    buffer[i++] = fillchar;
- 		++o;
- 	    }
--	    get_rel_pos(wp, buffer + i);
-+	    get_rel_pos(wp, buffer + i, RULER_BUF_LEN - i);
- 	}
- 	/* Truncate at window boundary. */
- #ifdef FEAT_MBYTE
-diff -Naur vim72.orig/src/search.c vim72/src/search.c
---- vim72.orig/src/search.c	2008-07-13 11:18:27.000000000 -0700
-+++ vim72/src/search.c	2009-09-12 08:38:51.000000000 -0700
-@@ -345,6 +345,15 @@
- {
-     vim_free(spats[0].pat);
-     vim_free(spats[1].pat);
-+
-+# ifdef FEAT_RIGHTLEFT
-+    if (mr_pattern_alloced)
-+    {
-+        vim_free(mr_pattern);
-+        mr_pattern_alloced = FALSE;
-+        mr_pattern = NULL;
-+    }
-+# endif
- }
- #endif
- 
-@@ -513,7 +522,6 @@
-  * When FEAT_EVAL is defined, returns the index of the first matching
-  * subpattern plus one; one if there was none.
-  */
--/*ARGSUSED*/
-     int
- searchit(win, buf, pos, dir, pat, count, options, pat_use, stop_lnum, tm)
-     win_T	*win;		/* window to search in; can be NULL for a
-@@ -526,7 +534,7 @@
-     int		options;
-     int		pat_use;	/* which pattern to use when "pat" is empty */
-     linenr_T	stop_lnum;	/* stop after this line number when != 0 */
--    proftime_T	*tm;		/* timeout limit or NULL */
-+    proftime_T	*tm UNUSED;	/* timeout limit or NULL */
- {
-     int		found;
-     linenr_T	lnum;		/* no init to shut up Apollo cc */
-@@ -545,8 +553,6 @@
-     int		save_called_emsg = called_emsg;
- #ifdef FEAT_SEARCH_EXTRA
-     int		break_loop = FALSE;
--#else
--# define break_loop FALSE
- #endif
- 
-     if (search_regcomp(pat, RE_SEARCH, pat_use,
-@@ -931,7 +937,10 @@
- 	     * twice.
- 	     */
- 	    if (!p_ws || stop_lnum != 0 || got_int || called_emsg
--					       || break_loop || found || loop)
-+#ifdef FEAT_SEARCH_EXTRA
-+					       || break_loop
-+#endif
-+					       || found || loop)
- 		break;
- 
- 	    /*
-@@ -949,7 +958,11 @@
- 		give_warning((char_u *)_(dir == BACKWARD
- 					  ? top_bot_msg : bot_top_msg), TRUE);
- 	}
--	if (got_int || called_emsg || break_loop)
-+	if (got_int || called_emsg
-+#ifdef FEAT_SEARCH_EXTRA
-+		|| break_loop
-+#endif
-+		)
- 	    break;
-     }
-     while (--count > 0 && found);   /* stop after count matches or no match */
-@@ -2327,8 +2340,8 @@
- 		    for (col = pos.col; check_prevcol(linep, col, '\\', &col);)
- 			bslcnt++;
- 		}
--		/* Only accept a match when 'M' is in 'cpo' or when ecaping is
--		 * what we expect. */
-+		/* Only accept a match when 'M' is in 'cpo' or when escaping
-+		 * is what we expect. */
- 		if (cpo_bsl || (bslcnt & 1) == match_escaped)
- 		{
- 		    if (c == initc)
-@@ -4514,12 +4527,11 @@
-  * Find identifiers or defines in included files.
-  * if p_ic && (compl_cont_status & CONT_SOL) then ptr must be in lowercase.
-  */
--/*ARGSUSED*/
-     void
- find_pattern_in_path(ptr, dir, len, whole, skip_comments,
- 				    type, count, action, start_lnum, end_lnum)
-     char_u	*ptr;		/* pointer to search pattern */
--    int		dir;		/* direction of expansion */
-+    int		dir UNUSED;	/* direction of expansion */
-     int		len;		/* length of search pattern */
-     int		whole;		/* match whole words only */
-     int		skip_comments;	/* don't match inside comments */
-@@ -4663,7 +4675,7 @@
- 			    msg_putchar('\n');	    /* cursor below last one */
- 			    if (!got_int)	    /* don't display if 'q'
- 						       typed at "--more--"
--						       mesage */
-+						       message */
- 			    {
- 				msg_home_replace_hl(new_fname);
- 				MSG_PUTS(_(" (includes previously listed match)"));
-@@ -4975,7 +4987,7 @@
- 					    || IObuff[i-2] == '!'))))
- 				IObuff[i++] = ' ';
- 			}
--			/* copy as much as posible of the new word */
-+			/* copy as much as possible of the new word */
- 			if (p - aux >= IOSIZE - i)
- 			    p = aux + IOSIZE - i - 1;
- 			STRNCPY(IObuff + i, aux, p - aux);
-@@ -5010,7 +5022,7 @@
- 		    if (did_show)
- 			msg_putchar('\n');	/* cursor below last one */
- 		    if (!got_int)		/* don't display if 'q' typed
--						    at "--more--" mesage */
-+						    at "--more--" message */
- 			msg_home_replace_hl(curr_fname);
- 		    prev_fname = curr_fname;
- 		}
-@@ -5092,7 +5104,7 @@
- 		}
- 		if (action != ACTION_SHOW)
- 		{
--		    curwin->w_cursor.col = (colnr_T) (startp - line);
-+		    curwin->w_cursor.col = (colnr_T)(startp - line);
- 		    curwin->w_set_curswant = TRUE;
- 		}
- 
-@@ -5119,7 +5131,8 @@
- 		    && action == ACTION_EXPAND
- 		    && !(compl_cont_status & CONT_SOL)
- #endif
--		    && *(p = startp + 1))
-+		    && *startp != NUL
-+		    && *(p = startp + 1) != NUL)
- 		goto search_line;
- 	}
- 	line_breakcheck();
-diff -Naur vim72.orig/src/spell.c vim72/src/spell.c
---- vim72.orig/src/spell.c	2008-07-12 12:20:55.000000000 -0700
-+++ vim72/src/spell.c	2009-09-12 08:41:27.000000000 -0700
-@@ -77,7 +77,7 @@
- 
- /*
-  * Do the opposite: based on a maximum end score and a known sound score,
-- * compute the the maximum word score that can be used.
-+ * compute the maximum word score that can be used.
-  */
- #define MAXSCORE(word_score, sound_score) ((4 * word_score - sound_score) / 3)
- 
-@@ -469,6 +469,7 @@
-     garray_T	sl_comppat;	/* CHECKCOMPOUNDPATTERN items */
-     regprog_T	*sl_compprog;	/* COMPOUNDRULE turned into a regexp progrm
- 				 * (NULL when no compounding) */
-+    char_u	*sl_comprules;	/* all COMPOUNDRULE concatenated (or NULL) */
-     char_u	*sl_compstartflags; /* flags for first compound word */
-     char_u	*sl_compallflags; /* all flags for compound words */
-     char_u	sl_nobreak;	/* When TRUE: no spaces between words */
-@@ -625,7 +626,7 @@
- /* TRUE if a word appears in the list of banned words.  */
- #define WAS_BANNED(su, word) (!HASHITEM_EMPTY(hash_find(&su->su_banned, word)))
- 
--/* Number of suggestions kept when cleaning up.  we need to keep more than
-+/* Number of suggestions kept when cleaning up.  We need to keep more than
-  * what is displayed, because when rescore_suggestions() is called the score
-  * may change and wrong suggestions may be removed later. */
- #define SUG_CLEAN_COUNT(su)    ((su)->su_maxcount < 130 ? 150 : (su)->su_maxcount + 20)
-@@ -839,7 +840,10 @@
- static void slang_clear __ARGS((slang_T *lp));
- static void slang_clear_sug __ARGS((slang_T *lp));
- static void find_word __ARGS((matchinf_T *mip, int mode));
-+static int match_checkcompoundpattern __ARGS((char_u *ptr, int wlen, garray_T *gap));
- static int can_compound __ARGS((slang_T *slang, char_u *word, char_u *flags));
-+static int can_be_compound __ARGS((trystate_T *sp, slang_T *slang, char_u *compflags, int flag));
-+static int match_compoundrule __ARGS((slang_T *slang, char_u *compflags));
- static int valid_word_prefix __ARGS((int totprefcnt, int arridx, int flags, char_u *word, slang_T *slang, int cond_req));
- static void find_prefix __ARGS((matchinf_T *mip, int mode));
- static int fold_more __ARGS((matchinf_T *mip));
-@@ -946,8 +950,8 @@
-  */
- #ifndef FEAT_MBYTE
- /* Non-multi-byte implementation. */
--# define SPELL_TOFOLD(c) ((c) < 256 ? spelltab.st_fold[c] : (c))
--# define SPELL_TOUPPER(c) ((c) < 256 ? spelltab.st_upper[c] : (c))
-+# define SPELL_TOFOLD(c) ((c) < 256 ? (int)spelltab.st_fold[c] : (c))
-+# define SPELL_TOUPPER(c) ((c) < 256 ? (int)spelltab.st_upper[c] : (c))
- # define SPELL_ISUPPER(c) ((c) < 256 ? spelltab.st_isu[c] : FALSE)
- #else
- # if defined(HAVE_WCHAR_H)
-@@ -958,18 +962,18 @@
-  * the "w" library function for characters above 255 if available. */
- # ifdef HAVE_TOWLOWER
- #  define SPELL_TOFOLD(c) (enc_utf8 && (c) >= 128 ? utf_fold(c) \
--	    : (c) < 256 ? spelltab.st_fold[c] : towlower(c))
-+	    : (c) < 256 ? (int)spelltab.st_fold[c] : (int)towlower(c))
- # else
- #  define SPELL_TOFOLD(c) (enc_utf8 && (c) >= 128 ? utf_fold(c) \
--	    : (c) < 256 ? spelltab.st_fold[c] : (c))
-+	    : (c) < 256 ? (int)spelltab.st_fold[c] : (c))
- # endif
- 
- # ifdef HAVE_TOWUPPER
- #  define SPELL_TOUPPER(c) (enc_utf8 && (c) >= 128 ? utf_toupper(c) \
--	    : (c) < 256 ? spelltab.st_upper[c] : towupper(c))
-+	    : (c) < 256 ? (int)spelltab.st_upper[c] : (int)towupper(c))
- # else
- #  define SPELL_TOUPPER(c) (enc_utf8 && (c) >= 128 ? utf_toupper(c) \
--	    : (c) < 256 ? spelltab.st_upper[c] : (c))
-+	    : (c) < 256 ? (int)spelltab.st_upper[c] : (c))
- # endif
- 
- # ifdef HAVE_ISWUPPER
-@@ -1519,6 +1523,11 @@
- 					    ((unsigned)flags >> 24)))
- 		    continue;
- 
-+		/* If there is a match with a CHECKCOMPOUNDPATTERN rule
-+		 * discard the compound word. */
-+		if (match_checkcompoundpattern(ptr, wlen, &slang->sl_comppat))
-+		    continue;
-+
- 		if (mode == FIND_COMPOUND)
- 		{
- 		    int	    capflags;
-@@ -1577,6 +1586,11 @@
- 		    if (!can_compound(slang, fword, mip->mi_compflags))
- 			continue;
- 		}
-+		else if (slang->sl_comprules != NULL
-+			     && !match_compoundrule(slang, mip->mi_compflags))
-+		    /* The compound flags collected so far do not match any
-+		     * COMPOUNDRULE, discard the compounded word. */
-+		    continue;
- 	    }
- 
- 	    /* Check NEEDCOMPOUND: can't use word without compounding. */
-@@ -1727,6 +1741,39 @@
- }
- 
- /*
-+ * Return TRUE if there is a match between the word ptr[wlen] and
-+ * CHECKCOMPOUNDPATTERN rules, assuming that we will concatenate with another
-+ * word.
-+ * A match means that the first part of CHECKCOMPOUNDPATTERN matches at the
-+ * end of ptr[wlen] and the second part matches after it.
-+ */
-+    static int
-+match_checkcompoundpattern(ptr, wlen, gap)
-+    char_u	*ptr;
-+    int		wlen;
-+    garray_T	*gap;  /* &sl_comppat */
-+{
-+    int		i;
-+    char_u	*p;
-+    int		len;
-+
-+    for (i = 0; i + 1 < gap->ga_len; i += 2)
-+    {
-+	p = ((char_u **)gap->ga_data)[i + 1];
-+	if (STRNCMP(ptr + wlen, p, STRLEN(p)) == 0)
-+	{
-+	    /* Second part matches at start of following compound word, now
-+	     * check if first part matches at end of previous word. */
-+	    p = ((char_u **)gap->ga_data)[i];
-+	    len = (int)STRLEN(p);
-+	    if (len <= wlen && STRNCMP(ptr + wlen - len, p, len) == 0)
-+		return TRUE;
-+	}
-+    }
-+    return FALSE;
-+}
-+
-+/*
-  * Return TRUE if "flags" is a valid sequence of compound flags and "word"
-  * does not have too many syllables.
-  */
-@@ -1773,6 +1820,98 @@
- }
- 
- /*
-+ * Return TRUE when the sequence of flags in "compflags" plus "flag" can
-+ * possibly form a valid compounded word.  This also checks the COMPOUNDRULE
-+ * lines if they don't contain wildcards.
-+ */
-+    static int
-+can_be_compound(sp, slang, compflags, flag)
-+    trystate_T	*sp;
-+    slang_T	*slang;
-+    char_u	*compflags;
-+    int		flag;
-+{
-+    /* If the flag doesn't appear in sl_compstartflags or sl_compallflags
-+     * then it can't possibly compound. */
-+    if (!byte_in_str(sp->ts_complen == sp->ts_compsplit
-+		? slang->sl_compstartflags : slang->sl_compallflags, flag))
-+	return FALSE;
-+
-+    /* If there are no wildcards, we can check if the flags collected so far
-+     * possibly can form a match with COMPOUNDRULE patterns.  This only
-+     * makes sense when we have two or more words. */
-+    if (slang->sl_comprules != NULL && sp->ts_complen > sp->ts_compsplit)
-+    {
-+	int v;
-+
-+	compflags[sp->ts_complen] = flag;
-+	compflags[sp->ts_complen + 1] = NUL;
-+	v = match_compoundrule(slang, compflags + sp->ts_compsplit);
-+	compflags[sp->ts_complen] = NUL;
-+	return v;
-+    }
-+
-+    return TRUE;
-+}
-+
-+
-+/*
-+ * Return TRUE if the compound flags in compflags[] match the start of any
-+ * compound rule.  This is used to stop trying a compound if the flags
-+ * collected so far can't possibly match any compound rule.
-+ * Caller must check that slang->sl_comprules is not NULL.
-+ */
-+    static int
-+match_compoundrule(slang, compflags)
-+    slang_T	*slang;
-+    char_u	*compflags;
-+{
-+    char_u	*p;
-+    int		i;
-+    int		c;
-+
-+    /* loop over all the COMPOUNDRULE entries */
-+    for (p = slang->sl_comprules; *p != NUL; ++p)
-+    {
-+	/* loop over the flags in the compound word we have made, match
-+	 * them against the current rule entry */
-+	for (i = 0; ; ++i)
-+	{
-+	    c = compflags[i];
-+	    if (c == NUL)
-+		/* found a rule that matches for the flags we have so far */
-+		return TRUE;
-+	    if (*p == '/' || *p == NUL)
-+		break;  /* end of rule, it's too short */
-+	    if (*p == '[')
-+	    {
-+		int match = FALSE;
-+
-+		/* compare against all the flags in [] */
-+		++p;
-+		while (*p != ']' && *p != NUL)
-+		    if (*p++ == c)
-+			match = TRUE;
-+		if (!match)
-+		    break;  /* none matches */
-+	    }
-+	    else if (*p != c)
-+		break;  /* flag of word doesn't match flag in pattern */
-+	    ++p;
-+	}
-+
-+	/* Skip to the next "/", where the next pattern starts. */
-+	p = vim_strchr(p, '/');
-+	if (p == NULL)
-+	    break;
-+    }
-+
-+    /* Checked all the rules and none of them match the flags, so there
-+     * can't possibly be a compound starting with these flags. */
-+    return FALSE;
-+}
-+
-+/*
-  * Return non-zero if the prefix indicated by "arridx" matches with the prefix
-  * ID in "flags" for the word "word".
-  * The WF_RAREPFX flag is included in the return value for a rare prefix.
-@@ -2237,7 +2376,7 @@
- 
- 	    /* If we are back at the starting line and there is no match then
- 	     * give up. */
--	    if (lnum == wp->w_cursor.lnum && !found_one)
-+	    if (lnum == wp->w_cursor.lnum && (!found_one || wrapped))
- 		break;
- 
- 	    /* Skip the characters at the start of the next line that were
-@@ -2513,9 +2652,11 @@
-     lp->sl_midword = NULL;
- 
-     vim_free(lp->sl_compprog);
-+    vim_free(lp->sl_comprules);
-     vim_free(lp->sl_compstartflags);
-     vim_free(lp->sl_compallflags);
-     lp->sl_compprog = NULL;
-+    lp->sl_comprules = NULL;
-     lp->sl_compstartflags = NULL;
-     lp->sl_compallflags = NULL;
- 
-@@ -3460,6 +3601,7 @@
-     char_u	*pp;
-     char_u	*cp;
-     char_u	*ap;
-+    char_u	*crp;
-     int		cnt;
-     garray_T	*gap;
- 
-@@ -3545,6 +3687,12 @@
-     slang->sl_compallflags = ap;
-     *ap = NUL;
- 
-+    /* And a list of all patterns in their original form, for checking whether
-+     * compounding may work in match_compoundrule().  This is freed when we
-+     * encounter a wildcard, the check doesn't work then. */
-+    crp = alloc(todo + 1);
-+    slang->sl_comprules = crp;
-+
-     pp = pat;
-     *pp++ = '^';
-     *pp++ = '\\';
-@@ -3587,6 +3735,20 @@
- 		    atstart = 0;
- 	    }
- 	}
-+
-+	/* Copy flag to "sl_comprules", unless we run into a wildcard. */
-+	if (crp != NULL)
-+	{
-+	    if (c == '+' || c == '*')
-+	    {
-+		vim_free(slang->sl_comprules);
-+		slang->sl_comprules = NULL;
-+		crp = NULL;
-+	    }
-+	    else
-+		*crp++ = c;
-+	}
-+
- 	if (c == '/')	    /* slash separates two items */
- 	{
- 	    *pp++ = '\\';
-@@ -3611,6 +3773,9 @@
-     *pp++ = '$';
-     *pp = NUL;
- 
-+    if (crp != NULL)
-+	*crp = NUL;
-+
-     slang->sl_compprog = vim_regcomp(pat, RE_MAGIC + RE_STRING + RE_STRICT);
-     vim_free(pat);
-     if (slang->sl_compprog == NULL)
-@@ -4791,13 +4956,16 @@
-  * Structure that is used to store the items in the word tree.  This avoids
-  * the need to keep track of each allocated thing, everything is freed all at
-  * once after ":mkspell" is done.
-+ * Note: "sb_next" must be just before "sb_data" to make sure the alignment of
-+ * "sb_data" is correct for systems where pointers must be aligned on
-+ * pointer-size boundaries and sizeof(pointer) > sizeof(int) (e.g., Sparc).
-  */
- #define  SBLOCKSIZE 16000	/* size of sb_data */
- typedef struct sblock_S sblock_T;
- struct sblock_S
- {
--    sblock_T	*sb_next;	/* next block in list */
-     int		sb_used;	/* nr of bytes already in use */
-+    sblock_T	*sb_next;	/* next block in list */
-     char_u	sb_data[1];	/* data, actually longer */
- };
- 
-@@ -4915,6 +5083,7 @@
- } spellinfo_T;
- 
- static afffile_T *spell_read_aff __ARGS((spellinfo_T *spin, char_u *fname));
-+static int is_aff_rule __ARGS((char_u **items, int itemcnt, char *rulename, int	 mincount));
- static void aff_process_flags __ARGS((afffile_T *affile, affentry_T *entry));
- static int spell_info_item __ARGS((char_u *s));
- static unsigned affitem2flag __ARGS((int flagtype, char_u *item, char_u	*fname, int lnum));
-@@ -4950,7 +5119,7 @@
- static void put_sugtime __ARGS((spellinfo_T *spin, FILE *fd));
- static int write_vim_spell __ARGS((spellinfo_T *spin, char_u *fname));
- static void clear_node __ARGS((wordnode_T *node));
--static int put_node __ARGS((FILE *fd, wordnode_T *node, int index, int regionmask, int prefixtree));
-+static int put_node __ARGS((FILE *fd, wordnode_T *node, int idx, int regionmask, int prefixtree));
- static void spell_make_sugfile __ARGS((spellinfo_T *spin, char_u *wfname));
- static int sug_filltree __ARGS((spellinfo_T *spin, slang_T *slang));
- static int sug_maketable __ARGS((spellinfo_T *spin));
-@@ -5223,8 +5392,7 @@
- 	/* Handle non-empty lines. */
- 	if (itemcnt > 0)
- 	{
--	    if (STRCMP(items[0], "SET") == 0 && itemcnt == 2
--						       && aff->af_enc == NULL)
-+	    if (is_aff_rule(items, itemcnt, "SET", 2) && aff->af_enc == NULL)
- 	    {
- #ifdef FEAT_MBYTE
- 		/* Setup for conversion from "ENC" to 'encoding'. */
-@@ -5239,7 +5407,7 @@
- 		    smsg((char_u *)_("Conversion in %s not supported"), fname);
- #endif
- 	    }
--	    else if (STRCMP(items[0], "FLAG") == 0 && itemcnt == 2
-+	    else if (is_aff_rule(items, itemcnt, "FLAG", 2)
- 					      && aff->af_flagtype == AFT_CHAR)
- 	    {
- 		if (STRCMP(items[1], "long") == 0)
-@@ -5284,69 +5452,71 @@
- 			spin->si_info = p;
- 		    }
- 	    }
--	    else if (STRCMP(items[0], "MIDWORD") == 0 && itemcnt == 2
-+	    else if (is_aff_rule(items, itemcnt, "MIDWORD", 2)
- 							   && midword == NULL)
- 	    {
- 		midword = getroom_save(spin, items[1]);
- 	    }
--	    else if (STRCMP(items[0], "TRY") == 0 && itemcnt == 2)
-+	    else if (is_aff_rule(items, itemcnt, "TRY", 2))
- 	    {
- 		/* ignored, we look in the tree for what chars may appear */
- 	    }
- 	    /* TODO: remove "RAR" later */
--	    else if ((STRCMP(items[0], "RAR") == 0
--			|| STRCMP(items[0], "RARE") == 0) && itemcnt == 2
--						       && aff->af_rare == 0)
-+	    else if ((is_aff_rule(items, itemcnt, "RAR", 2)
-+			|| is_aff_rule(items, itemcnt, "RARE", 2))
-+							 && aff->af_rare == 0)
- 	    {
- 		aff->af_rare = affitem2flag(aff->af_flagtype, items[1],
- 								 fname, lnum);
- 	    }
- 	    /* TODO: remove "KEP" later */
--	    else if ((STRCMP(items[0], "KEP") == 0
--		    || STRCMP(items[0], "KEEPCASE") == 0) && itemcnt == 2
-+	    else if ((is_aff_rule(items, itemcnt, "KEP", 2)
-+			|| is_aff_rule(items, itemcnt, "KEEPCASE", 2))
- 						     && aff->af_keepcase == 0)
- 	    {
- 		aff->af_keepcase = affitem2flag(aff->af_flagtype, items[1],
- 								 fname, lnum);
- 	    }
--	    else if (STRCMP(items[0], "BAD") == 0 && itemcnt == 2
--						       && aff->af_bad == 0)
-+	    else if ((is_aff_rule(items, itemcnt, "BAD", 2)
-+			|| is_aff_rule(items, itemcnt, "FORBIDDENWORD", 2))
-+							  && aff->af_bad == 0)
- 	    {
- 		aff->af_bad = affitem2flag(aff->af_flagtype, items[1],
- 								 fname, lnum);
- 	    }
--	    else if (STRCMP(items[0], "NEEDAFFIX") == 0 && itemcnt == 2
-+	    else if (is_aff_rule(items, itemcnt, "NEEDAFFIX", 2)
- 						    && aff->af_needaffix == 0)
- 	    {
- 		aff->af_needaffix = affitem2flag(aff->af_flagtype, items[1],
- 								 fname, lnum);
- 	    }
--	    else if (STRCMP(items[0], "CIRCUMFIX") == 0 && itemcnt == 2
-+	    else if (is_aff_rule(items, itemcnt, "CIRCUMFIX", 2)
- 						    && aff->af_circumfix == 0)
- 	    {
- 		aff->af_circumfix = affitem2flag(aff->af_flagtype, items[1],
- 								 fname, lnum);
- 	    }
--	    else if (STRCMP(items[0], "NOSUGGEST") == 0 && itemcnt == 2
-+	    else if (is_aff_rule(items, itemcnt, "NOSUGGEST", 2)
- 						    && aff->af_nosuggest == 0)
- 	    {
- 		aff->af_nosuggest = affitem2flag(aff->af_flagtype, items[1],
- 								 fname, lnum);
- 	    }
--	    else if (STRCMP(items[0], "NEEDCOMPOUND") == 0 && itemcnt == 2
-+	    else if ((is_aff_rule(items, itemcnt, "NEEDCOMPOUND", 2)
-+			|| is_aff_rule(items, itemcnt, "ONLYINCOMPOUND", 2))
- 						     && aff->af_needcomp == 0)
- 	    {
- 		aff->af_needcomp = affitem2flag(aff->af_flagtype, items[1],
- 								 fname, lnum);
- 	    }
--	    else if (STRCMP(items[0], "COMPOUNDROOT") == 0 && itemcnt == 2
-+	    else if (is_aff_rule(items, itemcnt, "COMPOUNDROOT", 2)
- 						     && aff->af_comproot == 0)
- 	    {
- 		aff->af_comproot = affitem2flag(aff->af_flagtype, items[1],
- 								 fname, lnum);
- 	    }
--	    else if (STRCMP(items[0], "COMPOUNDFORBIDFLAG") == 0
--				   && itemcnt == 2 && aff->af_compforbid == 0)
-+	    else if (is_aff_rule(items, itemcnt, "COMPOUNDFORBIDFLAG", 2)
-+						   && aff->af_compforbid == 0)
- 	    {
- 		aff->af_compforbid = affitem2flag(aff->af_flagtype, items[1],
- 								 fname, lnum);
-@@ -5354,8 +5524,8 @@
- 		    smsg((char_u *)_("Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line %d"),
- 			    fname, lnum);
- 	    }
--	    else if (STRCMP(items[0], "COMPOUNDPERMITFLAG") == 0
--				   && itemcnt == 2 && aff->af_comppermit == 0)
-+	    else if (is_aff_rule(items, itemcnt, "COMPOUNDPERMITFLAG", 2)
-+						   && aff->af_comppermit == 0)
- 	    {
- 		aff->af_comppermit = affitem2flag(aff->af_flagtype, items[1],
- 								 fname, lnum);
-@@ -5363,7 +5533,7 @@
- 		    smsg((char_u *)_("Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line %d"),
- 			    fname, lnum);
- 	    }
--	    else if (STRCMP(items[0], "COMPOUNDFLAG") == 0 && itemcnt == 2
-+	    else if (is_aff_rule(items, itemcnt, "COMPOUNDFLAG", 2)
- 							 && compflags == NULL)
- 	    {
- 		/* Turn flag "c" into COMPOUNDRULE compatible string "c+",
-@@ -5376,7 +5546,15 @@
- 		    compflags = p;
- 		}
- 	    }
--	    else if (STRCMP(items[0], "COMPOUNDRULE") == 0 && itemcnt == 2)
-+	    else if (is_aff_rule(items, itemcnt, "COMPOUNDRULES", 2))
-+	    {
-+		/* We don't use the count, but do check that it's a number and
-+		 * not COMPOUNDRULE mistyped. */
-+		if (atoi((char *)items[1]) == 0)
-+		    smsg((char_u *)_("Wrong COMPOUNDRULES value in %s line %d: %s"),
-+						       fname, lnum, items[1]);
-+	    }
-+	    else if (is_aff_rule(items, itemcnt, "COMPOUNDRULE", 2))
- 	    {
- 		/* Concatenate this string to previously defined ones, using a
- 		 * slash to separate them. */
-@@ -5395,7 +5573,7 @@
- 		    compflags = p;
- 		}
- 	    }
--	    else if (STRCMP(items[0], "COMPOUNDWORDMAX") == 0 && itemcnt == 2
-+	    else if (is_aff_rule(items, itemcnt, "COMPOUNDWORDMAX", 2)
- 							      && compmax == 0)
- 	    {
- 		compmax = atoi((char *)items[1]);
-@@ -5403,7 +5581,7 @@
- 		    smsg((char_u *)_("Wrong COMPOUNDWORDMAX value in %s line %d: %s"),
- 						       fname, lnum, items[1]);
- 	    }
--	    else if (STRCMP(items[0], "COMPOUNDMIN") == 0 && itemcnt == 2
-+	    else if (is_aff_rule(items, itemcnt, "COMPOUNDMIN", 2)
- 							   && compminlen == 0)
- 	    {
- 		compminlen = atoi((char *)items[1]);
-@@ -5411,7 +5589,7 @@
- 		    smsg((char_u *)_("Wrong COMPOUNDMIN value in %s line %d: %s"),
- 						       fname, lnum, items[1]);
- 	    }
--	    else if (STRCMP(items[0], "COMPOUNDSYLMAX") == 0 && itemcnt == 2
-+	    else if (is_aff_rule(items, itemcnt, "COMPOUNDSYLMAX", 2)
- 							   && compsylmax == 0)
- 	    {
- 		compsylmax = atoi((char *)items[1]);
-@@ -5419,32 +5597,29 @@
- 		    smsg((char_u *)_("Wrong COMPOUNDSYLMAX value in %s line %d: %s"),
- 						       fname, lnum, items[1]);
- 	    }
--	    else if (STRCMP(items[0], "CHECKCOMPOUNDDUP") == 0 && itemcnt == 1)
-+	    else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDDUP", 1))
- 	    {
- 		compoptions |= COMP_CHECKDUP;
- 	    }
--	    else if (STRCMP(items[0], "CHECKCOMPOUNDREP") == 0 && itemcnt == 1)
-+	    else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDREP", 1))
- 	    {
- 		compoptions |= COMP_CHECKREP;
- 	    }
--	    else if (STRCMP(items[0], "CHECKCOMPOUNDCASE") == 0 && itemcnt == 1)
-+	    else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDCASE", 1))
- 	    {
- 		compoptions |= COMP_CHECKCASE;
- 	    }
--	    else if (STRCMP(items[0], "CHECKCOMPOUNDTRIPLE") == 0
--							      && itemcnt == 1)
-+	    else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDTRIPLE", 1))
- 	    {
- 		compoptions |= COMP_CHECKTRIPLE;
- 	    }
--	    else if (STRCMP(items[0], "CHECKCOMPOUNDPATTERN") == 0
--							      && itemcnt == 2)
-+	    else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDPATTERN", 2))
- 	    {
- 		if (atoi((char *)items[1]) == 0)
- 		    smsg((char_u *)_("Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"),
- 						       fname, lnum, items[1]);
- 	    }
--	    else if (STRCMP(items[0], "CHECKCOMPOUNDPATTERN") == 0
--							      && itemcnt == 3)
-+	    else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDPATTERN", 3))
- 	    {
- 		garray_T    *gap = &spin->si_comppat;
- 		int	    i;
-@@ -5463,24 +5638,24 @@
- 					       = getroom_save(spin, items[2]);
- 		}
- 	    }
--	    else if (STRCMP(items[0], "SYLLABLE") == 0 && itemcnt == 2
-+	    else if (is_aff_rule(items, itemcnt, "SYLLABLE", 2)
- 							  && syllable == NULL)
- 	    {
- 		syllable = getroom_save(spin, items[1]);
- 	    }
--	    else if (STRCMP(items[0], "NOBREAK") == 0 && itemcnt == 1)
-+	    else if (is_aff_rule(items, itemcnt, "NOBREAK", 1))
- 	    {
- 		spin->si_nobreak = TRUE;
- 	    }
--	    else if (STRCMP(items[0], "NOSPLITSUGS") == 0 && itemcnt == 1)
-+	    else if (is_aff_rule(items, itemcnt, "NOSPLITSUGS", 1))
- 	    {
- 		spin->si_nosplitsugs = TRUE;
- 	    }
--	    else if (STRCMP(items[0], "NOSUGFILE") == 0 && itemcnt == 1)
-+	    else if (is_aff_rule(items, itemcnt, "NOSUGFILE", 1))
- 	    {
- 		spin->si_nosugfile = TRUE;
- 	    }
--	    else if (STRCMP(items[0], "PFXPOSTPONE") == 0 && itemcnt == 1)
-+	    else if (is_aff_rule(items, itemcnt, "PFXPOSTPONE", 1))
- 	    {
- 		aff->af_pfxpostpone = TRUE;
- 	    }
-@@ -5771,24 +5946,20 @@
- 		    }
- 		}
- 	    }
--	    else if (STRCMP(items[0], "FOL") == 0 && itemcnt == 2
--							       && fol == NULL)
-+	    else if (is_aff_rule(items, itemcnt, "FOL", 2) && fol == NULL)
- 	    {
- 		fol = vim_strsave(items[1]);
- 	    }
--	    else if (STRCMP(items[0], "LOW") == 0 && itemcnt == 2
--							       && low == NULL)
-+	    else if (is_aff_rule(items, itemcnt, "LOW", 2) && low == NULL)
- 	    {
- 		low = vim_strsave(items[1]);
- 	    }
--	    else if (STRCMP(items[0], "UPP") == 0 && itemcnt == 2
--							       && upp == NULL)
-+	    else if (is_aff_rule(items, itemcnt, "UPP", 2) && upp == NULL)
- 	    {
- 		upp = vim_strsave(items[1]);
- 	    }
--	    else if ((STRCMP(items[0], "REP") == 0
--			|| STRCMP(items[0], "REPSAL") == 0)
--		    && itemcnt == 2)
-+	    else if (is_aff_rule(items, itemcnt, "REP", 2)
-+		     || is_aff_rule(items, itemcnt, "REPSAL", 2))
- 	    {
- 		/* Ignore REP/REPSAL count */;
- 		if (!isdigit(*items[1]))
-@@ -5819,7 +5990,7 @@
- 					 : &spin->si_rep, items[1], items[2]);
- 		}
- 	    }
--	    else if (STRCMP(items[0], "MAP") == 0 && itemcnt == 2)
-+	    else if (is_aff_rule(items, itemcnt, "MAP", 2))
- 	    {
- 		/* MAP item or count */
- 		if (!found_map)
-@@ -5856,9 +6027,8 @@
- 		    ga_append(&spin->si_map, '/');
- 		}
- 	    }
--	    /* Accept "SAL from to" and "SAL from to # comment". */
--	    else if (STRCMP(items[0], "SAL") == 0
--		    && (itemcnt == 3 || (itemcnt > 3 && items[3][0] == '#')))
-+	    /* Accept "SAL from to" and "SAL from to  #comment". */
-+	    else if (is_aff_rule(items, itemcnt, "SAL", 3))
- 	    {
- 		if (do_sal)
- 		{
-@@ -5877,12 +6047,12 @@
- 								: items[2]);
- 		}
- 	    }
--	    else if (STRCMP(items[0], "SOFOFROM") == 0 && itemcnt == 2
-+	    else if (is_aff_rule(items, itemcnt, "SOFOFROM", 2)
- 							  && sofofrom == NULL)
- 	    {
- 		sofofrom = getroom_save(spin, items[1]);
- 	    }
--	    else if (STRCMP(items[0], "SOFOTO") == 0 && itemcnt == 2
-+	    else if (is_aff_rule(items, itemcnt, "SOFOTO", 2)
- 							    && sofoto == NULL)
- 	    {
- 		sofoto = getroom_save(spin, items[1]);
-@@ -5980,7 +6150,7 @@
- 	else if (spin->si_newprefID == 0 || spin->si_newprefID == 127)
- 	    MSG(_("Too many compound flags"));
- 	else
--	    MSG(_("Too many posponed prefixes and/or compound flags"));
-+	    MSG(_("Too many postponed prefixes and/or compound flags"));
-     }
- 
-     if (syllable != NULL)
-@@ -6017,6 +6187,22 @@
- }
- 
- /*
-+ * Return TRUE when items[0] equals "rulename", there are "mincount" items or
-+ * a comment is following after item "mincount".
-+ */
-+    static int
-+is_aff_rule(items, itemcnt, rulename, mincount)
-+    char_u	**items;
-+    int		itemcnt;
-+    char	*rulename;
-+    int		mincount;
-+{
-+    return (STRCMP(items[0], rulename) == 0
-+	    && (itemcnt == mincount
-+		|| (itemcnt > mincount && items[mincount][0] == '#')));
-+}
-+
-+/*
-  * For affix "entry" move COMPOUNDFORBIDFLAG and COMPOUNDPERMITFLAG from
-  * ae_flags to ae_comppermit and ae_compforbid.
-  */
-@@ -7866,7 +8052,7 @@
-     /* time_t can be up to 8 bytes in size, more than long_u, thus we
-      * can't use put_bytes() here. */
-     for (i = 7; i >= 0; --i)
--	if (i + 1 > sizeof(time_t))
-+	if (i + 1 > (int)sizeof(time_t))
- 	    /* ">>" doesn't work well when shifting more bits than avail */
- 	    putc(0, fd);
- 	else
-@@ -7926,6 +8112,8 @@
-     char_u	*p;
-     int		rr;
-     int		retval = OK;
-+    size_t	fwv = 1;  /* collect return value of fwrite() to avoid
-+			     warnings from picky compiler */
- 
-     fd = mch_fopen((char *)fname, "w");
-     if (fd == NULL)
-@@ -7936,11 +8124,11 @@
- 
-     /* <HEADER>: <fileID> <versionnr> */
- 							    /* <fileID> */
--    if (fwrite(VIMSPELLMAGIC, VIMSPELLMAGICL, (size_t)1, fd) != 1)
--    {
--	EMSG(_(e_write));
--	retval = FAIL;
--    }
-+    fwv &= fwrite(VIMSPELLMAGIC, VIMSPELLMAGICL, (size_t)1, fd);
-+    if (fwv != (size_t)1)
-+	/* Catch first write error, don't try writing more. */
-+	goto theend;
-+
-     putc(VIMSPELLVERSION, fd);				    /* <versionnr> */
- 
-     /*
-@@ -7955,7 +8143,7 @@
- 
- 	i = (int)STRLEN(spin->si_info);
- 	put_bytes(fd, (long_u)i, 4);			/* <sectionlen> */
--	fwrite(spin->si_info, (size_t)i, (size_t)1, fd); /* <infotext> */
-+	fwv &= fwrite(spin->si_info, (size_t)i, (size_t)1, fd); /* <infotext> */
-     }
- 
-     /* SN_REGION: <regionname> ...
-@@ -7966,7 +8154,7 @@
- 	putc(SNF_REQUIRED, fd);				/* <sectionflags> */
- 	l = spin->si_region_count * 2;
- 	put_bytes(fd, (long_u)l, 4);			/* <sectionlen> */
--	fwrite(spin->si_region_name, (size_t)l, (size_t)1, fd);
-+	fwv &= fwrite(spin->si_region_name, (size_t)l, (size_t)1, fd);
- 							/* <regionname> ... */
- 	regionmask = (1 << spin->si_region_count) - 1;
-     }
-@@ -8016,7 +8204,7 @@
- 	}
- 
- 	put_bytes(fd, (long_u)l, 2);			/* <folcharslen> */
--	fwrite(folchars, (size_t)l, (size_t)1, fd);	/* <folchars> */
-+	fwv &= fwrite(folchars, (size_t)l, (size_t)1, fd); /* <folchars> */
-     }
- 
-     /* SN_MIDWORD: <midword> */
-@@ -8027,7 +8215,8 @@
- 
- 	i = (int)STRLEN(spin->si_midword);
- 	put_bytes(fd, (long_u)i, 4);			/* <sectionlen> */
--	fwrite(spin->si_midword, (size_t)i, (size_t)1, fd); /* <midword> */
-+	fwv &= fwrite(spin->si_midword, (size_t)i, (size_t)1, fd);
-+							/* <midword> */
-     }
- 
-     /* SN_PREFCOND: <prefcondcnt> <prefcond> ... */
-@@ -8113,7 +8302,8 @@
- 		p = rr == 1 ? ftp->ft_from : ftp->ft_to;
- 		l = (int)STRLEN(p);
- 		putc(l, fd);
--		fwrite(p, l, (size_t)1, fd);
-+		if (l > 0)
-+		    fwv &= fwrite(p, l, (size_t)1, fd);
- 	    }
- 	}
- 
-@@ -8131,11 +8321,11 @@
- 							/* <sectionlen> */
- 
- 	put_bytes(fd, (long_u)l, 2);			/* <sofofromlen> */
--	fwrite(spin->si_sofofr, l, (size_t)1, fd);	/* <sofofrom> */
-+	fwv &= fwrite(spin->si_sofofr, l, (size_t)1, fd); /* <sofofrom> */
- 
- 	l = (int)STRLEN(spin->si_sofoto);
- 	put_bytes(fd, (long_u)l, 2);			/* <sofotolen> */
--	fwrite(spin->si_sofoto, l, (size_t)1, fd);	/* <sofoto> */
-+	fwv &= fwrite(spin->si_sofoto, l, (size_t)1, fd); /* <sofoto> */
-     }
- 
-     /* SN_WORDS: <word> ...
-@@ -8160,7 +8350,7 @@
- 		    l = (int)STRLEN(hi->hi_key) + 1;
- 		    len += l;
- 		    if (round == 2)			/* <word> */
--			fwrite(hi->hi_key, (size_t)l, (size_t)1, fd);
-+			fwv &= fwrite(hi->hi_key, (size_t)l, (size_t)1, fd);
- 		    --todo;
- 		}
- 	    if (round == 1)
-@@ -8176,7 +8366,7 @@
- 	putc(0, fd);					/* <sectionflags> */
- 	l = spin->si_map.ga_len;
- 	put_bytes(fd, (long_u)l, 4);			/* <sectionlen> */
--	fwrite(spin->si_map.ga_data, (size_t)l, (size_t)1, fd);
-+	fwv &= fwrite(spin->si_map.ga_data, (size_t)l, (size_t)1, fd);
- 							/* <mapstr> */
-     }
- 
-@@ -8232,10 +8422,11 @@
- 	{
- 	    p = ((char_u **)(spin->si_comppat.ga_data))[i];
- 	    putc((int)STRLEN(p), fd);			/* <comppatlen> */
--	    fwrite(p, (size_t)STRLEN(p), (size_t)1, fd);/* <comppattext> */
-+	    fwv &= fwrite(p, (size_t)STRLEN(p), (size_t)1, fd);
-+							/* <comppattext> */
- 	}
- 							/* <compflags> */
--	fwrite(spin->si_compflags, (size_t)STRLEN(spin->si_compflags),
-+	fwv &= fwrite(spin->si_compflags, (size_t)STRLEN(spin->si_compflags),
- 							       (size_t)1, fd);
-     }
- 
-@@ -8259,7 +8450,8 @@
- 
- 	l = (int)STRLEN(spin->si_syllable);
- 	put_bytes(fd, (long_u)l, 4);			/* <sectionlen> */
--	fwrite(spin->si_syllable, (size_t)l, (size_t)1, fd); /* <syllable> */
-+	fwv &= fwrite(spin->si_syllable, (size_t)l, (size_t)1, fd);
-+							/* <syllable> */
-     }
- 
-     /* end of <SECTIONS> */
-@@ -8295,13 +8487,18 @@
- 	(void)put_node(fd, tree, 0, regionmask, round == 3);
-     }
- 
--    /* Write another byte to check for errors. */
-+    /* Write another byte to check for errors (file system full). */
-     if (putc(0, fd) == EOF)
- 	retval = FAIL;
--
-+theend:
-     if (fclose(fd) == EOF)
- 	retval = FAIL;
- 
-+    if (fwv != (size_t)1)
-+	retval = FAIL;
-+    if (retval == FAIL)
-+	EMSG(_(e_write));
-+
-     return retval;
- }
- 
-@@ -9890,6 +10087,7 @@
-     char_u	*p;
-     int		len;
-     int		totlen;
-+    size_t	x = 1;  /* collect return value of fwrite() */
- 
-     if (fd != NULL)
- 	put_bytes(fd, (long_u)gap->ga_len, 2);	    /* <prefcondcnt> */
-@@ -9906,7 +10104,7 @@
- 	    if (fd != NULL)
- 	    {
- 		fputc(len, fd);
--		fwrite(p, (size_t)len, (size_t)1, fd);
-+		x &= fwrite(p, (size_t)len, (size_t)1, fd);
- 	    }
- 	    totlen += len;
- 	}
-@@ -10054,6 +10252,7 @@
-     int		limit;
-     int		selected = count;
-     int		badlen = 0;
-+    int		msg_scroll_save = msg_scroll;
- 
-     if (no_spell_checking(curwin))
- 	return;
-@@ -10218,7 +10417,9 @@
- 	selected = prompt_for_number(&mouse_used);
- 	if (mouse_used)
- 	    selected -= lines_left;
--	lines_left = Rows;	/* avoid more prompt */
-+	lines_left = Rows;		/* avoid more prompt */
-+	/* don't delay for 'smd' in normal_cmd() */
-+	msg_scroll = msg_scroll_save;
-     }
- 
-     if (selected > 0 && selected <= sug.su_ga.ga_len && u_save_cursor() == OK)
-@@ -10243,7 +10444,8 @@
- 	}
- 
- 	/* Replace the word. */
--	p = alloc((unsigned)STRLEN(line) - stp->st_orglen + stp->st_wordlen + 1);
-+	p = alloc((unsigned)STRLEN(line) - stp->st_orglen
-+						       + stp->st_wordlen + 1);
- 	if (p != NULL)
- 	{
- 	    c = (int)(sug.su_badptr - line);
-@@ -10343,10 +10545,9 @@
- /*
-  * ":spellrepall"
-  */
--/*ARGSUSED*/
-     void
- ex_spellrepall(eap)
--    exarg_T *eap;
-+    exarg_T *eap UNUSED;
- {
-     pos_T	pos = curwin->w_cursor;
-     char_u	*frompat;
-@@ -11480,15 +11681,24 @@
- 		    vim_strncpy(preword + sp->ts_prewordlen,
- 			    tword + sp->ts_splitoff,
- 			    sp->ts_twordlen - sp->ts_splitoff);
--		    p = preword;
--		    while (*skiptowhite(p) != NUL)
--			p = skipwhite(skiptowhite(p));
--		    if (fword_ends && !can_compound(slang, p,
--						compflags + sp->ts_compsplit))
--			/* Compound is not allowed.  But it may still be
--			 * possible if we add another (short) word. */
-+
-+		    /* Verify CHECKCOMPOUNDPATTERN  rules. */
-+		    if (match_checkcompoundpattern(preword,  sp->ts_prewordlen,
-+							  &slang->sl_comppat))
- 			compound_ok = FALSE;
- 
-+		    if (compound_ok)
-+		    {
-+			p = preword;
-+			while (*skiptowhite(p) != NUL)
-+			    p = skipwhite(skiptowhite(p));
-+			if (fword_ends && !can_compound(slang, p,
-+						compflags + sp->ts_compsplit))
-+			    /* Compound is not allowed.  But it may still be
-+			     * possible if we add another (short) word. */
-+			    compound_ok = FALSE;
-+		    }
-+
- 		    /* Get pointer to last char of previous word. */
- 		    p = preword + sp->ts_prewordlen;
- 		    mb_ptr_back(preword, p);
-@@ -11685,10 +11895,9 @@
- 			&& (slang->sl_compsylmax < MAXWLEN
- 			    || sp->ts_complen + 1 - sp->ts_compsplit
- 							  < slang->sl_compmax)
--			&& (byte_in_str(sp->ts_complen == sp->ts_compsplit
--					    ? slang->sl_compstartflags
--					    : slang->sl_compallflags,
--						    ((unsigned)flags >> 24))))
-+			&& (can_be_compound(sp, slang,
-+					 compflags, ((unsigned)flags >> 24))))
-+
- 		{
- 		    try_compound = TRUE;
- 		    compflags[sp->ts_complen] = ((unsigned)flags >> 24);
-@@ -14808,7 +15017,7 @@
- 
- 	case 0:
- 	    /*
--	     * Lenghts are equal, thus changes must result in same length: An
-+	     * Lengths are equal, thus changes must result in same length: An
- 	     * insert is only possible in combination with a delete.
- 	     * 1: check if for identical strings
- 	     */
-@@ -15398,10 +15607,9 @@
- /*
-  * ":spellinfo"
-  */
--/*ARGSUSED*/
-     void
- ex_spellinfo(eap)
--    exarg_T *eap;
-+    exarg_T *eap UNUSED;
- {
-     int		lpi;
-     langp_T	*lp;
-@@ -15945,11 +16153,9 @@
-  * Returns the number of matches.  The matches are in "matchp[]", array of
-  * allocated strings.
-  */
--/*ARGSUSED*/
-     int
--expand_spelling(lnum, col, pat, matchp)
--    linenr_T	lnum;
--    int		col;
-+expand_spelling(lnum, pat, matchp)
-+    linenr_T	lnum UNUSED;
-     char_u	*pat;
-     char_u	***matchp;
- {
-diff -Naur vim72.orig/src/structs.h vim72/src/structs.h
---- vim72.orig/src/structs.h	2008-07-30 13:02:50.000000000 -0700
-+++ vim72/src/structs.h	2009-09-12 08:41:43.000000000 -0700
-@@ -16,7 +16,7 @@
-  */
- #if defined(SASC) && SASC < 658
- typedef long		linenr_T;
--typedef unsigned	colnr_T;
-+typedef int		colnr_T;
- typedef unsigned short	short_u;
- #endif
- 
-@@ -33,9 +33,9 @@
- } pos_T;
- 
- #ifdef FEAT_VIRTUALEDIT
--# define INIT_POS_T {0, 0, 0}
-+# define INIT_POS_T(l, c, ca) {l, c, ca}
- #else
--# define INIT_POS_T {0, 0}
-+# define INIT_POS_T(l, c, ca) {l, c}
- #endif
- 
- /*
-@@ -459,7 +459,7 @@
- typedef struct
- {
-     int		hide;			/* TRUE when ":hide" was used */
--# ifdef FEAT_BROWSE
-+# ifdef FEAT_BROWSE_CMD
-     int		browse;			/* TRUE to invoke file dialog */
- # endif
- # ifdef FEAT_WINDOWS
-@@ -882,6 +882,8 @@
- {
-     typebuf_T		save_typebuf;
-     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;
-@@ -1166,7 +1168,8 @@
-     char_u	*b_fname;	/* current file name */
- 
- #ifdef UNIX
--    int		b_dev;		/* device number (-1 if not set) */
-+    int		b_dev_valid;	/* TRUE when b_dev has a valid number */
-+    dev_t	b_dev;		/* device number */
-     ino_t	b_ino;		/* inode number */
- #endif
- #ifdef FEAT_CW_EDITOR
-@@ -1620,6 +1623,14 @@
- };
- #endif
- 
-+#define SNAP_HELP_IDX	0
-+#ifdef FEAT_AUTOCMD
-+# define SNAP_AUCMD_IDX 1
-+# define SNAP_COUNT	2
-+#else
-+# define SNAP_COUNT	1
-+#endif
-+
- /*
-  * Tab pages point to the top frame of each tab page.
-  * Note: Most values are NOT valid for the current tab page!  Use "curwin",
-@@ -1648,7 +1659,7 @@
-     buf_T	    *(tp_diffbuf[DB_COUNT]);
-     int		    tp_diff_invalid;	/* list of diffs is outdated */
- #endif
--    frame_T	    *tp_snapshot;    /* window layout snapshot */
-+    frame_T	    *(tp_snapshot[SNAP_COUNT]);  /* window layout snapshots */
- #ifdef FEAT_EVAL
-     dictitem_T	    tp_winvar;	    /* variable for "t:" Dictionary */
-     dict_T	    tp_vars;	    /* internal variables, local to tab page */
-@@ -1784,10 +1795,15 @@
- #endif
- 
-     /*
--     * The next three specify the offsets for displaying the buffer:
-+     * "w_topline", "w_leftcol" and "w_skipcol" specify the offsets for
-+     * displaying the buffer.
-      */
-     linenr_T	w_topline;	    /* buffer line number of the line at the
- 				       top of the window */
-+#ifdef FEAT_AUTOCMD
-+    char	w_topline_was_set;  /* flag set to TRUE when topline is set,
-+				       e.g. by winrestview() */
-+#endif
- #ifdef FEAT_DIFF
-     int		w_topfill;	    /* number of filler lines above w_topline */
-     int		w_old_topfill;	    /* w_topfill at last redraw */
-@@ -2270,16 +2286,13 @@
-  */
- typedef struct
- {
--    buf_T	*save_buf;	/* saved curbuf */
-+    buf_T	*save_curbuf;	/* saved curbuf */
- #ifdef FEAT_AUTOCMD
--    buf_T	*new_curbuf;	/* buffer to be used */
--    win_T	*save_curwin;	/* saved curwin, NULL if it didn't change */
--    win_T	*new_curwin;	/* new curwin if save_curwin != NULL */
--    pos_T	save_cursor;	/* saved cursor pos of save_curwin */
--    linenr_T	save_topline;	/* saved topline of save_curwin */
--# ifdef FEAT_DIFF
--    int		save_topfill;	/* saved topfill of save_curwin */
--# endif
-+    int		use_aucmd_win;	/* using aucmd_win */
-+    win_T	*save_curwin;	/* saved curwin */
-+    win_T	*new_curwin;	/* new curwin */
-+    buf_T	*new_curbuf;	/* new curbuf */
-+    char_u	*globaldir;	/* saved value of globaldir */
- #endif
- } aco_save_T;
- 
-diff -Naur vim72.orig/src/syntax.c vim72/src/syntax.c
---- vim72.orig/src/syntax.c	2008-08-08 14:47:48.000000000 -0700
-+++ vim72/src/syntax.c	2009-09-12 08:38:51.000000000 -0700
-@@ -3224,11 +3224,10 @@
- /*
-  * Handle ":syntax case" command.
-  */
--/* ARGSUSED */
-     static void
- syn_cmd_case(eap, syncing)
-     exarg_T	*eap;
--    int		syncing;	    /* not used */
-+    int		syncing UNUSED;
- {
-     char_u	*arg = eap->arg;
-     char_u	*next;
-@@ -3249,11 +3248,10 @@
- /*
-  * Handle ":syntax spell" command.
-  */
--/* ARGSUSED */
-     static void
- syn_cmd_spell(eap, syncing)
-     exarg_T	*eap;
--    int		syncing;	    /* not used */
-+    int		syncing UNUSED;
- {
-     char_u	*arg = eap->arg;
-     char_u	*next;
-@@ -3517,11 +3515,10 @@
- /*
-  * Handle ":syntax on" command.
-  */
--/* ARGSUSED */
-     static void
- syn_cmd_on(eap, syncing)
-     exarg_T	*eap;
--    int		syncing;	/* not used */
-+    int		syncing UNUSED;
- {
-     syn_cmd_onoff(eap, "syntax");
- }
-@@ -3529,11 +3526,10 @@
- /*
-  * Handle ":syntax enable" command.
-  */
--/* ARGSUSED */
-     static void
- syn_cmd_enable(eap, syncing)
-     exarg_T	*eap;
--    int		syncing;	/* not used */
-+    int		syncing UNUSED;
- {
-     set_internal_string_var((char_u *)"syntax_cmd", (char_u *)"enable");
-     syn_cmd_onoff(eap, "syntax");
-@@ -3543,11 +3539,10 @@
- /*
-  * Handle ":syntax reset" command.
-  */
--/* ARGSUSED */
-     static void
- syn_cmd_reset(eap, syncing)
-     exarg_T	*eap;
--    int		syncing;	/* not used */
-+    int		syncing UNUSED;
- {
-     eap->nextcmd = check_nextcmd(eap->arg);
-     if (!eap->skip)
-@@ -3561,11 +3556,10 @@
- /*
-  * Handle ":syntax manual" command.
-  */
--/* ARGSUSED */
-     static void
- syn_cmd_manual(eap, syncing)
-     exarg_T	*eap;
--    int		syncing;	/* not used */
-+    int		syncing UNUSED;
- {
-     syn_cmd_onoff(eap, "manual");
- }
-@@ -3573,11 +3567,10 @@
- /*
-  * Handle ":syntax off" command.
-  */
--/* ARGSUSED */
-     static void
- syn_cmd_off(eap, syncing)
-     exarg_T	*eap;
--    int		syncing;	/* not used */
-+    int		syncing UNUSED;
- {
-     syn_cmd_onoff(eap, "nosyntax");
- }
-@@ -4461,11 +4454,10 @@
- /*
-  * Handle ":syntax include [@{group-name}] filename" command.
-  */
--/* ARGSUSED */
-     static void
- syn_cmd_include(eap, syncing)
-     exarg_T	*eap;
--    int		syncing;	    /* not used */
-+    int		syncing UNUSED;
- {
-     char_u	*arg = eap->arg;
-     int		sgl_id = 1;
-@@ -4532,11 +4524,10 @@
- /*
-  * Handle ":syntax keyword {group-name} [{option}] keyword .." command.
-  */
--/* ARGSUSED */
-     static void
- syn_cmd_keyword(eap, syncing)
-     exarg_T	*eap;
--    int		syncing;	    /* not used */
-+    int		syncing UNUSED;
- {
-     char_u	*arg = eap->arg;
-     char_u	*group_name_end;
-@@ -5275,11 +5266,10 @@
-  * Handle ":syntax cluster {cluster-name} [contains={groupname},..]
-  *		[add={groupname},..] [remove={groupname},..]".
-  */
--/* ARGSUSED */
-     static void
- syn_cmd_cluster(eap, syncing)
-     exarg_T	*eap;
--    int		syncing;	    /* not used */
-+    int		syncing UNUSED;
- {
-     char_u	*arg = eap->arg;
-     char_u	*group_name_end;
-@@ -5464,11 +5454,10 @@
- /*
-  * Handle ":syntax sync .." command.
-  */
--/* ARGSUSED */
-     static void
- syn_cmd_sync(eap, syncing)
-     exarg_T	*eap;
--    int		syncing;	    /* not used */
-+    int		syncing UNUSED;
- {
-     char_u	*arg_start = eap->arg;
-     char_u	*arg_end;
-@@ -6099,10 +6088,9 @@
-  * Function given to ExpandGeneric() to obtain the list syntax names for
-  * expansion.
-  */
--/*ARGSUSED*/
-     char_u *
- get_syntax_name(xp, idx)
--    expand_T	*xp;
-+    expand_T	*xp UNUSED;
-     int		idx;
- {
-     if (expand_what == EXP_SUBCMD)
-@@ -7744,14 +7732,13 @@
- /*
-  * Get the font or fontset for one highlight group.
-  */
--/*ARGSUSED*/
-     static void
- hl_do_font(idx, arg, do_normal, do_menu, do_tooltip)
-     int		idx;
-     char_u	*arg;
--    int		do_normal;	/* set normal font */
--    int		do_menu;	/* set menu font */
--    int		do_tooltip;	/* set tooltip font */
-+    int		do_normal;		/* set normal font */
-+    int		do_menu UNUSED;		/* set menu font */
-+    int		do_tooltip UNUSED;	/* set tooltip font */
- {
- # ifdef FEAT_XFONTSET
-     /* If 'guifontset' is not empty, first try using the name as a
-@@ -9150,10 +9137,9 @@
-  * Function given to ExpandGeneric() to obtain the list of group names.
-  * Also used for synIDattr() function.
-  */
--/*ARGSUSED*/
-     char_u *
- get_highlight_name(xp, idx)
--    expand_T	*xp;
-+    expand_T	*xp UNUSED;
-     int		idx;
- {
- #ifdef FEAT_CMDL_COMPL
-diff -Naur vim72.orig/src/tag.c vim72/src/tag.c
---- vim72.orig/src/tag.c	2008-07-16 14:31:30.000000000 -0700
-+++ vim72/src/tag.c	2009-09-12 08:38:51.000000000 -0700
-@@ -100,7 +100,7 @@
-  * Tag for preview window is remembered separately, to avoid messing up the
-  * normal tagstack.
-  */
--static taggy_T ptag_entry = {NULL};
-+static taggy_T ptag_entry = {NULL, {INIT_POS_T(0, 0, 0), 0}, 0, 0};
- #endif
- 
- /*
-@@ -515,7 +515,7 @@
- 	     * If a count is supplied to the ":tag <name>" command, then
- 	     * jump to count'th matching tag.
- 	     */
--	    if (type == DT_TAG && count > 0)
-+	    if (type == DT_TAG && *tag != NUL && count > 0)
- 		cur_match = count - 1;
- 
- 	    if (type == DT_SELECT || type == DT_JUMP
-@@ -618,7 +618,7 @@
- 		taglen_advance(taglen);
- 		MSG_PUTS_ATTR(_("file\n"), hl_attr(HLF_T));
- 
--		for (i = 0; i < num_matches; ++i)
-+		for (i = 0; i < num_matches && !got_int; ++i)
- 		{
- 		    parse_match(matches[i], &tagp);
- 		    if (!new_tag && (
-@@ -655,6 +655,8 @@
- 		    }
- 		    if (msg_col > 0)
- 			msg_putchar('\n');
-+		    if (got_int)
-+			break;
- 		    msg_advance(15);
- 
- 		    /* print any extra fields */
-@@ -689,6 +691,8 @@
- 				if (msg_col + ptr2cells(p) >= Columns)
- 				{
- 				    msg_putchar('\n');
-+				    if (got_int)
-+					break;
- 				    msg_advance(15);
- 				}
- 				p = msg_outtrans_one(p, attr);
-@@ -704,6 +708,8 @@
- 			if (msg_col > 15)
- 			{
- 			    msg_putchar('\n');
-+			    if (got_int)
-+				break;
- 			    msg_advance(15);
- 			}
- 		    }
-@@ -734,6 +740,8 @@
- 		    {
- 			if (msg_col + (*p == TAB ? 1 : ptr2cells(p)) > Columns)
- 			    msg_putchar('\n');
-+			if (got_int)
-+			    break;
- 			msg_advance(15);
- 
- 			/* skip backslash used for escaping command char */
-@@ -760,12 +768,9 @@
- 		    if (msg_col)
- 			msg_putchar('\n');
- 		    ui_breakcheck();
--		    if (got_int)
--		    {
--			got_int = FALSE;	/* only stop the listing */
--			break;
--		    }
- 		}
-+		if (got_int)
-+		    got_int = FALSE;	/* only stop the listing */
- 		ask_for_selection = TRUE;
- 	    }
- #if defined(FEAT_QUICKFIX) && defined(FEAT_EVAL)
-@@ -1100,10 +1105,9 @@
- /*
-  * Print the tag stack
-  */
--/*ARGSUSED*/
-     void
- do_tags(eap)
--    exarg_T	*eap;
-+    exarg_T	*eap UNUSED;
- {
-     int		i;
-     char_u	*name;
-@@ -2525,11 +2529,10 @@
-  * Callback function for finding all "tags" and "tags-??" files in
-  * 'runtimepath' doc directories.
-  */
--/*ARGSUSED*/
-     static void
- found_tagfile_cb(fname, cookie)
-     char_u	*fname;
--    void	*cookie;
-+    void	*cookie UNUSED;
- {
-     if (ga_grow(&tag_fnames, 1) == OK)
- 	((char_u **)(tag_fnames.ga_data))[tag_fnames.ga_len++] =
-@@ -2542,6 +2545,15 @@
- {
-     ga_clear_strings(&tag_fnames);
-     do_tag(NULL, DT_FREE, 0, 0, 0);
-+    tag_freematch();
-+
-+# if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
-+    if (ptag_entry.tagname)
-+    {
-+        vim_free(ptag_entry.tagname);
-+        ptag_entry.tagname = NULL;
-+    }
-+# endif
- }
- #endif
- 
-@@ -2725,7 +2737,24 @@
- 	 */
- 	p_7f = vim_strchr(lbuf, 0x7f);
- 	if (p_7f == NULL)
-+	{
-+etag_fail:
-+	    if (vim_strchr(lbuf, '\n') == NULL)
-+	    {
-+		/* Truncated line.  Ignore it. */
-+		if (p_verbose >= 5)
-+		{
-+		    verbose_enter();
-+		    MSG(_("Ignoring long line in tags file"));
-+		    verbose_leave();
-+		}
-+		tagp->command = lbuf;
-+		tagp->tagname = lbuf;
-+		tagp->tagname_end = lbuf;
-+		return OK;
-+	    }
- 	    return FAIL;
-+	}
- 
- 	/* Find ^A.  If not found the line number is after the 0x7f */
- 	p = vim_strchr(p_7f, Ctrl_A);
-@@ -2735,7 +2764,7 @@
- 	    ++p;
- 
- 	if (!VIM_ISDIGIT(*p))	    /* check for start of line number */
--	    return FAIL;
-+	    goto etag_fail;
- 	tagp->command = p;
- 
- 
-@@ -2749,7 +2778,7 @@
- 	    /* find end of tagname */
- 	    for (p = p_7f - 1; !vim_iswordc(*p); --p)
- 		if (p == lbuf)
--		    return FAIL;
-+		    goto etag_fail;
- 	    tagp->tagname_end = p + 1;
- 	    while (p >= lbuf && vim_iswordc(*p))
- 		--p;
-@@ -3762,7 +3791,7 @@
- 		--end;
- 	}
- 	len = (int)(end - start);
--	if (len > sizeof(buf) - 1)
-+	if (len > (int)sizeof(buf) - 1)
- 	    len = sizeof(buf) - 1;
- 	vim_strncpy(buf, start, len);
-     }
-diff -Naur vim72.orig/src/term.c vim72/src/term.c
---- vim72.orig/src/term.c	2008-07-27 04:48:06.000000000 -0700
-+++ vim72/src/term.c	2009-09-12 08:41:35.000000000 -0700
-@@ -2881,7 +2881,7 @@
- 
- 	/* if 'Sb' and 'AB' are not defined, reset "Co" */
- 	if (*T_CSB == NUL && *T_CAB == NUL)
--	    T_CCO = empty_option;
-+	    free_one_termoption(T_CCO);
- 
- 	/* Set 'weirdinvert' according to value of 't_xs' */
- 	p_wiv = (*T_XS != NUL);
-@@ -2906,7 +2906,7 @@
-     int	    i;
-     int	    shift;
- 
--    for (i = 1; i <= sizeof(long_u); i++)
-+    for (i = 1; i <= (int)sizeof(long_u); i++)
-     {
- 	shift = 8 * (sizeof(long_u) - i);
- 	dst[i - 1] = (char_u) ((val >> shift) & 0xff);
-@@ -2937,7 +2937,7 @@
-     len = get_bytes_from_buf(buf, bytes, (int)sizeof(long_u));
-     if (len != -1)
-     {
--	for (i = 0; i < sizeof(long_u); i++)
-+	for (i = 0; i < (int)sizeof(long_u); i++)
- 	{
- 	    shift = 8 * (sizeof(long_u) - 1 - i);
- 	    *val += (long_u)bytes[i] << shift;
-@@ -4920,7 +4920,15 @@
- 	key_name[0] = KEY2TERMCAP0(key);
- 	key_name[1] = KEY2TERMCAP1(key);
- 	if (key_name[0] == KS_KEY)
--	    string[new_slen++] = key_name[1];	/* from ":set <M-b>=xx" */
-+	{
-+	    /* from ":set <M-b>=xx" */
-+#ifdef FEAT_MBYTE
-+	    if (has_mbyte)
-+		new_slen += (*mb_char2bytes)(key_name[1], string + new_slen);
-+	    else
-+#endif
-+		string[new_slen++] = key_name[1];
-+	}
- 	else
- 	{
- 	    string[new_slen++] = K_SPECIAL;
-@@ -5547,7 +5555,7 @@
-  * respects the current B/k/< settings of 'cpoption'.
-  *
-  * This function is called when expanding mappings/abbreviations on the
-- * command-line, and for building the "Ambiguous mapping..." error messæge.
-+ * command-line, and for building the "Ambiguous mapping..." error message.
-  *
-  * It uses a growarray to build the translation string since the
-  * latter can be wider than the original description. The caller has to
-diff -Naur vim72.orig/src/testdir/Makefile vim72/src/testdir/Makefile
---- vim72.orig/src/testdir/Makefile	2008-06-19 13:29:46.000000000 -0700
-+++ vim72/src/testdir/Makefile	2009-09-12 08:42:30.000000000 -0700
-@@ -4,9 +4,11 @@
- 
- VIMPROG = ../vim
- 
--# Uncomment this line for using valgrind.
--# The output goes into a file "valgrind.$PID" (sorry, no test number).
--# VALGRIND = valgrind --tool=memcheck --leak-check=yes --num-callers=15 --logfile=valgrind
-+# Uncomment this line to use valgrind for memory leaks and extra warnings.
-+#   The output goes into a file "valgrind.testN"
-+#   Vim should be compiled with EXITFREE to avoid false warnings.
-+#   This will make testing about 10 times as slow.
-+# VALGRIND = valgrind --tool=memcheck --leak-check=yes --num-callers=15 --log-file=valgrind.$*
- 
- SCRIPTS = test1.out test2.out test3.out test4.out test5.out test6.out \
- 		test7.out test8.out test9.out test10.out test11.out \
-@@ -20,21 +22,23 @@
- 		test48.out test49.out test51.out test52.out test53.out \
- 		test54.out test55.out test56.out test57.out test58.out \
- 		test59.out test60.out test61.out test62.out test63.out \
--		test64.out test65.out
-+		test64.out test65.out test66.out test67.out
- 
- SCRIPTS_GUI = test16.out
- 
- .SUFFIXES: .in .out
- 
--nongui:	nolog $(SCRIPTS)
--	@echo
--	@cat test.log
--	@echo ALL DONE
-+nongui:	nolog $(SCRIPTS) report
-+
-+gui:	nolog $(SCRIPTS) $(SCRIPTS_GUI) report
- 
--gui:	nolog $(SCRIPTS) $(SCRIPTS_GUI)
-+report:
- 	@echo
--	@cat test.log
--	@echo ALL DONE
-+	@echo 'Test results:'
-+	@/bin/sh -c "if test -f test.log; \
-+		then cat test.log; echo TEST FAILURE; exit 1; \
-+		else echo ALL DONE; \
-+		fi"
- 
- $(SCRIPTS) $(SCRIPTS_GUI): $(VIMPROG)
- 
-@@ -71,4 +75,4 @@
- test60.out: test60.vim
- 
- nolog:
--	-echo Test results: >test.log
-+	-rm -f test.log
-diff -Naur vim72.orig/src/testdir/Make_ming.mak vim72/src/testdir/Make_ming.mak
---- vim72.orig/src/testdir/Make_ming.mak	1969-12-31 16:00:00.000000000 -0800
-+++ vim72/src/testdir/Make_ming.mak	2009-09-12 08:31:40.000000000 -0700
-@@ -0,0 +1,91 @@
-+# Makefile to run tests for Vim, on Dos-like machines
-+# with sh.exe or zsh.exe in the path or not.
-+#
-+# Author: Bill McCarthy
-+#
-+# Note that test54 has been removed until it is fixed.
-+#
-+# Requires a set of Unix tools: echo, diff, etc.
-+
-+ifneq (sh.exe, $(SHELL))
-+DEL = rm -f
-+MV = mv
-+CP = cp
-+DIRSLASH = /
-+else
-+DEL = del
-+MV = rename
-+CP = copy
-+DIRSLASH = \\
-+endif
-+
-+VIMPROG = ..$(DIRSLASH)vim
-+
-+# Omitted:
-+# test2		"\\tmp" doesn't work.
-+# test10	'errorformat' is different
-+# test12	can't unlink a swap file
-+# test25	uses symbolic link
-+# test27	can't edit file with "*" in file name
-+# test31	16 bit version runs out of memory...
-+
-+SCRIPTS16 =	test1.out test19.out test20.out test22.out \
-+		test23.out test24.out test28.out test29.out \
-+		test35.out test36.out test43.out \
-+		test44.out test45.out test46.out test47.out \
-+		test48.out test51.out test53.out            \
-+		test55.out test56.out test57.out test58.out test59.out \
-+		test60.out test61.out test62.out test63.out test64.out
-+
-+# Had to remove test54 which doesn't work yet.
-+#		                                 test54.out
-+
-+SCRIPTS =	test3.out test4.out test5.out test6.out test7.out \
-+		test8.out test9.out test11.out test13.out test14.out \
-+		test15.out test17.out test18.out test21.out test26.out \
-+		test30.out test31.out test32.out test33.out test34.out \
-+		test37.out test38.out test39.out test40.out test41.out \
-+		test42.out test52.out test65.out
-+
-+SCRIPTS32 =	test50.out
-+
-+SCRIPTS_GUI = test16.out
-+
-+.SUFFIXES: .in .out
-+
-+vimall:	fixff $(SCRIPTS16) $(SCRIPTS) $(SCRIPTS_GUI) $(SCRIPTS32)
-+	echo ALL DONE
-+
-+nongui:	fixff $(SCRIPTS16) $(SCRIPTS)
-+	echo ALL DONE
-+
-+small:
-+	echo ALL DONE
-+
-+gui:	fixff $(SCRIPTS16) $(SCRIPTS) $(SCRIPTS_GUI)
-+	echo ALL DONE
-+
-+win32:	fixff $(SCRIPTS16) $(SCRIPTS) $(SCRIPTS32)
-+	echo ALL DONE
-+
-+fixff:
-+	-$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=dos|upd" +q *.in *.ok
-+
-+clean:
-+	-$(DEL) *.out
-+	-$(DEL) test.ok
-+	-$(DEL) small.vim
-+	-$(DEL) tiny.vim
-+	-$(DEL) mbyte.vim
-+	-$(DEL) X*
-+	-$(DEL) viminfo
-+
-+.in.out:
-+	$(CP) $*.ok test.ok
-+	$(VIMPROG) -u dos.vim -U NONE --noplugin -s dotest.in $*.in
-+	diff test.out $*.ok
-+	-$(DEL) $*.out
-+	$(MV) test.out $*.out
-+	-$(DEL) X*
-+	-$(DEL) test.ok
-+	-$(DEL) viminfo
-diff -Naur vim72.orig/src/testdir/test42.ok vim72/src/testdir/test42.ok
---- vim72.orig/src/testdir/test42.ok	2008-02-20 04:27:37.000000000 -0800
-+++ vim72/src/testdir/test42.ok	2009-09-12 08:32:10.000000000 -0700
-@@ -20,7 +20,7 @@
- ucs-2
- 
- 
--  fileencoding=ucs-2le
-+  fileencoding=utf-16le
-   bomb
- ucs-2le
- 
-diff -Naur vim72.orig/src/testdir/test66.in vim72/src/testdir/test66.in
---- vim72.orig/src/testdir/test66.in	1969-12-31 16:00:00.000000000 -0800
-+++ vim72/src/testdir/test66.in	2009-09-12 08:36:49.000000000 -0700
-@@ -0,0 +1,25 @@
-+
-+Test for visual block shift and tab characters.
-+
-+STARTTEST
-+:so small.vim
-+/^abcdefgh
-+4jI    j<<11|D
-+7|a		
-+7|a		   
-+7|a	       	4k13|4j<
-+:$-4,$w! test.out
-+:$-4,$s/\s\+//g
-+4kI    j<<
-+7|a		
-+7|a					
-+7|a	       		4k13|4j3<
-+:$-4,$w >> test.out
-+:qa!
-+ENDTEST
-+
-+abcdefghijklmnopqrstuvwxyz
-+abcdefghijklmnopqrstuvwxyz
-+abcdefghijklmnopqrstuvwxyz
-+abcdefghijklmnopqrstuvwxyz
-+abcdefghijklmnopqrstuvwxyz
-diff -Naur vim72.orig/src/testdir/test66.ok vim72/src/testdir/test66.ok
---- vim72.orig/src/testdir/test66.ok	1969-12-31 16:00:00.000000000 -0800
-+++ vim72/src/testdir/test66.ok	2009-09-12 08:36:49.000000000 -0700
-@@ -0,0 +1,10 @@
-+    abcdefghijklmnopqrstuvwxyz
-+abcdefghij
-+    abc	    defghijklmnopqrstuvwxyz
-+    abc	    defghijklmnopqrstuvwxyz
-+    abc	    defghijklmnopqrstuvwxyz
-+    abcdefghijklmnopqrstuvwxyz
-+abcdefghij
-+    abc	    defghijklmnopqrstuvwxyz
-+    abc		defghijklmnopqrstuvwxyz
-+    abc	    defghijklmnopqrstuvwxyz
-diff -Naur vim72.orig/src/testdir/test67.in vim72/src/testdir/test67.in
---- vim72.orig/src/testdir/test67.in	1969-12-31 16:00:00.000000000 -0800
-+++ vim72/src/testdir/test67.in	2009-09-12 08:42:30.000000000 -0700
-@@ -0,0 +1,33 @@
-+Test that groups and patterns are tested correctly when calling exists() for
-+autocommands.
-+
-+STARTTEST
-+:so small.vim
-+:let results=[]
-+:augroup auexists
-+:augroup END
-+:call add(results, "##BufEnter: " . exists("##BufEnter"))
-+:call add(results, "#BufEnter: " . exists("#BufEnter"))
-+:au BufEnter * let g:entered=1
-+:call add(results, "#BufEnter: " . exists("#BufEnter"))
-+:call add(results, "#auexists#BufEnter: " . exists("#auexists#BufEnter"))
-+:augroup auexists
-+:au BufEnter * let g:entered=1
-+:augroup END
-+:call add(results, "#auexists#BufEnter: " . exists("#auexists#BufEnter"))
-+:call add(results, "#BufEnter#*.test: " . exists("#BufEnter#*.test"))
-+:au BufEnter *.test let g:entered=1
-+:call add(results, "#BufEnter#*.test: " . exists("#BufEnter#*.test"))
-+:edit testfile.test
-+:call add(results, "#BufEnter#<buffer>: " . exists("#BufEnter#<buffer>"))
-+:au BufEnter <buffer> let g:entered=1
-+:call add(results, "#BufEnter#<buffer>: " . exists("#BufEnter#<buffer>"))
-+:edit testfile2.test
-+:call add(results, "#BufEnter#<buffer>: " . exists("#BufEnter#<buffer>"))
-+:e test.out
-+:call append(0, results)
-+:$d
-+:w
-+:qa!
-+ENDTEST
-+
-diff -Naur vim72.orig/src/testdir/test67.ok vim72/src/testdir/test67.ok
---- vim72.orig/src/testdir/test67.ok	1969-12-31 16:00:00.000000000 -0800
-+++ vim72/src/testdir/test67.ok	2009-09-12 08:42:30.000000000 -0700
-@@ -0,0 +1,10 @@
-+##BufEnter: 1
-+#BufEnter: 0
-+#BufEnter: 1
-+#auexists#BufEnter: 0
-+#auexists#BufEnter: 1
-+#BufEnter#*.test: 0
-+#BufEnter#*.test: 1
-+#BufEnter#<buffer>: 0
-+#BufEnter#<buffer>: 1
-+#BufEnter#<buffer>: 0
-diff -Naur vim72.orig/src/ui.c vim72/src/ui.c
---- vim72.orig/src/ui.c	2008-07-14 11:14:56.000000000 -0700
-+++ vim72/src/ui.c	2009-09-12 08:42:28.000000000 -0700
-@@ -320,10 +320,9 @@
-  * The gui_set_shellsize() or mch_set_shellsize() function will try to set the
-  * new size.  If this is not possible, it will adjust Rows and Columns.
-  */
--/*ARGSUSED*/
-     void
- ui_set_shellsize(mustset)
--    int		mustset;	/* set by the user */
-+    int		mustset UNUSED;	/* set by the user */
- {
- #ifdef FEAT_GUI
-     if (gui.in_use)
-@@ -1127,10 +1126,9 @@
-  * available for pasting.
-  * When "both" is TRUE also copy to the '+' register.
-  */
--/*ARGSUSED*/
-     void
- clip_copy_modeless_selection(both)
--    int		both;
-+    int		both UNUSED;
- {
-     char_u	*buffer;
-     char_u	*bufp;
-@@ -1701,10 +1699,9 @@
-     return (int)maxlen;
- }
- 
--/*ARGSUSED*/
-     void
- fill_input_buf(exit_on_error)
--    int	exit_on_error;
-+    int	exit_on_error UNUSED;
- {
- #if defined(UNIX) || defined(OS2) || defined(VMS) || defined(MACOS_X_UNIX)
-     int		len;
-@@ -1820,7 +1817,7 @@
- #ifdef HAVE_DUP
- 	    /* Use stderr for stdin, also works for shell commands. */
- 	    close(0);
--	    dup(2);
-+	    ignored = dup(2);
- #else
- 	    read_cmd_fd = 2;	/* read from stderr instead of stdin */
- #endif
-@@ -1992,11 +1989,10 @@
- 
- static void  clip_x11_request_selection_cb __ARGS((Widget, XtPointer, Atom *, Atom *, XtPointer, long_u *, int *));
- 
--/* ARGSUSED */
-     static void
- clip_x11_request_selection_cb(w, success, sel_atom, type, value, length,
- 			      format)
--    Widget	w;
-+    Widget	w UNUSED;
-     XtPointer	success;
-     Atom	*sel_atom;
-     Atom	*type;
-@@ -2020,7 +2016,7 @@
- 
-     if (value == NULL || *length == 0)
-     {
--	clip_free_selection(cbd);	/* ???  [what's the query?] */
-+	clip_free_selection(cbd);	/* nothing received, clear register */
- 	*(int *)success = FALSE;
- 	return;
-     }
-@@ -2076,7 +2072,7 @@
- 	text_prop.value = (unsigned char *)value;
- 	text_prop.encoding = *type;
- 	text_prop.format = *format;
--	text_prop.nitems = STRLEN(value);
-+	text_prop.nitems = len;
- 	status = XmbTextPropertyToTextList(X_DISPLAY, &text_prop,
- 							 &text_list, &n_text);
- 	if (status != Success || n_text < 1)
-@@ -2108,8 +2104,8 @@
-     Atom	type;
-     static int	success;
-     int		i;
--    int		nbytes = 0;
--    char_u	*buffer;
-+    time_t	start_time;
-+    int		timed_out = FALSE;
- 
-     for (i =
- #ifdef FEAT_MBYTE
-@@ -2129,6 +2125,7 @@
- 	    case 3:  type = text_atom;		break;
- 	    default: type = XA_STRING;
- 	}
-+	success = MAYBE;
- 	XtGetSelectionValue(myShell, cbd->sel_atom, type,
- 	    clip_x11_request_selection_cb, (XtPointer)&success, CurrentTime);
- 
-@@ -2141,47 +2138,59 @@
- 	 * characters, then they will appear before the one that requested the
- 	 * paste!  Don't worry, we will catch up with any other events later.
- 	 */
--	for (;;)
-+	start_time = time(NULL);
-+	while (success == MAYBE)
- 	{
--	    if (XCheckTypedEvent(dpy, SelectionNotify, &event))
--		break;
--	    if (XCheckTypedEvent(dpy, SelectionRequest, &event))
--		/* We may get a SelectionRequest here and if we don't handle
--		 * it we hang.  KDE klipper does this, for example. */
-+	    if (XCheckTypedEvent(dpy, SelectionNotify, &event)
-+		    || XCheckTypedEvent(dpy, SelectionRequest, &event)
-+		    || XCheckTypedEvent(dpy, PropertyNotify, &event))
-+	    {
-+		/* This is where clip_x11_request_selection_cb() should be
-+		 * called.  It may actually happen a bit later, so we loop
-+		 * until "success" changes.
-+		 * We may get a SelectionRequest here and if we don't handle
-+		 * it we hang.  KDE klipper does this, for example.
-+		 * We need to handle a PropertyNotify for large selections. */
- 		XtDispatchEvent(&event);
-+		continue;
-+	    }
-+
-+	    /* Time out after 2 to 3 seconds to avoid that we hang when the
-+	     * other process doesn't respond.  Note that the SelectionNotify
-+	     * event may still come later when the selection owner comes back
-+	     * to life and the text gets inserted unexpectedly.  Don't know
-+	     * why that happens or how to avoid that :-(. */
-+	    if (time(NULL) > start_time + 2)
-+	    {
-+		timed_out = TRUE;
-+		break;
-+	    }
- 
- 	    /* Do we need this?  Probably not. */
- 	    XSync(dpy, False);
- 
--	    /* Bernhard Walle solved a slow paste response in an X terminal by
--	     * adding: usleep(10000); here. */
-+	    /* Wait for 1 msec to avoid that we eat up all CPU time. */
-+	    ui_delay(1L, TRUE);
- 	}
- 
--	/* this is where clip_x11_request_selection_cb() is actually called */
--	XtDispatchEvent(&event);
--
--	if (success)
-+	if (success == TRUE)
- 	    return;
-+
-+	/* don't do a retry with another type after timing out, otherwise we
-+	 * hang for 15 seconds. */
-+	if (timed_out)
-+	    break;
-     }
- 
-     /* Final fallback position - use the X CUT_BUFFER0 store */
--    buffer = (char_u *)XFetchBuffer(dpy, &nbytes, 0);
--    if (nbytes > 0)
--    {
--	/* Got something */
--	clip_yank_selection(MCHAR, buffer, (long)nbytes, cbd);
--	XFree((void *)buffer);
--	if (p_verbose > 0)
--	    verb_msg((char_u *)_("Used CUT_BUFFER0 instead of empty selection"));
--    }
-+    yank_cut_buffer0(dpy, cbd);
- }
- 
- static Boolean	clip_x11_convert_selection_cb __ARGS((Widget, Atom *, Atom *, Atom *, XtPointer *, long_u *, int *));
- 
--/* ARGSUSED */
-     static Boolean
- clip_x11_convert_selection_cb(w, sel_atom, target, type, value, length, format)
--    Widget	w;
-+    Widget	w UNUSED;
-     Atom	*sel_atom;
-     Atom	*target;
-     Atom	*type;
-@@ -2308,10 +2317,9 @@
- 
- static void  clip_x11_lose_ownership_cb __ARGS((Widget, Atom *));
- 
--/* ARGSUSED */
-     static void
- clip_x11_lose_ownership_cb(w, sel_atom)
--    Widget  w;
-+    Widget  w UNUSED;
-     Atom    *sel_atom;
- {
-     if (*sel_atom == clip_plus.sel_atom)
-@@ -2344,11 +2352,64 @@
-  * Send the current selection to the clipboard.  Do nothing for X because we
-  * will fill in the selection only when requested by another app.
-  */
--/*ARGSUSED*/
-     void
- clip_x11_set_selection(cbd)
--    VimClipboard *cbd;
-+    VimClipboard *cbd UNUSED;
-+{
-+}
-+#endif
-+
-+#if defined(FEAT_XCLIPBOARD) || defined(FEAT_GUI_X11) \
-+    || defined(FEAT_GUI_GTK) || defined(PROTO)
-+/*
-+ * Get the contents of the X CUT_BUFFER0 and put it in "cbd".
-+ */
-+    void
-+yank_cut_buffer0(dpy, cbd)
-+    Display		*dpy;
-+    VimClipboard	*cbd;
- {
-+    int		nbytes = 0;
-+    char_u	*buffer = (char_u *)XFetchBuffer(dpy, &nbytes, 0);
-+
-+    if (nbytes > 0)
-+    {
-+#ifdef FEAT_MBYTE
-+	int  done = FALSE;
-+
-+	/* CUT_BUFFER0 is supposed to be always latin1.  Convert to 'enc' when
-+	 * using a multi-byte encoding.  Conversion between two 8-bit
-+	 * character sets usually fails and the text might actually be in
-+	 * 'enc' anyway. */
-+	if (has_mbyte)
-+	{
-+	    char_u	*conv_buf = buffer;
-+	    vimconv_T	vc;
-+
-+	    vc.vc_type = CONV_NONE;
-+	    if (convert_setup(&vc, (char_u *)"latin1", p_enc) == OK)
-+	    {
-+		conv_buf = string_convert(&vc, buffer, &nbytes);
-+		if (conv_buf != NULL)
-+		{
-+		    clip_yank_selection(MCHAR, conv_buf, (long)nbytes, cbd);
-+		    vim_free(conv_buf);
-+		    done = TRUE;
-+		}
-+		convert_setup(&vc, NULL, NULL);
-+	    }
-+	}
-+	if (!done)  /* use the text without conversion */
-+#endif
-+	    clip_yank_selection(MCHAR, buffer, (long)nbytes, cbd);
-+	XFree((void *)buffer);
-+	if (p_verbose > 0)
-+	{
-+	    verbose_enter();
-+	    verb_msg((char_u *)_("Used CUT_BUFFER0 instead of empty selection"));
-+	    verbose_leave();
-+	}
-+    }
- }
- #endif
- 
-@@ -2898,11 +2959,10 @@
-  * Find the window at screen position "*rowp" and "*colp".  The positions are
-  * updated to become relative to the top-left of the window.
-  */
--/*ARGSUSED*/
-     win_T *
- mouse_find_win(rowp, colp)
-     int		*rowp;
--    int		*colp;
-+    int		*colp UNUSED;
- {
-     frame_T	*fp;
- 
-@@ -2995,18 +3055,17 @@
-     int		vcol;
- {
-     /* try to advance to the specified column */
--    int		col = 0;
-     int		count = 0;
-     char_u	*ptr;
-+    char_u	*start;
- 
--    ptr = ml_get_buf(wp->w_buffer, lnum, FALSE);
-+    start = ptr = ml_get_buf(wp->w_buffer, lnum, FALSE);
-     while (count <= vcol && *ptr != NUL)
-     {
--	++col;
- 	count += win_lbr_chartabsize(wp, ptr, count, NULL);
- 	mb_ptr_adv(ptr);
-     }
--    return col;
-+    return (int)(ptr - start);
- }
- #endif
- 
-diff -Naur vim72.orig/src/version.c vim72/src/version.c
---- vim72.orig/src/version.c	2008-08-09 07:24:52.000000000 -0700
-+++ vim72/src/version.c	2009-09-12 08:42:30.000000000 -0700
-@@ -677,9 +677,486 @@
- static int included_patches[] =
- {   /* Add new patch number below this line */
- /**/
-+    259,
-+/**/
-+    258,
-+/**/
-+    257,
-+/**/
-+    256,
-+/**/
-+    255,
-+/**/
-+    254,
-+/**/
-+    253,
-+/**/
-+    252,
-+/**/
-+    251,
-+/**/
-+    246,
-+/**/
-+    245,
-+/**/
-+    244,
-+/**/
-+    243,
-+/**/
-+    242,
-+/**/
-+    241,
-+/**/
-+    240,
-+/**/
-+    239,
-+/**/
-+    238,
-+/**/
-+    237,
-+/**/
-+    236,
-+/**/
-+    235,
-+/**/
-+    234,
-+/**/
-+    232,
-+/**/
-+    231,
-+/**/
-+    230,
-+/**/
-+    229,
-+/**/
-+    228,
-+/**/
-+    227,
-+/**/
-+    226,
-+/**/
-+    225,
-+/**/
-+    224,
-+/**/
-+    223,
-+/**/
-+    222,
-+/**/
-+    221,
-+/**/
-+    220,
-+/**/
-+    218,
-+/**/
-+    217,
-+/**/
-+    215,
-+/**/
-+    214,
-+/**/
-+    213,
-+/**/
-+    211,
-+/**/
-+    210,
-+/**/
-+    209,
-+/**/
-+    208,
-+/**/
-+    207,
-+/**/
-+    206,
-+/**/
-+    203,
-+/**/
-+    202,
-+/**/
-+    201,
-+/**/
-+    200,
-+/**/
-+    199,
-+/**/
-+    198,
-+/**/
-+    197,
-+/**/
-+    196,
-+/**/
-+    195,
-+/**/
-+    193,
-+/**/
-+    192,
-+/**/
-+    190,
-+/**/
-+    189,
-+/**/
-+    188,
-+/**/
-+    187,
-+/**/
-+    186,
-+/**/
-+    185,
-+/**/
-+    184,
-+/**/
-+    183,
-+/**/
-+    182,
-+/**/
-+    181,
-+/**/
-+    180,
-+/**/
-+    179,
-+/**/
-+    178,
-+/**/
-+    177,
-+/**/
-+    176,
-+/**/
-+    175,
-+/**/
-+    174,
-+/**/
-+    171,
-+/**/
-+    170,
-+/**/
-+    169,
-+/**/
-+    168,
-+/**/
-+    167,
-+/**/
-+    166,
-+/**/
-+    165,
-+/**/
-+    164,
-+/**/
-+    163,
-+/**/
-+    162,
-+/**/
-+    161,
-+/**/
-+    160,
-+/**/
-+    159,
-+/**/
-+    158,
-+/**/
-+    157,
-+/**/
-+    156,
-+/**/
-+    155,
-+/**/
-+    154,
-+/**/
-+    153,
-+/**/
-+    152,
-+/**/
-+    151,
-+/**/
-+    149,
-+/**/
-+    148,
-+/**/
-+    147,
-+/**/
-+    146,
-+/**/
-+    145,
-+/**/
-+    144,
-+/**/
-+    143,
-+/**/
-+    142,
-+/**/
-+    141,
-+/**/
-+    140,
-+/**/
-+    139,
-+/**/
-+    137,
-+/**/
-+    136,
-+/**/
-+    135,
-+/**/
-+    134,
-+/**/
-+    133,
-+/**/
-+    132,
-+/**/
-+    131,
-+/**/
-+    130,
-+/**/
-+    129,
-+/**/
-+    128,
-+/**/
-+    127,
-+/**/
-+    126,
-+/**/
-+    125,
-+/**/
-+    124,
-+/**/
-+    123,
-+/**/
-+    122,
-+/**/
-+    121,
-+/**/
-+    120,
-+/**/
-+    119,
-+/**/
-+    118,
-+/**/
-+    117,
-+/**/
-+    116,
-+/**/
-+    115,
-+/**/
-+    114,
-+/**/
-+    113,
-+/**/
-+    112,
-+/**/
-+    111,
-+/**/
-+    110,
-+/**/
-+    109,
-+/**/
-+    108,
-+/**/
-+    107,
-+/**/
-+    106,
-+/**/
-+    105,
-+/**/
-+    104,
-+/**/
-+    103,
-+/**/
-+    102,
-+/**/
-+    100,
-+/**/
-+    99,
-+/**/
-+    98,
-+/**/
-+    97,
-+/**/
-+    96,
-+/**/
-+    95,
-+/**/
-+    94,
-+/**/
-+    92,
-+/**/
-+    91,
-+/**/
-+    90,
-+/**/
-+    87,
-+/**/
-+    86,
-+/**/
-+    85,
-+/**/
-+    84,
-+/**/
-+    83,
-+/**/
-+    82,
-+/**/
-+    81,
-+/**/
-+    80,
-+/**/
-+    79,
-+/**/
-+    78,
-+/**/
-+    77,
-+/**/
-+    76,
-+/**/
-+    75,
-+/**/
-+    73,
-+/**/
-+    70,
-+/**/
-+    69,
-+/**/
-+    68,
-+/**/
-+    67,
-+/**/
-+    66,
-+/**/
-+    65,
-+/**/
-+    64,
-+/**/
-+    63,
-+/**/
-+    62,
-+/**/
-+    61,
-+/**/
-+    60,
-+/**/
-+    59,
-+/**/
-+    58,
-+/**/
-+    57,
-+/**/
-+    56,
-+/**/
-+    55,
-+/**/
-+    54,
-+/**/
-+    53,
-+/**/
-+    52,
-+/**/
-+    51,
-+/**/
-+    50,
-+/**/
-+    48,
-+/**/
-+    47,
-+/**/
-+    46,
-+/**/
-+    45,
-+/**/
-+    44,
-+/**/
-+    43,
-+/**/
-+    42,
-+/**/
-+    40,
-+/**/
-+    39,
-+/**/
-+    38,
-+/**/
-+    37,
-+/**/
-+    35,
-+/**/
-+    34,
-+/**/
-+    33,
-+/**/
-+    32,
-+/**/
-+    31,
-+/**/
-+    30,
-+/**/
-+    29,
-+/**/
-+    28,
-+/**/
-+    27,
-+/**/
-+    26,
-+/**/
-+    25,
-+/**/
-+    24,
-+/**/
-+    23,
-+/**/
-+    22,
-+/**/
-+    21,
-+/**/
-+    20,
-+/**/
-+    19,
-+/**/
-+    18,
-+/**/
-+    17,
-+/**/
-+    16,
-+/**/
-+    15,
-+/**/
-+    14,
-+/**/
-+    13,
-+/**/
-+    12,
-+/**/
-+    11,
-+/**/
-+    10,
-+/**/
-+    9,
-+/**/
-+    8,
-+/**/
-+    6,
-+/**/
-+    5,
-+/**/
-+    4,
-+/**/
-+    3,
-+/**/
-+    2,
-+/**/
-+    1,
-+/**/
-     0
- };
- 
-+/*
-+ * Place to put a short description when adding a feature with a patch.
-+ * Keep it short, e.g.,: "relative numbers", "persistent undo".
-+ * Also add a comment marker to separate the lines.
-+ * See the official Vim patches for the diff format: It must use a context of
-+ * one line only.  Create it by hand or use "diff -C2" and edit the patch.
-+ */
-+static char *(extra_patches[]) =
-+{   /* Add your patch description below this line */
-+/**/
-+    NULL
-+};
-+
-     int
- highest_patch()
- {
-@@ -786,7 +1263,7 @@
-     MSG_PUTS(_("\nRISC OS version"));
- #endif
- #ifdef VMS
--    MSG_PUTS("\nOpenVMS version");
-+    MSG_PUTS(_("\nOpenVMS version"));
- # ifdef HAVE_PATHDEF
-     if (*compiled_arch != NUL)
-     {
-@@ -825,6 +1302,19 @@
- 	}
-     }
- 
-+    /* Print the list of extra patch descriptions if there is at least one. */
-+    if (extra_patches[0] != NULL)
-+    {
-+	MSG_PUTS(_("\nExtra patches: "));
-+	s = "";
-+	for (i = 0; extra_patches[i] != NULL; ++i)
-+	{
-+	    MSG_PUTS(s);
-+	    s = ", ";
-+	    MSG_PUTS(extra_patches[i]);
-+	}
-+    }
-+
- #ifdef MODIFIED_BY
-     MSG_PUTS("\n");
-     MSG_PUTS(_("Modified by "));
-diff -Naur vim72.orig/src/vim.h vim72/src/vim.h
---- vim72.orig/src/vim.h	2008-08-09 09:03:38.000000000 -0700
-+++ vim72/src/vim.h	2009-09-12 08:39:43.000000000 -0700
-@@ -341,8 +341,14 @@
- #ifdef BACKSLASH_IN_FILENAME
- # define PATH_ESC_CHARS ((char_u *)" \t\n*?[{`%#'\"|!<")
- #else
--# define PATH_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<")
--# define SHELL_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<>();&")
-+# ifdef VMS
-+    /* VMS allows a lot of characters in the file name */
-+#  define PATH_ESC_CHARS ((char_u *)" \t\n*?{`\\%#'\"|!")
-+#  define SHELL_ESC_CHARS ((char_u *)" \t\n*?{`\\%#'|!()&")
-+# else
-+#  define PATH_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<")
-+#  define SHELL_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<>();&")
-+# endif
- #endif
- 
- #define NUMBUFLEN 30	    /* length of a buffer to store a number in ASCII */
-@@ -370,7 +376,7 @@
-    * Define __w64 as an empty token for everything but MSVC 7.x or later.
-    */
- # if !defined(_MSC_VER)	|| (_MSC_VER < 1300)
--#  define __w64 
-+#  define __w64
- # endif
- typedef unsigned long __w64	long_u;
- typedef		 long __w64     long_i;
-@@ -702,6 +708,8 @@
- #define EXPAND_USER_DEFINED	30
- #define EXPAND_USER_LIST	31
- #define EXPAND_SHELLCMD		32
-+#define EXPAND_CSCOPE		33
-+#define EXPAND_SIGN		34
- 
- /* Values for exmode_active (0 is no exmode) */
- #define EXMODE_NORMAL		1
-@@ -1051,6 +1059,7 @@
- #define WSP_HELP	16	/* creating the help window */
- #define WSP_BELOW	32	/* put new window below/right */
- #define WSP_ABOVE	64	/* put new window above/left */
-+#define WSP_NEWLOC	128	/* don't copy location list */
- 
- /*
-  * arguments for gui_set_shellsize()
-@@ -1328,11 +1337,11 @@
- # define MSG_BUF_CLEN  MSG_BUF_LEN	    /* cell length */
- #endif
- 
--#if defined(AMIGA) || defined(__linux__) || defined(__QNX__) || defined(__CYGWIN32__) || defined(_AIX)
--# define TBUFSZ 2048		/* buffer size for termcap entry */
--#else
--# define TBUFSZ 1024		/* buffer size for termcap entry */
--#endif
-+/* Size of the buffer used for tgetent().  Unfortunately this is largely
-+ * undocumented, some systems use 1024.  Using a buffer that is too small
-+ * causes a buffer overrun and a crash.  Use the maximum known value to stay
-+ * on the safe side. */
-+#define TBUFSZ 2048		/* buffer size for termcap entry */
- 
- /*
-  * Maximum length of key sequence to be mapped.
-@@ -1451,8 +1460,8 @@
- # define PERROR(msg)		    perror(msg)
- #endif
- 
--typedef long	    linenr_T;		/* line number type */
--typedef unsigned    colnr_T;		/* column number type */
-+typedef long	linenr_T;		/* line number type */
-+typedef int	colnr_T;		/* column number type */
- typedef unsigned short disptick_T;	/* display tick type */
- 
- #define MAXLNUM (0x7fffffffL)		/* maximum (invalid) line number */
-@@ -1728,7 +1737,8 @@
- #define VV_MOUSE_COL	51
- #define VV_OP		52
- #define VV_SEARCHFORWARD 53
--#define VV_LEN		54	/* number of v: vars */
-+#define VV_OLDFILES	54
-+#define VV_LEN		55	/* number of v: vars */
- 
- #ifdef FEAT_CLIPBOARD
- 
-@@ -1979,6 +1989,9 @@
- # endif
- #endif
- 
-+#ifndef FEAT_NETBEANS_INTG
-+# undef NBDEBUG
-+#endif
- #ifdef NBDEBUG /* Netbeans debugging. */
- # include "nbdebug.h"
- #else
-@@ -2054,4 +2067,10 @@
- #define DOSO_VIMRC	1	/* loading vimrc file */
- #define DOSO_GVIMRC	2	/* loading gvimrc file */
- 
-+/* flags for read_viminfo() and children */
-+#define VIF_WANT_INFO		1	/* load non-mark info */
-+#define VIF_WANT_MARKS		2	/* load file marks */
-+#define VIF_FORCEIT		4	/* overwrite info already read */
-+#define VIF_GET_OLDFILES	8	/* load v:oldfiles */
-+
- #endif /* VIM__H */
-diff -Naur vim72.orig/src/window.c vim72/src/window.c
---- vim72.orig/src/window.c	2008-08-06 04:00:30.000000000 -0700
-+++ vim72/src/window.c	2009-09-12 08:40:34.000000000 -0700
-@@ -11,8 +11,8 @@
- 
- static int path_is_url __ARGS((char_u *p));
- #if defined(FEAT_WINDOWS) || defined(PROTO)
--static int win_split_ins __ARGS((int size, int flags, win_T *newwin, int dir));
--static void win_init __ARGS((win_T *newp, win_T *oldp));
-+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));
- static void frame_setheight __ARGS((frame_T *curfrp, int height));
- #ifdef FEAT_VERTSPLIT
-@@ -23,8 +23,8 @@
- static void win_totop __ARGS((int size, int flags));
- static void win_equal_rec __ARGS((win_T *next_curwin, int current, frame_T *topfr, int dir, int col, int row, int width, int height));
- static int last_window __ARGS((void));
-+static int one_window __ARGS((void));
- static win_T *win_free_mem __ARGS((win_T *win, int *dirp, tabpage_T *tp));
--static win_T *winframe_remove __ARGS((win_T *win, int *dirp, tabpage_T *tp));
- static frame_T *win_altframe __ARGS((win_T *win, tabpage_T *tp));
- static tabpage_T *alt_tabpage __ARGS((void));
- static win_T *frame2win __ARGS((frame_T *frp));
-@@ -41,6 +41,7 @@
- #endif
- #endif
- static int win_alloc_firstwin __ARGS((win_T *oldwin));
-+static void new_frame __ARGS((win_T *wp));
- #if defined(FEAT_WINDOWS) || defined(PROTO)
- static tabpage_T *alloc_tabpage __ARGS((void));
- static int leave_tabpage __ARGS((buf_T *new_curbuf));
-@@ -49,8 +50,6 @@
- static int frame_minheight __ARGS((frame_T *topfrp, win_T *next_curwin));
- static void win_enter_ext __ARGS((win_T *wp, int undo_sync, int no_curwin));
- static void win_free __ARGS((win_T *wp, tabpage_T *tp));
--static void win_append __ARGS((win_T *, win_T *));
--static void win_remove __ARGS((win_T *, tabpage_T *tp));
- static void frame_append __ARGS((frame_T *after, frame_T *frp));
- static void frame_insert __ARGS((frame_T *before, frame_T *frp));
- static void frame_remove __ARGS((frame_T *frp));
-@@ -62,17 +61,15 @@
- static void frame_add_height __ARGS((frame_T *frp, int n));
- static void last_status_rec __ARGS((frame_T *fr, int statusline));
- 
--static void make_snapshot __ARGS((void));
- static void make_snapshot_rec __ARGS((frame_T *fr, frame_T **frp));
--static void clear_snapshot __ARGS((tabpage_T *tp));
-+static void clear_snapshot __ARGS((tabpage_T *tp, int idx));
- static void clear_snapshot_rec __ARGS((frame_T *fr));
--static void restore_snapshot __ARGS((int close_curwin));
- static int check_snapshot_rec __ARGS((frame_T *sn, frame_T *fr));
- static win_T *restore_snapshot_rec __ARGS((frame_T *sn, frame_T *fr));
- 
- #endif /* FEAT_WINDOWS */
- 
--static win_T *win_alloc __ARGS((win_T *after));
-+static win_T *win_alloc __ARGS((win_T *after, int hidden));
- static void win_new_height __ARGS((win_T *, int));
- 
- #define URL_SLASH	1		/* path_is_url() has found "://" */
-@@ -259,7 +256,7 @@
- /* cursor to previous window with wrap around */
-     case 'W':
- 		CHECK_CMDWIN
--		if (lastwin == firstwin && Prenum != 1)	/* just one window */
-+		if (firstwin == lastwin && Prenum != 1)	/* just one window */
- 		    beep_flush();
- 		else
- 		{
-@@ -343,7 +340,7 @@
- 
- /* move window to new tab page */
-     case 'T':
--		if (firstwin == lastwin)
-+		if (one_window())
- 		    MSG(_(m_onlyone));
- 		else
- 		{
-@@ -593,9 +590,7 @@
- 		++allow_keys;   /* no mapping for xchar, but allow key codes */
- 		if (xchar == NUL)
- 		    xchar = plain_vgetc();
--#ifdef FEAT_LANGMAP
- 		LANGMAP_ADJUST(xchar, TRUE);
--#endif
- 		--no_mapping;
- 		--allow_keys;
- #ifdef FEAT_CMDL_INFO
-@@ -680,9 +675,9 @@
-     /* When creating the help window make a snapshot of the window layout.
-      * Otherwise clear the snapshot, it's now invalid. */
-     if (flags & WSP_HELP)
--	make_snapshot();
-+	make_snapshot(SNAP_HELP_IDX);
-     else
--	clear_snapshot(curtab);
-+	clear_snapshot(curtab, SNAP_HELP_IDX);
- 
-     return win_split_ins(size, flags, NULL, 0);
- }
-@@ -693,7 +688,7 @@
-  * top/left/right/bottom.
-  * return FAIL for failure, OK otherwise
-  */
--    static int
-+    int
- win_split_ins(size, flags, newwin, dir)
-     int		size;
-     int		flags;
-@@ -894,14 +889,14 @@
-     {
- 	/* new window below/right of current one */
- 	if (newwin == NULL)
--	    wp = win_alloc(oldwin);
-+	    wp = win_alloc(oldwin, FALSE);
- 	else
- 	    win_append(oldwin, wp);
-     }
-     else
-     {
- 	if (newwin == NULL)
--	    wp = win_alloc(oldwin->w_prev);
-+	    wp = win_alloc(oldwin->w_prev, FALSE);
- 	else
- 	    win_append(oldwin->w_prev, wp);
-     }
-@@ -911,8 +906,15 @@
- 	if (wp == NULL)
- 	    return FAIL;
- 
-+	new_frame(wp);
-+	if (wp->w_frame == NULL)
-+	{
-+	    win_free(wp, NULL);
-+	    return FAIL;
-+	}
-+
- 	/* make the contents of the new window the same as the current one */
--	win_init(wp, curwin);
-+	win_init(wp, curwin, flags);
-     }
- 
-     /*
-@@ -971,13 +973,7 @@
-     }
- 
-     if (newwin == NULL)
--    {
--	/* Create a frame for the new window. */
--	frp = (frame_T *)alloc_clear((unsigned)sizeof(frame_T));
--	frp->fr_layout = FR_LEAF;
--	frp->fr_win = wp;
--	wp->w_frame = frp;
--    }
-+	frp = wp->w_frame;
-     else
- 	frp = newwin->w_frame;
-     frp->fr_parent = curfrp->fr_parent;
-@@ -1157,15 +1153,19 @@
-     return OK;
- }
- 
-+
- /*
-  * Initialize window "newp" from window "oldp".
-  * Used when splitting a window and when creating a new tab page.
-  * The windows will both edit the same buffer.
-+ * WSP_NEWLOC may be specified in flags to prevent the location list from
-+ * being copied.
-  */
-     static void
--win_init(newp, oldp)
-+win_init(newp, oldp, flags)
-     win_T	*newp;
-     win_T	*oldp;
-+    int		 flags UNUSED;
- {
-     int		i;
- 
-@@ -1190,19 +1190,19 @@
-     copy_jumplist(oldp, newp);
- #endif
- #ifdef FEAT_QUICKFIX
--    copy_loclist(oldp, newp);
-+    if (flags & WSP_NEWLOC)
-+    {
-+	/* Don't copy the location list.  */
-+	newp->w_llist = NULL;
-+	newp->w_llist_ref = NULL;
-+    }
-+    else
-+	copy_loclist(oldp, newp);
- #endif
-     if (oldp->w_localdir != NULL)
- 	newp->w_localdir = vim_strsave(oldp->w_localdir);
- 
--    /* Use the same argument list. */
--    newp->w_alist = oldp->w_alist;
--    ++newp->w_alist->al_refcount;
--    newp->w_arg_idx = oldp->w_arg_idx;
--
--    /*
--     * copy tagstack and options from existing window
--     */
-+    /* copy tagstack and folds */
-     for (i = 0; i < oldp->w_tagstacklen; i++)
-     {
- 	newp->w_tagstack[i] = oldp->w_tagstack[i];
-@@ -1212,10 +1212,29 @@
-     }
-     newp->w_tagstackidx = oldp->w_tagstackidx;
-     newp->w_tagstacklen = oldp->w_tagstacklen;
--    win_copy_options(oldp, newp);
- # ifdef FEAT_FOLDING
-     copyFoldingState(oldp, newp);
- # endif
-+
-+    win_init_some(newp, oldp);
-+}
-+
-+/*
-+ * Initialize window "newp" from window"old".
-+ * Only the essential things are copied.
-+ */
-+    static void
-+win_init_some(newp, oldp)
-+    win_T	*newp;
-+    win_T	*oldp;
-+{
-+    /* Use the same argument list. */
-+    newp->w_alist = oldp->w_alist;
-+    ++newp->w_alist->al_refcount;
-+    newp->w_arg_idx = oldp->w_arg_idx;
-+
-+    /* copy options from existing window */
-+    win_copy_options(oldp, newp);
- }
- 
- #endif /* FEAT_WINDOWS */
-@@ -1258,11 +1277,10 @@
-  * Must be called when there is just one window, filling the whole screen
-  * (excluding the command line).
-  */
--/*ARGSUSED*/
-     int
- make_windows(count, vertical)
-     int		count;
--    int		vertical;	/* split windows vertically if TRUE */
-+    int		vertical UNUSED;  /* split windows vertically if TRUE */
- {
-     int		maxcount;
-     int		todo;
-@@ -1557,15 +1575,8 @@
- #if defined(FEAT_GUI) && defined(FEAT_VERTSPLIT)
-     /* When 'guioptions' includes 'L' or 'R' may have to remove or add
-      * scrollbars.  Have to update them anyway. */
--    if (gui.in_use)
--    {
--	out_flush();
--	gui_init_which_components(NULL);
--	gui_update_scrollbars(TRUE);
--    }
--    need_mouse_correct = TRUE;
-+    gui_may_update_scrollbars();
- #endif
--
- }
- 
- /*
-@@ -2040,13 +2051,40 @@
- }
- 
- /*
-- * Return TRUE if the current window is the only window that exists.
-+ * Return TRUE if the current window is the only window that exists (ignoring
-+ * "aucmd_win").
-  * Returns FALSE if there is a window, possibly in another tab page.
-  */
-     static int
- last_window()
- {
--    return (lastwin == firstwin && first_tabpage->tp_next == NULL);
-+    return (one_window() && first_tabpage->tp_next == NULL);
-+}
-+
-+/*
-+ * Return TRUE if there is only one window other than "aucmd_win" in the
-+ * current tab page.
-+ */
-+    static int
-+one_window()
-+{
-+#ifdef FEAT_AUTOCMD
-+    win_T	*wp;
-+    int		seen_one = FALSE;
-+
-+    FOR_ALL_WINDOWS(wp)
-+    {
-+	if (wp != aucmd_win)
-+	{
-+	    if (seen_one)
-+		return FALSE;
-+	    seen_one = TRUE;
-+	}
-+    }
-+    return TRUE;
-+#else
-+    return firstwin == lastwin;
-+#endif
- }
- 
- /*
-@@ -2075,6 +2113,19 @@
- 	return;
-     }
- 
-+#ifdef FEAT_AUTOCMD
-+    if (win == aucmd_win)
-+    {
-+	EMSG(_("E813: Cannot close autocmd window"));
-+	return;
-+    }
-+    if ((firstwin == aucmd_win || lastwin == aucmd_win) && one_window())
-+    {
-+	EMSG(_("E814: Cannot close window, only autocmd window would remain"));
-+	return;
-+    }
-+#endif
-+
-     /*
-      * When closing the last window in a tab page first go to another tab
-      * page and then close the window and the tab page.  This avoids that
-@@ -2104,7 +2155,7 @@
-     if (win->w_buffer->b_help)
- 	help_window = TRUE;
-     else
--	clear_snapshot(curtab);
-+	clear_snapshot(curtab, SNAP_HELP_IDX);
- 
- #ifdef FEAT_AUTOCMD
-     if (win == curwin)
-@@ -2221,7 +2272,7 @@
-     /* After closing the help window, try restoring the window layout from
-      * before it was opened. */
-     if (help_window)
--	restore_snapshot(close_curwin);
-+	restore_snapshot(SNAP_HELP_IDX, close_curwin);
- 
- #if defined(FEAT_GUI) && defined(FEAT_VERTSPLIT)
-     /* When 'guioptions' includes 'L' or 'R' may have to remove scrollbars. */
-@@ -2302,13 +2353,6 @@
-     frame_T	*frp;
-     win_T	*wp;
- 
--#ifdef FEAT_FOLDING
--    clearFolding(win);
--#endif
--
--    /* reduce the reference count to the argument list. */
--    alist_unlink(win->w_alist);
--
-     /* Remove the window and its frame from the tree of frames. */
-     frp = win->w_frame;
-     wp = winframe_remove(win, dirp, tp);
-@@ -2334,6 +2378,14 @@
- 	tabpage_close(TRUE);
- # endif
- 
-+# ifdef FEAT_AUTOCMD
-+    if (aucmd_win != NULL)
-+    {
-+	(void)win_free_mem(aucmd_win, &dummy, NULL);
-+	aucmd_win = NULL;
-+    }
-+# endif
-+
-     while (firstwin != NULL)
- 	(void)win_free_mem(firstwin, &dummy, NULL);
- }
-@@ -2343,11 +2395,10 @@
-  * Remove a window and its frame from the tree of frames.
-  * Returns a pointer to the window that got the freed up space.
-  */
--/*ARGSUSED*/
--    static win_T *
-+    win_T *
- winframe_remove(win, dirp, tp)
-     win_T	*win;
--    int		*dirp;		/* set to 'v' or 'h' for direction if 'ea' */
-+    int		*dirp UNUSED;	/* set to 'v' or 'h' for direction if 'ea' */
-     tabpage_T	*tp;		/* tab page "win" is in, NULL for current */
- {
-     frame_T	*frp, *frp2, *frp3;
-@@ -3083,7 +3134,7 @@
-     win_T	*nextwp;
-     int		r;
- 
--    if (lastwin == firstwin)
-+    if (one_window())
-     {
- 	if (message
- #ifdef FEAT_AUTOCMD
-@@ -3145,27 +3196,34 @@
-     void
- curwin_init()
- {
--    redraw_win_later(curwin, NOT_VALID);
--    curwin->w_lines_valid = 0;
--    curwin->w_cursor.lnum = 1;
--    curwin->w_curswant = curwin->w_cursor.col = 0;
-+    win_init_empty(curwin);
-+}
-+
-+    void
-+win_init_empty(wp)
-+    win_T *wp;
-+{
-+    redraw_win_later(wp, NOT_VALID);
-+    wp->w_lines_valid = 0;
-+    wp->w_cursor.lnum = 1;
-+    wp->w_curswant = wp->w_cursor.col = 0;
- #ifdef FEAT_VIRTUALEDIT
--    curwin->w_cursor.coladd = 0;
-+    wp->w_cursor.coladd = 0;
- #endif
--    curwin->w_pcmark.lnum = 1;	/* pcmark not cleared but set to line 1 */
--    curwin->w_pcmark.col = 0;
--    curwin->w_prev_pcmark.lnum = 0;
--    curwin->w_prev_pcmark.col = 0;
--    curwin->w_topline = 1;
-+    wp->w_pcmark.lnum = 1;	/* pcmark not cleared but set to line 1 */
-+    wp->w_pcmark.col = 0;
-+    wp->w_prev_pcmark.lnum = 0;
-+    wp->w_prev_pcmark.col = 0;
-+    wp->w_topline = 1;
- #ifdef FEAT_DIFF
--    curwin->w_topfill = 0;
-+    wp->w_topfill = 0;
- #endif
--    curwin->w_botline = 2;
-+    wp->w_botline = 2;
- #ifdef FEAT_FKMAP
--    if (curwin->w_p_rl)
--	curwin->w_farsi = W_CONV + W_R_L;
-+    if (wp->w_p_rl)
-+	wp->w_farsi = W_CONV + W_R_L;
-     else
--	curwin->w_farsi = W_CONV;
-+	wp->w_farsi = W_CONV;
- #endif
- }
- 
-@@ -3187,9 +3245,30 @@
-     first_tabpage->tp_topframe = topframe;
-     curtab = first_tabpage;
- #endif
-+
-     return OK;
- }
- 
-+#if defined(FEAT_AUTOCMD) || defined(PROTO)
-+/*
-+ * Init "aucmd_win".  This can only be done after the first
-+ * window is fully initialized, thus it can't be in win_alloc_first().
-+ */
-+    void
-+win_alloc_aucmd_win()
-+{
-+    aucmd_win = win_alloc(NULL, TRUE);
-+    if (aucmd_win != NULL)
-+    {
-+	win_init_some(aucmd_win, curwin);
-+# ifdef FEAT_SCROLLBIND
-+	aucmd_win->w_p_scb = FALSE;
-+# endif
-+	new_frame(aucmd_win);
-+    }
-+}
-+#endif
-+
- /*
-  * Allocate the first window or the first window in a new tab page.
-  * When "oldwin" is NULL create an empty buffer for it.
-@@ -3201,7 +3280,7 @@
- win_alloc_firstwin(oldwin)
-     win_T	*oldwin;
- {
--    curwin = win_alloc(NULL);
-+    curwin = win_alloc(NULL, FALSE);
-     if (oldwin == NULL)
-     {
- 	/* Very first window, need to create an empty buffer for it and
-@@ -3220,7 +3299,7 @@
-     else
-     {
- 	/* First window in new tab page, initialize it from "oldwin". */
--	win_init(curwin, oldwin);
-+	win_init(curwin, oldwin, 0);
- 
- # ifdef FEAT_SCROLLBIND
- 	/* We don't want scroll-binding in the first window. */
-@@ -3229,21 +3308,36 @@
-     }
- #endif
- 
--    topframe = (frame_T *)alloc_clear((unsigned)sizeof(frame_T));
--    if (topframe == NULL)
-+    new_frame(curwin);
-+    if (curwin->w_frame == NULL)
- 	return FAIL;
--    topframe->fr_layout = FR_LEAF;
-+    topframe = curwin->w_frame;
- #ifdef FEAT_VERTSPLIT
-     topframe->fr_width = Columns;
- #endif
-     topframe->fr_height = Rows - p_ch;
-     topframe->fr_win = curwin;
--    curwin->w_frame = topframe;
- 
-     return OK;
- }
- 
- /*
-+ * Create a frame for window "wp".
-+ */
-+    static void
-+new_frame(win_T *wp)
-+{
-+    frame_T *frp = (frame_T *)alloc_clear((unsigned)sizeof(frame_T));
-+
-+    wp->w_frame = frp;
-+    if (frp != NULL)
-+    {
-+	frp->fr_layout = FR_LEAF;
-+	frp->fr_win = wp;
-+    }
-+}
-+
-+/*
-  * Initialize the window and frame size to the maximum.
-  */
-     void
-@@ -3293,10 +3387,13 @@
- free_tabpage(tp)
-     tabpage_T	*tp;
- {
-+    int idx;
-+
- # ifdef FEAT_DIFF
-     diff_clear(tp);
- # endif
--    clear_snapshot(tp);
-+    for (idx = 0; idx < SNAP_COUNT; ++idx)
-+	clear_snapshot(tp, idx);
- #ifdef FEAT_EVAL
-     vars_clear(&tp->tp_vars.dv_hashtab);	/* free all t: variables */
- #endif
-@@ -3363,12 +3460,7 @@
- #if defined(FEAT_GUI)
- 	/* When 'guioptions' includes 'L' or 'R' may have to remove or add
- 	 * scrollbars.  Have to update them anyway. */
--	if (gui.in_use && starting == 0)
--	{
--	    gui_init_which_components(NULL);
--	    gui_update_scrollbars(TRUE);
--	}
--	need_mouse_correct = TRUE;
-+	gui_may_update_scrollbars();
- #endif
- 
- 	redraw_all_later(CLEAR);
-@@ -3490,10 +3582,9 @@
-  * FAIL.
-  * Careful: When OK is returned need to get a new tab page very very soon!
-  */
--/*ARGSUSED*/
-     static int
- leave_tabpage(new_curbuf)
--    buf_T	*new_curbuf;	    /* what is going to be the new curbuf,
-+    buf_T	*new_curbuf UNUSED;    /* what is going to be the new curbuf,
- 				       NULL if unknown */
- {
-     tabpage_T	*tp = curtab;
-@@ -3535,11 +3626,10 @@
-  * Start using tab page "tp".
-  * Only to be used after leave_tabpage() or freeing the current tab page.
-  */
--/*ARGSUSED*/
-     static void
- enter_tabpage(tp, old_curbuf)
-     tabpage_T	*tp;
--    buf_T	*old_curbuf;
-+    buf_T	*old_curbuf UNUSED;
- {
-     int		old_off = tp->tp_firstwin->w_winrow;
-     win_T	*next_prevwin = tp->tp_prevwin;
-@@ -3588,12 +3678,7 @@
- #if defined(FEAT_GUI)
-     /* When 'guioptions' includes 'L' or 'R' may have to remove or add
-      * scrollbars.  Have to update them anyway. */
--    if (gui.in_use && starting == 0)
--    {
--	gui_init_which_components(NULL);
--	gui_update_scrollbars(TRUE);
--    }
--    need_mouse_correct = TRUE;
-+    gui_may_update_scrollbars();
- #endif
- 
-     redraw_all_later(CLEAR);
-@@ -4028,14 +4113,14 @@
- 	    if (mch_dirname(cwd, MAXPATHL) == OK)
- 		globaldir = vim_strsave(cwd);
- 	}
--	mch_chdir((char *)curwin->w_localdir);
--	shorten_fnames(TRUE);
-+	if (mch_chdir((char *)curwin->w_localdir) == 0)
-+	    shorten_fnames(TRUE);
-     }
-     else if (globaldir != NULL)
-     {
- 	/* Window doesn't have a local directory and we are not in the global
- 	 * directory: Change to the global directory. */
--	mch_chdir((char *)globaldir);
-+	ignored = mch_chdir((char *)globaldir);
- 	vim_free(globaldir);
- 	globaldir = NULL;
- 	shorten_fnames(TRUE);
-@@ -4145,12 +4230,13 @@
- #endif
- 
- /*
-- * allocate a window structure and link it in the window list
-+ * Allocate a window structure and link it in the window list when "hidden" is
-+ * FALSE.
-  */
--/*ARGSUSED*/
-     static win_T *
--win_alloc(after)
--    win_T	*after;
-+win_alloc(after, hidden)
-+    win_T	*after UNUSED;
-+    int		hidden UNUSED;
- {
-     win_T	*newwin;
- 
-@@ -4176,7 +4262,8 @@
- 	 * link the window in the window list
- 	 */
- #ifdef FEAT_WINDOWS
--	win_append(after, newwin);
-+	if (!hidden)
-+	    win_append(after, newwin);
- #endif
- #ifdef FEAT_VERTSPLIT
- 	newwin->w_wincol = 0;
-@@ -4237,6 +4324,13 @@
- {
-     int		i;
- 
-+#ifdef FEAT_FOLDING
-+    clearFolding(wp);
-+#endif
-+
-+    /* reduce the reference count to the argument list. */
-+    alist_unlink(wp->w_alist);
-+
- #ifdef FEAT_AUTOCMD
-     /* Don't execute autocommands while the window is halfway being deleted.
-      * gui_mch_destroy_scrollbar() may trigger a FocusGained event. */
-@@ -4299,7 +4393,10 @@
-     }
- #endif /* FEAT_GUI */
- 
--    win_remove(wp, tp);
-+#ifdef FEAT_AUTOCMD
-+    if (wp != aucmd_win)
-+#endif
-+	win_remove(wp, tp);
-     vim_free(wp);
- 
- #ifdef FEAT_AUTOCMD
-@@ -4310,7 +4407,7 @@
- /*
-  * Append window "wp" in the window list after window "after".
-  */
--    static void
-+    void
- win_append(after, wp)
-     win_T	*after, *wp;
- {
-@@ -4336,7 +4433,7 @@
- /*
-  * Remove a window from the window list.
-  */
--    static void
-+    void
- win_remove(wp, tp)
-     win_T	*wp;
-     tabpage_T	*tp;		/* tab page "win" is in, NULL for current */
-@@ -6036,6 +6133,7 @@
- /*
-  * Return TRUE if there is only one window (in the current tab page), not
-  * counting a help or preview window, unless it is the current window.
-+ * Does not count "aucmd_win".
-  */
-     int
- only_one_window()
-@@ -6049,11 +6147,15 @@
- 	return FALSE;
- 
-     for (wp = firstwin; wp != NULL; wp = wp->w_next)
--	if (!((wp->w_buffer->b_help && !curbuf->b_help)
-+	if ((!((wp->w_buffer->b_help && !curbuf->b_help)
- # ifdef FEAT_QUICKFIX
- 		    || wp->w_p_pvw
- # endif
- 	     ) || wp == curwin)
-+# ifdef FEAT_AUTOCMD
-+		&& wp != aucmd_win
-+# endif
-+	   )
- 	    ++count;
-     return (count <= 1);
- #else
-@@ -6108,11 +6210,12 @@
- /*
-  * Create a snapshot of the current frame sizes.
-  */
--    static void
--make_snapshot()
-+    void
-+make_snapshot(idx)
-+    int idx;
- {
--    clear_snapshot(curtab);
--    make_snapshot_rec(topframe, &curtab->tp_snapshot);
-+    clear_snapshot(curtab, idx);
-+    make_snapshot_rec(topframe, &curtab->tp_snapshot[idx]);
- }
- 
-     static void
-@@ -6140,11 +6243,12 @@
-  * Remove any existing snapshot.
-  */
-     static void
--clear_snapshot(tp)
-+clear_snapshot(tp, idx)
-     tabpage_T	*tp;
-+    int		idx;
- {
--    clear_snapshot_rec(tp->tp_snapshot);
--    tp->tp_snapshot = NULL;
-+    clear_snapshot_rec(tp->tp_snapshot[idx]);
-+    tp->tp_snapshot[idx] = NULL;
- }
- 
-     static void
-@@ -6164,26 +6268,27 @@
-  * This is only done if the screen size didn't change and the window layout is
-  * still the same.
-  */
--    static void
--restore_snapshot(close_curwin)
-+    void
-+restore_snapshot(idx, close_curwin)
-+    int		idx;
-     int		close_curwin;	    /* closing current window */
- {
-     win_T	*wp;
- 
--    if (curtab->tp_snapshot != NULL
-+    if (curtab->tp_snapshot[idx] != NULL
- # ifdef FEAT_VERTSPLIT
--	    && curtab->tp_snapshot->fr_width == topframe->fr_width
-+	    && curtab->tp_snapshot[idx]->fr_width == topframe->fr_width
- # endif
--	    && curtab->tp_snapshot->fr_height == topframe->fr_height
--	    && check_snapshot_rec(curtab->tp_snapshot, topframe) == OK)
-+	    && curtab->tp_snapshot[idx]->fr_height == topframe->fr_height
-+	    && check_snapshot_rec(curtab->tp_snapshot[idx], topframe) == OK)
-     {
--	wp = restore_snapshot_rec(curtab->tp_snapshot, topframe);
-+	wp = restore_snapshot_rec(curtab->tp_snapshot[idx], topframe);
- 	win_comp_pos();
- 	if (wp != NULL && close_curwin)
- 	    win_goto(wp);
- 	redraw_all_later(CLEAR);
-     }
--    clear_snapshot(curtab);
-+    clear_snapshot(curtab, idx);
- }
- 
- /*
-diff -Naur vim72.orig/src/workshop.c vim72/src/workshop.c
---- vim72.orig/src/workshop.c	2008-06-21 11:53:26.000000000 -0700
-+++ vim72/src/workshop.c	2009-09-12 08:39:05.000000000 -0700
-@@ -204,12 +204,11 @@
-  * Function:
-  *	Load a given file into the WorkShop buffer.
-  */
--/*ARGSUSED*/
-     void
- workshop_load_file(
- 	char	*filename,		/* the file to load */
- 	int	 line,			/* an optional line number (or 0) */
--	char	*frameid)		/* used for multi-frame support */
-+	char	*frameid UNUSED)	/* used for multi-frame support */
- {
- #ifdef WSDEBUG_TRACE
-     if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE))
-@@ -263,10 +262,9 @@
-     load_window(filename, lineno);
- }
- 
--/*ARGSUSED*/
-     void
- workshop_front_file(
--	char	*filename)
-+	char	*filename UNUSED)
- {
- #ifdef WSDEBUG_TRACE
-     if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE))
-@@ -538,9 +536,8 @@
-  * breakpoints have moved when a program has been recompiled and
-  * reloaded into dbx.
-  */
--/*ARGSUSED*/
-     void
--workshop_moved_marks(char *filename)
-+workshop_moved_marks(char *filename UNUSED)
- {
- #ifdef WSDEBUG_TRACE
-     if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE))
-@@ -575,11 +572,10 @@
-     return (int)h;
- }
- 
--/*ARGSUSED*/
-     void
- workshop_footer_message(
--	char		*message,
--	int		 severity)	/* severity is currently unused */
-+	char	*message,
-+	int	severity UNUSED)	/* severity is currently unused */
- {
- #ifdef WSDEBUG_TRACE
-     if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE))
-@@ -687,15 +683,14 @@
-  * command. The globals curMenuName and curMenuPriority contain the name and
-  * priority of the parent menu tree.
-  */
--/*ARGSUSED*/
-     void
- workshop_menu_item(
- 	char		*label,
- 	char		*verb,
--	char		*accelerator,
-+	char		*accelerator UNUSED,
- 	char		*acceleratorText,
--	char		*name,
--	char		*filepos,
-+	char		*name UNUSED,
-+	char		*filepos UNUSED,
- 	char		*sensitive)
- {
-     char		 cbuf[BUFSIZ];
-@@ -810,13 +805,12 @@
-     workshopInitDone = True;
- }
- 
--/*ARGSUSED*/
-     void
- workshop_toolbar_button(
- 	char	*label,
- 	char	*verb,
--	char	*senseVerb,
--	char	*filepos,
-+	char	*senseVerb UNUSED,
-+	char	*filepos UNUSED,
- 	char	*help,
- 	char	*sense,
- 	char	*file,
-@@ -968,7 +962,9 @@
- 	    if (strcmp(option, "syntax") == 0)
- 		vim_snprintf(cbuf, sizeof(cbuf), "syntax %s", value);
- 	    else if (strcmp(option, "savefiles") == 0)
--		; /* XXX - Not yet implemented */
-+	    {
-+		/* XXX - Not yet implemented */
-+	    }
- 	    break;
- 
- 	case 'l':
-@@ -1098,10 +1094,9 @@
- /*
-  * A button in the toolbar has been pushed.
-  */
--/*ARGSUSED*/
-     int
- workshop_get_positions(
--	void		*clientData,	/* unused */
-+	void		*clientData UNUSED,
- 	char	       **filename,	/* output data */
- 	int		*curLine,	/* output data */
- 	int		*curCol,	/* output data */
-@@ -1121,8 +1116,12 @@
- 				      ? (char *)curbuf->b_sfname : "<None>");
- #endif
- 
--    strcpy(ffname, (char *) curbuf->b_ffname);
--    *filename = ffname;		/* copy so nobody can change b_ffname */
-+    if (curbuf->b_ffname == NULL)
-+	ffname[0] = NUL;
-+    else
-+	/* copy so nobody can change b_ffname */
-+	strcpy(ffname, (char *) curbuf->b_ffname);
-+    *filename = ffname;
-     *curLine = curwin->w_cursor.lnum;
-     *curCol = curwin->w_cursor.col;
- 
-@@ -1522,9 +1521,8 @@
- 	return NULL;
- }
- 
--/*ARGSUSED*/
-     void
--workshop_save_sensitivity(char *filename)
-+workshop_save_sensitivity(char *filename UNUSED)
- {
- }
- 
-diff -Naur vim72.orig/src/xxd/xxd.c vim72/src/xxd/xxd.c
---- vim72.orig/src/xxd/xxd.c	2007-11-29 12:05:16.000000000 -0800
-+++ vim72/src/xxd/xxd.c	2009-09-12 08:40:18.000000000 -0700
-@@ -64,6 +64,9 @@
- # define _CRT_SECURE_NO_DEPRECATE
- # define _CRT_NONSTDC_NO_DEPRECATE
- #endif
-+#if !defined(CYGWIN) && (defined(CYGWIN32) || defined(__CYGWIN__) || defined(__CYGWIN32__))
-+# define CYGWIN
-+#endif
- 
- #include <stdio.h>
- #ifdef VAXC
-@@ -77,7 +80,8 @@
- #if !defined(OS2) && defined(__EMX__)
- # define OS2
- #endif
--#if defined(MSDOS) || defined(WIN32) || defined(OS2) || defined(__BORLANDC__)
-+#if defined(MSDOS) || defined(WIN32) || defined(OS2) || defined(__BORLANDC__) \
-+  || defined(CYGWIN)
- # include <io.h>	/* for setmode() */
- #else
- # ifdef UNIX
-@@ -150,9 +154,6 @@
- # endif
- #endif
- 
--#if !defined(CYGWIN) && (defined(CYGWIN32) || defined(__CYGWIN__) || defined(__CYGWIN32__))
--# define CYGWIN
--#endif
- #if defined(MSDOS) || defined(WIN32) || defined(OS2)
- # define BIN_READ(yes)  ((yes) ? "rb" : "rt")
- # define BIN_WRITE(yes) ((yes) ? "wb" : "wt")
Index: patches/vim-7.3-branch_update-1.patch
===================================================================
--- patches/vim-7.3-branch_update-1.patch	(revision 6c5a343a617ff57d7560c9a344da1c0c894502da)
+++ patches/vim-7.3-branch_update-1.patch	(revision 6c5a343a617ff57d7560c9a344da1c0c894502da)
@@ -0,0 +1,7220 @@
+Submitted By: Joe Ciccone <jciccone@gmail.com>
+Date: 01-08-2010
+Initial Package Version: 7.3
+Origin: Upstream
+Upstream Status: From Upstream
+Description: Contains all upstream patches between 7.3.001 and 7.3.099
+
+diff -Naur vim73.orig/runtime/doc/eval.txt vim73/runtime/doc/eval.txt
+--- vim73.orig/runtime/doc/eval.txt	2010-08-15 08:23:20.000000000 -0400
++++ vim73/runtime/doc/eval.txt	2011-01-08 21:01:18.986656145 -0500
+@@ -1657,6 +1657,15 @@
+ 					*v:warningmsg* *warningmsg-variable*
+ v:warningmsg	Last given warning message.  It's allowed to set this variable.
+ 
++					*v:windowid* *windowid-variable*
++v:windowid	When any X11 based GUI is running or when running in a
++		terminal and Vim connects to the X server (|-X|) this will be
++		set to the window ID.
++		When an MS-Windows GUI is running this will be set to the
++		window handle.
++		Otherwise the value is zero.
++		Note: for windows inside Vim use |winnr()|.
++
+ ==============================================================================
+ 4. Builtin Functions					*functions*
+ 
+@@ -1822,7 +1831,7 @@
+ log( {expr})			Float	natural logarithm (base e) of {expr}
+ log10( {expr})			Float	logarithm of Float {expr} to base 10
+ map( {expr}, {string})		List/Dict  change each item in {expr} to {expr}
+-maparg( {name}[, {mode} [, {abbr}]])
++maparg( {name}[, {mode} [, {abbr} [, {dict}]]])
+ 				String	rhs of mapping {name} in mode {mode}
+ mapcheck( {name}[, {mode} [, {abbr}]])
+ 				String	check for mappings matching {name}
+@@ -3966,23 +3975,51 @@
+ 		further items in {expr} are processed.
+ 
+ 
+-maparg({name}[, {mode} [, {abbr}]])			*maparg()*
+-		Return the rhs of mapping {name} in mode {mode}.  When there
+-		is no mapping for {name}, an empty String is returned.
++maparg({name}[, {mode} [, {abbr} [, {dict}]]])			*maparg()*
++		When {dict} is omitted or zero: Return the rhs of mapping
++		{name} in mode {mode}.  The returned String has special
++		characters translated like in the output of the ":map" command
++		listing.
++		
++		When there is no mapping for {name}, an empty String is
++		returned.
++
++		The {name} can have special key names, like in the ":map"
++		command.
++
+ 		{mode} can be one of these strings:
+ 			"n"	Normal
+-			"v"	Visual
++			"v"	Visual (including Select)
+ 			"o"	Operator-pending
+ 			"i"	Insert
+ 			"c"	Cmd-line
++			"s"	Select
++			"x"	Visual
+ 			"l"	langmap |language-mapping|
+ 			""	Normal, Visual and Operator-pending
+ 		When {mode} is omitted, the modes for "" are used.
++
+ 		When {abbr} is there and it is non-zero use abbreviations
+ 		instead of mappings.
+-		The {name} can have special key names, like in the ":map"
+-		command.  The returned String has special characters
+-		translated like in the output of the ":map" command listing.
++
++		When {dict} is there and it is non-zero return a dictionary
++		containing all the information of the mapping with the
++		following items:
++		  "lhs"	     The {lhs} of the mapping.
++		  "rhs"	     The {rhs} of the mapping as typed.
++		  "silent"   1 for a |:map-silent| mapping, else 0.
++		  "noremap"  1 if the {rhs} of the mapping is remappable.
++		  "expr"     1 for an expression mapping (|:map-<expr>|).
++		  "buffer"   1 for a buffer local mapping (|:map-local|).
++		  "mode"     Modes for which the mapping is defined. In
++			     addition to the modes mentioned above, these
++			     characters will be used:
++			     " "     Normal, Visual and Operator-pending
++			     "!"     Insert and Commandline mode
++				     (|mapmpde-ic|)
++		  "sid"	     the Script local ID, used for <sid> mappings
++			     (|<SID>|)
++
+ 		The mappings local to the current buffer are checked first,
+ 		then the global mappings.
+ 		This function can be used to map a key even when it's already
+diff -Naur vim73.orig/runtime/doc/netbeans.txt vim73/runtime/doc/netbeans.txt
+--- vim73.orig/runtime/doc/netbeans.txt	2010-08-15 08:23:21.000000000 -0400
++++ vim73/runtime/doc/netbeans.txt	2011-01-08 21:01:18.782656702 -0500
+@@ -1,4 +1,4 @@
+-*netbeans.txt*  For Vim version 7.3.  Last change: 2010 Jul 20
++*netbeans.txt*  For Vim version 7.3.  Last change: 2010 Aug 20
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Gordon Prieur et al.
+@@ -118,7 +118,8 @@
+ uncommenting a line with "--disable-netbeans" in the Makefile.
+ 
+ Currently the NetBeans interface is supported by Vim running in a terminal and
+-by GVim when it is run with one of the following GUIs: GTK, GNOME, and Motif.
++by GVim when it is run with one of the following GUIs: GTK, GNOME, Windows,
++Athena and Motif.
+ 
+ If Motif support is required the user must supply XPM libraries.  See
+ |workshop-xpm| for details on obtaining the latest version of XPM.
+diff -Naur vim73.orig/runtime/doc/options.txt vim73/runtime/doc/options.txt
+--- vim73.orig/runtime/doc/options.txt	2010-08-15 08:23:21.000000000 -0400
++++ vim73/runtime/doc/options.txt	2011-01-08 21:01:19.258656350 -0500
+@@ -1434,6 +1434,15 @@
+ 			explicitly accessed using the "* notation.  Also see
+ 			|gui-clipboard|.
+ 
++	unnamedplus	A variant of "unnamed" flag which uses the clipboard
++			register '+' (|quoteplus|) instead of register '*' for
++			all operations except yank.  Yank shall copy the text
++			into register '+' and also into '*' when "unnamed" is
++			included.
++			Only available with the |+x11| feature.
++			Availability can be checked with: >
++				if has('unnamedplus')
++<
+ 	autoselect	Works like the 'a' flag in 'guioptions': If present,
+ 			then whenever Visual mode is started, or the Visual
+ 			area extended, Vim tries to become the owner of the
+@@ -7530,8 +7539,9 @@
+ 	!	When included, save and restore global variables that start
+ 		with an uppercase letter, and don't contain a lowercase
+ 		letter.  Thus "KEEPTHIS and "K_L_M" are stored, but "KeepThis"
+-		and "_K_L_M" are not.  Only String and Number types are
+-		stored.
++		and "_K_L_M" are not.  Nested List and Dict items may not be
++		read back correctly, you end up with a string representation
++		instead.
+ 	"	Maximum number of lines saved for each register.  Old name of
+ 		the '<' item, with the disadvantage that you need to put a
+ 		backslash before the ", otherwise it will be recognized as the
+@@ -7747,6 +7757,17 @@
+ 	a pattern from the list.  This avoids problems when a future version
+ 	uses another default.
+ 
++
++			*'wildignorecase* *'wic'* *'nowildignorecase* *'nowic'*
++'wildignorecase' 'wic'	boolean	(default off)
++			global
++			{not in Vi}
++	When set case is ignored when completing file names and directories.
++	Has no effect on systems where file name case is generally ignored.
++	Does not apply when the shell is used to expand wildcards, which
++	happens when there are special characters.
++
++
+ 				*'wildmenu'* *'wmnu'* *'nowildmenu'* *'nowmnu'*
+ 'wildmenu' 'wmnu'	boolean	(default off)
+ 			global
+diff -Naur vim73.orig/src/GvimExt/Make_ming.mak vim73/src/GvimExt/Make_ming.mak
+--- vim73.orig/src/GvimExt/Make_ming.mak	2010-05-15 07:04:10.000000000 -0400
++++ vim73/src/GvimExt/Make_ming.mak	2011-01-08 21:01:19.490656530 -0500
+@@ -17,6 +17,17 @@
+ # check also the executables
+ MINGWOLD = no
+ 
++# Link against the shared versions of libgcc/libstdc++ by default.  Set
++# STATIC_STDCPLUS to "yes" to link against static versions instead.
++STATIC_STDCPLUS=no
++#STATIC_STDCPLUS=yes
++
++# Note: -static-libstdc++ is not available until gcc 4.5.x.
++LDFLAGS += -shared
++ifeq (yes, $(STATIC_STDCPLUS))
++LDFLAGS += -static-libgcc -static-libstdc++
++endif
++
+ ifeq ($(CROSS),yes)
+ DEL = rm
+ ifeq ($(MINGWOLD),yes)
+@@ -34,6 +45,8 @@
+ endif
+ CXX := $(CROSS_COMPILE)g++
+ WINDRES := $(CROSS_COMPILE)windres
++WINDRES_CXX = $(CXX)
++WINDRES_FLAGS = --preprocessor="$(WINDRES_CXX) -E -xc" -DRC_INVOKED
+ LIBS :=  -luuid
+ RES  := gvimext.res
+ DEFFILE = gvimext_ming.def
+@@ -46,7 +59,7 @@
+ all: all-before $(DLL) all-after
+ 
+ $(DLL): $(OBJ) $(RES) $(DEFFILE)
+-	$(CXX) -shared $(CXXFLAGS) -s -o $@ \
++	$(CXX) $(LDFLAGS) $(CXXFLAGS) -s -o $@ \
+ 		-Wl,--enable-auto-image-base \
+ 		-Wl,--enable-auto-import \
+ 		-Wl,--whole-archive \
+@@ -58,7 +71,7 @@
+ 	$(CXX) $(CXXFLAGS) -DFEAT_GETTEXT -c $? -o $@
+ 
+ $(RES): gvimext_ming.rc
+-	$(WINDRES) --input-format=rc --output-format=coff -DMING $? -o $@
++	$(WINDRES) $(WINDRES_FLAGS) --input-format=rc --output-format=coff -DMING $? -o $@
+ 
+ clean: clean-custom
+ 	-$(DEL)  $(OBJ) $(RES) $(DLL)
+diff -Naur vim73.orig/src/Make_cyg.mak vim73/src/Make_cyg.mak
+--- vim73.orig/src/Make_cyg.mak	2010-08-02 15:09:22.000000000 -0400
++++ vim73/src/Make_cyg.mak	2011-01-08 21:01:19.102656144 -0500
+@@ -1,6 +1,6 @@
+ #
+ # Makefile for VIM on Win32, using Cygnus gcc
+-# Last updated by Dan Sharp.  Last Change: 2010 Feb 24
++# Last updated by Dan Sharp.  Last Change: 2010 Nov 03
+ #
+ # Also read INSTALLpc.txt!
+ #
+@@ -27,6 +27,7 @@
+ #   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)
+@@ -254,16 +255,22 @@
+ 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=\"libmzsch$(MZSCHEME_VER).dll\" -DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
++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=-lmzsch$(MZSCHEME_VER)
++MZSCHEME_LIB=-l$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER)
+ else
+-MZSCHEME_LIB = -lmzsch$(MZSCHEME_VER) -lmzgc$(MZSCHEME_VER)
++MZSCHEME_LIB = -l$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER) -lmzgc$(MZSCHEME_VER)
+ endif
+ EXTRA_LIBS += -L$(MZSCHEME_DLLS) -L$(MZSCHEME_DLLS)/lib $(MZSCHEME_LIB)
+ endif
+diff -Naur vim73.orig/src/Make_ming.mak vim73/src/Make_ming.mak
+--- vim73.orig/src/Make_ming.mak	2010-08-02 15:09:43.000000000 -0400
++++ vim73/src/Make_ming.mak	2011-01-08 21:01:19.490656530 -0500
+@@ -56,6 +56,12 @@
+ 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=
+@@ -141,11 +147,17 @@
+ 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=-lmzsch$(MZSCHEME_VER)
++MZSCHEME_LIB=-l$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER)
+ else
+-MZSCHEME_LIB = -lmzsch$(MZSCHEME_VER) -lmzgc$(MZSCHEME_VER)
++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
+@@ -304,11 +316,13 @@
+ 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
+ 
+ ifdef GETTEXT
+ DEFINES += -DHAVE_GETTEXT -DHAVE_LOCALE_H
+@@ -343,7 +357,7 @@
+ ifdef MZSCHEME
+ CFLAGS += -I$(MZSCHEME)/include -DFEAT_MZSCHEME -DMZSCHEME_COLLECTS=\"$(MZSCHEME)/collects\"
+ ifeq (yes, $(DYNAMIC_MZSCHEME))
+-CFLAGS += -DDYNAMIC_MZSCHEME -DDYNAMIC_MZSCH_DLL=\"libmzsch$(MZSCHEME_VER).dll\" -DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
++CFLAGS += -DDYNAMIC_MZSCHEME -DDYNAMIC_MZSCH_DLL=\"lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).dll\" -DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
+ endif
+ endif
+ 
+@@ -571,8 +585,13 @@
+ endif
+ 
+ ifeq (yes, $(OLE))
+-LIB += -loleaut32 -lstdc++
++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))
+@@ -650,10 +669,10 @@
+ 	$(CC) -c $(CFLAGS) $< -o $@
+ 
+ $(OUTDIR)/vimres.res: vim.rc version.h gui_w32_rc.h
+-	$(WINDRES) $(DEFINES) vim.rc $(OUTDIR)/vimres.res
++	$(WINDRES) $(WINDRES_FLAGS) $(DEFINES) vim.rc $(OUTDIR)/vimres.res
+ 
+ $(OUTDIR)/vimrc.o: $(OUTDIR)/vimres.res
+-	$(WINDRES) $(OUTDIR)/vimres.res $(OUTDIR)/vimrc.o
++	$(WINDRES) $(WINDRES_FLAGS) $(OUTDIR)/vimres.res $(OUTDIR)/vimrc.o
+ 
+ $(OUTDIR):
+ 	$(MKDIR) $(OUTDIR)
+diff -Naur vim73.orig/src/Make_mvc.mak vim73/src/Make_mvc.mak
+--- vim73.orig/src/Make_mvc.mak	2010-07-18 15:24:20.000000000 -0400
++++ vim73/src/Make_mvc.mak	2011-01-08 21:01:19.314657721 -0500
+@@ -380,9 +380,6 @@
+ !if "$(_NMAKE_VER)" == "10.00.30319.01"
+ MSVCVER = 10.0
+ !endif
+-!if "$(_NMAKE_VER)" == "9.00.30729.01"
+-MSVCVER = 9.0
+-!endif
+ !endif
+ 
+ # Abort bulding VIM if version of VC is unrecognised.
+@@ -705,12 +702,18 @@
+ MZSCHEME_VER = 205_000
+ !endif
+ CFLAGS = $(CFLAGS) -DFEAT_MZSCHEME -I $(MZSCHEME)\include
+-!if EXIST("$(MZSCHEME)\collects\scheme\base.ss")
+-# for MzScheme 4.x we need to include byte code for basic Scheme stuff
++!if EXIST("$(MZSCHEME)\collects\scheme\base.ss") \
++	|| EXIST("$(MZSCHEME)\collects\scheme\base.rkt") 
++# for MzScheme >= 4 we need to include byte code for basic Scheme stuff
+ MZSCHEME_EXTRA_DEP = mzscheme_base.c
+ CFLAGS = $(CFLAGS) -DINCLUDE_MZSCHEME_BASE
+ !endif
+-!if EXIST("$(MZSCHEME)\lib\msvc\libmzsch$(MZSCHEME_VER).lib") \
++!if EXIST("$(MZSCHEME)\lib\msvc\libmzsch$(MZSCHEME_VER).lib")
++MZSCHEME_MAIN_LIB=mzsch
++!else
++MZSCHEME_MAIN_LIB=racket
++!endif
++!if EXIST("$(MZSCHEME)\lib\msvc\lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).lib") \
+ 	&& !EXIST("$(MZSCHEME)\lib\msvc\libmzgc$(MZSCHEME_VER).lib")
+ !message Building with Precise GC
+ MZSCHEME_PRECISE_GC = yes
+@@ -722,7 +725,7 @@
+ !endif
+ !message MzScheme DLLs will be loaded dynamically
+ CFLAGS = $(CFLAGS) -DDYNAMIC_MZSCHEME \
+-		-DDYNAMIC_MZSCH_DLL=\"libmzsch$(MZSCHEME_VER).dll\" \
++		-DDYNAMIC_MZSCH_DLL=\"lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).dll\" \
+ 		-DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
+ !else
+ !if "$(MZSCHEME_DEBUG)" == "yes"
+@@ -730,10 +733,10 @@
+ !endif
+ !if "$(MZSCHEME_PRECISE_GC)" == "yes"
+ # Precise GC does not use separate dll
+-MZSCHEME_LIB = $(MZSCHEME)\lib\msvc\libmzsch$(MZSCHEME_VER).lib
++MZSCHEME_LIB = $(MZSCHEME)\lib\msvc\lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).lib
+ !else
+ MZSCHEME_LIB = $(MZSCHEME)\lib\msvc\libmzgc$(MZSCHEME_VER).lib \
+-		$(MZSCHEME)\lib\msvc\libmzsch$(MZSCHEME_VER).lib
++		$(MZSCHEME)\lib\msvc\lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).lib
+ !endif
+ !endif
+ MZSCHEME_OBJ = $(OUTDIR)\if_mzsch.obj
+diff -Naur vim73.orig/src/Makefile vim73/src/Makefile
+--- vim73.orig/src/Makefile	2010-08-15 08:56:15.000000000 -0400
++++ vim73/src/Makefile	2011-01-08 21:01:19.114655467 -0500
+@@ -414,12 +414,16 @@
+ # However, this may still cause problems, such as "import termios" failing.
+ # Build two separate versions of Vim in that case.
+ #CONF_OPT_PYTHON = --enable-pythoninterp
++#CONF_OPT_PYTHON = --enable-pythoninterp=dynamic
+ #CONF_OPT_PYTHON3 = --enable-python3interp
++#CONF_OPT_PYTHON3 = --enable-python3interp=dynamic
+ 
+ # RUBY
+ # Uncomment this when you want to include the Ruby interface.
++# First one for static linking, second one for loading when used.
+ # Note: you need the development package (e.g., ruby1.9.1-dev on Ubuntu).
+ #CONF_OPT_RUBY = --enable-rubyinterp
++#CONF_OPT_RUBY = --enable-rubyinterp=dynamic
+ #CONF_OPT_RUBY = --enable-rubyinterp --with-ruby-command=ruby1.9.1
+ 
+ # TCL
+@@ -1047,8 +1051,9 @@
+ INSTALL_DATA	= cp
+ INSTALL_DATA_R	= cp -r
+ 
+-### Program to run on installed binary
++### Program to run on installed binary.  Use the second one to disable strip.
+ #STRIP = strip
++#STRIP = /bin/true
+ 
+ ### Permissions for binaries  {{{1
+ BINMOD = 755
+@@ -1321,7 +1326,7 @@
+ .SUFFIXES: .c .o .pro
+ 
+ PRE_DEFS = -Iproto $(DEFS) $(GUI_DEFS) $(GUI_IPATH) $(CPPFLAGS) $(EXTRA_IPATHS)
+-POST_DEFS = $(X_CFLAGS) $(MZSCHEME_CFLAGS) $(TCL_CFLAGS) $(RUBY_CFLAGS) $(EXTRA_DEFS)
++POST_DEFS = $(X_CFLAGS) $(MZSCHEME_CFLAGS) $(TCL_CFLAGS) $(EXTRA_DEFS)
+ 
+ ALL_CFLAGS = $(PRE_DEFS) $(CFLAGS) $(PROFILE_CFLAGS) $(POST_DEFS)
+ 
+@@ -1329,7 +1334,7 @@
+ # with "-E".
+ OSDEF_CFLAGS = $(PRE_DEFS) $(POST_DEFS)
+ 
+-LINT_CFLAGS = -DLINT -I. $(PRE_DEFS) $(POST_DEFS) $(LUA_CFLAGS) $(PERL_CFLAGS) $(PYTHON_CFLAGS) -Dinline= -D__extension__= -Dalloca=alloca
++LINT_CFLAGS = -DLINT -I. $(PRE_DEFS) $(POST_DEFS) $(RUBY_CFLAGS) $(LUA_CFLAGS) $(PERL_CFLAGS) $(PYTHON_CFLAGS) -Dinline= -D__extension__= -Dalloca=alloca
+ 
+ LINT_EXTRA = -DUSE_SNIFF -DHANGUL_INPUT -D"__attribute__(x)="
+ 
+@@ -1695,7 +1700,8 @@
+ 	$(CCC) version.c -o objects/version.o
+ 	@LINK="$(PURIFY) $(SHRPENV) $(CClink) $(ALL_LIB_DIRS) $(LDFLAGS) \
+ 		-o $(VIMTARGET) $(OBJ) objects/version.o $(ALL_LIBS)" \
+-		MAKE="$(MAKE)" sh $(srcdir)/link.sh
++		MAKE="$(MAKE)" LINK_AS_NEEDED=$(LINK_AS_NEEDED) \
++		sh $(srcdir)/link.sh
+ 
+ xxd/xxd$(EXEEXT): xxd/xxd.c
+ 	cd xxd; CC="$(CC)" CFLAGS="$(CPPFLAGS) $(CFLAGS)" \
+@@ -2532,7 +2538,7 @@
+ 	$(CCC) $(PYTHON3_CFLAGS) $(PYTHON3_CFLAGS_EXTRA) -o $@ if_python3.c
+ 
+ objects/if_ruby.o: if_ruby.c
+-	$(CCC) -o $@ if_ruby.c
++	$(CCC) $(RUBY_CFLAGS) -o $@ if_ruby.c
+ 
+ objects/if_sniff.o: if_sniff.c
+ 	$(CCC) -o $@ if_sniff.c
+diff -Naur vim73.orig/src/auto/configure vim73/src/auto/configure
+--- vim73.orig/src/auto/configure	2010-08-13 10:17:15.000000000 -0400
++++ vim73/src/auto/configure	2011-01-08 21:01:19.190656939 -0500
+@@ -593,6 +593,7 @@
+ 
+ ac_subst_vars='LTLIBOBJS
+ LIBOBJS
++LINK_AS_NEEDED
+ DEPEND_CFLAGS_FILTER
+ MAKEMO
+ MSGFMT
+@@ -1427,7 +1428,7 @@
+   --enable-pythoninterp=OPTS   Include Python interpreter. default=no OPTS=no/yes/dynamic
+   --enable-python3interp=OPTS   Include Python3 interpreter. default=no OPTS=no/yes/dynamic
+   --enable-tclinterp      Include Tcl interpreter.
+-  --enable-rubyinterp     Include Ruby interpreter.
++  --enable-rubyinterp=OPTS     Include Ruby interpreter.  default=no OPTS=no/yes/dynamic
+   --enable-cscope         Include cscope interface.
+   --enable-workshop       Include Sun Visual Workshop support.
+   --disable-netbeans      Disable NetBeans integration support.
+@@ -4862,16 +4863,36 @@
+       else
+ 	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+-	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if scheme.h can be found in /usr/include/plt/" >&5
+-$as_echo_n "checking if scheme.h can be found in /usr/include/plt/... " >&6; }
+-	if test -f /usr/include/plt/scheme.h; then
++	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/racket" >&5
++$as_echo_n "checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/racket... " >&6; }
++	if test -f $vi_cv_path_mzscheme_pfx/include/racket/scheme.h; then
+ 	  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+-	  SCHEME_INC=/usr/include/plt
++	  SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/racket
+ 	else
+ 	  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+-	  vi_cv_path_mzscheme_pfx=
++	  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if scheme.h can be found in /usr/include/plt/" >&5
++$as_echo_n "checking if scheme.h can be found in /usr/include/plt/... " >&6; }
++	  if test -f /usr/include/plt/scheme.h; then
++	    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++$as_echo "yes" >&6; }
++	    SCHEME_INC=/usr/include/plt
++	  else
++	    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++	    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if scheme.h can be found in /usr/include/racket/" >&5
++$as_echo_n "checking if scheme.h can be found in /usr/include/racket/... " >&6; }
++	    if test -f /usr/include/racket/scheme.h; then
++	      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++$as_echo "yes" >&6; }
++	      SCHEME_INC=/usr/include/racket
++	    else
++	      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++	      vi_cv_path_mzscheme_pfx=
++	    fi
++	  fi
+ 	fi
+       fi
+     fi
+@@ -4883,12 +4904,22 @@
+     elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"; then
+       MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"
+       MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
+-    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then
++    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket3m.a"; then
++      MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libracket3m.a"
++      MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
++    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket.a"; then
++      MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libracket.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"
++    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a"; then
+       MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"
+     else
+             if test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.so"; then
+         MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme3m"
+ 	MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
++      elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket3m.so"; then
++        MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lracket3m"
++	MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
++      elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket.so"; then
++        MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lracket -lmzgc"
+       else
+         MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc"
+       fi
+@@ -4901,10 +4932,20 @@
+     fi
+     if test -d $vi_cv_path_mzscheme_pfx/lib/plt/collects; then
+       SCHEME_COLLECTS=lib/plt/
++    else
++      if test -d $vi_cv_path_mzscheme_pfx/lib/racket/collects; then
++	SCHEME_COLLECTS=lib/racket/
++      fi
+     fi
+     if test -f "${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
+-            MZSCHEME_EXTRA="mzscheme_base.c"
+-      MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE"
++      MZSCHEME_EXTRA="mzscheme_base.c"
++    else
++      if test -f "${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects/scheme/base.rkt" ; then
++	MZSCHEME_EXTRA="mzscheme_base.c"
++      fi
++    fi
++    if test "X$MZSCHEME_EXTRA" != "X" ; then
++            MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE"
+       MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
+     fi
+     MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -I${SCHEME_INC} \
+@@ -5285,9 +5326,9 @@
+ 
+ 	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}"
++	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME=\\\"${vi_cv_path_python_pfx}\\\""
+ 	else
+-	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -I${vi_cv_path_python_epfx}/include/python${vi_cv_var_python_version}"
++	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -I${vi_cv_path_python_epfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME=\\\"${vi_cv_path_python_pfx}\\\""
+ 	fi
+ 	PYTHON_SRC="if_python.c"
+ 		if test "x$MACOSX" = "xyes"; then
+@@ -5298,7 +5339,7 @@
+ 	if test "${vi_cv_var_python_version}" = "1.4"; then
+ 	   PYTHON_OBJ="$PYTHON_OBJ objects/py_getpath.o"
+ 	fi
+-	PYTHON_GETPATH_CFLAGS="-DPYTHONPATH='\"${vi_cv_path_pythonpath}\"' -DPREFIX='\"${vi_cv_path_python_pfx}\"' -DEXEC_PREFIX='\"${vi_cv_path_python_epfx}\"'"
++    PYTHON_GETPATH_CFLAGS="-DPYTHONPATH='\"${vi_cv_path_pythonpath}\"' -DPREFIX='\"${vi_cv_path_python_pfx}\"' -DEXEC_PREFIX='\"${vi_cv_path_python_epfx}\"'"
+ 
+ 								{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if -pthread should be used" >&5
+ $as_echo_n "checking if -pthread should be used... " >&6; }
+@@ -5560,9 +5601,9 @@
+ 
+       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}"
++        PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+       else
+-        PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}"
++        PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+       fi
+       PYTHON3_SRC="if_python3.c"
+             if test "x$MACOSX" = "xyes"; then
+@@ -5667,10 +5708,10 @@
+ 
+   $as_echo "#define DYNAMIC_PYTHON3 1" >>confdefs.h
+ 
+-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can do without RTLD_GLOBAL" >&5
+-$as_echo_n "checking whether we can do without RTLD_GLOBAL... " >&6; }
++  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can do without RTLD_GLOBAL for Python" >&5
++$as_echo_n "checking whether we can do without RTLD_GLOBAL for Python... " >&6; }
+   cflags_save=$CFLAGS
+-  CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
++  CFLAGS="$CFLAGS $PYTHON_CFLAGS"
+   ldflags_save=$LDFLAGS
+   LDFLAGS="$LDFLAGS -ldl"
+   if test "$cross_compiling" = yes; then :
+@@ -5689,15 +5730,17 @@
+      * Only the first pyhton version used will be switched on.
+      */
+ 
+-    int no_rtl_global_needed_for(char *python_instsoname)
++    int no_rtl_global_needed_for(char *python_instsoname, char *prefix)
+     {
+       int needed = 0;
+       void* pylib = dlopen(python_instsoname, RTLD_LAZY);
+       if (pylib != 0)
+       {
++          void (*pfx)(char *home) = dlsym(pylib, "Py_SetPythonHome");
+           void (*init)(void) = dlsym(pylib, "Py_Initialize");
+           int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
+           void (*final)(void) = dlsym(pylib, "Py_Finalize");
++          (*pfx)(prefix);
+           (*init)();
+           needed = (*simple)("import termios") == -1;
+           (*final)();
+@@ -5709,7 +5752,7 @@
+     int main(int argc, char** argv)
+     {
+       int not_needed = 0;
+-      if (no_rtl_global_needed_for("libpython2.7.so.1.0") && no_rtl_global_needed_for("libpython3.1.so.1.0"))
++      if (no_rtl_global_needed_for("${python_INSTSONAME}", "${vi_cv_path_python_pfx}"))
+             not_needed = 1;
+       return !not_needed;
+     }
+@@ -5726,8 +5769,76 @@
+   conftest.$ac_objext conftest.beam conftest.$ac_ext
+ fi
+ 
++
+   CFLAGS=$cflags_save
+   LDFLAGS=$ldflags_save
++
++  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can do without RTLD_GLOBAL for Python3" >&5
++$as_echo_n "checking whether we can do without RTLD_GLOBAL for Python3... " >&6; }
++  cflags_save=$CFLAGS
++  CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
++  ldflags_save=$LDFLAGS
++  LDFLAGS="$LDFLAGS -ldl"
++  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.  */
++
++    #include <dlfcn.h>
++    #include <wchar.h>
++    /* If this program fails, then RTLD_GLOBAL is needed.
++     * RTLD_GLOBAL will be used and then it is not possible to
++     * have both python versions enabled in the same vim instance.
++     * Only the first pyhton version used will be switched on.
++     */
++
++    int no_rtl_global_needed_for(char *python_instsoname, wchar_t *prefix)
++    {
++      int needed = 0;
++      void* pylib = dlopen(python_instsoname, RTLD_LAZY);
++      if (pylib != 0)
++      {
++          void (*pfx)(wchar_t *home) = dlsym(pylib, "Py_SetPythonHome");
++          void (*init)(void) = dlsym(pylib, "Py_Initialize");
++          int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
++          void (*final)(void) = dlsym(pylib, "Py_Finalize");
++          (*pfx)(prefix);
++          (*init)();
++          needed = (*simple)("import termios") == -1;
++          (*final)();
++          dlclose(pylib);
++      }
++      return !needed;
++    }
++
++    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;
++    }
++_ACEOF
++if ac_fn_c_try_run "$LINENO"; then :
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++$as_echo "yes" >&6; };$as_echo "#define PY3_NO_RTLD_GLOBAL 1" >>confdefs.h
++
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
++  conftest.$ac_objext conftest.beam conftest.$ac_ext
++fi
++
++
++  CFLAGS=$cflags_save
++  LDFLAGS=$ldflags_save
++
+   PYTHON_SRC="if_python.c"
+   PYTHON_OBJ="objects/if_python.o"
+   PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${python_INSTSONAME}\\\""
+@@ -6103,7 +6214,7 @@
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_rubyinterp" >&5
+ $as_echo "$enable_rubyinterp" >&6; }
+-if test "$enable_rubyinterp" = "yes"; then
++if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking --with-ruby-command argument" >&5
+ $as_echo_n "checking --with-ruby-command argument... " >&6; }
+ 
+@@ -6209,6 +6320,13 @@
+ 	RUBY_PRO="if_ruby.pro"
+ 	$as_echo "#define FEAT_RUBY 1" >>confdefs.h
+ 
++	if test "$enable_rubyinterp" = "dynamic"; then
++	  libruby=`$vi_cv_path_ruby -r rbconfig -e 'printf "lib%s.%s\n", Config::CONFIG["RUBY_SO_NAME"], Config::CONFIG["DLEXT"]'`
++	  $as_echo "#define DYNAMIC_RUBY 1" >>confdefs.h
++
++	  RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby\\\" -DDYNAMIC_RUBY_VER=$rubyversion $RUBY_CFLAGS"
++	  RUBY_LIBS=
++	fi
+       else
+ 	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: not found; disabling Ruby" >&5
+ $as_echo "not found; disabling Ruby" >&6; }
+@@ -12357,6 +12475,23 @@
+ fi
+ 
+ 
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking linker --as-needed support" >&5
++$as_echo_n "checking linker --as-needed support... " >&6; }
++LINK_AS_NEEDED=
++# Check if linker supports --as-needed and --no-as-needed options
++if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
++  LDFLAGS="$LDFLAGS -Wl,--as-needed"
++  LINK_AS_NEEDED=yes
++fi
++if test "$LINK_AS_NEEDED" = yes; 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; }
++fi
++
++
+ ac_config_files="$ac_config_files auto/config.mk:config.mk.in"
+ 
+ cat >confcache <<\_ACEOF
+diff -Naur vim73.orig/src/buffer.c vim73/src/buffer.c
+--- vim73.orig/src/buffer.c	2010-08-13 05:14:35.000000000 -0400
++++ vim73/src/buffer.c	2011-01-08 21:01:19.026657243 -0500
+@@ -639,6 +639,9 @@
+     {
+ 	clear_wininfo(buf);		/* including window-local options */
+ 	free_buf_options(buf, TRUE);
++#ifdef FEAT_SPELL
++	ga_clear(&buf->b_s.b_langp);
++#endif
+     }
+ #ifdef FEAT_EVAL
+     vars_clear(&buf->b_vars.dv_hashtab); /* free all internal variables */
+@@ -661,9 +664,6 @@
+     vim_free(buf->b_start_fenc);
+     buf->b_start_fenc = NULL;
+ #endif
+-#ifdef FEAT_SPELL
+-    ga_clear(&buf->b_s.b_langp);
+-#endif
+ }
+ 
+ /*
+@@ -1288,9 +1288,12 @@
+     /* Go to the other buffer. */
+     set_curbuf(buf, action);
+ 
+-#if defined(FEAT_LISTCMDS) && defined(FEAT_SCROLLBIND)
++#if defined(FEAT_LISTCMDS) \
++	&& (defined(FEAT_SCROLLBIND) || defined(FEAT_CURSORBIND))
+     if (action == DOBUF_SPLIT)
+-	curwin->w_p_scb = FALSE;	/* reset 'scrollbind' */
++    {
++	RESET_BINDING(curwin);	/* reset 'scrollbind' and 'cursorbind' */
++    }
+ #endif
+ 
+ #if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
+@@ -1917,9 +1920,7 @@
+ 		tabpage_new();
+ 	    else if (win_split(0, 0) == FAIL)	/* Open in a new window */
+ 		return FAIL;
+-# ifdef FEAT_SCROLLBIND
+-	    curwin->w_p_scb = FALSE;
+-# endif
++	    RESET_BINDING(curwin);
+ 	}
+     }
+ #endif
+diff -Naur vim73.orig/src/config.h.in vim73/src/config.h.in
+--- vim73.orig/src/config.h.in	2010-08-13 09:45:27.000000000 -0400
++++ vim73/src/config.h.in	2011-01-08 21:01:19.038657206 -0500
+@@ -349,6 +349,9 @@
+ /* Define if you want to include the Ruby interpreter. */
+ #undef FEAT_RUBY
+ 
++/* Define for linking via dlopen() or LoadLibrary() */
++#undef DYNAMIC_RUBY
++
+ /* Define if you want to include the Tcl interpreter. */
+ #undef FEAT_TCL
+ 
+diff -Naur vim73.orig/src/config.mk.in vim73/src/config.mk.in
+--- vim73.orig/src/config.mk.in	2010-07-17 11:28:51.000000000 -0400
++++ vim73/src/config.mk.in	2011-01-08 21:01:19.118661627 -0500
+@@ -30,6 +30,7 @@
+ CPP		= @CPP@
+ CPP_MM		= @CPP_MM@
+ DEPEND_CFLAGS_FILTER = @DEPEND_CFLAGS_FILTER@
++LINK_AS_NEEDED	= @LINK_AS_NEEDED@
+ X_CFLAGS	= @X_CFLAGS@
+ X_LIBS_DIR	= @X_LIBS@
+ X_PRE_LIBS	= @X_PRE_LIBS@
+diff -Naur vim73.orig/src/configure.in vim73/src/configure.in
+--- vim73.orig/src/configure.in	2010-08-13 10:15:17.000000000 -0400
++++ vim73/src/configure.in	2011-01-08 21:01:19.186662333 -0500
+@@ -568,13 +568,27 @@
+ 	SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/plt
+       else
+ 	AC_MSG_RESULT(no)
+-	AC_MSG_CHECKING(if scheme.h can be found in /usr/include/plt/)
+-	if test -f /usr/include/plt/scheme.h; then
++	AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/racket)
++	if test -f $vi_cv_path_mzscheme_pfx/include/racket/scheme.h; then
+ 	  AC_MSG_RESULT(yes)
+-	  SCHEME_INC=/usr/include/plt
++	  SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/racket
+ 	else
+ 	  AC_MSG_RESULT(no)
+-	  vi_cv_path_mzscheme_pfx=
++	  AC_MSG_CHECKING(if scheme.h can be found in /usr/include/plt/)
++	  if test -f /usr/include/plt/scheme.h; then
++	    AC_MSG_RESULT(yes)
++	    SCHEME_INC=/usr/include/plt
++	  else
++	    AC_MSG_RESULT(no)
++	    AC_MSG_CHECKING(if scheme.h can be found in /usr/include/racket/)
++	    if test -f /usr/include/racket/scheme.h; then
++	      AC_MSG_RESULT(yes)
++	      SCHEME_INC=/usr/include/racket
++	    else
++	      AC_MSG_RESULT(no)
++	      vi_cv_path_mzscheme_pfx=
++	    fi
++	  fi
+ 	fi
+       fi
+     fi
+@@ -586,13 +600,23 @@
+     elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"; then
+       MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"
+       MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
+-    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then
++    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket3m.a"; then
++      MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libracket3m.a"
++      MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
++    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket.a"; then
++      MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libracket.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"
++    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a"; then
+       MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"
+     else
+       dnl Using shared objects
+       if test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.so"; then
+         MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme3m"
+ 	MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
++      elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket3m.so"; then
++        MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lracket3m"
++	MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
++      elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket.so"; then
++        MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lracket -lmzgc"
+       else
+         MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc"
+       fi
+@@ -607,10 +631,20 @@
+     fi
+     if test -d $vi_cv_path_mzscheme_pfx/lib/plt/collects; then
+       SCHEME_COLLECTS=lib/plt/
++    else
++      if test -d $vi_cv_path_mzscheme_pfx/lib/racket/collects; then
++	SCHEME_COLLECTS=lib/racket/
++      fi
+     fi
+     if test -f "${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
+-      dnl need to generate bytecode for MzScheme base
+       MZSCHEME_EXTRA="mzscheme_base.c"
++    else
++      if test -f "${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects/scheme/base.rkt" ; then
++	MZSCHEME_EXTRA="mzscheme_base.c"
++      fi
++    fi
++    if test "X$MZSCHEME_EXTRA" != "X" ; then
++      dnl need to generate bytecode for MzScheme base
+       MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE"
+       MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
+     fi
+@@ -857,9 +891,9 @@
+ 
+ 	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}"
++	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME=\\\"${vi_cv_path_python_pfx}\\\""
+ 	else
+-	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -I${vi_cv_path_python_epfx}/include/python${vi_cv_var_python_version}"
++	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -I${vi_cv_path_python_epfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME=\\\"${vi_cv_path_python_pfx}\\\""
+ 	fi
+ 	PYTHON_SRC="if_python.c"
+ 	dnl For Mac OSX 10.2 config.o is included in the Python library.
+@@ -871,7 +905,7 @@
+ 	if test "${vi_cv_var_python_version}" = "1.4"; then
+ 	   PYTHON_OBJ="$PYTHON_OBJ objects/py_getpath.o"
+ 	fi
+-	PYTHON_GETPATH_CFLAGS="-DPYTHONPATH='\"${vi_cv_path_pythonpath}\"' -DPREFIX='\"${vi_cv_path_python_pfx}\"' -DEXEC_PREFIX='\"${vi_cv_path_python_epfx}\"'"
++    PYTHON_GETPATH_CFLAGS="-DPYTHONPATH='\"${vi_cv_path_pythonpath}\"' -DPREFIX='\"${vi_cv_path_python_pfx}\"' -DEXEC_PREFIX='\"${vi_cv_path_python_epfx}\"'"
+ 
+ 	dnl On FreeBSD linking with "-pthread" is required to use threads.
+ 	dnl _THREAD_SAFE must be used for compiling then.
+@@ -1029,9 +1063,9 @@
+ 
+       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}"
++        PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+       else
+-        PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}"
++        PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+       fi
+       PYTHON3_SRC="if_python3.c"
+       dnl For Mac OSX 10.2 config.o is included in the Python library.
+@@ -1109,9 +1143,9 @@
+ if test "$python_ok" = yes && test "$python3_ok" = yes; then
+   AC_DEFINE(DYNAMIC_PYTHON)
+   AC_DEFINE(DYNAMIC_PYTHON3)
+-  AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL)
++  AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python)
+   cflags_save=$CFLAGS
+-  CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
++  CFLAGS="$CFLAGS $PYTHON_CFLAGS"
+   ldflags_save=$LDFLAGS
+   LDFLAGS="$LDFLAGS -ldl"
+   AC_RUN_IFELSE([
+@@ -1122,15 +1156,17 @@
+      * Only the first pyhton version used will be switched on.
+      */
+ 
+-    int no_rtl_global_needed_for(char *python_instsoname)
++    int no_rtl_global_needed_for(char *python_instsoname, char *prefix)
+     {
+       int needed = 0;
+       void* pylib = dlopen(python_instsoname, RTLD_LAZY);
+       if (pylib != 0)
+       {
++          void (*pfx)(char *home) = dlsym(pylib, "Py_SetPythonHome");
+           void (*init)(void) = dlsym(pylib, "Py_Initialize");
+           int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
+           void (*final)(void) = dlsym(pylib, "Py_Finalize");
++          (*pfx)(prefix);
+           (*init)();
+           needed = (*simple)("import termios") == -1;
+           (*final)();
+@@ -1142,13 +1178,60 @@
+     int main(int argc, char** argv)
+     {
+       int not_needed = 0;
+-      if (no_rtl_global_needed_for("libpython2.7.so.1.0") && no_rtl_global_needed_for("libpython3.1.so.1.0"))
++      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
++  LDFLAGS=$ldflags_save
++
++  AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python3)
++  cflags_save=$CFLAGS
++  CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
++  ldflags_save=$LDFLAGS
++  LDFLAGS="$LDFLAGS -ldl"
++  AC_RUN_IFELSE([
++    #include <dlfcn.h>
++    #include <wchar.h>
++    /* If this program fails, then RTLD_GLOBAL is needed.
++     * RTLD_GLOBAL will be used and then it is not possible to
++     * have both python versions enabled in the same vim instance.
++     * Only the first pyhton version used will be switched on.
++     */
++
++    int no_rtl_global_needed_for(char *python_instsoname, wchar_t *prefix)
++    {
++      int needed = 0;
++      void* pylib = dlopen(python_instsoname, RTLD_LAZY);
++      if (pylib != 0)
++      {
++          void (*pfx)(wchar_t *home) = dlsym(pylib, "Py_SetPythonHome");
++          void (*init)(void) = dlsym(pylib, "Py_Initialize");
++          int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
++          void (*final)(void) = dlsym(pylib, "Py_Finalize");
++          (*pfx)(prefix);
++          (*init)();
++          needed = (*simple)("import termios") == -1;
++          (*final)();
++          dlclose(pylib);
++      }
++      return !needed;
++    }
++
++    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;
++    }],
++    [AC_MSG_RESULT(yes);AC_DEFINE(PY3_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
++
+   CFLAGS=$cflags_save
+   LDFLAGS=$ldflags_save
++
+   PYTHON_SRC="if_python.c"
+   PYTHON_OBJ="objects/if_python.o"
+   PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${python_INSTSONAME}\\\""
+@@ -1299,10 +1382,10 @@
+ 
+ AC_MSG_CHECKING(--enable-rubyinterp argument)
+ AC_ARG_ENABLE(rubyinterp,
+-	[  --enable-rubyinterp     Include Ruby interpreter.], ,
++	[  --enable-rubyinterp[=OPTS]     Include Ruby interpreter.  [default=no] [OPTS=no/yes/dynamic]], ,
+ 	[enable_rubyinterp="no"])
+ AC_MSG_RESULT($enable_rubyinterp)
+-if test "$enable_rubyinterp" = "yes"; then
++if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
+   AC_MSG_CHECKING(--with-ruby-command argument)
+   AC_ARG_WITH(ruby-command, [  --with-ruby-command=RUBY  name of the Ruby command (default: ruby)],
+ 	RUBY_CMD="$withval"; AC_MSG_RESULT($RUBY_CMD),
+@@ -1360,6 +1443,12 @@
+ 	RUBY_OBJ="objects/if_ruby.o"
+ 	RUBY_PRO="if_ruby.pro"
+ 	AC_DEFINE(FEAT_RUBY)
++	if test "$enable_rubyinterp" = "dynamic"; then
++	  libruby=`$vi_cv_path_ruby -r rbconfig -e 'printf "lib%s.%s\n", Config::CONFIG[["RUBY_SO_NAME"]], Config::CONFIG[["DLEXT"]]'`
++	  AC_DEFINE(DYNAMIC_RUBY)
++	  RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby\\\" -DDYNAMIC_RUBY_VER=$rubyversion $RUBY_CFLAGS"
++	  RUBY_LIBS=
++	fi
+       else
+ 	AC_MSG_RESULT(not found; disabling Ruby)
+       fi
+@@ -3487,6 +3576,23 @@
+ fi
+ AC_SUBST(DEPEND_CFLAGS_FILTER)
+ 
++dnl link.sh tries to avoid overlinking in a hackish way.
++dnl At least GNU ld supports --as-needed which provides the same functionality
++dnl at linker level. Let's use it.
++AC_MSG_CHECKING(linker --as-needed support)
++LINK_AS_NEEDED=
++# Check if linker supports --as-needed and --no-as-needed options
++if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
++  LDFLAGS="$LDFLAGS -Wl,--as-needed"
++  LINK_AS_NEEDED=yes
++fi
++if test "$LINK_AS_NEEDED" = yes; then
++  AC_MSG_RESULT(yes)
++else
++  AC_MSG_RESULT(no)
++fi
++AC_SUBST(LINK_AS_NEEDED)
++
+ dnl write output files
+ AC_OUTPUT(auto/config.mk:config.mk.in)
+ 
+diff -Naur vim73.orig/src/diff.c vim73/src/diff.c
+--- vim73.orig/src/diff.c	2010-07-31 09:35:21.000000000 -0400
++++ vim73/src/diff.c	2011-01-08 20:59:40.994788713 -0500
+@@ -1127,11 +1127,13 @@
+ # endif
+ 
+     wp->w_p_diff = TRUE;
++    /* Use 'scrollbind' and 'cursorbind' when available */
++#ifdef FEAT_SCROLLBIND
++    wp->w_p_scb = TRUE;
++#endif
+ #ifdef FEAT_CURSORBIND
+-    /* Use cursorbind if it's available */
+     wp->w_p_crb = TRUE;
+ #endif
+-    wp->w_p_scb = TRUE;
+     wp->w_p_wrap = FALSE;
+ # ifdef FEAT_FOLDING
+     curwin = wp;
+@@ -1177,10 +1179,7 @@
+ 	{
+ 	    /* Set 'diff', 'scrollbind' off and 'wrap' on. */
+ 	    wp->w_p_diff = FALSE;
+-#ifdef FEAT_CURSORBIND
+-	    wp->w_p_crb = FALSE;
+-#endif
+-	    wp->w_p_scb = FALSE;
++	    RESET_BINDING(wp);
+ 	    wp->w_p_wrap = TRUE;
+ #ifdef FEAT_FOLDING
+ 	    curwin = wp;
+diff -Naur vim73.orig/src/edit.c vim73/src/edit.c
+--- vim73.orig/src/edit.c	2010-08-08 08:55:05.000000000 -0400
++++ vim73/src/edit.c	2011-01-08 21:01:19.146656810 -0500
+@@ -58,6 +58,10 @@
+ };
+ 
+ static char e_hitend[] = N_("Hit end of paragraph");
++#ifdef FEAT_COMPL_FUNC
++static char e_complwin[] = N_("E839: Completion function changed window");
++static char e_compldel[] = N_("E840: Completion function deleted text");
++#endif
+ 
+ /*
+  * Structure used to store one match for insert completion.
+@@ -2658,6 +2662,7 @@
+     if (stop_arrow() == FAIL)
+ 	return;
+ 
++    compl_direction = FORWARD;
+     if (startcol > curwin->w_cursor.col)
+ 	startcol = curwin->w_cursor.col;
+     compl_col = startcol;
+@@ -3833,6 +3838,8 @@
+     char_u	*args[2];
+     char_u	*funcname;
+     pos_T	pos;
++    win_T	*curwin_save;
++    buf_T	*curbuf_save;
+ 
+     funcname = (type == CTRL_X_FUNCTION) ? curbuf->b_p_cfu : curbuf->b_p_ofu;
+     if (*funcname == NUL)
+@@ -3843,13 +3850,27 @@
+     args[1] = base;
+ 
+     pos = curwin->w_cursor;
++    curwin_save = curwin;
++    curbuf_save = curbuf;
+     matchlist = call_func_retlist(funcname, 2, args, FALSE);
++    if (curwin_save != curwin || curbuf_save != curbuf)
++    {
++	EMSG(_(e_complwin));
++	goto theend;
++    }
+     curwin->w_cursor = pos;	/* restore the cursor position */
+-    if (matchlist == NULL)
+-	return;
++    check_cursor();
++    if (!equalpos(curwin->w_cursor, pos))
++    {
++	EMSG(_(e_compldel));
++	goto theend;
++    }
++    if (matchlist != NULL)
++	ins_compl_add_list(matchlist);
+ 
+-    ins_compl_add_list(matchlist);
+-    list_unref(matchlist);
++theend:
++    if (matchlist != NULL)
++	list_unref(matchlist);
+ }
+ #endif /* FEAT_COMPL_FUNC */
+ 
+@@ -3889,6 +3910,7 @@
+     char_u	*word;
+     int		icase = FALSE;
+     int		adup = FALSE;
++    int		aempty = FALSE;
+     char_u	*(cptext[CPT_COUNT]);
+ 
+     if (tv->v_type == VAR_DICT && tv->vval.v_dict != NULL)
+@@ -3906,13 +3928,15 @@
+ 	    icase = get_dict_number(tv->vval.v_dict, (char_u *)"icase");
+ 	if (get_dict_string(tv->vval.v_dict, (char_u *)"dup", FALSE) != NULL)
+ 	    adup = get_dict_number(tv->vval.v_dict, (char_u *)"dup");
++	if (get_dict_string(tv->vval.v_dict, (char_u *)"empty", FALSE) != NULL)
++	    aempty = get_dict_number(tv->vval.v_dict, (char_u *)"empty");
+     }
+     else
+     {
+ 	word = get_tv_string_chk(tv);
+ 	vim_memset(cptext, 0, sizeof(cptext));
+     }
+-    if (word == NULL || *word == NUL)
++    if (word == NULL || (!aempty && *word == NUL))
+ 	return FAIL;
+     return ins_compl_add(word, -1, icase, NULL, cptext, dir, 0, adup);
+ }
+@@ -4994,6 +5018,8 @@
+ 	    int		col;
+ 	    char_u	*funcname;
+ 	    pos_T	pos;
++	    win_T	*curwin_save;
++	    buf_T	*curbuf_save;
+ 
+ 	    /* Call 'completefunc' or 'omnifunc' and get pattern length as a
+ 	     * string */
+@@ -5009,8 +5035,21 @@
+ 	    args[0] = (char_u *)"1";
+ 	    args[1] = NULL;
+ 	    pos = curwin->w_cursor;
++	    curwin_save = curwin;
++	    curbuf_save = curbuf;
+ 	    col = call_func_retnr(funcname, 2, args, FALSE);
++	    if (curwin_save != curwin || curbuf_save != curbuf)
++	    {
++		EMSG(_(e_complwin));
++		return FAIL;
++	    }
+ 	    curwin->w_cursor = pos;	/* restore the cursor position */
++	    check_cursor();
++	    if (!equalpos(curwin->w_cursor, pos))
++	    {
++		EMSG(_(e_compldel));
++		return FAIL;
++	    }
+ 
+ 	    if (col < 0)
+ 		col = curs_col;
+diff -Naur vim73.orig/src/eval.c vim73/src/eval.c
+--- vim73.orig/src/eval.c	2010-08-09 16:12:14.000000000 -0400
++++ vim73/src/eval.c	2011-01-08 21:01:19.506657797 -0500
+@@ -10,9 +10,6 @@
+ /*
+  * eval.c: Expression evaluation.
+  */
+-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+-# include "vimio.h"	/* for mch_open(), must be before vim.h */
+-#endif
+ 
+ #include "vim.h"
+ 
+@@ -362,6 +359,7 @@
+     {VV_NAME("operator",	 VAR_STRING), VV_RO},
+     {VV_NAME("searchforward",	 VAR_NUMBER), 0},
+     {VV_NAME("oldfiles",	 VAR_LIST), 0},
++    {VV_NAME("windowid",	 VAR_NUMBER), VV_RO},
+ };
+ 
+ /* shorthand */
+@@ -433,9 +431,9 @@
+ static void listitem_free __ARGS((listitem_T *item));
+ static void listitem_remove __ARGS((list_T *l, listitem_T *item));
+ static long list_len __ARGS((list_T *l));
+-static int list_equal __ARGS((list_T *l1, list_T *l2, int ic));
+-static int dict_equal __ARGS((dict_T *d1, dict_T *d2, int ic));
+-static int tv_equal __ARGS((typval_T *tv1, typval_T *tv2, int ic));
++static int list_equal __ARGS((list_T *l1, list_T *l2, int ic, int recursive));
++static int dict_equal __ARGS((dict_T *d1, dict_T *d2, int ic, int recursive));
++static int tv_equal __ARGS((typval_T *tv1, typval_T *tv2, int ic, int recursive));
+ static listitem_T *list_find __ARGS((list_T *l, long n));
+ static long list_find_nr __ARGS((list_T *l, long idx, int *errorp));
+ static long list_idx_of_item __ARGS((list_T *l, listitem_T *item));
+@@ -2325,7 +2323,7 @@
+ 	    else if (endchars != NULL
+ 			     && vim_strchr(endchars, *skipwhite(arg)) == NULL)
+ 		EMSG(_(e_letunexp));
+-	    else
++	    else if (!check_secure())
+ 	    {
+ 		c1 = name[len];
+ 		name[len] = NUL;
+@@ -3337,6 +3335,15 @@
+     int		failed = FALSE;
+     funcdict_T	fudi;
+ 
++    if (eap->skip)
++    {
++	/* trans_function_name() doesn't work well when skipping, use eval0()
++	 * instead to skip to any following command, e.g. for:
++	 *   :if 0 | call dict.foo().bar() | endif  */
++	eval0(eap->arg, &rettv, &eap->nextcmd, FALSE);
++	return;
++    }
++
+     tofree = trans_function_name(&arg, eap->skip, TFN_INT, &fudi);
+     if (fudi.fd_newkey != NULL)
+     {
+@@ -4349,7 +4356,8 @@
+ 		else
+ 		{
+ 		    /* Compare two Lists for being equal or unequal. */
+-		    n1 = list_equal(rettv->vval.v_list, var2.vval.v_list, ic);
++		    n1 = list_equal(rettv->vval.v_list, var2.vval.v_list,
++								   ic, FALSE);
+ 		    if (type == TYPE_NEQUAL)
+ 			n1 = !n1;
+ 		}
+@@ -4378,7 +4386,8 @@
+ 		else
+ 		{
+ 		    /* Compare two Dictionaries for being equal or unequal. */
+-		    n1 = dict_equal(rettv->vval.v_dict, var2.vval.v_dict, ic);
++		    n1 = dict_equal(rettv->vval.v_dict, var2.vval.v_dict,
++								   ic, FALSE);
+ 		    if (type == TYPE_NEQUAL)
+ 			n1 = !n1;
+ 		}
+@@ -5913,10 +5922,11 @@
+  * Return TRUE when two lists have exactly the same values.
+  */
+     static int
+-list_equal(l1, l2, ic)
++list_equal(l1, l2, ic, recursive)
+     list_T	*l1;
+     list_T	*l2;
+     int		ic;	/* ignore case for strings */
++    int		recursive;  /* TRUE when used recursively */
+ {
+     listitem_T	*item1, *item2;
+ 
+@@ -5930,7 +5940,7 @@
+     for (item1 = l1->lv_first, item2 = l2->lv_first;
+ 	    item1 != NULL && item2 != NULL;
+ 			       item1 = item1->li_next, item2 = item2->li_next)
+-	if (!tv_equal(&item1->li_tv, &item2->li_tv, ic))
++	if (!tv_equal(&item1->li_tv, &item2->li_tv, ic, recursive))
+ 	    return FALSE;
+     return item1 == NULL && item2 == NULL;
+ }
+@@ -5952,10 +5962,11 @@
+  * Return TRUE when two dictionaries have exactly the same key/values.
+  */
+     static int
+-dict_equal(d1, d2, ic)
++dict_equal(d1, d2, ic, recursive)
+     dict_T	*d1;
+     dict_T	*d2;
+     int		ic;	/* ignore case for strings */
++    int		recursive; /* TRUE when used recursively */
+ {
+     hashitem_T	*hi;
+     dictitem_T	*item2;
+@@ -5976,7 +5987,7 @@
+ 	    item2 = dict_find(d2, hi->hi_key, -1);
+ 	    if (item2 == NULL)
+ 		return FALSE;
+-	    if (!tv_equal(&HI2DI(hi)->di_tv, &item2->di_tv, ic))
++	    if (!tv_equal(&HI2DI(hi)->di_tv, &item2->di_tv, ic, recursive))
+ 		return FALSE;
+ 	    --todo;
+ 	}
+@@ -5984,41 +5995,54 @@
+     return TRUE;
+ }
+ 
++static int tv_equal_recurse_limit;
++
+ /*
+  * Return TRUE if "tv1" and "tv2" have the same value.
+  * Compares the items just like "==" would compare them, but strings and
+  * numbers are different.  Floats and numbers are also different.
+  */
+     static int
+-tv_equal(tv1, tv2, ic)
++tv_equal(tv1, tv2, ic, recursive)
+     typval_T *tv1;
+     typval_T *tv2;
+-    int	    ic;	    /* ignore case */
++    int	     ic;	    /* ignore case */
++    int	     recursive;	    /* TRUE when used recursively */
+ {
+     char_u	buf1[NUMBUFLEN], buf2[NUMBUFLEN];
+     char_u	*s1, *s2;
+-    static int  recursive = 0;	    /* cach recursive loops */
++    static int  recursive_cnt = 0;	    /* catch recursive loops */
+     int		r;
+ 
+     if (tv1->v_type != tv2->v_type)
+ 	return FALSE;
++
+     /* Catch lists and dicts that have an endless loop by limiting
+-     * recursiveness to 1000.  We guess they are equal then. */
+-    if (recursive >= 1000)
++     * recursiveness to a limit.  We guess they are equal then.
++     * A fixed limit has the problem of still taking an awful long time.
++     * Reduce the limit every time running into it. That should work fine for
++     * deeply linked structures that are not recursively linked and catch
++     * recursiveness quickly. */
++    if (!recursive)
++	tv_equal_recurse_limit = 1000;
++    if (recursive_cnt >= tv_equal_recurse_limit)
++    {
++	--tv_equal_recurse_limit;
+ 	return TRUE;
++    }
+ 
+     switch (tv1->v_type)
+     {
+ 	case VAR_LIST:
+-	    ++recursive;
+-	    r = list_equal(tv1->vval.v_list, tv2->vval.v_list, ic);
+-	    --recursive;
++	    ++recursive_cnt;
++	    r = list_equal(tv1->vval.v_list, tv2->vval.v_list, ic, TRUE);
++	    --recursive_cnt;
+ 	    return r;
+ 
+ 	case VAR_DICT:
+-	    ++recursive;
+-	    r = dict_equal(tv1->vval.v_dict, tv2->vval.v_dict, ic);
+-	    --recursive;
++	    ++recursive_cnt;
++	    r = dict_equal(tv1->vval.v_dict, tv2->vval.v_dict, ic, TRUE);
++	    --recursive_cnt;
+ 	    return r;
+ 
+ 	case VAR_FUNC:
+@@ -7075,7 +7099,7 @@
+ }
+ 
+ /*
+- * Add a list  entry to dictionary "d".
++ * Add a list entry to dictionary "d".
+  * Returns FAIL when out of memory and when key already exists.
+  */
+     int
+@@ -7097,6 +7121,7 @@
+ 	dictitem_free(item);
+ 	return FAIL;
+     }
++    ++list->lv_refcount;
+     return OK;
+ }
+ 
+@@ -7802,7 +7827,7 @@
+     {"log10",		1, 1, f_log10},
+ #endif
+     {"map",		2, 2, f_map},
+-    {"maparg",		1, 3, f_maparg},
++    {"maparg",		1, 4, f_maparg},
+     {"mapcheck",	1, 3, f_mapcheck},
+     {"match",		2, 4, f_match},
+     {"matchadd",	2, 4, f_matchadd},
+@@ -9389,7 +9414,7 @@
+ 	    }
+ 
+ 	    for ( ; li != NULL; li = li->li_next)
+-		if (tv_equal(&li->li_tv, &argvars[1], ic))
++		if (tv_equal(&li->li_tv, &argvars[1], ic, FALSE))
+ 		    ++n;
+ 	}
+     }
+@@ -9416,7 +9441,7 @@
+ 		if (!HASHITEM_EMPTY(hi))
+ 		{
+ 		    --todo;
+-		    if (tv_equal(&HI2DI(hi)->di_tv, &argvars[1], ic))
++		    if (tv_equal(&HI2DI(hi)->di_tv, &argvars[1], ic, FALSE))
+ 			++n;
+ 		}
+ 	    }
+@@ -9857,7 +9882,7 @@
+     char_u	*s;
+     int		len;
+     char_u	*errormsg;
+-    int		flags = WILD_SILENT|WILD_USE_NL|WILD_LIST_NOTFOUND;
++    int		options = WILD_SILENT|WILD_USE_NL|WILD_LIST_NOTFOUND;
+     expand_T	xpc;
+     int		error = FALSE;
+ 
+@@ -9875,12 +9900,14 @@
+ 	 * for 'wildignore' and don't put matches for 'suffixes' at the end. */
+ 	if (argvars[1].v_type != VAR_UNKNOWN
+ 				    && get_tv_number_chk(&argvars[1], &error))
+-	    flags |= WILD_KEEP_ALL;
++	    options |= WILD_KEEP_ALL;
+ 	if (!error)
+ 	{
+ 	    ExpandInit(&xpc);
+ 	    xpc.xp_context = EXPAND_FILES;
+-	    rettv->vval.v_string = ExpandOne(&xpc, s, NULL, flags, WILD_ALL);
++	    if (p_wic)
++		options += WILD_ICASE;
++	    rettv->vval.v_string = ExpandOne(&xpc, s, NULL, options, WILD_ALL);
+ 	}
+ 	else
+ 	    rettv->vval.v_string = NULL;
+@@ -11653,7 +11680,7 @@
+     typval_T	*argvars;
+     typval_T	*rettv;
+ {
+-    int		flags = WILD_SILENT|WILD_USE_NL;
++    int		options = WILD_SILENT|WILD_USE_NL;
+     expand_T	xpc;
+     int		error = FALSE;
+ 
+@@ -11661,14 +11688,16 @@
+     * for 'wildignore' and don't put matches for 'suffixes' at the end. */
+     if (argvars[1].v_type != VAR_UNKNOWN
+ 				&& get_tv_number_chk(&argvars[1], &error))
+-	flags |= WILD_KEEP_ALL;
++	options |= WILD_KEEP_ALL;
+     rettv->v_type = VAR_STRING;
+     if (!error)
+     {
+ 	ExpandInit(&xpc);
+ 	xpc.xp_context = EXPAND_FILES;
++	if (p_wic)
++	    options += WILD_ICASE;
+ 	rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]),
+-						       NULL, flags, WILD_ALL);
++						     NULL, options, WILD_ALL);
+     }
+     else
+ 	rettv->vval.v_string = NULL;
+@@ -12116,6 +12145,9 @@
+ #ifdef FEAT_TOOLBAR
+ 	"toolbar",
+ #endif
++#if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
++	"unnamedplus",
++#endif
+ #ifdef FEAT_USR_CMDS
+ 	"user-commands",    /* was accidentally included in 5.4 */
+ 	"user_commands",
+@@ -12572,7 +12604,7 @@
+ 	}
+ 
+ 	for ( ; item != NULL; item = item->li_next, ++idx)
+-	    if (tv_equal(&item->li_tv, &argvars[1], ic))
++	    if (tv_equal(&item->li_tv, &argvars[1], ic, FALSE))
+ 	    {
+ 		rettv->vval.v_number = idx;
+ 		break;
+@@ -13290,8 +13322,10 @@
+     char_u	*keys_buf = NULL;
+     char_u	*rhs;
+     int		mode;
+-    garray_T	ga;
+     int		abbr = FALSE;
++    int         get_dict = FALSE;
++    mapblock_T	*mp;
++    int		buffer_local;
+ 
+     /* return empty string for failure */
+     rettv->v_type = VAR_STRING;
+@@ -13305,7 +13339,11 @@
+     {
+ 	which = get_tv_string_buf_chk(&argvars[1], buf);
+ 	if (argvars[2].v_type != VAR_UNKNOWN)
++	{
+ 	    abbr = get_tv_number(&argvars[2]);
++	    if (argvars[3].v_type != VAR_UNKNOWN)
++		get_dict = get_tv_number(&argvars[3]);
++	}
+     }
+     else
+ 	which = (char_u *)"";
+@@ -13315,19 +13353,34 @@
+     mode = get_map_mode(&which, 0);
+ 
+     keys = replace_termcodes(keys, &keys_buf, TRUE, TRUE, FALSE);
+-    rhs = check_map(keys, mode, exact, FALSE, abbr);
++    rhs = check_map(keys, mode, exact, FALSE, abbr, &mp, &buffer_local);
+     vim_free(keys_buf);
+-    if (rhs != NULL)
+-    {
+-	ga_init(&ga);
+-	ga.ga_itemsize = 1;
+-	ga.ga_growsize = 40;
+ 
+-	while (*rhs != NUL)
+-	    ga_concat(&ga, str2special(&rhs, FALSE));
++    if (!get_dict)
++    {
++	/* Return a string. */
++	if (rhs != NULL)
++	    rettv->vval.v_string = str2special_save(rhs, FALSE);
++
++    }
++    else if (rettv_dict_alloc(rettv) != FAIL && rhs != NULL)
++    {
++	/* Return a dictionary. */
++	char_u	    *lhs = str2special_save(mp->m_keys, TRUE);
++	char_u	    *mapmode = map_mode_to_chars(mp->m_mode);
++	dict_T	    *dict = rettv->vval.v_dict;
++
++	dict_add_nr_str(dict, "lhs",	 0L, lhs);
++	dict_add_nr_str(dict, "rhs",     0L, mp->m_orig_str);
++	dict_add_nr_str(dict, "noremap", mp->m_noremap ? 1L : 0L , NULL);
++	dict_add_nr_str(dict, "expr",    mp->m_expr    ? 1L : 0L, NULL);
++	dict_add_nr_str(dict, "silent",  mp->m_silent  ? 1L : 0L, NULL);
++	dict_add_nr_str(dict, "sid",     (long)mp->m_script_ID, NULL);
++	dict_add_nr_str(dict, "buffer",  (long)buffer_local, NULL);
++	dict_add_nr_str(dict, "mode",    0L, mapmode);
+ 
+-	ga_append(&ga, NUL);
+-	rettv->vval.v_string = (char_u *)ga.ga_data;
++	vim_free(lhs);
++	vim_free(mapmode);
+     }
+ }
+ 
+@@ -22519,18 +22572,21 @@
+ 	if (tab != NULL)
+ 	{
+ 	    *tab++ = '\0';	/* isolate the variable name */
+-	    if (*tab == 'S')	/* string var */
+-		type = VAR_STRING;
++	    switch (*tab)
++	    {
++		case 'S': type = VAR_STRING; break;
+ #ifdef FEAT_FLOAT
+-	    else if (*tab == 'F')
+-		type = VAR_FLOAT;
++		case 'F': type = VAR_FLOAT; break;
+ #endif
++		case 'D': type = VAR_DICT; break;
++		case 'L': type = VAR_LIST; break;
++	    }
+ 
+ 	    tab = vim_strchr(tab, '\t');
+ 	    if (tab != NULL)
+ 	    {
+ 		tv.v_type = type;
+-		if (type == VAR_STRING)
++		if (type == VAR_STRING || type == VAR_DICT || type == VAR_LIST)
+ 		    tv.vval.v_string = viminfo_readstring(virp,
+ 				       (int)(tab - virp->vir_line + 1), TRUE);
+ #ifdef FEAT_FLOAT
+@@ -22539,9 +22595,27 @@
+ #endif
+ 		else
+ 		    tv.vval.v_number = atol((char *)tab + 1);
++		if (type == VAR_DICT || type == VAR_LIST)
++		{
++		    typval_T *etv = eval_expr(tv.vval.v_string, NULL);
++
++		    if (etv == NULL)
++			/* Failed to parse back the dict or list, use it as a
++			 * string. */
++			tv.v_type = VAR_STRING;
++		    else
++		    {
++			vim_free(tv.vval.v_string);
++			tv = *etv;
++		    }
++		}
++
+ 		set_var(virp->vir_line + 1, &tv, FALSE);
+-		if (type == VAR_STRING)
++
++		if (tv.v_type == VAR_STRING)
+ 		    vim_free(tv.vval.v_string);
++		else if (tv.v_type == VAR_DICT || tv.v_type == VAR_LIST)
++		    clear_tv(&tv);
+ 	    }
+ 	}
+     }
+@@ -22583,8 +22657,10 @@
+ 		    case VAR_STRING: s = "STR"; break;
+ 		    case VAR_NUMBER: s = "NUM"; break;
+ #ifdef FEAT_FLOAT
+-		    case VAR_FLOAT: s = "FLO"; break;
++		    case VAR_FLOAT:  s = "FLO"; break;
+ #endif
++		    case VAR_DICT:   s = "DIC"; break;
++		    case VAR_LIST:   s = "LIS"; break;
+ 		    default: continue;
+ 		}
+ 		fprintf(fp, "!%s\t%s\t", this_var->di_key, s);
+diff -Naur vim73.orig/src/ex_cmds.c vim73/src/ex_cmds.c
+--- vim73.orig/src/ex_cmds.c	2010-08-13 05:14:35.000000000 -0400
++++ vim73/src/ex_cmds.c	2011-01-08 21:01:19.370657515 -0500
+@@ -11,10 +11,6 @@
+  * ex_cmds.c: some functions for command line commands
+  */
+ 
+-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+-# include "vimio.h"	/* for mch_open(), must be before vim.h */
+-#endif
+-
+ #include "vim.h"
+ #include "version.h"
+ 
+@@ -323,7 +319,8 @@
+     /* When sorting numbers "start_col_nr" is the number, not the column
+      * number. */
+     if (sort_nr)
+-	result = l1.start_col_nr - l2.start_col_nr;
++	result = l1.start_col_nr == l2.start_col_nr ? 0
++				 : l1.start_col_nr > l2.start_col_nr ? 1 : -1;
+     else
+     {
+ 	/* We need to copy one line into "sortbuf1", because there is no
+@@ -482,7 +479,7 @@
+ 	     * of the match, by temporarily terminating the string there */
+ 	    s2 = s + end_col;
+ 	    c = *s2;
+-	    (*s2) = 0;
++	    *s2 = NUL;
+ 	    /* Sorting on number: Store the number itself. */
+ 	    p = s + start_col;
+ 	    if (sort_hex)
+@@ -491,9 +488,13 @@
+ 		s = skiptodigit(p);
+ 	    if (s > p && s[-1] == '-')
+ 		--s;  /* include preceding negative sign */
+-	    vim_str2nr(s, NULL, NULL, sort_oct, sort_hex,
+-					&nrs[lnum - eap->line1].start_col_nr, NULL);
+-	    (*s2) = c;
++	    if (*s == NUL)
++		/* empty line should sort before any number */
++		nrs[lnum - eap->line1].start_col_nr = -MAXLNUM;
++	    else
++		vim_str2nr(s, NULL, NULL, sort_oct, sort_hex,
++				  &nrs[lnum - eap->line1].start_col_nr, NULL);
++	    *s2 = c;
+ 	}
+ 	else
+ 	{
+@@ -2700,6 +2701,10 @@
+ 									TRUE);
+ 		do_modelines(0);
+ 	    }
++
++	    /* Autocommands may have changed buffer names, esp. when
++	     * 'autochdir' is set. */
++	    fname = curbuf->b_sfname;
+ #endif
+ 	}
+ 
+@@ -3498,9 +3503,7 @@
+ 	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 */
+-#ifdef FEAT_SCROLLBIND
+-	curwin->w_p_scb = FALSE;	/* no scroll binding */
+-#endif
++	RESET_BINDING(curwin);		/* no scroll or cursor binding */
+ #ifdef FEAT_ARABIC
+ 	curwin->w_p_arab = FALSE;	/* no arabic mode */
+ #endif
+@@ -5471,9 +5474,8 @@
+ 		return FALSE;
+ 	    curwin->w_p_pvw = TRUE;
+ 	    curwin->w_p_wfh = TRUE;
+-# ifdef FEAT_SCROLLBIND
+-	    curwin->w_p_scb = FALSE;	    /* don't take over 'scrollbind' */
+-# endif
++	    RESET_BINDING(curwin);	    /* don't take over 'scrollbind'
++					       and 'cursorbind' */
+ # ifdef FEAT_DIFF
+ 	    curwin->w_p_diff = FALSE;	    /* no 'diff' */
+ # endif
+@@ -6559,8 +6561,7 @@
+ struct sign
+ {
+     sign_T	*sn_next;	/* next sign in list */
+-    int		sn_typenr;	/* type number of sign (negative if not equal
+-				   to name) */
++    int		sn_typenr;	/* type number of sign */
+     char_u	*sn_name;	/* name of sign */
+     char_u	*sn_icon;	/* name of pixmap */
+ #ifdef FEAT_SIGN_ICONS
+@@ -6572,7 +6573,7 @@
+ };
+ 
+ static sign_T	*first_sign = NULL;
+-static int	last_sign_typenr = MAX_TYPENR;	/* is decremented */
++static int	next_sign_typenr = 1;
+ 
+ static int sign_cmd_idx __ARGS((char_u *begin_cmd, char_u *end_cmd));
+ static void sign_list_defined __ARGS((sign_T *sp));
+@@ -6654,9 +6655,14 @@
+ 	    EMSG(_("E156: Missing sign name"));
+ 	else
+ 	{
++	    /* Isolate the sign name.  If it's a number skip leading zeroes,
++	     * so that "099" and "99" are the same sign.  But keep "0". */
+ 	    p = skiptowhite(arg);
+ 	    if (*p != NUL)
+ 		*p++ = NUL;
++	    while (arg[0] == '0' && arg[1] != NUL)
++		++arg;
++
+ 	    sp_prev = NULL;
+ 	    for (sp = first_sign; sp != NULL; sp = sp->sn_next)
+ 	    {
+@@ -6669,46 +6675,52 @@
+ 		/* ":sign define {name} ...": define a sign */
+ 		if (sp == NULL)
+ 		{
++		    sign_T	*lp;
++		    int		start = next_sign_typenr;
++
+ 		    /* Allocate a new sign. */
+ 		    sp = (sign_T *)alloc_clear((unsigned)sizeof(sign_T));
+ 		    if (sp == NULL)
+ 			return;
+-		    if (sp_prev == NULL)
+-			first_sign = sp;
+-		    else
+-			sp_prev->sn_next = sp;
+-		    sp->sn_name = vim_strnsave(arg, (int)(p - arg));
+ 
+-		    /* If the name is a number use that for the typenr,
+-		     * otherwise use a negative number. */
+-		    if (VIM_ISDIGIT(*arg))
+-			sp->sn_typenr = atoi((char *)arg);
+-		    else
++		    /* Check that next_sign_typenr is not already being used.
++		     * This only happens after wrapping around.  Hopefully
++		     * another one got deleted and we can use its number. */
++		    for (lp = first_sign; lp != NULL; )
+ 		    {
+-			sign_T	*lp;
+-			int	start = last_sign_typenr;
+-
+-			for (lp = first_sign; lp != NULL; lp = lp->sn_next)
++			if (lp->sn_typenr == next_sign_typenr)
+ 			{
+-			    if (lp->sn_typenr == last_sign_typenr)
++			    ++next_sign_typenr;
++			    if (next_sign_typenr == MAX_TYPENR)
++				next_sign_typenr = 1;
++			    if (next_sign_typenr == start)
+ 			    {
+-				--last_sign_typenr;
+-				if (last_sign_typenr == 0)
+-				    last_sign_typenr = MAX_TYPENR;
+-				if (last_sign_typenr == start)
+-				{
+-				    EMSG(_("E612: Too many signs defined"));
+-				    return;
+-				}
+-				lp = first_sign;
+-				continue;
++				vim_free(sp);
++				EMSG(_("E612: Too many signs defined"));
++				return;
+ 			    }
++			    lp = first_sign;  /* start all over */
++			    continue;
+ 			}
++			lp = lp->sn_next;
++		    }
++
++		    sp->sn_typenr = next_sign_typenr;
++		    if (++next_sign_typenr == MAX_TYPENR)
++			next_sign_typenr = 1; /* wrap around */
+ 
+-			sp->sn_typenr = last_sign_typenr--;
+-			if (last_sign_typenr == 0)
+-			    last_sign_typenr = MAX_TYPENR; /* wrap around */
++		    sp->sn_name = vim_strsave(arg);
++		    if (sp->sn_name == NULL)  /* out of memory */
++		    {
++			vim_free(sp);
++			return;
+ 		    }
++
++		    /* add the new sign to the list of signs */
++		    if (sp_prev == NULL)
++			first_sign = sp;
++		    else
++			sp_prev->sn_next = sp;
+ 		}
+ 
+ 		/* set values for a defined sign. */
+@@ -6886,6 +6898,8 @@
+ 		arg = skiptowhite(arg);
+ 		if (*arg != NUL)
+ 		    *arg++ = NUL;
++		while (sign_name[0] == '0' && sign_name[1] != NUL)
++		    ++sign_name;
+ 	    }
+ 	    else if (STRNCMP(arg, "file=", 5) == 0)
+ 	    {
+diff -Naur vim73.orig/src/ex_cmds2.c vim73/src/ex_cmds2.c
+--- vim73.orig/src/ex_cmds2.c	2010-07-27 15:43:38.000000000 -0400
++++ vim73/src/ex_cmds2.c	2011-01-08 21:01:19.374658068 -0500
+@@ -11,10 +11,6 @@
+  * ex_cmds2.c: some more functions for command line commands
+  */
+ 
+-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+-# include "vimio.h"	/* for mch_open(), must be before vim.h */
+-#endif
+-
+ #include "vim.h"
+ #include "version.h"
+ 
+@@ -2165,9 +2161,7 @@
+ 	{
+ 	    if (win_split(0, 0) == FAIL)
+ 		return;
+-# ifdef FEAT_SCROLLBIND
+-	    curwin->w_p_scb = FALSE;
+-# endif
++	    RESET_BINDING(curwin);
+ 	}
+ 	else
+ #endif
+diff -Naur vim73.orig/src/ex_docmd.c vim73/src/ex_docmd.c
+--- vim73.orig/src/ex_docmd.c	2010-08-07 10:59:47.000000000 -0400
++++ vim73/src/ex_docmd.c	2011-01-08 21:01:19.234657608 -0500
+@@ -733,7 +733,7 @@
+  * do_cmdline(): execute one Ex command line
+  *
+  * 1. Execute "cmdline" when it is not NULL.
+- *    If "cmdline" is NULL, or more lines are needed, getline() is used.
++ *    If "cmdline" is NULL, or more lines are needed, fgetline() is used.
+  * 2. Split up in parts separated with '|'.
+  *
+  * This function can be called recursively!
+@@ -741,7 +741,7 @@
+  * flags:
+  * DOCMD_VERBOSE  - The command will be included in the error message.
+  * DOCMD_NOWAIT   - Don't call wait_return() and friends.
+- * DOCMD_REPEAT   - Repeat execution until getline() returns NULL.
++ * DOCMD_REPEAT   - Repeat execution until fgetline() returns NULL.
+  * DOCMD_KEYTYPED - Don't reset KeyTyped.
+  * DOCMD_EXCRESET - Reset the exception environment (used for debugging).
+  * DOCMD_KEEPLINE - Store first typed line (for repeating with ".").
+@@ -749,15 +749,15 @@
+  * return FAIL if cmdline could not be executed, OK otherwise
+  */
+     int
+-do_cmdline(cmdline, getline, cookie, flags)
++do_cmdline(cmdline, fgetline, cookie, flags)
+     char_u	*cmdline;
+-    char_u	*(*getline) __ARGS((int, void *, int));
+-    void	*cookie;		/* argument for getline() */
++    char_u	*(*fgetline) __ARGS((int, void *, int));
++    void	*cookie;		/* argument for fgetline() */
+     int		flags;
+ {
+     char_u	*next_cmdline;		/* next cmd to execute */
+     char_u	*cmdline_copy = NULL;	/* copy of cmd line */
+-    int		used_getline = FALSE;	/* used "getline" to obtain command */
++    int		used_getline = FALSE;	/* used "fgetline" to obtain command */
+     static int	recursive = 0;		/* recursive depth */
+     int		msg_didout_before_start = 0;
+     int		count = 0;		/* line number count */
+@@ -775,14 +775,14 @@
+     struct msglist	**saved_msg_list = NULL;
+     struct msglist	*private_msg_list;
+ 
+-    /* "getline" and "cookie" passed to do_one_cmd() */
++    /* "fgetline" and "cookie" passed to do_one_cmd() */
+     char_u	*(*cmd_getline) __ARGS((int, void *, int));
+     void	*cmd_cookie;
+     struct loop_cookie cmd_loop_cookie;
+     void	*real_cookie;
+     int		getline_is_func;
+ #else
+-# define cmd_getline getline
++# define cmd_getline fgetline
+ # define cmd_cookie cookie
+ #endif
+     static int	call_depth = 0;		/* recursiveness */
+@@ -822,10 +822,10 @@
+     cstack.cs_lflags = 0;
+     ga_init2(&lines_ga, (int)sizeof(wcmd_T), 10);
+ 
+-    real_cookie = getline_cookie(getline, cookie);
++    real_cookie = getline_cookie(fgetline, cookie);
+ 
+     /* Inside a function use a higher nesting level. */
+-    getline_is_func = getline_equal(getline, cookie, get_func_line);
++    getline_is_func = getline_equal(fgetline, cookie, get_func_line);
+     if (getline_is_func && ex_nesting_level == func_level(real_cookie))
+ 	++ex_nesting_level;
+ 
+@@ -837,7 +837,7 @@
+ 	breakpoint = func_breakpoint(real_cookie);
+ 	dbg_tick = func_dbg_tick(real_cookie);
+     }
+-    else if (getline_equal(getline, cookie, getsourceline))
++    else if (getline_equal(fgetline, cookie, getsourceline))
+     {
+ 	fname = sourcing_name;
+ 	breakpoint = source_breakpoint(real_cookie);
+@@ -881,7 +881,8 @@
+      * KeyTyped is only set when calling vgetc().  Reset it here when not
+      * calling vgetc() (sourced command lines).
+      */
+-    if (!(flags & DOCMD_KEYTYPED) && !getline_equal(getline, cookie, getexline))
++    if (!(flags & DOCMD_KEYTYPED)
++			       && !getline_equal(fgetline, cookie, getexline))
+ 	KeyTyped = FALSE;
+ 
+     /*
+@@ -894,7 +895,7 @@
+     do
+     {
+ #ifdef FEAT_EVAL
+-	getline_is_func = getline_equal(getline, cookie, get_func_line);
++	getline_is_func = getline_equal(fgetline, cookie, get_func_line);
+ #endif
+ 
+ 	/* stop skipping cmds for an error msg after all endif/while/for */
+@@ -909,7 +910,7 @@
+ 
+ 	/*
+ 	 * 1. If repeating a line in a loop, get a line from lines_ga.
+-	 * 2. If no line given: Get an allocated line with getline().
++	 * 2. If no line given: Get an allocated line with fgetline().
+ 	 * 3. If a line is given: Make a copy, so we can mess with it.
+ 	 */
+ 
+@@ -938,12 +939,12 @@
+ 	    }
+ #ifdef FEAT_PROFILE
+ 	    else if (do_profiling == PROF_YES
+-			     && getline_equal(getline, cookie, getsourceline))
++			    && getline_equal(fgetline, cookie, getsourceline))
+ 		script_line_end();
+ #endif
+ 
+ 	    /* Check if a sourced file hit a ":finish" command. */
+-	    if (source_finished(getline, cookie))
++	    if (source_finished(fgetline, cookie))
+ 	    {
+ 		retval = FAIL;
+ 		break;
+@@ -954,7 +955,7 @@
+ 						   && *dbg_tick != debug_tick)
+ 	    {
+ 		*breakpoint = dbg_find_breakpoint(
+-				getline_equal(getline, cookie, getsourceline),
++				getline_equal(fgetline, cookie, getsourceline),
+ 							fname, sourcing_lnum);
+ 		*dbg_tick = debug_tick;
+ 	    }
+@@ -969,7 +970,7 @@
+ 		dbg_breakpoint(fname, sourcing_lnum);
+ 		/* Find next breakpoint. */
+ 		*breakpoint = dbg_find_breakpoint(
+-				getline_equal(getline, cookie, getsourceline),
++			       getline_equal(fgetline, cookie, getsourceline),
+ 							fname, sourcing_lnum);
+ 		*dbg_tick = debug_tick;
+ 	    }
+@@ -978,7 +979,7 @@
+ 	    {
+ 		if (getline_is_func)
+ 		    func_line_start(real_cookie);
+-		else if (getline_equal(getline, cookie, getsourceline))
++		else if (getline_equal(fgetline, cookie, getsourceline))
+ 		    script_line_start();
+ 	    }
+ # endif
+@@ -987,7 +988,7 @@
+ 	if (cstack.cs_looplevel > 0)
+ 	{
+ 	    /* Inside a while/for loop we need to store the lines and use them
+-	     * again.  Pass a different "getline" function to do_one_cmd()
++	     * again.  Pass a different "fgetline" function to do_one_cmd()
+ 	     * below, so that it stores lines in or reads them from
+ 	     * "lines_ga".  Makes it possible to define a function inside a
+ 	     * while/for loop. */
+@@ -995,27 +996,27 @@
+ 	    cmd_cookie = (void *)&cmd_loop_cookie;
+ 	    cmd_loop_cookie.lines_gap = &lines_ga;
+ 	    cmd_loop_cookie.current_line = current_line;
+-	    cmd_loop_cookie.getline = getline;
++	    cmd_loop_cookie.getline = fgetline;
+ 	    cmd_loop_cookie.cookie = cookie;
+ 	    cmd_loop_cookie.repeating = (current_line < lines_ga.ga_len);
+ 	}
+ 	else
+ 	{
+-	    cmd_getline = getline;
++	    cmd_getline = fgetline;
+ 	    cmd_cookie = cookie;
+ 	}
+ #endif
+ 
+-	/* 2. If no line given, get an allocated line with getline(). */
++	/* 2. If no line given, get an allocated line with fgetline(). */
+ 	if (next_cmdline == NULL)
+ 	{
+ 	    /*
+ 	     * Need to set msg_didout for the first line after an ":if",
+ 	     * otherwise the ":if" will be overwritten.
+ 	     */
+-	    if (count == 1 && getline_equal(getline, cookie, getexline))
++	    if (count == 1 && getline_equal(fgetline, cookie, getexline))
+ 		msg_didout = TRUE;
+-	    if (getline == NULL || (next_cmdline = getline(':', cookie,
++	    if (fgetline == NULL || (next_cmdline = fgetline(':', cookie,
+ #ifdef FEAT_EVAL
+ 		    cstack.cs_idx < 0 ? 0 : (cstack.cs_idx + 1) * 2
+ #else
+@@ -1142,7 +1143,7 @@
+ 	     * If the command was typed, remember it for the ':' register.
+ 	     * Do this AFTER executing the command to make :@: work.
+ 	     */
+-	    if (getline_equal(getline, cookie, getexline)
++	    if (getline_equal(fgetline, cookie, getexline)
+ 						  && new_last_cmdline != NULL)
+ 	    {
+ 		vim_free(last_cmdline);
+@@ -1163,7 +1164,7 @@
+ #ifdef FEAT_EVAL
+ 	/* reset did_emsg for a function that is not aborted by an error */
+ 	if (did_emsg && !force_abort
+-		&& getline_equal(getline, cookie, get_func_line)
++		&& getline_equal(fgetline, cookie, get_func_line)
+ 					      && !func_has_abort(real_cookie))
+ 	    did_emsg = FALSE;
+ 
+@@ -1202,7 +1203,7 @@
+ 		    if (breakpoint != NULL)
+ 		    {
+ 			*breakpoint = dbg_find_breakpoint(
+-				getline_equal(getline, cookie, getsourceline),
++			       getline_equal(fgetline, cookie, getsourceline),
+ 									fname,
+ 			   ((wcmd_T *)lines_ga.ga_data)[current_line].lnum-1);
+ 			*dbg_tick = debug_tick;
+@@ -1296,8 +1297,8 @@
+ #endif
+ 	    )
+ 	    && !(did_emsg && used_getline
+-			  && (getline_equal(getline, cookie, getexmodeline)
+-				|| getline_equal(getline, cookie, getexline)))
++			    && (getline_equal(fgetline, cookie, getexmodeline)
++			       || getline_equal(fgetline, cookie, getexline)))
+ 	    && (next_cmdline != NULL
+ #ifdef FEAT_EVAL
+ 			|| cstack.cs_idx >= 0
+@@ -1316,9 +1317,9 @@
+ 	 * unclosed conditional.
+ 	 */
+ 	if (!got_int && !did_throw
+-		&& ((getline_equal(getline, cookie, getsourceline)
+-			&& !source_finished(getline, cookie))
+-		    || (getline_equal(getline, cookie, get_func_line)
++		&& ((getline_equal(fgetline, cookie, getsourceline)
++			&& !source_finished(fgetline, cookie))
++		    || (getline_equal(fgetline, cookie, get_func_line)
+ 					    && !func_has_ended(real_cookie))))
+ 	{
+ 	    if (cstack.cs_flags[cstack.cs_idx] & CSF_TRY)
+@@ -1354,7 +1355,7 @@
+     /* If a missing ":endtry", ":endwhile", ":endfor", or ":endif" or a memory
+      * lack was reported above and the error message is to be converted to an
+      * exception, do this now after rewinding the cstack. */
+-    do_errthrow(&cstack, getline_equal(getline, cookie, get_func_line)
++    do_errthrow(&cstack, getline_equal(fgetline, cookie, get_func_line)
+ 				  ? (char_u *)"endfunction" : (char_u *)NULL);
+ 
+     if (trylevel == 0)
+@@ -1449,9 +1450,9 @@
+      */
+     if (did_throw)
+ 	need_rethrow = TRUE;
+-    if ((getline_equal(getline, cookie, getsourceline)
++    if ((getline_equal(fgetline, cookie, getsourceline)
+ 		&& ex_nesting_level > source_level(real_cookie))
+-	    || (getline_equal(getline, cookie, get_func_line)
++	    || (getline_equal(fgetline, cookie, get_func_line)
+ 		&& ex_nesting_level > func_level(real_cookie) + 1))
+     {
+ 	if (!did_throw)
+@@ -1460,16 +1461,16 @@
+     else
+     {
+ 	/* When leaving a function, reduce nesting level. */
+-	if (getline_equal(getline, cookie, get_func_line))
++	if (getline_equal(fgetline, cookie, get_func_line))
+ 	    --ex_nesting_level;
+ 	/*
+ 	 * Go to debug mode when returning from a function in which we are
+ 	 * single-stepping.
+ 	 */
+-	if ((getline_equal(getline, cookie, getsourceline)
+-		    || getline_equal(getline, cookie, get_func_line))
++	if ((getline_equal(fgetline, cookie, getsourceline)
++		    || getline_equal(fgetline, cookie, get_func_line))
+ 		&& ex_nesting_level + 1 <= debug_break_level)
+-	    do_debug(getline_equal(getline, cookie, getsourceline)
++	    do_debug(getline_equal(fgetline, cookie, getsourceline)
+ 		    ? (char_u *)_("End of sourced file")
+ 		    : (char_u *)_("End of function"));
+     }
+@@ -2871,8 +2872,10 @@
+ 	    }
+ 
+ #ifdef FEAT_USR_CMDS
+-	/* Look for a user defined command as a last resort */
+-	if (eap->cmdidx == CMD_SIZE && *eap->cmd >= 'A' && *eap->cmd <= 'Z')
++	/* Look for a user defined command as a last resort.  Let ":Print" be
++	 * overruled by a user defined command. */
++	if ((eap->cmdidx == CMD_SIZE || eap->cmdidx == CMD_Print)
++		&& *eap->cmd >= 'A' && *eap->cmd <= 'Z')
+ 	{
+ 	    /* User defined commands may contain digits. */
+ 	    while (ASCII_ISALNUM(*p))
+@@ -3465,7 +3468,8 @@
+ 	case CMD_find:
+ 	case CMD_sfind:
+ 	case CMD_tabfind:
+-	    xp->xp_context = EXPAND_FILES_IN_PATH;
++	    if (xp->xp_context == EXPAND_FILES)
++		xp->xp_context = EXPAND_FILES_IN_PATH;
+ 	    break;
+ 	case CMD_cd:
+ 	case CMD_chdir:
+@@ -4520,12 +4524,14 @@
+ 		else /* n == 2 */
+ 		{
+ 		    expand_T	xpc;
++		    int		options = WILD_LIST_NOTFOUND|WILD_ADD_SLASH;
+ 
+ 		    ExpandInit(&xpc);
+ 		    xpc.xp_context = EXPAND_FILES;
++		    if (p_wic)
++			options += WILD_ICASE;
+ 		    p = ExpandOne(&xpc, eap->arg, NULL,
+-					    WILD_LIST_NOTFOUND|WILD_ADD_SLASH,
+-						   WILD_EXPAND_FREE);
++						   options, WILD_EXPAND_FREE);
+ 		    if (p == NULL)
+ 			return FAIL;
+ 		}
+@@ -5587,6 +5593,7 @@
+     int	    compl = EXPAND_NOTHING;
+     char_u  *compl_arg = NULL;
+     int	    has_attr = (eap->arg[0] == '-');
++    int	    name_len;
+ 
+     p = eap->arg;
+ 
+@@ -5612,6 +5619,7 @@
+ 	return;
+     }
+     end = p;
++    name_len = (int)(end - name);
+ 
+     /* If there is nothing after the name, and no attributes were specified,
+      * we are listing commands
+@@ -5626,6 +5634,13 @@
+ 	EMSG(_("E183: User defined commands must start with an uppercase letter"));
+ 	return;
+     }
++    else if ((name_len == 1 && *name == 'X')
++	  || (name_len <= 4
++		  && STRNCMP(name, "Next", name_len > 4 ? 4 : name_len) == 0))
++    {
++	EMSG(_("E841: Reserved name, cannot be used for user defined command"));
++	return;
++    }
+     else
+ 	uc_add_command(name, end - name, p, argt, def, flags, compl, compl_arg,
+ 								eap->forceit);
+@@ -6897,9 +6912,7 @@
+ # ifdef FEAT_WINDOWS
+ 	if (win_split(0, 0) == FAIL)
+ 	    return;
+-#  ifdef FEAT_SCROLLBIND
+-	curwin->w_p_scb = FALSE;
+-#  endif
++	RESET_BINDING(curwin);
+ 
+ 	/* When splitting the window, create a new alist.  Otherwise the
+ 	 * existing one is overwritten. */
+@@ -7299,7 +7312,9 @@
+ 		|| cmdmod.browse
+ #  endif
+ 	   )
+-	    curwin->w_p_scb = FALSE;
++	{
++	    RESET_BINDING(curwin);
++	}
+ 	else
+ 	    do_check_scrollbind(FALSE);
+ # endif
+@@ -9393,7 +9408,7 @@
+ ex_ptag(eap)
+     exarg_T	*eap;
+ {
+-    g_do_tagpreview = p_pvh;
++    g_do_tagpreview = p_pvh;  /* will be reset to 0 in ex_tag_cmd() */
+     ex_tag_cmd(eap, cmdnames[eap->cmdidx].cmd_name + 1);
+ }
+ 
+@@ -9525,17 +9540,23 @@
+ #define SPEC_CFILE  4
+ 		    "<sfile>",		/* ":so" file name */
+ #define SPEC_SFILE  5
++		    "<slnum>",		/* ":so" file line number */
++#define SPEC_SLNUM  6
+ #ifdef FEAT_AUTOCMD
+ 		    "<afile>",		/* autocommand file name */
+-# define SPEC_AFILE 6
++# define SPEC_AFILE 7
+ 		    "<abuf>",		/* autocommand buffer number */
+-# define SPEC_ABUF  7
++# define SPEC_ABUF  8
+ 		    "<amatch>",		/* autocommand match name */
+-# define SPEC_AMATCH 8
++# define SPEC_AMATCH 9
+ #endif
+ #ifdef FEAT_CLIENTSERVER
+ 		    "<client>"
+-# define SPEC_CLIENT 9
++# ifdef FEAT_AUTOCMD
++#  define SPEC_CLIENT 10
++# else
++#  define SPEC_CLIENT 7
++# endif
+ #endif
+     };
+ 
+@@ -9560,6 +9581,7 @@
+  *	  '<cWORD>' to WORD under the cursor
+  *	  '<cfile>' to path name under the cursor
+  *	  '<sfile>' to sourced file name
++ *	  '<slnum>' to sourced file line number
+  *	  '<afile>' to file name for autocommand
+  *	  '<abuf>'  to buffer number for autocommand
+  *	  '<amatch>' to matching name for autocommand
+@@ -9591,10 +9613,7 @@
+ #ifdef FEAT_MODIFY_FNAME
+     int		skip_mod = FALSE;
+ #endif
+-
+-#if defined(FEAT_AUTOCMD) || defined(FEAT_CLIENTSERVER)
+     char_u	strbuf[30];
+-#endif
+ 
+     *errormsg = NULL;
+     if (escaped != NULL)
+@@ -9783,6 +9802,15 @@
+ 		    return NULL;
+ 		}
+ 		break;
++	case SPEC_SLNUM:	/* line in file for ":so" command */
++		if (sourcing_name == NULL || sourcing_lnum == 0)
++		{
++		    *errormsg = (char_u *)_("E842: no line number to use for \"<slnum>\"");
++		    return NULL;
++		}
++		sprintf((char *)strbuf, "%ld", (long)sourcing_lnum);
++		result = strbuf;
++		break;
+ #if defined(FEAT_CLIENTSERVER)
+ 	case SPEC_CLIENT:	/* Source of last submitted input */
+ 		sprintf((char *)strbuf, PRINTF_HEX_LONG_U,
+@@ -10707,7 +10735,7 @@
+  * Write a file name to the session file.
+  * Takes care of the "slash" option in 'sessionoptions' and escapes special
+  * characters.
+- * Returns FAIL if writing fails.
++ * Returns FAIL if writing fails or out of memory.
+  */
+     static int
+ ses_put_fname(fd, name, flagp)
+@@ -10716,49 +10744,32 @@
+     unsigned	*flagp;
+ {
+     char_u	*sname;
++    char_u	*p;
+     int		retval = OK;
+-    int		c;
+ 
+     sname = home_replace_save(NULL, name);
+-    if (sname != NULL)
+-	name = sname;
+-    while (*name != NUL)
+-    {
+-#ifdef FEAT_MBYTE
+-	{
+-	    int l;
++    if (sname == NULL)
++	return FAIL;
+ 
+-	    if (has_mbyte && (l = (*mb_ptr2len)(name)) > 1)
+-	    {
+-		/* copy a multibyte char */
+-		while (--l >= 0)
+-		{
+-		    if (putc(*name, fd) != *name)
+-			retval = FAIL;
+-		    ++name;
+-		}
+-		continue;
+-	    }
+-	}
+-#endif
+-	c = *name++;
+-	if (c == '\\' && (*flagp & SSOP_SLASH))
+-	    /* change a backslash to a forward slash */
+-	    c = '/';
+-	else if ((vim_strchr(escape_chars, c) != NULL
+-#ifdef BACKSLASH_IN_FILENAME
+-		    && c != '\\'
+-#endif
+-		 ) || c == '#' || c == '%')
+-	{
+-	    /* escape a special character with a backslash */
+-	    if (putc('\\', fd) != '\\')
+-		retval = FAIL;
+-	}
+-	if (putc(c, fd) != c)
+-	    retval = FAIL;
++    if (*flagp & SSOP_SLASH)
++    {
++	/* change all backslashes to forward slashes */
++	for (p = sname; *p != NUL; mb_ptr_adv(p))
++	    if (*p == '\\')
++		*p = '/';
+     }
++
++    /* escapse special characters */
++    p = vim_strsave_fnameescape(sname, FALSE);
+     vim_free(sname);
++    if (p == NULL)
++	return FAIL;
++
++    /* write the result */
++    if (fputs((char *)p, fd) < 0)
++	retval = FAIL;
++
++    vim_free(p);
+     return retval;
+ }
+ 
+diff -Naur vim73.orig/src/ex_getln.c vim73/src/ex_getln.c
+--- vim73.orig/src/ex_getln.c	2010-08-14 11:25:45.000000000 -0400
++++ vim73/src/ex_getln.c	2011-01-08 21:01:19.238657508 -0500
+@@ -688,28 +688,35 @@
+ 		    p = get_expr_line();
+ 		    --textlock;
+ 		    restore_cmdline(&save_ccline);
+-		    len = (int)STRLEN(p);
+ 
+-		    if (p != NULL && realloc_cmdbuff(len + 1) == OK)
++		    if (p != NULL)
+ 		    {
+-			ccline.cmdlen = len;
+-			STRCPY(ccline.cmdbuff, p);
+-			vim_free(p);
+-
+-			/* Restore the cursor or use the position set with
+-			 * set_cmdline_pos(). */
+-			if (new_cmdpos > ccline.cmdlen)
+-			    ccline.cmdpos = ccline.cmdlen;
+-			else
+-			    ccline.cmdpos = new_cmdpos;
+-
+-			KeyTyped = FALSE;	/* Don't do p_wc completion. */
+-			redrawcmd();
+-			goto cmdline_changed;
++			len = (int)STRLEN(p);
++			if (realloc_cmdbuff(len + 1) == OK)
++			{
++			    ccline.cmdlen = len;
++			    STRCPY(ccline.cmdbuff, p);
++			    vim_free(p);
++
++			    /* Restore the cursor or use the position set with
++			     * set_cmdline_pos(). */
++			    if (new_cmdpos > ccline.cmdlen)
++				ccline.cmdpos = ccline.cmdlen;
++			    else
++				ccline.cmdpos = new_cmdpos;
++
++			    KeyTyped = FALSE;	/* Don't do p_wc completion. */
++			    redrawcmd();
++			    goto cmdline_changed;
++			}
+ 		    }
+ 		}
+ 		beep_flush();
+-		c = ESC;
++		got_int = FALSE;	/* don't abandon the command line */
++		did_emsg = FALSE;
++		emsg_on_display = FALSE;
++		redrawcmd();
++		goto cmdline_not_changed;
+ 	    }
+ #endif
+ 	    else
+@@ -2342,15 +2349,31 @@
+ 	windgoto(msg_row, msg_col);
+ 	pend = (char_u *)(line_ga.ga_data) + line_ga.ga_len;
+ 
+-	/* we are done when a NL is entered, but not when it comes after a
+-	 * backslash */
+-	if (line_ga.ga_len > 0 && pend[-1] == '\n'
+-		&& (line_ga.ga_len <= 1 || pend[-2] != '\\'))
+-	{
+-	    --line_ga.ga_len;
+-	    --pend;
+-	    *pend = NUL;
+-	    break;
++	/* We are done when a NL is entered, but not when it comes after an
++	 * odd number of backslashes, that results in a NUL. */
++	if (line_ga.ga_len > 0 && pend[-1] == '\n')
++	{
++	    int bcount = 0;
++
++	    while (line_ga.ga_len - 2 >= bcount && pend[-2 - bcount] == '\\')
++		++bcount;
++
++	    if (bcount > 0)
++	    {
++		/* Halve the number of backslashes: "\NL" -> "NUL", "\\NL" ->
++		 * "\NL", etc. */
++		line_ga.ga_len -= (bcount + 1) / 2;
++		pend -= (bcount + 1) / 2;
++		pend[-1] = '\n';
++	    }
++
++	    if ((bcount & 1) == 0)
++	    {
++		--line_ga.ga_len;
++		--pend;
++		*pend = NUL;
++		break;
++	    }
+ 	}
+     }
+ 
+@@ -3316,10 +3339,14 @@
+ 	    p2 = NULL;
+ 	else
+ 	{
++	    int use_options = options |
++		    WILD_HOME_REPLACE|WILD_ADD_SLASH|WILD_SILENT|WILD_ESCAPE;
++
++	    if (p_wic)
++		use_options += WILD_ICASE;
+ 	    p2 = ExpandOne(xp, p1,
+ 			 vim_strnsave(&ccline.cmdbuff[i], xp->xp_pattern_len),
+-		    WILD_HOME_REPLACE|WILD_ADD_SLASH|WILD_SILENT|WILD_ESCAPE
+-							      |options, type);
++							   use_options, type);
+ 	    vim_free(p1);
+ 	    /* longest match: make sure it is not shorter, happens with :help */
+ 	    if (p2 != NULL && type == WILD_LONGEST)
+@@ -3405,6 +3432,7 @@
+  * options = WILD_KEEP_ALL:	    don't remove 'wildignore' entries
+  * options = WILD_SILENT:	    don't print warning messages
+  * options = WILD_ESCAPE:	    put backslash before special chars
++ * options = WILD_ICASE:	    ignore case for files
+  *
+  * The variables xp->xp_context and xp->xp_backslash must have been set!
+  */
+@@ -4338,6 +4366,7 @@
+     char_u	***matches;	/* return: array of pointers to matches */
+ {
+     char_u	*file_str = NULL;
++    int		options = WILD_ADD_SLASH|WILD_SILENT;
+ 
+     if (xp->xp_context == EXPAND_UNSUCCESSFUL)
+     {
+@@ -4356,9 +4385,11 @@
+     if (file_str == NULL)
+ 	return EXPAND_UNSUCCESSFUL;
+ 
++    if (p_wic)
++	options += WILD_ICASE;
++
+     /* find all files that match the description */
+-    if (ExpandFromContext(xp, file_str, matchcount, matches,
+-					  WILD_ADD_SLASH|WILD_SILENT) == FAIL)
++    if (ExpandFromContext(xp, file_str, matchcount, matches, options) == FAIL)
+     {
+ 	*matchcount = 0;
+ 	*matches = NULL;
+@@ -4410,7 +4441,7 @@
+     char_u	*pat;
+     int		*num_file;
+     char_u	***file;
+-    int		options;
++    int		options;  /* EW_ flags */
+ {
+ #ifdef FEAT_CMDL_COMPL
+     regmatch_T	regmatch;
+@@ -4464,6 +4495,9 @@
+ 	    flags |= (EW_FILE | EW_PATH);
+ 	else
+ 	    flags = (flags | EW_DIR) & ~EW_FILE;
++	if (options & WILD_ICASE)
++	    flags |= EW_ICASE;
++
+ 	/* Expand wildcards, supporting %:h and the like. */
+ 	ret = expand_wildcards_eval(&pat, num_file, file, flags);
+ 	if (free_pat)
+@@ -4728,7 +4762,11 @@
+ 			    || (pat[1] == '.' && vim_ispathsep(pat[2])))))
+ 	path = (char_u *)".";
+     else
++    {
+ 	path = vim_getenv((char_u *)"PATH", &mustfree);
++	if (path == NULL)
++	    path = (char_u *)"";
++    }
+ 
+     /*
+      * Go over all directories in $PATH.  Expand matches in that directory and
+@@ -6147,9 +6185,7 @@
+     curwin->w_p_rl = cmdmsg_rl;
+     cmdmsg_rl = FALSE;
+ # endif
+-# ifdef FEAT_SCROLLBIND
+-    curwin->w_p_scb = FALSE;
+-# endif
++    RESET_BINDING(curwin);
+ 
+ # ifdef FEAT_AUTOCMD
+     /* Do execute autocommands for setting the filetype (load syntax). */
+diff -Naur vim73.orig/src/fileio.c vim73/src/fileio.c
+--- vim73.orig/src/fileio.c	2010-08-14 08:20:54.000000000 -0400
++++ vim73/src/fileio.c	2011-01-08 21:01:19.374658068 -0500
+@@ -11,14 +11,6 @@
+  * fileio.c: read from and write to a file
+  */
+ 
+-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+-# include "vimio.h"	/* for lseek(), must be before vim.h */
+-#endif
+-
+-#if defined __EMX__
+-# include "vimio.h"	/* for mktemp(), CJW 1997-12-03 */
+-#endif
+-
+ #include "vim.h"
+ 
+ #if defined(__TANDEM) || defined(__MINT__)
+@@ -918,7 +910,7 @@
+ 	    {
+ 		/* Read the first line (and a bit more).  Immediately rewind to
+ 		 * the start of the file.  If the read() fails "len" is -1. */
+-		len = vim_read(fd, firstline, 80);
++		len = read_eintr(fd, firstline, 80);
+ 		lseek(fd, (off_t)0L, SEEK_SET);
+ 		for (p = firstline; p < firstline + len; ++p)
+ 		    if (*p >= 0x80)
+@@ -1373,7 +1365,7 @@
+ 		    /*
+ 		     * Read bytes from the file.
+ 		     */
+-		    size = vim_read(fd, ptr, size);
++		    size = read_eintr(fd, ptr, size);
+ 		}
+ 
+ 		if (size <= 0)
+@@ -4000,7 +3992,7 @@
+ #ifdef HAS_BW_FLAGS
+ 			write_info.bw_flags = FIO_NOCONVERT;
+ #endif
+-			while ((write_info.bw_len = vim_read(fd, copybuf,
++			while ((write_info.bw_len = read_eintr(fd, copybuf,
+ 								BUFSIZE)) > 0)
+ 			{
+ 			    if (buf_write_bytes(&write_info) == FAIL)
+@@ -4813,7 +4805,7 @@
+ #ifdef HAS_BW_FLAGS
+ 			write_info.bw_flags = FIO_NOCONVERT;
+ #endif
+-			while ((write_info.bw_len = vim_read(fd, smallbuf,
++			while ((write_info.bw_len = read_eintr(fd, smallbuf,
+ 						      SMBUFSIZE)) > 0)
+ 			    if (buf_write_bytes(&write_info) == FAIL)
+ 				break;
+@@ -5330,7 +5322,7 @@
+ 
+ /*
+  * Call write() to write a number of bytes to the file.
+- * Also handles encryption and 'encoding' conversion.
++ * Handles encryption and 'encoding' conversion.
+  *
+  * Return FAIL for failure, OK otherwise.
+  */
+@@ -5702,16 +5694,8 @@
+ 	crypt_encode(buf, len, buf);
+ #endif
+ 
+-    /* Repeat the write(), it may be interrupted by a signal. */
+-    while (len > 0)
+-    {
+-	wlen = vim_write(ip->bw_fd, buf, len);
+-	if (wlen <= 0)		    /* error! */
+-	    return FAIL;
+-	len -= wlen;
+-	buf += wlen;
+-    }
+-    return OK;
++    wlen = write_eintr(ip->bw_fd, buf, len);
++    return (wlen < len) ? FAIL : OK;
+ }
+ 
+ #ifdef FEAT_MBYTE
+@@ -6662,8 +6646,8 @@
+ 	return -1;
+     }
+ 
+-    while ((n = vim_read(fd_in, buffer, BUFSIZE)) > 0)
+-	if (vim_write(fd_out, buffer, n) != n)
++    while ((n = read_eintr(fd_in, buffer, BUFSIZE)) > 0)
++	if (write_eintr(fd_out, buffer, n) != n)
+ 	{
+ 	    errmsg = _("E208: Error writing to \"%s\"");
+ 	    break;
+@@ -10304,3 +10288,55 @@
+     }
+     return reg_pat;
+ }
++
++#if defined(EINTR) || defined(PROTO)
++/*
++ * Version of read() that retries when interrupted by EINTR (possibly
++ * by a SIGWINCH).
++ */
++    long
++read_eintr(fd, buf, bufsize)
++    int	    fd;
++    void    *buf;
++    size_t  bufsize;
++{
++    long ret;
++
++    for (;;)
++    {
++	ret = vim_read(fd, buf, bufsize);
++	if (ret >= 0 || errno != EINTR)
++	    break;
++    }
++    return ret;
++}
++
++/*
++ * Version of write() that retries when interrupted by EINTR (possibly
++ * by a SIGWINCH).
++ */
++    long
++write_eintr(fd, buf, bufsize)
++    int	    fd;
++    void    *buf;
++    size_t  bufsize;
++{
++    long    ret = 0;
++    long    wlen;
++
++    /* Repeat the write() so long it didn't fail, other than being interrupted
++     * by a signal. */
++    while (ret < (long)bufsize)
++    {
++	wlen = vim_write(fd, (char *)buf + ret, bufsize - ret);
++	if (wlen < 0)
++	{
++	    if (errno != EINTR)
++		break;
++	}
++	else
++	    ret += wlen;
++    }
++    return ret;
++}
++#endif
+diff -Naur vim73.orig/src/getchar.c vim73/src/getchar.c
+--- vim73.orig/src/getchar.c	2010-08-08 09:00:33.000000000 -0400
++++ vim73/src/getchar.c	2011-01-08 21:01:19.462656564 -0500
+@@ -1506,9 +1506,6 @@
+     }
+ }
+ 
+-#define KL_PART_KEY -1		/* keylen value for incomplete key-code */
+-#define KL_PART_MAP -2		/* keylen value for incomplete mapping */
+-
+ /*
+  * Get the next input character.
+  * Can return a special key or a multi-byte character.
+@@ -2171,7 +2168,7 @@
+ 					if (!timedout)
+ 					{
+ 					    /* break at a partly match */
+-					    keylen = KL_PART_MAP;
++					    keylen = KEYLEN_PART_MAP;
+ 					    break;
+ 					}
+ 				    }
+@@ -2192,7 +2189,7 @@
+ 
+ 			/* If no partly match found, use the longest full
+ 			 * match. */
+-			if (keylen != KL_PART_MAP)
++			if (keylen != KEYLEN_PART_MAP)
+ 			{
+ 			    mp = mp_match;
+ 			    keylen = mp_match_len;
+@@ -2230,7 +2227,7 @@
+ 			}
+ 			/* Need more chars for partly match. */
+ 			if (mlen == typebuf.tb_len)
+-			    keylen = KL_PART_KEY;
++			    keylen = KEYLEN_PART_KEY;
+ 			else if (max_mlen < mlen)
+ 			    /* no match, may have to check for termcode at
+ 			     * next character */
+@@ -2238,7 +2235,7 @@
+ 		    }
+ 
+ 		    if ((mp == NULL || max_mlen >= mp_match_len)
+-						     && keylen != KL_PART_MAP)
++						 && keylen != KEYLEN_PART_MAP)
+ 		    {
+ 			int	save_keylen = keylen;
+ 
+@@ -2264,8 +2261,8 @@
+ 			    /* If no termcode matched but 'pastetoggle'
+ 			     * matched partially it's like an incomplete key
+ 			     * sequence. */
+-			    if (keylen == 0 && save_keylen == KL_PART_KEY)
+-				keylen = KL_PART_KEY;
++			    if (keylen == 0 && save_keylen == KEYLEN_PART_KEY)
++				keylen = KEYLEN_PART_KEY;
+ 
+ 			    /*
+ 			     * When getting a partial match, but the last
+@@ -2302,7 +2299,7 @@
+ 				    continue;
+ 				}
+ 				if (*s == NUL)	    /* need more characters */
+-				    keylen = KL_PART_KEY;
++				    keylen = KEYLEN_PART_KEY;
+ 			    }
+ 			    if (keylen >= 0)
+ #endif
+@@ -2339,7 +2336,8 @@
+ 			if (keylen > 0)	    /* full matching terminal code */
+ 			{
+ #if defined(FEAT_GUI) && defined(FEAT_MENU)
+-			    if (typebuf.tb_buf[typebuf.tb_off] == K_SPECIAL
++			    if (typebuf.tb_len >= 2
++				&& typebuf.tb_buf[typebuf.tb_off] == K_SPECIAL
+ 					 && typebuf.tb_buf[typebuf.tb_off + 1]
+ 								   == KS_MENU)
+ 			    {
+@@ -2381,7 +2379,7 @@
+ 			/* Partial match: get some more characters.  When a
+ 			 * matching mapping was found use that one. */
+ 			if (mp == NULL || keylen < 0)
+-			    keylen = KL_PART_KEY;
++			    keylen = KEYLEN_PART_KEY;
+ 			else
+ 			    keylen = mp_match_len;
+ 		    }
+@@ -2553,7 +2551,8 @@
+ #endif
+ 			&& typebuf.tb_maplen == 0
+ 			&& (State & INSERT)
+-			&& (p_timeout || (keylen == KL_PART_KEY && p_ttimeout))
++			&& (p_timeout
++			    || (keylen == KEYLEN_PART_KEY && p_ttimeout))
+ 			&& (c = inchar(typebuf.tb_buf + typebuf.tb_off
+ 						     + typebuf.tb_len, 3, 25L,
+ 						 typebuf.tb_change_cnt)) == 0)
+@@ -2783,9 +2782,9 @@
+ 			    ? 0
+ 			    : ((typebuf.tb_len == 0
+ 				    || !(p_timeout || (p_ttimeout
+-						   && keylen == KL_PART_KEY)))
++					       && keylen == KEYLEN_PART_KEY)))
+ 				    ? -1L
+-				    : ((keylen == KL_PART_KEY && p_ttm >= 0)
++				    : ((keylen == KEYLEN_PART_KEY && p_ttm >= 0)
+ 					    ? p_ttm
+ 					    : p_tm)), typebuf.tb_change_cnt);
+ 
+@@ -3168,6 +3167,7 @@
+     int		expr = FALSE;
+ #endif
+     int		noremap;
++    char_u      *orig_rhs;
+ 
+     keys = arg;
+     map_table = maphash;
+@@ -3266,6 +3266,7 @@
+     }
+     if (*p != NUL)
+ 	*p++ = NUL;
++
+     p = skipwhite(p);
+     rhs = p;
+     hasarg = (*rhs != NUL);
+@@ -3288,6 +3289,7 @@
+      */
+     if (haskey)
+ 	keys = replace_termcodes(keys, &keys_buf, TRUE, TRUE, special);
++    orig_rhs = rhs;
+     if (hasarg)
+     {
+ 	if (STRICMP(rhs, "<nop>") == 0)	    /* "<Nop>" means nothing */
+@@ -3298,7 +3300,7 @@
+ 
+ #ifdef FEAT_FKMAP
+     /*
+-     * when in right-to-left mode and alternate keymap option set,
++     * When in right-to-left mode and alternate keymap option set,
+      * reverse the character flow in the rhs in Farsi.
+      */
+     if (p_altkeymap && curwin->w_p_rl)
+@@ -3556,6 +3558,8 @@
+ 				}
+ 				vim_free(mp->m_str);
+ 				mp->m_str = newstr;
++				vim_free(mp->m_orig_str);
++				mp->m_orig_str = vim_strsave(orig_rhs);
+ 				mp->m_noremap = noremap;
+ 				mp->m_silent = silent;
+ 				mp->m_mode = mode;
+@@ -3633,10 +3637,12 @@
+ 
+     mp->m_keys = vim_strsave(keys);
+     mp->m_str = vim_strsave(rhs);
++    mp->m_orig_str = vim_strsave(orig_rhs);
+     if (mp->m_keys == NULL || mp->m_str == NULL)
+     {
+ 	vim_free(mp->m_keys);
+ 	vim_free(mp->m_str);
++	vim_free(mp->m_orig_str);
+ 	vim_free(mp);
+ 	retval = 4;	/* no mem */
+ 	goto theend;
+@@ -3682,6 +3688,7 @@
+     mp = *mpp;
+     vim_free(mp->m_keys);
+     vim_free(mp->m_str);
++    vim_free(mp->m_orig_str);
+     *mpp = mp->m_next;
+     vim_free(mp);
+ }
+@@ -3851,12 +3858,57 @@
+     }
+ }
+ 
++/*
++ * Return characters to represent the map mode in an allocated string.
++ * Returns NULL when out of memory.
++ */
++    char_u *
++map_mode_to_chars(mode)
++    int mode;
++{
++    garray_T    mapmode;
++
++    ga_init2(&mapmode, 1, 7);
++
++    if ((mode & (INSERT + CMDLINE)) == INSERT + CMDLINE)
++	ga_append(&mapmode, '!');			/* :map! */
++    else if (mode & INSERT)
++	ga_append(&mapmode, 'i');			/* :imap */
++    else if (mode & LANGMAP)
++	ga_append(&mapmode, 'l');			/* :lmap */
++    else if (mode & CMDLINE)
++	ga_append(&mapmode, 'c');			/* :cmap */
++    else if ((mode & (NORMAL + VISUAL + SELECTMODE + OP_PENDING))
++				 == NORMAL + VISUAL + SELECTMODE + OP_PENDING)
++	ga_append(&mapmode, ' ');			/* :map */
++    else
++    {
++	if (mode & NORMAL)
++	    ga_append(&mapmode, 'n');			/* :nmap */
++	if (mode & OP_PENDING)
++	    ga_append(&mapmode, 'o');			/* :omap */
++	if ((mode & (VISUAL + SELECTMODE)) == VISUAL + SELECTMODE)
++	    ga_append(&mapmode, 'v');			/* :vmap */
++	else
++	{
++	    if (mode & VISUAL)
++		ga_append(&mapmode, 'x');		/* :xmap */
++	    if (mode & SELECTMODE)
++		ga_append(&mapmode, 's');		/* :smap */
++	}
++    }
++
++    ga_append(&mapmode, NUL);
++    return (char_u *)mapmode.ga_data;
++}
++
+     static void
+ showmap(mp, local)
+     mapblock_T	*mp;
+     int		local;	    /* TRUE for buffer-local map */
+ {
+-    int len = 1;
++    int		len = 1;
++    char_u	*mapchars;
+ 
+     if (msg_didout || msg_silent != 0)
+     {
+@@ -3864,49 +3916,15 @@
+ 	if (got_int)	    /* 'q' typed at MORE prompt */
+ 	    return;
+     }
+-    if ((mp->m_mode & (INSERT + CMDLINE)) == INSERT + CMDLINE)
+-	msg_putchar('!');			/* :map! */
+-    else if (mp->m_mode & INSERT)
+-	msg_putchar('i');			/* :imap */
+-    else if (mp->m_mode & LANGMAP)
+-	msg_putchar('l');			/* :lmap */
+-    else if (mp->m_mode & CMDLINE)
+-	msg_putchar('c');			/* :cmap */
+-    else if ((mp->m_mode & (NORMAL + VISUAL + SELECTMODE + OP_PENDING))
+-				 == NORMAL + VISUAL + SELECTMODE + OP_PENDING)
+-	msg_putchar(' ');			/* :map */
+-    else
++
++    mapchars = map_mode_to_chars(mp->m_mode);
++    if (mapchars != NULL)
+     {
+-	len = 0;
+-	if (mp->m_mode & NORMAL)
+-	{
+-	    msg_putchar('n');		/* :nmap */
+-	    ++len;
+-	}
+-	if (mp->m_mode & OP_PENDING)
+-	{
+-	    msg_putchar('o');		/* :omap */
+-	    ++len;
+-	}
+-	if ((mp->m_mode & (VISUAL + SELECTMODE)) == VISUAL + SELECTMODE)
+-	{
+-	    msg_putchar('v');		/* :vmap */
+-	    ++len;
+-	}
+-	else
+-	{
+-	    if (mp->m_mode & VISUAL)
+-	    {
+-		msg_putchar('x');		/* :xmap */
+-		++len;
+-	    }
+-	    if (mp->m_mode & SELECTMODE)
+-	    {
+-		msg_putchar('s');		/* :smap */
+-		++len;
+-	    }
+-	}
++	msg_puts(mapchars);
++	len = (int)STRLEN(mapchars);
++	vim_free(mapchars);
+     }
++
+     while (++len <= 3)
+ 	msg_putchar(' ');
+ 
+@@ -3931,8 +3949,7 @@
+ 	msg_putchar(' ');
+ 
+     /* Use FALSE below if we only want things like <Up> to show up as such on
+-     * the rhs, and not M-x etc, TRUE gets both -- webb
+-     */
++     * the rhs, and not M-x etc, TRUE gets both -- webb */
+     if (*mp->m_str == NUL)
+ 	msg_puts_attr((char_u *)"<Nop>", hl_attr(HLF_8));
+     else
+@@ -4995,19 +5012,21 @@
+     sourcing_name = save_name;
+ }
+ 
+-#ifdef FEAT_EVAL
++#if defined(FEAT_EVAL) || defined(PROTO)
+ /*
+- * Check the string "keys" against the lhs of all mappings
+- * Return pointer to rhs of mapping (mapblock->m_str)
+- * NULL otherwise
++ * Check the string "keys" against the lhs of all mappings.
++ * Return pointer to rhs of mapping (mapblock->m_str).
++ * NULL when no mapping found.
+  */
+     char_u *
+-check_map(keys, mode, exact, ign_mod, abbr)
++check_map(keys, mode, exact, ign_mod, abbr, mp_ptr, local_ptr)
+     char_u	*keys;
+     int		mode;
+     int		exact;		/* require exact match */
+     int		ign_mod;	/* ignore preceding modifier */
+     int		abbr;		/* do abbreviations */
++    mapblock_T	**mp_ptr;	/* return: pointer to mapblock or NULL */
++    int		*local_ptr;	/* return: buffer-local mapping or NULL */
+ {
+     int		hash;
+     int		len, minlen;
+@@ -5062,7 +5081,17 @@
+ 			    minlen = mp->m_keylen - 3;
+ 		    }
+ 		    if (STRNCMP(s, keys, minlen) == 0)
++		    {
++			if (mp_ptr != NULL)
++			    *mp_ptr = mp;
++			if (local_ptr != NULL)
++#ifdef FEAT_LOCALMAP
++			    *local_ptr = local;
++#else
++			    *local_ptr = 0;
++#endif
+ 			return mp->m_str;
++		    }
+ 		}
+ 	    }
+ 	}
+diff -Naur vim73.orig/src/globals.h vim73/src/globals.h
+--- vim73.orig/src/globals.h	2010-07-23 15:20:45.000000000 -0400
++++ vim73/src/globals.h	2011-01-08 21:01:19.278656842 -0500
+@@ -510,8 +510,13 @@
+ EXTERN VimClipboard clip_plus;	/* CLIPBOARD selection in X11 */
+ # else
+ #  define clip_plus clip_star	/* there is only one clipboard */
++#  define ONE_CLIPBOARD
+ # endif
+-EXTERN int	clip_unnamed INIT(= FALSE);
++
++#define CLIP_UNNAMED      1
++#define CLIP_UNNAMED_PLUS 2
++EXTERN int	clip_unnamed INIT(= 0); /* above two values or'ed */
++
+ EXTERN int	clip_autoselect INIT(= FALSE);
+ EXTERN int	clip_autoselectml INIT(= FALSE);
+ EXTERN int	clip_html INIT(= FALSE);
+diff -Naur vim73.orig/src/gui.c vim73/src/gui.c
+--- vim73.orig/src/gui.c	2010-08-08 09:01:18.000000000 -0400
++++ vim73/src/gui.c	2011-01-08 21:01:18.886656411 -0500
+@@ -105,8 +105,18 @@
+ 
+ #if defined(FEAT_GUI_GTK) || defined(FEAT_GUI_X11)
+     if (gui.in_use)
++    {
++# ifdef FEAT_EVAL
++	Window	x11_window;
++	Display	*x11_display;
++
++	if (gui_get_x11_windis(&x11_window, &x11_display) == OK)
++	    set_vim_var_nr(VV_WINDOWID, (long)x11_window);
++# endif
++
+ 	/* Display error messages in a dialog now. */
+ 	display_errors();
++    }
+ #endif
+ 
+ #if defined(MAY_FORK) && !defined(__QNXNTO__)
+@@ -2352,7 +2362,7 @@
+     if (draw_sign)
+ 	/* Draw the sign on top of the spaces. */
+ 	gui_mch_drawsign(gui.row, col, gui.highlight_mask);
+-# if defined(FEAT_NETBEANS_INTG) && (defined(FEAT_GUI_MOTIF) \
++# if defined(FEAT_NETBEANS_INTG) && (defined(FEAT_GUI_X11) \
+ 	|| defined(FEAT_GUI_GTK) || defined(FEAT_GUI_W32))
+     if (multi_sign)
+ 	netbeans_draw_multisign_indicator(gui.row);
+diff -Naur vim73.orig/src/gui_gtk.c vim73/src/gui_gtk.c
+--- vim73.orig/src/gui_gtk.c	2010-07-20 07:15:22.000000000 -0400
++++ vim73/src/gui_gtk.c	2011-01-08 21:01:19.298658878 -0500
+@@ -1287,6 +1287,9 @@
+ 	entry = gtk_entry_new();
+ 	gtk_widget_show(entry);
+ 
++	/* Make Enter work like pressing OK. */
++        gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
++
+ 	text = CONVERT_TO_UTF8(textfield);
+ 	gtk_entry_set_text(GTK_ENTRY(entry), (const char *)text);
+ 	CONVERT_TO_UTF8_FREE(text);
+@@ -1795,7 +1798,6 @@
+     char_u		*repl_text;
+     gboolean		direction_down;
+     SharedFindReplace	*sfr;
+-    int			rc;
+ 
+     flags = (int)(long)data;	    /* avoid a lint warning here */
+ 
+@@ -1821,7 +1823,7 @@
+ 
+     repl_text = CONVERT_FROM_UTF8(repl_text);
+     find_text = CONVERT_FROM_UTF8(find_text);
+-    rc = gui_do_findrepl(flags, find_text, repl_text, direction_down);
++    gui_do_findrepl(flags, find_text, repl_text, direction_down);
+     CONVERT_FROM_UTF8_FREE(repl_text);
+     CONVERT_FROM_UTF8_FREE(find_text);
+ }
+diff -Naur vim73.orig/src/gui_mac.c vim73/src/gui_mac.c
+--- vim73.orig/src/gui_mac.c	2010-08-14 15:39:54.000000000 -0400
++++ vim73/src/gui_mac.c	2011-01-08 21:01:18.766656221 -0500
+@@ -1480,7 +1480,7 @@
+  *
+  *  Returns the index inside the menu wher
+  */
+-    short /* Shoulde we return MenuItemIndex? */
++    short /* Should we return MenuItemIndex? */
+ gui_mac_get_menu_item_index(vimmenu_T *pMenu)
+ {
+     short	index;
+@@ -1823,7 +1823,7 @@
+ 	p.h += gui.scrollbar_width;
+     if (gui.which_scrollbars[SBAR_RIGHT])
+ 	p.h += gui.scrollbar_width;
+-    /* ideal height is as heigh as we can get */
++    /* ideal height is as high as we can get */
+     p.v = 15 * 1024;
+ 
+     thePart = IsWindowInStandardState(whichWindow, &p, &r)
+@@ -4481,7 +4481,7 @@
+ 	 * event arrives.  No need to check for input_buf_full because we are
+ 	 * returning as soon as it contains a single char.
+ 	 */
+-	/* TODO: reduce wtime accordinly???  */
++	/* TODO: reduce wtime accordingly???  */
+ 	if (wtime > -1)
+ 	    sleeppyTick = 60 * wtime / 1000;
+ 	else
+@@ -5723,13 +5723,13 @@
+     iconDITL = GetResource('DITL', 131);
+     switch (type)
+     {
+-	case VIM_GENERIC:  useIcon = kNoteIcon;
+-	case VIM_ERROR:    useIcon = kStopIcon;
+-	case VIM_WARNING:  useIcon = kCautionIcon;
+-	case VIM_INFO:     useIcon = kNoteIcon;
+-	case VIM_QUESTION: useIcon = kNoteIcon;
+-	default:      useIcon = kStopIcon;
+-    };
++	case VIM_GENERIC:
++	case VIM_INFO:
++	case VIM_QUESTION: useIcon = kNoteIcon; break;
++	case VIM_WARNING:  useIcon = kCautionIcon; break;
++	case VIM_ERROR:    useIcon = kStopIcon; break;
++	default:           useIcon = kStopIcon;
++    }
+     AppendDITL(theDialog, iconDITL, overlayDITL);
+     ReleaseResource(iconDITL);
+     GetDialogItem(theDialog, iconItm.idx, &itemType, &itemHandle, &box);
+@@ -5892,7 +5892,7 @@
+ 
+     return itemHit;
+ /*
+- * Usefull thing which could be used
++ * Useful thing which could be used
+  * SetDialogTimeout(): Auto click a button after timeout
+  * SetDialogTracksCursor() : Get the I-beam cursor over input box
+  * MoveDialogItem():	    Probably better than SetDialogItem
+@@ -6100,7 +6100,7 @@
+ #endif
+ 
+ /*
+- * Transfered from os_mac.c for MacOS X using os_unix.c prep work
++ * Transferred from os_mac.c for MacOS X using os_unix.c prep work
+  */
+ 
+     int
+@@ -6543,7 +6543,7 @@
+ static ControlRef dataBrowser = NULL;
+ 
+ // when the tabline is hidden, vim doesn't call update_tabline(). When
+-// the tabline is shown again, show_tabline() is called before upate_tabline(),
++// the tabline is shown again, show_tabline() is called before update_tabline(),
+ // and because of this, the tab labels and vims internal tabs are out of sync
+ // for a very short time. to prevent inconsistent state, we store the labels
+ // of the tabs, not pointers to the tabs (which are invalid for a short time).
+diff -Naur vim73.orig/src/gui_w32.c vim73/src/gui_w32.c
+--- vim73.orig/src/gui_w32.c	2010-08-08 09:05:26.000000000 -0400
++++ vim73/src/gui_w32.c	2011-01-08 21:01:18.990656516 -0500
+@@ -289,13 +289,13 @@
+ 
+ #ifdef FEAT_MENU
+ static UINT	s_menu_id = 100;
++#endif
+ 
+ /*
+  * Use the system font for dialogs and tear-off menus.  Remove this line to
+  * use DLG_FONT_NAME.
+  */
+-# define USE_SYSMENU_FONT
+-#endif
++#define USE_SYSMENU_FONT
+ 
+ #define VIM_NAME	"vim"
+ #define VIM_CLASS	"Vim"
+@@ -1260,7 +1260,7 @@
+ 
+     /* try and load the user32.dll library and get the entry points for
+      * multi-monitor-support. */
+-    if ((user32_lib = LoadLibrary("User32.dll")) != NULL)
++    if ((user32_lib = vimLoadLib("User32.dll")) != NULL)
+     {
+ 	pMonitorFromWindow = (TMonitorFromWindow)GetProcAddress(user32_lib,
+ 							 "MonitorFromWindow");
+@@ -1573,6 +1573,11 @@
+ # endif
+ #endif
+ 
++#ifdef FEAT_EVAL
++    /* set the v:windowid variable */
++    set_vim_var_nr(VV_WINDOWID, (long)s_hwnd);
++#endif
++
+ theend:
+     /* Display any pending error messages */
+     display_errors();
+@@ -4188,7 +4193,7 @@
+     static void
+ dyn_imm_load(void)
+ {
+-    hLibImm = LoadLibrary("imm32.dll");
++    hLibImm = vimLoadLib("imm32.dll");
+     if (hLibImm == NULL)
+ 	return;
+ 
+diff -Naur vim73.orig/src/gui_w48.c vim73/src/gui_w48.c
+--- vim73.orig/src/gui_w48.c	2010-07-27 15:46:04.000000000 -0400
++++ vim73/src/gui_w48.c	2011-01-08 21:01:18.918658776 -0500
+@@ -1810,7 +1810,8 @@
+ 		 * mapped we want to use the mapping instead. */
+ 		if (vk == VK_F10
+ 			&& gui.menu_is_active
+-			&& check_map(k10, State, FALSE, TRUE, FALSE) == NULL)
++			&& check_map(k10, State, FALSE, TRUE, FALSE,
++							  NULL, NULL) == NULL)
+ 		    break;
+ #endif
+ 		if (GetKeyState(VK_SHIFT) & 0x8000)
+@@ -1924,7 +1925,8 @@
+     /* Check for <F10>: Default effect is to select the menu.  When <F10> is
+      * mapped we need to stop it here to avoid strange effects (e.g., for the
+      * key-up event) */
+-    if (vk != VK_F10 || check_map(k10, State, FALSE, TRUE, FALSE) == NULL)
++    if (vk != VK_F10 || check_map(k10, State, FALSE, TRUE, FALSE,
++							  NULL, NULL) == NULL)
+ #endif
+ 	DispatchMessage(&msg);
+ }
+diff -Naur vim73.orig/src/gui_x11.c vim73/src/gui_x11.c
+--- vim73.orig/src/gui_x11.c	2010-08-08 09:05:45.000000000 -0400
++++ vim73/src/gui_x11.c	2011-01-08 21:01:19.178657868 -0500
+@@ -2895,6 +2895,11 @@
+ 	    focus = gui.in_focus;
+ 	}
+ 
++#if defined(FEAT_NETBEANS_INTG)
++	/* Process any queued netbeans messages. */
++	netbeans_parse_messages();
++#endif
++
+ 	/*
+ 	 * Don't use gui_mch_update() because then we will spin-lock until a
+ 	 * char arrives, instead we use XtAppProcessEvent() to hang until an
+diff -Naur vim73.orig/src/if_cscope.c vim73/src/if_cscope.c
+--- vim73.orig/src/if_cscope.c	2010-07-25 10:32:31.000000000 -0400
++++ vim73/src/if_cscope.c	2011-01-08 21:01:19.458660505 -0500
+@@ -13,16 +13,11 @@
+ 
+ #if defined(FEAT_CSCOPE) || defined(PROTO)
+ 
+-#include <string.h>
+-#include <errno.h>
+ #include <assert.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #if defined(UNIX)
+ # include <sys/wait.h>
+-#else
+-    /* not UNIX, must be WIN32 */
+-# include "vimio.h"
+ #endif
+ #include "if_cscope.h"
+ 
+@@ -1274,9 +1269,7 @@
+ 		{
+ 		    win_split(postponed_split > 0 ? postponed_split : 0,
+ 						       postponed_split_flags);
+-#  ifdef FEAT_SCROLLBIND
+-		    curwin->w_p_scb = FALSE;
+-#  endif
++		    RESET_BINDING(curwin);
+ 		    postponed_split = 0;
+ 		}
+ # endif
+@@ -1353,7 +1346,7 @@
+ 		       "       g: Find this definition\n"
+ 		       "       i: Find files #including this file\n"
+ 		       "       s: Find this C symbol\n"
+-		       "       t: Find assignments to\n"));
++		       "       t: Find this text string\n"));
+ 
+ 	cmdp++;
+     }
+@@ -1664,7 +1657,7 @@
+ /*
+  * PRIVATE: cs_make_vim_style_matches
+  *
+- * convert the cscope output into into a ctags style entry (as might be found
++ * convert the cscope output into a ctags style entry (as might be found
+  * in a ctags tags file).  there's one catch though: cscope doesn't tell you
+  * the type of the tag you are looking for.  for example, in Darren Hiebert's
+  * ctags (the one that comes with vim), #define's use a line number to find the
+diff -Naur vim73.orig/src/if_lua.c vim73/src/if_lua.c
+--- vim73.orig/src/if_lua.c	2010-08-12 16:12:04.000000000 -0400
++++ vim73/src/if_lua.c	2011-01-08 21:01:18.922656581 -0500
+@@ -49,7 +49,7 @@
+ # define symbol_from_dll dlsym
+ # define close_dll dlclose
+ #else
+-# define load_dll LoadLibrary
++# define load_dll vimLoadLib
+ # define symbol_from_dll GetProcAddress
+ # define close_dll FreeLibrary
+ #endif
+diff -Naur vim73.orig/src/if_mzsch.c vim73/src/if_mzsch.c
+--- vim73.orig/src/if_mzsch.c	2010-06-25 23:56:17.000000000 -0400
++++ vim73/src/if_mzsch.c	2011-01-08 21:01:19.114655467 -0500
+@@ -556,8 +556,8 @@
+ 
+     if (hMzGC && hMzSch)
+ 	return OK;
+-    hMzSch = LoadLibrary(sch_dll);
+-    hMzGC = LoadLibrary(gc_dll);
++    hMzSch = vimLoadLib(sch_dll);
++    hMzGC = vimLoadLib(gc_dll);
+ 
+     if (!hMzSch)
+     {
+@@ -794,9 +794,16 @@
+ #endif
+ }
+ 
++#if MZSCHEME_VERSION_MAJOR >= 500 && defined(WIN32) && defined(USE_THREAD_LOCAL)
++static __declspec(thread) void *tls_space;
++#endif
++
+     void
+ mzscheme_main(void)
+ {
++#if MZSCHEME_VERSION_MAJOR >= 500 && defined(WIN32) && defined(USE_THREAD_LOCAL)
++    scheme_register_tls_space(&tls_space, 0);
++#endif
+ #if defined(MZ_PRECISE_GC) && MZSCHEME_VERSION_MAJOR >= 400
+     /* use trampoline for precise GC in MzScheme >= 4.x */
+     scheme_main_setup(TRUE, mzscheme_env_main, 0, NULL);
+diff -Naur vim73.orig/src/if_perl.xs vim73/src/if_perl.xs
+--- vim73.orig/src/if_perl.xs	2010-07-22 05:33:37.000000000 -0400
++++ vim73/src/if_perl.xs	2011-01-08 21:01:18.926655661 -0500
+@@ -106,7 +106,7 @@
+ #define close_dll dlclose
+ #else
+ #define PERL_PROC FARPROC
+-#define load_dll LoadLibrary
++#define load_dll vimLoadLib
+ #define symbol_from_dll GetProcAddress
+ #define close_dll FreeLibrary
+ #endif
+diff -Naur vim73.orig/src/if_py_both.h vim73/src/if_py_both.h
+--- vim73.orig/src/if_py_both.h	2010-08-08 07:06:29.000000000 -0400
++++ vim73/src/if_py_both.h	2011-01-08 21:01:18.982656784 -0500
+@@ -34,6 +34,7 @@
+ static PyObject *OutputWrite(PyObject *, PyObject *);
+ static PyObject *OutputWritelines(PyObject *, PyObject *);
+ 
++/* Function to write a line, points to either msg() or emsg(). */
+ typedef void (*writefn)(char_u *);
+ static void writer(writefn fn, char_u *str, PyInt n);
+ 
+@@ -122,52 +123,19 @@
+     return Py_None;
+ }
+ 
+-static char_u *buffer = NULL;
+-static PyInt buffer_len = 0;
+-static PyInt buffer_size = 0;
+-
++/* Buffer IO, we write one whole line at a time. */
++static garray_T io_ga = {0, 0, 1, 80, NULL};
+ static writefn old_fn = NULL;
+ 
+     static void
+-buffer_ensure(PyInt n)
+-{
+-    PyInt new_size;
+-    char_u *new_buffer;
+-
+-    if (n < buffer_size)
+-	return;
+-
+-    new_size = buffer_size;
+-    while (new_size < n)
+-	new_size += 80;
+-
+-    if (new_size != buffer_size)
+-    {
+-	new_buffer = alloc((unsigned)new_size);
+-	if (new_buffer == NULL)
+-	    return;
+-
+-	if (buffer)
+-	{
+-	    memcpy(new_buffer, buffer, buffer_len);
+-	    vim_free(buffer);
+-	}
+-
+-	buffer = new_buffer;
+-	buffer_size = new_size;
+-    }
+-}
+-
+-    static void
+ PythonIO_Flush(void)
+ {
+-    if (old_fn && buffer_len)
++    if (old_fn != NULL && io_ga.ga_len > 0)
+     {
+-	buffer[buffer_len] = 0;
+-	old_fn(buffer);
++	((char_u *)io_ga.ga_data)[io_ga.ga_len] = NUL;
++	old_fn((char_u *)io_ga.ga_data);
+     }
+-
+-    buffer_len = 0;
++    io_ga.ga_len = 0;
+ }
+ 
+     static void
+@@ -175,30 +143,34 @@
+ {
+     char_u *ptr;
+ 
+-    if (fn != old_fn && old_fn != NULL)
++    /* Flush when switching output function. */
++    if (fn != old_fn)
+ 	PythonIO_Flush();
+-
+     old_fn = fn;
+ 
++    /* Write each NL separated line.  Text after the last NL is kept for
++     * writing later. */
+     while (n > 0 && (ptr = memchr(str, '\n', n)) != NULL)
+     {
+ 	PyInt len = ptr - str;
+ 
+-	buffer_ensure(buffer_len + len + 1);
++	if (ga_grow(&io_ga, (int)(len + 1)) == FAIL)
++	    break;
+ 
+-	memcpy(buffer + buffer_len, str, len);
+-	buffer_len += len;
+-	buffer[buffer_len] = 0;
+-	fn(buffer);
++	mch_memmove(((char *)io_ga.ga_data) + io_ga.ga_len, str, (size_t)len);
++	((char *)io_ga.ga_data)[io_ga.ga_len + len] = NUL;
++	fn((char_u *)io_ga.ga_data);
+ 	str = ptr + 1;
+ 	n -= len + 1;
+-	buffer_len = 0;
++	io_ga.ga_len = 0;
+     }
+ 
+-    /* Put the remaining text into the buffer for later printing */
+-    buffer_ensure(buffer_len + n + 1);
+-    memcpy(buffer + buffer_len, str, n);
+-    buffer_len += n;
++    /* Put the remaining text into io_ga for later printing. */
++    if (n > 0 && ga_grow(&io_ga, (int)(n + 1)) == OK)
++    {
++	mch_memmove(((char *)io_ga.ga_data) + io_ga.ga_len, str, (size_t)n);
++	io_ga.ga_len += (int)n;
++    }
+ }
+ 
+ /***************/
+diff -Naur vim73.orig/src/if_python.c vim73/src/if_python.c
+--- vim73.orig/src/if_python.c	2010-08-13 09:59:41.000000000 -0400
++++ vim73/src/if_python.c	2011-01-08 21:01:19.190656939 -0500
+@@ -102,7 +102,7 @@
+ #  include <dlfcn.h>
+ #  define FARPROC void*
+ #  define HINSTANCE void*
+-#  ifdef PY_NO_RTLD_GLOBAL
++#  if defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)
+ #   define load_dll(n) dlopen((n), RTLD_LAZY)
+ #  else
+ #   define load_dll(n) dlopen((n), RTLD_LAZY|RTLD_GLOBAL)
+@@ -110,7 +110,7 @@
+ #  define close_dll dlclose
+ #  define symbol_from_dll dlsym
+ # else
+-#  define load_dll LoadLibrary
++#  define load_dll vimLoadLib
+ #  define close_dll FreeLibrary
+ #  define symbol_from_dll GetProcAddress
+ # endif
+@@ -168,6 +168,7 @@
+ # define Py_BuildValue dll_Py_BuildValue
+ # define Py_FindMethod dll_Py_FindMethod
+ # define Py_InitModule4 dll_Py_InitModule4
++# define Py_SetPythonHome dll_Py_SetPythonHome
+ # define Py_Initialize dll_Py_Initialize
+ # define Py_Finalize dll_Py_Finalize
+ # define Py_IsInitialized dll_Py_IsInitialized
+@@ -226,6 +227,7 @@
+ static PyObject*(*dll_Py_BuildValue)(char *, ...);
+ static PyObject*(*dll_Py_FindMethod)(struct PyMethodDef[], PyObject *, char *);
+ static PyObject*(*dll_Py_InitModule4)(char *, struct PyMethodDef *, char *, PyObject *, int);
++static void(*dll_Py_SetPythonHome)(char *home);
+ static void(*dll_Py_Initialize)(void);
+ static void(*dll_Py_Finalize)(void);
+ static int(*dll_Py_IsInitialized)(void);
+@@ -310,6 +312,7 @@
+ # else
+     {"Py_InitModule4", (PYTHON_PROC*)&dll_Py_InitModule4},
+ # endif
++    {"Py_SetPythonHome", (PYTHON_PROC*)&dll_Py_SetPythonHome},
+     {"Py_Initialize", (PYTHON_PROC*)&dll_Py_Initialize},
+     {"Py_Finalize", (PYTHON_PROC*)&dll_Py_Finalize},
+     {"Py_IsInitialized", (PYTHON_PROC*)&dll_Py_IsInitialized},
+@@ -349,7 +352,7 @@
+ {
+     int i;
+ 
+-#if !defined(PY_NO_RTLD_GLOBAL) && defined(UNIX) && defined(FEAT_PYTHON3)
++#if !(defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)) && defined(UNIX) && defined(FEAT_PYTHON3)
+     /* Can't have Python and Python3 loaded at the same time.
+      * It cause a crash, because RTLD_GLOBAL is needed for
+      * standard C extension libraries of one or both python versions. */
+@@ -543,6 +546,10 @@
+ 	}
+ #endif
+ 
++#ifdef PYTHON_HOME
++	Py_SetPythonHome(PYTHON_HOME);
++#endif
++
+ 	init_structs();
+ 
+ #if !defined(MACOS) || defined(MACOS_X_UNIX)
+diff -Naur vim73.orig/src/if_python3.c vim73/src/if_python3.c
+--- vim73.orig/src/if_python3.c	2010-08-13 09:59:40.000000000 -0400
++++ vim73/src/if_python3.c	2011-01-08 21:01:19.190656939 -0500
+@@ -80,7 +80,7 @@
+ #  include <dlfcn.h>
+ #  define FARPROC void*
+ #  define HINSTANCE void*
+-#  ifdef PY_NO_RTLD_GLOBAL
++#  if defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)
+ #   define load_dll(n) dlopen((n), RTLD_LAZY)
+ #  else
+ #   define load_dll(n) dlopen((n), RTLD_LAZY|RTLD_GLOBAL)
+@@ -88,7 +88,7 @@
+ #  define close_dll dlclose
+ #  define symbol_from_dll dlsym
+ # else
+-#  define load_dll LoadLibrary
++#  define load_dll vimLoadLib
+ #  define close_dll FreeLibrary
+ #  define symbol_from_dll GetProcAddress
+ # endif
+@@ -132,6 +132,7 @@
+ # define PyType_Ready py3_PyType_Ready
+ #undef Py_BuildValue
+ # define Py_BuildValue py3_Py_BuildValue
++# define Py_SetPythonHome py3_Py_SetPythonHome
+ # define Py_Initialize py3_Py_Initialize
+ # define Py_Finalize py3_Py_Finalize
+ # define Py_IsInitialized py3_Py_IsInitialized
+@@ -170,6 +171,7 @@
+  * Pointers for dynamic link
+  */
+ static int (*py3_PySys_SetArgv)(int, wchar_t **);
++static void (*py3_Py_SetPythonHome)(wchar_t *home);
+ static void (*py3_Py_Initialize)(void);
+ static PyObject* (*py3_PyList_New)(Py_ssize_t size);
+ static PyGILState_STATE (*py3_PyGILState_Ensure)(void);
+@@ -254,6 +256,7 @@
+ } py3_funcname_table[] =
+ {
+     {"PySys_SetArgv", (PYTHON_PROC*)&py3_PySys_SetArgv},
++    {"Py_SetPythonHome", (PYTHON_PROC*)&py3_Py_SetPythonHome},
+     {"Py_Initialize", (PYTHON_PROC*)&py3_Py_Initialize},
+     {"PyArg_ParseTuple", (PYTHON_PROC*)&py3_PyArg_ParseTuple},
+     {"PyList_New", (PYTHON_PROC*)&py3_PyList_New},
+@@ -336,7 +339,7 @@
+     int i;
+     void *ucs_from_string, *ucs_from_string_and_size;
+ 
+-# if !defined(PY_NO_RTLD_GLOBAL) && defined(UNIX) && defined(FEAT_PYTHON)
++# if !(defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)) && defined(UNIX) && defined(FEAT_PYTHON)
+     /* Can't have Python and Python3 loaded at the same time.
+      * It cause a crash, because RTLD_GLOBAL is needed for
+      * standard C extension libraries of one or both python versions. */
+@@ -539,6 +542,11 @@
+ 
+ 	init_structs();
+ 
++
++#ifdef PYTHON3_HOME
++	Py_SetPythonHome(PYTHON3_HOME);
++#endif
++
+ 	/* initialise threads */
+ 	PyEval_InitThreads();
+ 
+diff -Naur vim73.orig/src/if_ruby.c vim73/src/if_ruby.c
+--- vim73.orig/src/if_ruby.c	2010-06-30 15:33:12.000000000 -0400
++++ vim73/src/if_ruby.c	2011-01-08 21:01:19.442657935 -0500
+@@ -4,6 +4,7 @@
+  *
+  * Ruby interface by Shugo Maeda
+  *   with improvements by SegPhault (Ryan Paul)
++ *   with improvements by Jon Maken
+  *
+  * Do ":help uganda"  in Vim to read copying and usage conditions.
+  * Do ":help credits" in Vim to see a list of people who contributed.
+@@ -13,6 +14,10 @@
+ #include <stdio.h>
+ #include <string.h>
+ 
++#ifdef HAVE_CONFIG_H
++# include "auto/config.h"
++#endif
++
+ #ifdef _WIN32
+ # if !defined(DYNAMIC_RUBY_VER) || (DYNAMIC_RUBY_VER < 18)
+ #   define NT
+@@ -26,12 +31,12 @@
+ # define RUBYEXTERN extern
+ #endif
+ 
++#ifdef DYNAMIC_RUBY
+ /*
+  * This is tricky.  In ruby.h there is (inline) function rb_class_of()
+  * definition.  This function use these variables.  But we want function to
+  * use dll_* variables.
+  */
+-#ifdef DYNAMIC_RUBY
+ # define rb_cFalseClass		(*dll_rb_cFalseClass)
+ # define rb_cFixnum		(*dll_rb_cFixnum)
+ # define rb_cNilClass		(*dll_rb_cNilClass)
+@@ -46,8 +51,23 @@
+  */
+ #  define RUBY_EXPORT
+ # endif
++
++#if !(defined(WIN32) || defined(_WIN64))
++# include <dlfcn.h>
++# define HINSTANCE void*
++# define RUBY_PROC void*
++# define load_dll(n) dlopen((n), RTLD_LAZY|RTLD_GLOBAL)
++# define symbol_from_dll dlsym
++# define close_dll dlclose
++#else
++# define RUBY_PROC FARPROC
++# define load_dll vimLoadLib
++# define symbol_from_dll GetProcAddress
++# define close_dll FreeLibrary
+ #endif
+ 
++#endif  /* ifdef DYNAMIC_RUBY */
++
+ /* suggested by Ariya Mizutani */
+ #if (_MSC_VER == 1200)
+ # undef _WIN32_WINNT
+@@ -70,6 +90,7 @@
+ # include <ruby/encoding.h>
+ #endif
+ 
++#undef off_t	/* ruby defines off_t as _int64, Mingw uses long */
+ #undef EXTERN
+ #undef _
+ 
+@@ -160,28 +181,35 @@
+ #define rb_lastline_get			dll_rb_lastline_get
+ #define rb_lastline_set			dll_rb_lastline_set
+ #define rb_load_protect			dll_rb_load_protect
++#ifndef RUBY19_OR_LATER
+ #define rb_num2long			dll_rb_num2long
++#endif
+ #define rb_num2ulong			dll_rb_num2ulong
+ #define rb_obj_alloc			dll_rb_obj_alloc
+ #define rb_obj_as_string		dll_rb_obj_as_string
+ #define rb_obj_id			dll_rb_obj_id
+ #define rb_raise			dll_rb_raise
+-#define rb_str2cstr			dll_rb_str2cstr
+ #define rb_str_cat			dll_rb_str_cat
+ #define rb_str_concat			dll_rb_str_concat
+ #define rb_str_new			dll_rb_str_new
+ #ifdef rb_str_new2
+ /* Ruby may #define rb_str_new2 to use rb_str_new_cstr. */
+ # define need_rb_str_new_cstr 1
++/* Ruby's headers #define rb_str_new_cstr to make use of GCC's
++ * __builtin_constant_p extension. */
++# undef rb_str_new_cstr
+ # define rb_str_new_cstr		dll_rb_str_new_cstr
+ #else
+ # define rb_str_new2			dll_rb_str_new2
+ #endif
+ #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
++# define rb_string_value		dll_rb_string_value
+ # define rb_string_value_ptr		dll_rb_string_value_ptr
+ # define rb_float_new			dll_rb_float_new
+ # define rb_ary_new			dll_rb_ary_new
+ # define rb_ary_push			dll_rb_ary_push
++#else
++# define rb_str2cstr			dll_rb_str2cstr
+ #endif
+ #ifdef RUBY19_OR_LATER
+ # define rb_errinfo			dll_rb_errinfo
+@@ -190,9 +218,11 @@
+ #endif
+ #define ruby_init			dll_ruby_init
+ #define ruby_init_loadpath		dll_ruby_init_loadpath
+-#define NtInitialize			dll_NtInitialize
+-#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
+-# define rb_w32_snprintf		dll_rb_w32_snprintf
++#ifdef WIN3264
++# define NtInitialize			dll_NtInitialize
++# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
++#  define rb_w32_snprintf		dll_rb_w32_snprintf
++# endif
+ #endif
+ 
+ #ifdef RUBY19_OR_LATER
+@@ -201,7 +231,9 @@
+ # define rb_enc_find			dll_rb_enc_find
+ # define rb_enc_str_new			dll_rb_enc_str_new
+ # define rb_sprintf			dll_rb_sprintf
++# define rb_require			dll_rb_require
+ # define ruby_init_stack		dll_ruby_init_stack
++# define ruby_process_options		dll_ruby_process_options
+ #endif
+ 
+ /*
+@@ -246,7 +278,11 @@
+ static VALUE (*dll_rb_obj_as_string) (VALUE);
+ static VALUE (*dll_rb_obj_id) (VALUE);
+ static void (*dll_rb_raise) (VALUE, const char*, ...);
++#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
++static VALUE (*dll_rb_string_value) (volatile VALUE*);
++#else
+ static char *(*dll_rb_str2cstr) (VALUE,int*);
++#endif
+ static VALUE (*dll_rb_str_cat) (VALUE, const char*, long);
+ static VALUE (*dll_rb_str_concat) (VALUE, VALUE);
+ static VALUE (*dll_rb_str_new) (const char*, long);
+@@ -263,7 +299,12 @@
+ #endif
+ static void (*dll_ruby_init) (void);
+ static void (*dll_ruby_init_loadpath) (void);
++#ifdef WIN3264
+ static void (*dll_NtInitialize) (int*, char***);
++# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
++static int (*dll_rb_w32_snprintf)(char*, size_t, const char*, ...);
++# endif
++#endif
+ #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
+ static char * (*dll_rb_string_value_ptr) (volatile VALUE*);
+ static VALUE (*dll_rb_float_new) (double);
+@@ -273,9 +314,6 @@
+ #ifdef RUBY19_OR_LATER
+ static VALUE (*dll_rb_int2big)(SIGNED_VALUE);
+ #endif
+-#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
+-static int (*dll_rb_w32_snprintf)(char*, size_t, const char*, ...);
+-#endif
+ 
+ #ifdef RUBY19_OR_LATER
+ static void (*dll_ruby_script) (const char*);
+@@ -283,7 +321,9 @@
+ static rb_encoding* (*dll_rb_enc_find) (const char*);
+ static VALUE (*dll_rb_enc_str_new) (const char*, long, rb_encoding*);
+ static VALUE (*dll_rb_sprintf) (const char*, ...);
++static VALUE (*dll_rb_require) (const char*);
+ static void (*ruby_init_stack)(VALUE*);
++static void* (*ruby_process_options)(int, char**);
+ #endif
+ 
+ #ifdef RUBY19_OR_LATER
+@@ -297,12 +337,11 @@
+ }
+ #endif
+ 
+-static HINSTANCE hinstRuby = 0; /* Instance of ruby.dll */
++static HINSTANCE hinstRuby = NULL; /* Instance of ruby.dll */
+ 
+ /*
+  * Table of name to function pointer of ruby.
+  */
+-#define RUBY_PROC FARPROC
+ static struct
+ {
+     char *name;
+@@ -347,7 +386,11 @@
+     {"rb_obj_as_string", (RUBY_PROC*)&dll_rb_obj_as_string},
+     {"rb_obj_id", (RUBY_PROC*)&dll_rb_obj_id},
+     {"rb_raise", (RUBY_PROC*)&dll_rb_raise},
++#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
++    {"rb_string_value", (RUBY_PROC*)&dll_rb_string_value},
++#else
+     {"rb_str2cstr", (RUBY_PROC*)&dll_rb_str2cstr},
++#endif
+     {"rb_str_cat", (RUBY_PROC*)&dll_rb_str_cat},
+     {"rb_str_concat", (RUBY_PROC*)&dll_rb_str_concat},
+     {"rb_str_new", (RUBY_PROC*)&dll_rb_str_new},
+@@ -363,15 +406,17 @@
+ #endif
+     {"ruby_init", (RUBY_PROC*)&dll_ruby_init},
+     {"ruby_init_loadpath", (RUBY_PROC*)&dll_ruby_init_loadpath},
++#ifdef WIN3264
+     {
+-#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER < 19
++# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER < 19
+     "NtInitialize",
+-#else
++# else
+     "ruby_sysinit",
+-#endif
++# endif
+ 			(RUBY_PROC*)&dll_NtInitialize},
+-#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
++# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
+     {"rb_w32_snprintf", (RUBY_PROC*)&dll_rb_w32_snprintf},
++# endif
+ #endif
+ #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
+     {"rb_string_value_ptr", (RUBY_PROC*)&dll_rb_string_value_ptr},
+@@ -386,7 +431,9 @@
+     {"rb_enc_find", (RUBY_PROC*)&dll_rb_enc_find},
+     {"rb_enc_str_new", (RUBY_PROC*)&dll_rb_enc_str_new},
+     {"rb_sprintf", (RUBY_PROC*)&dll_rb_sprintf},
++    {"rb_require", (RUBY_PROC*)&dll_rb_require},
+     {"ruby_init_stack", (RUBY_PROC*)&dll_ruby_init_stack},
++    {"ruby_process_options", (RUBY_PROC*)&dll_ruby_process_options},
+ #endif
+     {"", NULL},
+ };
+@@ -399,8 +446,8 @@
+ {
+     if (hinstRuby)
+     {
+-	FreeLibrary(hinstRuby);
+-	hinstRuby = 0;
++	close_dll(hinstRuby);
++	hinstRuby = NULL;
+     }
+ }
+ 
+@@ -416,7 +463,7 @@
+ 
+     if (hinstRuby)
+ 	return OK;
+-    hinstRuby = LoadLibrary(libname);
++    hinstRuby = load_dll(libname);
+     if (!hinstRuby)
+     {
+ 	if (verbose)
+@@ -426,11 +473,11 @@
+ 
+     for (i = 0; ruby_funcname_table[i].ptr; ++i)
+     {
+-	if (!(*ruby_funcname_table[i].ptr = GetProcAddress(hinstRuby,
++	if (!(*ruby_funcname_table[i].ptr = symbol_from_dll(hinstRuby,
+ 			ruby_funcname_table[i].name)))
+ 	{
+-	    FreeLibrary(hinstRuby);
+-	    hinstRuby = 0;
++	    close_dll(hinstRuby);
++	    hinstRuby = NULL;
+ 	    if (verbose)
+ 		EMSG2(_(e_loadfunc), ruby_funcname_table[i].name);
+ 	    return FAIL;
+@@ -539,9 +586,9 @@
+ 	if (u_save(eap->line1 - 1, eap->line2 + 1) != OK)
+ 	    return;
+ 	for (i = eap->line1; i <= eap->line2; i++) {
+-	    VALUE line, oldline;
++	    VALUE line;
+ 
+-	    line = oldline = vim_str2rb_enc_str((char *)ml_get(i));
++	    line = vim_str2rb_enc_str((char *)ml_get(i));
+ 	    rb_lastline_set(line);
+ 	    eval_enc_string_protect((char *) eap->arg, &state);
+ 	    if (state) {
+@@ -616,13 +663,16 @@
+ 		ruby_init();
+ 	    }
+ #ifdef RUBY19_OR_LATER
++	    {
++		int dummy_argc = 2;
++		char *dummy_argv[] = {"vim-ruby", "-e0"};
++		ruby_process_options(dummy_argc, dummy_argv);
++	    }
+ 	    ruby_script("vim-ruby");
+-#endif
++#else
+ 	    ruby_init_loadpath();
+-	    ruby_io_init();
+-#ifdef RUBY19_OR_LATER
+-	    rb_enc_find_index("encdb");
+ #endif
++	    ruby_io_init();
+ 	    ruby_vim_init();
+ 	    ruby_initialized = 1;
+ #ifdef DYNAMIC_RUBY
+@@ -906,15 +956,9 @@
+ 
+ static VALUE get_buffer_line(buf_T *buf, linenr_T n)
+ {
+-    if (n > 0 && n <= buf->b_ml.ml_line_count)
+-    {
+-	char *line = (char *)ml_get_buf(buf, n, FALSE);
+-	return line ? vim_str2rb_enc_str(line) : Qnil;
+-    }
+-    rb_raise(rb_eIndexError, "line number %ld out of range", (long)n);
+-#ifndef __GNUC__
+-    return Qnil; /* For stop warning */
+-#endif
++    if (n <= 0 || n > buf->b_ml.ml_line_count)
++	rb_raise(rb_eIndexError, "line number %ld out of range", (long)n);
++    return vim_str2rb_enc_str((char *)ml_get_buf(buf, n, FALSE));
+ }
+ 
+ static VALUE buffer_aref(VALUE self, VALUE num)
+@@ -953,9 +997,6 @@
+     else
+     {
+ 	rb_raise(rb_eIndexError, "line number %ld out of range", (long)n);
+-#ifndef __GNUC__
+-	return Qnil; /* For stop warning */
+-#endif
+     }
+     return str;
+ }
+@@ -1010,7 +1051,8 @@
+     long	n = NUM2LONG(num);
+     aco_save_T	aco;
+ 
+-    if (line == NULL) {
++    if (line == NULL)
++    {
+ 	rb_raise(rb_eIndexError, "NULL line");
+     }
+     else if (n >= 0 && n <= buf->b_ml.ml_line_count)
+@@ -1034,7 +1076,8 @@
+ 
+ 	update_curbuf(NOT_VALID);
+     }
+-    else {
++    else
++    {
+ 	rb_raise(rb_eIndexError, "line number %ld out of range", n);
+     }
+     return str;
+diff -Naur vim73.orig/src/if_sniff.c vim73/src/if_sniff.c
+--- vim73.orig/src/if_sniff.c	2010-05-15 07:04:06.000000000 -0400
++++ vim73/src/if_sniff.c	2011-01-08 21:01:19.378657342 -0500
+@@ -9,7 +9,6 @@
+ 
+ #ifdef WIN32
+ # include <stdio.h>
+-# include "vimio.h"
+ # include <process.h>
+ # include <string.h>
+ # include <assert.h>
+diff -Naur vim73.orig/src/if_tcl.c vim73/src/if_tcl.c
+--- vim73.orig/src/if_tcl.c	2010-08-08 09:07:25.000000000 -0400
++++ vim73/src/if_tcl.c	2011-01-08 21:01:19.434656677 -0500
+@@ -74,7 +74,6 @@
+ #endif
+ 
+ #include <tcl.h>
+-#include <errno.h>
+ #include <string.h>
+ 
+ typedef struct
+diff -Naur vim73.orig/src/integration.c vim73/src/integration.c
+--- vim73.orig/src/integration.c	2010-08-08 09:09:21.000000000 -0400
++++ vim73/src/integration.c	2011-01-08 21:01:19.434656677 -0500
+@@ -33,7 +33,6 @@
+ #include <sys/un.h>
+ #endif
+ 
+-#include <errno.h>
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ #include <sys/param.h>
+diff -Naur vim73.orig/src/link.sh vim73/src/link.sh
+--- vim73.orig/src/link.sh	2010-07-21 15:43:29.000000000 -0400
++++ vim73/src/link.sh	2011-01-08 21:01:19.122658259 -0500
+@@ -5,7 +5,7 @@
+ # libraries when they exist, but this doesn't mean they are needed for Vim.
+ #
+ #      Author: Bram Moolenaar
+-# Last change: 2006 Sep 26
++# Last change: 2010 Nov 03
+ #     License: Public domain
+ #
+ # Warning: This fails miserably if the linker doesn't return an error code!
+@@ -16,11 +16,23 @@
+ echo "$LINK " >link.cmd
+ exit_value=0
+ 
++if test "$LINK_AS_NEEDED" = yes; then
++  echo "link.sh: \$LINK_AS_NEEDED set to 'yes': invoking linker directly."
++  cat link.cmd
++  if sh link.cmd; then
++    exit_value=0
++    echo "link.sh: Linked fine"
++  else
++    exit_value=$?
++    echo "link.sh: Linking failed"
++  fi
++else
++  if test -f auto/link.sed; then
++
+ #
+ # If auto/link.sed already exists, use it.  We assume a previous run of
+ # link.sh has found the correct set of libraries.
+ #
+-if test -f auto/link.sed; then
+   echo "link.sh: The file 'auto/link.sed' exists, which is going to be used now."
+   echo "link.sh: If linking fails, try deleting the auto/link.sed file."
+   echo "link.sh: If this fails too, try creating an empty auto/link.sed file."
+@@ -124,6 +136,8 @@
+   fi
+ fi
+ 
++fi
++
+ #
+ # cleanup
+ #
+diff -Naur vim73.orig/src/macros.h vim73/src/macros.h
+--- vim73.orig/src/macros.h	2010-07-17 15:41:21.000000000 -0400
++++ vim73/src/macros.h	2011-01-08 20:59:41.002656834 -0500
+@@ -285,3 +285,17 @@
+ #else
+ # define DO_AUTOCHDIR
+ #endif
++
++#if defined(FEAT_SCROLLBIND) && defined(FEAT_CURSORBIND)
++# define RESET_BINDING(wp)  (wp)->w_p_scb = FALSE; (wp)->w_p_crb = FALSE
++#else
++# if defined(FEAT_SCROLLBIND)
++#  define RESET_BINDING(wp)  (wp)->w_p_scb = FALSE
++# else
++#  if defined(FEAT_CURSORBIND)
++#   define RESET_BINDING(wp)  (wp)->w_p_crb = FALSE
++#  else
++#   define RESET_BINDING(wp)
++#  endif
++# endif
++#endif
+diff -Naur vim73.orig/src/main.c vim73/src/main.c
+--- vim73.orig/src/main.c	2010-08-08 09:09:55.000000000 -0400
++++ vim73/src/main.c	2011-01-08 21:01:19.378657342 -0500
+@@ -7,10 +7,6 @@
+  * See README.txt for an overview of the Vim source code.
+  */
+ 
+-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+-# include "vimio.h"		/* for close() and dup() */
+-#endif
+-
+ #define EXTERN
+ #include "vim.h"
+ 
+@@ -940,7 +936,7 @@
+     if (netbeansArg != NULL && strncmp("-nb", netbeansArg, 3) == 0)
+     {
+ # ifdef FEAT_GUI
+-#  if !defined(FEAT_GUI_MOTIF) && !defined(FEAT_GUI_GTK)  \
++#  if !defined(FEAT_GUI_X11) && !defined(FEAT_GUI_GTK)  \
+ 		&& !defined(FEAT_GUI_W32)
+ 	if (gui.in_use)
+ 	{
+@@ -3817,6 +3813,8 @@
+     /* Check if we have at least one argument. */
+     if (filec <= 0)
+ 	mainerr_arg_missing((char_u *)filev[-1]);
++
++    /* Temporarily cd to the current directory to handle relative file names. */
+     if (mch_dirname(cwd, MAXPATHL) != OK)
+ 	return NULL;
+     if ((p = vim_strsave_escaped_ext(cwd,
+@@ -3858,13 +3856,20 @@
+ 	ga_concat(&ga, p);
+ 	vim_free(p);
+     }
++    ga_concat(&ga, (char_u *)"|if exists('*inputrestore')|call inputrestore()|endif<CR>");
++
+     /* The :drop commands goes to Insert mode when 'insertmode' is set, use
+      * CTRL-\ CTRL-N again. */
+-    ga_concat(&ga, (char_u *)"|if exists('*inputrestore')|call inputrestore()|endif<CR>");
+-    ga_concat(&ga, (char_u *)"<C-\\><C-N>:cd -");
++    ga_concat(&ga, (char_u *)"<C-\\><C-N>");
++
++    /* Switch back to the correct current directory (prior to temporary path
++     * switch) unless 'autochdir' is set, in which case it will already be
++     * correct after the :drop command. */
++    ga_concat(&ga, (char_u *)":if !exists('+acd')||!&acd|cd -|endif<CR>");
++
+     if (sendReply)
+-	ga_concat(&ga, (char_u *)"<CR>:call SetupRemoteReplies()");
+-    ga_concat(&ga, (char_u *)"<CR>:");
++	ga_concat(&ga, (char_u *)":call SetupRemoteReplies()<CR>");
++    ga_concat(&ga, (char_u *)":");
+     if (inicmd != NULL)
+     {
+ 	/* Can't use <CR> after "inicmd", because an "startinsert" would cause
+diff -Naur vim73.orig/src/mbyte.c vim73/src/mbyte.c
+--- vim73.orig/src/mbyte.c	2010-07-18 09:05:44.000000000 -0400
++++ vim73/src/mbyte.c	2011-01-08 21:01:19.006657043 -0500
+@@ -3124,6 +3124,9 @@
+ 		/* If one of the two characters is incomplete return -1. */
+ 		if (incomplete || i + utf_byte2len(s2[i]) > n)
+ 		    return -1;
++		/* Don't case-fold illegal bytes or truncated characters. */
++		if (utf_ptr2len(s1 + i) < l || utf_ptr2len(s2 + i) < l)
++		    return -1;
+ 		cdiff = utf_fold(utf_ptr2char(s1 + i))
+ 					     - utf_fold(utf_ptr2char(s2 + i));
+ 		if (cdiff != 0)
+@@ -4159,11 +4162,11 @@
+ {
+     if (hIconvDLL != 0 && hMsvcrtDLL != 0)
+ 	return TRUE;
+-    hIconvDLL = LoadLibrary(DYNAMIC_ICONV_DLL);
++    hIconvDLL = vimLoadLib(DYNAMIC_ICONV_DLL);
+     if (hIconvDLL == 0)		/* sometimes it's called libiconv.dll */
+-	hIconvDLL = LoadLibrary(DYNAMIC_ICONV_DLL_ALT);
++	hIconvDLL = vimLoadLib(DYNAMIC_ICONV_DLL_ALT);
+     if (hIconvDLL != 0)
+-	hMsvcrtDLL = LoadLibrary(DYNAMIC_MSVCRT_DLL);
++	hMsvcrtDLL = vimLoadLib(DYNAMIC_MSVCRT_DLL);
+     if (hIconvDLL == 0 || hMsvcrtDLL == 0)
+     {
+ 	/* Only give the message when 'verbose' is set, otherwise it might be
+@@ -5167,16 +5170,16 @@
+     void
+ xim_set_preedit()
+ {
+-    if (xic == NULL)
+-	return;
+-
+-    xim_set_focus(TRUE);
+-
+     XVaNestedList attr_list;
+     XRectangle spot_area;
+     XPoint over_spot;
+     int line_space;
+ 
++    if (xic == NULL)
++	return;
++
++    xim_set_focus(TRUE);
++
+     if (!xim_has_focus)
+     {
+ 	/* hide XIM cursor */
+@@ -5554,12 +5557,12 @@
+     void
+ xim_set_status_area()
+ {
+-    if (xic == NULL)
+-	return;
+-
+     XVaNestedList preedit_list = 0, status_list = 0, list = 0;
+     XRectangle pre_area, status_area;
+ 
++    if (xic == NULL)
++	return;
++
+     if (input_style & XIMStatusArea)
+     {
+ 	if (input_style & XIMPreeditArea)
+diff -Naur vim73.orig/src/memfile.c vim73/src/memfile.c
+--- vim73.orig/src/memfile.c	2010-06-20 22:59:57.000000000 -0400
++++ vim73/src/memfile.c	2011-01-08 21:01:19.378657342 -0500
+@@ -32,10 +32,6 @@
+  * file is opened.
+  */
+ 
+-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+-# include "vimio.h"	/* for lseek(), must be before vim.h */
+-#endif
+-
+ #include "vim.h"
+ 
+ /*
+@@ -1049,7 +1045,7 @@
+ 	PERROR(_("E294: Seek error in swap file read"));
+ 	return FAIL;
+     }
+-    if ((unsigned)vim_read(mfp->mf_fd, hp->bh_data, size) != size)
++    if ((unsigned)read_eintr(mfp->mf_fd, hp->bh_data, size) != size)
+     {
+ 	PERROR(_("E295: Read error in swap file"));
+ 	return FAIL;
+@@ -1168,7 +1164,7 @@
+     }
+ #endif
+ 
+-    if ((unsigned)vim_write(mfp->mf_fd, data, size) != size)
++    if ((unsigned)write_eintr(mfp->mf_fd, data, size) != size)
+ 	result = FAIL;
+ 
+ #ifdef FEAT_CRYPT
+diff -Naur vim73.orig/src/memline.c vim73/src/memline.c
+--- vim73.orig/src/memline.c	2010-08-08 09:11:46.000000000 -0400
++++ vim73/src/memline.c	2011-01-08 21:01:19.434656677 -0500
+@@ -42,10 +42,6 @@
+  *  mf_get().
+  */
+ 
+-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+-# include "vimio.h"	/* for mch_open(), must be before vim.h */
+-#endif
+-
+ #include "vim.h"
+ 
+ #ifndef UNIX		/* it's in os_unix.h for Unix */
+@@ -56,10 +52,6 @@
+ # include <proto/dos.h>	    /* for Open() and Close() */
+ #endif
+ 
+-#ifdef HAVE_ERRNO_H
+-# include <errno.h>
+-#endif
+-
+ typedef struct block0		ZERO_BL;    /* contents of the first block */
+ typedef struct pointer_block	PTR_BL;	    /* contents of a pointer block */
+ typedef struct data_block	DATA_BL;    /* contents of a data block */
+@@ -582,6 +574,9 @@
+ 	    idx = ip->ip_index + 1;	    /* go to next index */
+ 	    page_count = 1;
+ 	}
++
++	if (error > 0)
++	    EMSG(_("E843: Error while updating swap file crypt"));
+     }
+ 
+     mfp->mf_old_key = NULL;
+@@ -2059,7 +2054,7 @@
+     fd = mch_open((char *)fname, O_RDONLY | O_EXTRA, 0);
+     if (fd >= 0)
+     {
+-	if (read(fd, (char *)&b0, sizeof(b0)) == sizeof(b0))
++	if (read_eintr(fd, &b0, sizeof(b0)) == sizeof(b0))
+ 	{
+ 	    if (STRNCMP(b0.b0_version, "VIM 3.0", 7) == 0)
+ 	    {
+@@ -2384,7 +2379,7 @@
+  * Make a copy of the line if necessary.
+  */
+ /*
+- * get a pointer to a (read-only copy of a) line
++ * Return a pointer to a (read-only copy of a) line.
+  *
+  * On failure an error message is given and IObuff is returned (to avoid
+  * having to check for error everywhere).
+@@ -2397,7 +2392,7 @@
+ }
+ 
+ /*
+- * ml_get_pos: get pointer to position 'pos'
++ * Return pointer to position "pos".
+  */
+     char_u *
+ ml_get_pos(pos)
+@@ -2407,7 +2402,7 @@
+ }
+ 
+ /*
+- * ml_get_curline: get pointer to cursor line.
++ * Return pointer to cursor line.
+  */
+     char_u *
+ ml_get_curline()
+@@ -2416,7 +2411,7 @@
+ }
+ 
+ /*
+- * ml_get_cursor: get pointer to cursor position
++ * Return pointer to cursor position.
+  */
+     char_u *
+ ml_get_cursor()
+@@ -2426,7 +2421,7 @@
+ }
+ 
+ /*
+- * get a pointer to a line in a specific buffer
++ * Return a pointer to a line in a specific buffer
+  *
+  * "will_change": if TRUE mark the buffer dirty (chars in the line will be
+  * changed)
+@@ -4389,7 +4384,7 @@
+ 		fd = mch_open((char *)fname, O_RDONLY | O_EXTRA, 0);
+ 		if (fd >= 0)
+ 		{
+-		    if (read(fd, (char *)&b0, sizeof(b0)) == sizeof(b0))
++		    if (read_eintr(fd, &b0, sizeof(b0)) == sizeof(b0))
+ 		    {
+ 			/*
+ 			 * If the swapfile has the same directory as the
+diff -Naur vim73.orig/src/menu.c vim73/src/menu.c
+--- vim73.orig/src/menu.c	2010-07-14 10:49:01.000000000 -0400
++++ vim73/src/menu.c	2011-01-08 21:01:19.494656637 -0500
+@@ -1512,8 +1512,8 @@
+ {
+ #ifdef FEAT_MULTI_LANG
+     if (menu->en_name != NULL
+-	    && (menu_namecmp(name,menu->en_name)
+-		|| menu_namecmp(name,menu->en_dname)))
++	    && (menu_namecmp(name, menu->en_name)
++		|| menu_namecmp(name, menu->en_dname)))
+ 	return TRUE;
+ #endif
+     return menu_namecmp(name, menu->name) || menu_namecmp(name, menu->dname);
+@@ -2342,7 +2342,7 @@
+ 
+ 	while (menu != NULL)
+ 	{
+-	    if (STRCMP(name, menu->name) == 0 || STRCMP(name, menu->dname) == 0)
++	    if (menu_name_equal(name, menu))
+ 	    {
+ 		if (menu->children == NULL)
+ 		{
+diff -Naur vim73.orig/src/message.c vim73/src/message.c
+--- vim73.orig/src/message.c	2010-08-04 14:10:02.000000000 -0400
++++ vim73/src/message.c	2011-01-08 21:01:19.510657932 -0500
+@@ -569,6 +569,10 @@
+     int		severe;
+ #endif
+ 
++    /* Skip this if not giving error messages at the moment. */
++    if (emsg_not_now())
++	return TRUE;
++
+     called_emsg = TRUE;
+     ex_exitval = 1;
+ 
+@@ -581,10 +585,6 @@
+     emsg_severe = FALSE;
+ #endif
+ 
+-    /* Skip this if not giving error messages at the moment. */
+-    if (emsg_not_now())
+-	return TRUE;
+-
+     if (!emsg_off || vim_strchr(p_debug, 't') != NULL)
+     {
+ #ifdef FEAT_EVAL
+@@ -1477,6 +1477,27 @@
+     return retval;
+ }
+ 
++#if defined(FEAT_EVAL) || defined(PROTO)
++/*
++ * Return the lhs or rhs of a mapping, with the key codes turned into printable
++ * strings, in an allocated string.
++ */
++    char_u *
++str2special_save(str, is_lhs)
++    char_u  *str;
++    int	    is_lhs;  /* TRUE for lhs, FALSE for rhs */
++{
++    garray_T	ga;
++    char_u	*p = str;
++
++    ga_init2(&ga, 1, 40);
++    while (*p != NUL)
++	ga_concat(&ga, str2special(&p, is_lhs));
++    ga_append(&ga, NUL);
++    return (char_u *)ga.ga_data;
++}
++#endif
++
+ /*
+  * Return the printable string for the key codes at "*sp".
+  * Used for translating the lhs or rhs of a mapping to printable chars.
+diff -Naur vim73.orig/src/misc1.c vim73/src/misc1.c
+--- vim73.orig/src/misc1.c	2010-08-15 07:24:05.000000000 -0400
++++ vim73/src/misc1.c	2011-01-08 21:01:19.466658112 -0500
+@@ -3114,10 +3114,11 @@
+ 	       && (!p_ttimeout || waited * 100L < (p_ttm < 0 ? p_tm : p_ttm)))
+ 	    continue;
+ 
+-	/* found a termcode: adjust length */
+-	if (n > 0)
++	if (n == KEYLEN_REMOVED)  /* key code removed */
++	    continue;
++	if (n > 0)		/* found a termcode: adjust length */
+ 	    len = n;
+-	if (len == 0)	    /* nothing typed yet */
++	if (len == 0)		/* nothing typed yet */
+ 	    continue;
+ 
+ 	/* Handle modifier and/or special key code. */
+@@ -9161,7 +9162,10 @@
+ #ifdef CASE_INSENSITIVE_FILENAME
+     regmatch.rm_ic = TRUE;		/* Behave like Terminal.app */
+ #else
+-    regmatch.rm_ic = FALSE;		/* Don't ever ignore case */
++    if (flags & EW_ICASE)
++	regmatch.rm_ic = TRUE;		/* 'wildignorecase' set */
++    else
++	regmatch.rm_ic = FALSE;		/* Don't ignore case */
+ #endif
+     regmatch.regprog = vim_regcomp(pat, RE_MAGIC);
+     vim_free(pat);
+@@ -9317,7 +9321,8 @@
+ 	    continue;  /* it's different when it's shorter */
+ 
+ 	rival = other_paths[j] + other_path_len - candidate_len;
+-	if (fnamecmp(maybe_unique, rival) == 0)
++	if (fnamecmp(maybe_unique, rival) == 0
++		&& (rival == other_paths[j] || vim_ispathsep(*(rival - 1))))
+ 	    return FALSE;  /* match */
+     }
+ 
+@@ -9642,7 +9647,7 @@
+     if (paths == NULL)
+ 	return 0;
+ 
+-    files = globpath(paths, pattern, 0);
++    files = globpath(paths, pattern, (flags & EW_ICASE) ? WILD_ICASE : 0);
+     vim_free(paths);
+     if (files == NULL)
+ 	return 0;
+diff -Naur vim73.orig/src/misc2.c vim73/src/misc2.c
+--- vim73.orig/src/misc2.c	2010-08-13 05:14:35.000000000 -0400
++++ vim73/src/misc2.c	2011-01-08 21:01:19.302660568 -0500
+@@ -200,7 +200,6 @@
+ 	}
+ #endif
+ 
+-	idx = -1;
+ 	ptr = line;
+ 	while (col <= wcol && *ptr != NUL)
+ 	{
+@@ -1223,7 +1222,7 @@
+ #endif
+ 
+ /*
+- * copy a string into newly allocated memory
++ * Copy "string" into newly allocated memory.
+  */
+     char_u *
+ vim_strsave(string)
+@@ -1239,6 +1238,12 @@
+     return p;
+ }
+ 
++/*
++ * Copy up to "len" bytes of "string" into newly allocated memory and
++ * terminate with a NUL.
++ * The allocated memory always has size "len + 1", also when "string" is
++ * shorter.
++ */
+     char_u *
+ vim_strnsave(string, len)
+     char_u	*string;
+diff -Naur vim73.orig/src/netbeans.c vim73/src/netbeans.c
+--- vim73.orig/src/netbeans.c	2010-08-09 16:48:09.000000000 -0400
++++ vim73/src/netbeans.c	2011-01-08 21:01:19.498658408 -0500
+@@ -16,10 +16,6 @@
+  * See ":help netbeans-protocol" for explanation.
+  */
+ 
+-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+-# include "vimio.h"	/* for mch_open(), must be before vim.h */
+-#endif
+-
+ #include "vim.h"
+ 
+ #if defined(FEAT_NETBEANS_INTG) || defined(PROTO)
+@@ -87,7 +83,7 @@
+ static void nb_init_graphics __ARGS((void));
+ static void coloncmd __ARGS((char *cmd, ...));
+ static void nb_set_curbuf __ARGS((buf_T *buf));
+-#ifdef FEAT_GUI_MOTIF
++#ifdef FEAT_GUI_X11
+ static void messageFromNetbeans __ARGS((XtPointer, int *, XtInputId *));
+ #endif
+ #ifdef FEAT_GUI_GTK
+@@ -112,7 +108,7 @@
+ static NBSOCK nbsock = -1;		/* socket fd for Netbeans connection */
+ #define NETBEANS_OPEN (nbsock != -1)
+ 
+-#ifdef FEAT_GUI_MOTIF
++#ifdef FEAT_GUI_X11
+ static XtInputId inputHandler = (XtInputId)NULL;  /* Cookie for input */
+ #endif
+ #ifdef FEAT_GUI_GTK
+@@ -135,15 +131,13 @@
+ static int needupdate = 0;
+ static int inAtomic = 0;
+ 
++/*
++ * Close the socket and remove the input handlers.
++ */
+     static void
+-netbeans_close(void)
++nb_close_socket(void)
+ {
+-    if (!NETBEANS_OPEN)
+-	return;
+-
+-    netbeans_send_disconnect();
+-
+-#ifdef FEAT_GUI_MOTIF
++#ifdef FEAT_GUI_X11
+     if (inputHandler != (XtInputId)NULL)
+     {
+ 	XtRemoveInput(inputHandler);
+@@ -167,13 +161,27 @@
+ # endif
+ #endif
+ 
++    sock_close(nbsock);
++    nbsock = -1;
++}
++
++/*
++ * Close the connection and cleanup.
++ * May be called when nb_close_socket() was called earlier.
++ */
++    static void
++netbeans_close(void)
++{
++    if (NETBEANS_OPEN)
++    {
++	netbeans_send_disconnect();
++	nb_close_socket();
++    }
++
+ #ifdef FEAT_BEVAL
+     bevalServers &= ~BEVAL_NETBEANS;
+ #endif
+ 
+-    sock_close(nbsock);
+-    nbsock = -1;
+-
+     needupdate = 0;
+     inAtomic = 0;
+     nb_free();
+@@ -311,14 +319,9 @@
+     server.sin_port = htons(port);
+     if ((host = gethostbyname(hostname)) == NULL)
+     {
+-	if (mch_access(hostname, R_OK) >= 0)
+-	{
+-	    /* DEBUG: input file */
+-	    sd = mch_open(hostname, O_RDONLY, 0);
+-	    goto theend;
+-	}
+ 	nbdebug(("error in gethostbyname() in netbeans_connect()\n"));
+ 	PERROR("gethostbyname() in netbeans_connect()");
++	sock_close(sd);
+ 	goto theend;
+     }
+     memcpy((char *)&server.sin_addr, host->h_addr, host->h_length);
+@@ -368,15 +371,12 @@
+ 							 || (errno == EINTR)))
+ 		{
+ 		    nbdebug(("retrying...\n"));
+-		    sleep(5);
+-		    if (!doabort)
++		    mch_delay(3000L, TRUE);
++		    ui_breakcheck();
++		    if (got_int)
+ 		    {
+-			ui_breakcheck();
+-			if (got_int)
+-			{
+-			    errno = EINTR;
+-			    break;
+-			}
++			errno = EINTR;
++			break;
+ 		    }
+ 		    if (connect(sd, (struct sockaddr *)&server,
+ 							 sizeof(server)) == 0)
+@@ -391,6 +391,7 @@
+ 		    /* Get here when the server can't be found. */
+ 		    nbdebug(("Cannot connect to Netbeans #2\n"));
+ 		    PERROR(_("Cannot connect to Netbeans #2"));
++		    sock_close(sd);
+ 		    if (doabort)
+ 			getout(1);
+ 		    goto theend;
+@@ -401,6 +402,7 @@
+ 	{
+ 	    nbdebug(("Cannot connect to Netbeans\n"));
+ 	    PERROR(_("Cannot connect to Netbeans"));
++	    sock_close(sd);
+ 	    if (doabort)
+ 		getout(1);
+ 	    goto theend;
+@@ -631,9 +633,7 @@
+ {
+     char_u	*p;
+     queue_T	*node;
+-
+-    if (!NETBEANS_OPEN)
+-	return;
++    int		own_node;
+ 
+     while (head.next != NULL && head.next != &head)
+     {
+@@ -672,20 +672,25 @@
+ 	    *p++ = NUL;
+ 	    if (*p == NUL)
+ 	    {
++		own_node = TRUE;
+ 		head.next = node->next;
+ 		node->next->prev = node->prev;
+ 	    }
++	    else
++		own_node = FALSE;
+ 
+ 	    /* now, parse and execute the commands */
+ 	    nb_parse_cmd(node->buffer);
+ 
+-	    if (*p == NUL)
++	    if (own_node)
+ 	    {
+ 		/* buffer finished, dispose of the node and buffer */
+ 		vim_free(node->buffer);
+ 		vim_free(node);
+ 	    }
+-	    else
++	    /* Check that "head" wasn't changed under our fingers, e.g. when a
++	     * DETACH command was handled. */
++	    else if (head.next == node)
+ 	    {
+ 		/* more follows, move to the start */
+ 		STRMOVE(node->buffer, p);
+@@ -700,7 +705,7 @@
+ /*
+  * Read a command from netbeans.
+  */
+-#ifdef FEAT_GUI_MOTIF
++#ifdef FEAT_GUI_X11
+     static void
+ messageFromNetbeans(XtPointer clientData UNUSED,
+ 		    int *unused1 UNUSED,
+@@ -720,15 +725,14 @@
+ }
+ #endif
+ 
++#define DETACH_MSG "DETACH\n"
++
+     void
+ netbeans_read()
+ {
+     static char_u	*buf = NULL;
+     int			len = 0;
+     int			readlen = 0;
+-#if defined(NB_HAS_GUI) && !defined(FEAT_GUI_GTK) && !defined(FEAT_GUI_W32)
+-    static int		level = 0;
+-#endif
+ #ifdef HAVE_SELECT
+     struct timeval	tval;
+     fd_set		rfds;
+@@ -744,13 +748,6 @@
+ 	return;
+     }
+ 
+-#if defined(NB_HAS_GUI) && !defined(FEAT_GUI_GTK) && !defined(FEAT_GUI_W32)
+-    /* recursion guard; this will be called from the X event loop at unknown
+-     * moments */
+-    if (NB_HAS_GUI)
+-	++level;
+-#endif
+-
+     /* Allocate a buffer to read into. */
+     if (buf == NULL)
+     {
+@@ -790,34 +787,32 @@
+ 	    break;	/* did read everything that's available */
+     }
+ 
++    /* Reading a socket disconnection (readlen == 0), or a socket error. */
+     if (readlen <= 0)
+     {
+-	/* read error or didn't read anything */
+-	netbeans_close();
+-	nbdebug(("messageFromNetbeans: Error in read() from socket\n"));
++	/* Queue a "DETACH" netbeans message in the command queue in order to
++	 * terminate the netbeans session later. Do not end the session here
++	 * directly as we may be running in the context of a call to
++	 * netbeans_parse_messages():
++	 *	netbeans_parse_messages
++	 *	    -> autocmd triggered while processing the netbeans cmd
++	 *		-> ui_breakcheck
++	 *		    -> gui event loop or select loop
++	 *			-> netbeans_read()
++	 */
++	save((char_u *)DETACH_MSG, (int)strlen(DETACH_MSG));
++	nb_close_socket();
++
+ 	if (len < 0)
+ 	{
+ 	    nbdebug(("read from Netbeans socket\n"));
+ 	    PERROR(_("read from Netbeans socket"));
+ 	}
+-	return; /* don't try to parse it */
+     }
+ 
+-#if defined(NB_HAS_GUI) && !defined(FEAT_GUI_W32)
+-    /* Let the main loop handle messages. */
+-    if (NB_HAS_GUI)
+-    {
+-# ifdef FEAT_GUI_GTK
+-	if (gtk_main_level() > 0)
+-	    gtk_main_quit();
+-# else
+-	/* Parse the messages now, but avoid recursion. */
+-	if (level == 1)
+-	    netbeans_parse_messages();
+-
+-	--level;
+-# endif
+-    }
++#if defined(NB_HAS_GUI) && defined(FEAT_GUI_GTK)
++    if (NB_HAS_GUI && gtk_main_level() > 0)
++	gtk_main_quit();
+ #endif
+ }
+ 
+@@ -955,7 +950,6 @@
+     keyQ_T *key_node = keyHead.next;
+     queue_T *cmd_node = head.next;
+     nbbuf_T buf;
+-    buf_T *bufp;
+     int i;
+ 
+     /* free the netbeans buffer list */
+@@ -964,7 +958,7 @@
+ 	buf = buf_list[i];
+ 	vim_free(buf.displayname);
+ 	vim_free(buf.signmap);
+-	if ((bufp=buf.bufp) != NULL)
++	if (buf.bufp != NULL)
+ 	{
+ 	    buf.bufp->b_netbeans_file = FALSE;
+ 	    buf.bufp->b_was_netbeans_file = FALSE;
+@@ -1186,6 +1180,10 @@
+ 
+     nbdebug(("REP %d: <none>\n", cmdno));
+ 
++    /* Avoid printing an annoying error message. */
++    if (!NETBEANS_OPEN)
++	return;
++
+     sprintf(reply, "%d\n", cmdno);
+     nb_send(reply, "nb_reply_nil");
+ }
+@@ -2773,6 +2771,16 @@
+ ex_nbstart(eap)
+     exarg_T	*eap;
+ {
++#ifdef FEAT_GUI
++# if !defined(FEAT_GUI_X11) && !defined(FEAT_GUI_GTK)  \
++		&& !defined(FEAT_GUI_W32)
++    if (gui.in_use)
++    {
++	EMSG(_("E838: netbeans is not supported with this GUI"));
++	return;
++    }
++# endif
++#endif
+     netbeans_open((char *)eap->arg, FALSE);
+ }
+ 
+@@ -2937,7 +2945,7 @@
+     if (!NB_HAS_GUI || !NETBEANS_OPEN)
+ 	return;
+ 
+-# ifdef FEAT_GUI_MOTIF
++# ifdef FEAT_GUI_X11
+     /* tell notifier we are interested in being called
+      * when there is input on the editor connection socket
+      */
+@@ -3027,7 +3035,7 @@
+     }
+ }
+ 
+-#if defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_W32) || defined(PROTO)
++#if defined(FEAT_GUI_X11) || defined(FEAT_GUI_W32) || defined(PROTO)
+ /*
+  * Tell netbeans that the window was moved or resized.
+  */
+@@ -3458,7 +3466,7 @@
+     return FALSE;
+ }
+ 
+-#if defined(FEAT_GUI_MOTIF) || defined(PROTO)
++#if defined(FEAT_GUI_X11) || defined(PROTO)
+ /*
+  * We have multiple signs to draw at the same location. Draw the
+  * multi-sign indicator instead. This is the Motif version.
+@@ -3487,7 +3495,7 @@
+     XDrawPoint(gui.dpy, gui.wid, gui.text_gc, x+3, y++);
+     XDrawPoint(gui.dpy, gui.wid, gui.text_gc, x+2, y);
+ }
+-#endif /* FEAT_GUI_MOTIF */
++#endif /* FEAT_GUI_X11 */
+ 
+ #if defined(FEAT_GUI_GTK) && !defined(PROTO)
+ /*
+diff -Naur vim73.orig/src/normal.c vim73/src/normal.c
+--- vim73.orig/src/normal.c	2010-07-31 09:25:19.000000000 -0400
++++ vim73/src/normal.c	2011-01-08 21:01:19.390656741 -0500
+@@ -25,6 +25,9 @@
+ static int	restart_VIsual_select = 0;
+ #endif
+ 
++#ifdef FEAT_EVAL
++static void	set_vcount_ca __ARGS((cmdarg_T *cap, int *set_prevcount));
++#endif
+ static int
+ # ifdef __BORLANDC__
+ _RTLENTRYF
+@@ -648,6 +651,14 @@
+     dont_scroll = FALSE;	/* allow scrolling here */
+ #endif
+ 
++#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
++
+     /*
+      * Get the command character from the user.
+      */
+@@ -725,15 +736,7 @@
+ 	     * command, so that v:count can be used in an expression mapping
+ 	     * right after the count. */
+ 	    if (toplevel && stuff_empty())
+-	    {
+-		long count = ca.count0;
+-
+-		/* multiply with ca.opcount the same way as below */
+-		if (ca.opcount != 0)
+-		    count = ca.opcount * (count == 0 ? 1 : count);
+-		set_vcount(count, count == 0 ? 1 : count, set_prevcount);
+-		set_prevcount = FALSE;  /* only set v:prevcount once */
+-	    }
++		set_vcount_ca(&ca, &set_prevcount);
+ #endif
+ 	    if (ctrl_w)
+ 	    {
+@@ -1386,6 +1389,26 @@
+     opcount = ca.opcount;
+ }
+ 
++#ifdef FEAT_EVAL
++/*
++ * Set v:count and v:count1 according to "cap".
++ * Set v:prevcount only when "set_prevcount" is TRUE.
++ */
++    static void
++set_vcount_ca(cap, set_prevcount)
++    cmdarg_T	*cap;
++    int		*set_prevcount;
++{
++    long count = cap->count0;
++
++    /* multiply with cap->opcount the same way as above */
++    if (cap->opcount != 0)
++	count = cap->opcount * (count == 0 ? 1 : count);
++    set_vcount(count, count == 0 ? 1 : count, *set_prevcount);
++    *set_prevcount = FALSE;  /* only set v:prevcount once */
++}
++#endif
++
+ /*
+  * Handle an operator after visual mode or when the movement is finished
+  */
+@@ -5666,8 +5689,13 @@
+ 	else if (cmdchar == '#')
+ 	    aux_ptr = (char_u *)(p_magic ? "/?.*~[^$\\" : "/?^$\\");
+ 	else if (tag_cmd)
+-	    /* Don't escape spaces and Tabs in a tag with a backslash */
+-	    aux_ptr = (char_u *)"\\|\"\n[";
++	{
++	    if (curbuf->b_help)
++		/* ":help" handles unescaped argument */
++		aux_ptr = (char_u *)"";
++	    else
++		aux_ptr = (char_u *)"\\|\"\n[";
++	}
+ 	else
+ 	    aux_ptr = (char_u *)"\\|\"\n*?[";
+ 
+@@ -8524,7 +8552,7 @@
+     else
+ 	curwin->w_curswant = 0;
+     /* keep curswant at the column where we wanted to go, not where
+-       we ended; differs if line is too short */
++     * we ended; differs if line is too short */
+     curwin->w_set_curswant = FALSE;
+ }
+ 
+diff -Naur vim73.orig/src/ops.c vim73/src/ops.c
+--- vim73.orig/src/ops.c	2010-08-01 08:16:08.000000000 -0400
++++ vim73/src/ops.c	2011-01-08 21:01:19.314657721 -0500
+@@ -1584,9 +1584,11 @@
+ adjust_clip_reg(rp)
+     int		*rp;
+ {
+-    /* If no reg. specified, and "unnamed" is in 'clipboard', use '*' reg. */
+-    if (*rp == 0 && clip_unnamed)
+-	*rp = '*';
++    /* 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 == '+')
+@@ -2842,6 +2844,9 @@
+     char_u		*p;
+     char_u		*pnew;
+     struct block_def	bd;
++#if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
++    int			did_star = FALSE;
++#endif
+ 
+ 				    /* check for read-only register */
+     if (oap->regname != 0 && !valid_yank_reg(oap->regname, TRUE))
+@@ -3115,7 +3120,8 @@
+      */
+     if (clip_star.available
+ 	    && (curr == &(y_regs[STAR_REGISTER])
+-		|| (!deleting && oap->regname == 0 && clip_unnamed)))
++		|| (!deleting && oap->regname == 0
++					   && (clip_unnamed & CLIP_UNNAMED))))
+     {
+ 	if (curr != &(y_regs[STAR_REGISTER]))
+ 	    /* Copy the text from register 0 to the clipboard register. */
+@@ -3123,6 +3129,9 @@
+ 
+ 	clip_own_selection(&clip_star);
+ 	clip_gen_set_selection(&clip_star);
++# ifdef FEAT_X11
++	did_star = TRUE;
++# endif
+     }
+ 
+ # ifdef FEAT_X11
+@@ -3130,12 +3139,19 @@
+      * If we were yanking to the '+' register, send result to selection.
+      * Also copy to the '*' register, in case auto-select is off.
+      */
+-    else if (clip_plus.available && curr == &(y_regs[PLUS_REGISTER]))
++    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. */
++	    copy_yank_reg(&(y_regs[PLUS_REGISTER]));
++
+ 	/* No need to copy to * register upon 'unnamed' now - see below */
+ 	clip_own_selection(&clip_plus);
+ 	clip_gen_set_selection(&clip_plus);
+-	if (!clip_isautosel())
++	if (!clip_isautosel() && !did_star)
+ 	{
+ 	    copy_yank_reg(&(y_regs[STAR_REGISTER]));
+ 	    clip_own_selection(&clip_star);
+@@ -3979,7 +3995,12 @@
+     for (i = -1; i < NUM_REGISTERS && !got_int; ++i)
+     {
+ 	name = get_register_name(i);
+-	if (arg != NULL && vim_strchr(arg, name) == NULL)
++	if (arg != NULL && vim_strchr(arg, name) == NULL
++#ifdef ONE_CLIPBOARD
++	    /* Star register and plus register contain the same thing. */
++		&& (name != '*' || vim_strchr(arg, '+') == NULL)
++#endif
++		)
+ 	    continue;	    /* did not ask for this register */
+ 
+ #ifdef FEAT_CLIPBOARD
+@@ -4153,9 +4174,10 @@
+     int	    save_undo;
+ {
+     char_u	*curr = NULL;
++    char_u      *curr_start = NULL;
+     char_u	*cend;
+     char_u	*newp;
+-    char_u	*spaces;	/* number of spaces inserte before a line */
++    char_u	*spaces;	/* number of spaces inserted before a line */
+     int		endcurr1 = NUL;
+     int		endcurr2 = NUL;
+     int		currsize = 0;	/* size of the current line */
+@@ -4181,7 +4203,7 @@
+      */
+     for (t = 0; t < count; ++t)
+     {
+-	curr = ml_get((linenr_T)(curwin->w_cursor.lnum + t));
++	curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t));
+ 	if (insert_space && t > 0)
+ 	{
+ 	    curr = skipwhite(curr);
+@@ -4265,10 +4287,10 @@
+ 	    copy_spaces(cend, (size_t)(spaces[t]));
+ 	}
+ 	mark_col_adjust(curwin->w_cursor.lnum + t, (colnr_T)0, (linenr_T)-t,
+-				 (long)(cend - newp + spaces[t]));
++			 (long)(cend - newp + spaces[t] - (curr - curr_start)));
+ 	if (t == 0)
+ 	    break;
+-	curr = ml_get((linenr_T)(curwin->w_cursor.lnum + t - 1));
++	curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t - 1));
+ 	if (insert_space && t > 1)
+ 	    curr = skipwhite(curr);
+ 	currsize = (int)STRLEN(curr);
+diff -Naur vim73.orig/src/option.c vim73/src/option.c
+--- vim73.orig/src/option.c	2010-08-04 14:49:18.000000000 -0400
++++ vim73/src/option.c	2011-01-08 21:01:19.282656400 -0500
+@@ -2740,7 +2740,7 @@
+ 			    (char_u *)&p_wc, PV_NONE,
+ 			    {(char_u *)(long)Ctrl_E, (char_u *)(long)TAB}
+ 			    SCRIPTID_INIT},
+-    {"wildcharm",   "wcm",   P_NUM|P_VI_DEF,
++    {"wildcharm",   "wcm",  P_NUM|P_VI_DEF,
+ 			    (char_u *)&p_wcm, PV_NONE,
+ 			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+     {"wildignore",  "wig",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
+@@ -2750,6 +2750,9 @@
+ 			    (char_u *)NULL, PV_NONE,
+ #endif
+ 			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
++    {"wildignorecase", "wic", P_BOOL|P_VI_DEF,
++			    (char_u *)&p_wic, PV_NONE,
++			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+     {"wildmenu",    "wmnu", P_BOOL|P_VI_DEF,
+ #ifdef FEAT_WILDMENU
+ 			    (char_u *)&p_wmnu, PV_NONE,
+@@ -7304,7 +7307,7 @@
+     static char_u *
+ check_clipboard_option()
+ {
+-    int		new_unnamed = FALSE;
++    int		new_unnamed = 0;
+     int		new_autoselect = FALSE;
+     int		new_autoselectml = FALSE;
+     int		new_html = FALSE;
+@@ -7316,9 +7319,15 @@
+     {
+ 	if (STRNCMP(p, "unnamed", 7) == 0 && (p[7] == ',' || p[7] == NUL))
+ 	{
+-	    new_unnamed = TRUE;
++	    new_unnamed |= CLIP_UNNAMED;
+ 	    p += 7;
+ 	}
++        else if (STRNCMP(p, "unnamedplus", 11) == 0
++					    && (p[11] == ',' || p[11] == NUL))
++	{
++	    new_unnamed |= CLIP_UNNAMED_PLUS;
++	    p += 11;
++	}
+ 	else if (STRNCMP(p, "autoselect", 10) == 0
+ 					&& (p[10] == ',' || p[10] == NUL))
+ 	{
+@@ -9756,6 +9765,9 @@
+ #ifdef FEAT_SCROLLBIND
+     to->wo_scb = from->wo_scb;
+ #endif
++#ifdef FEAT_CURSORBIND
++    to->wo_crb = from->wo_crb;
++#endif
+ #ifdef FEAT_SPELL
+     to->wo_spell = from->wo_spell;
+ #endif
+@@ -10011,7 +10023,7 @@
+ 	    buf->b_p_smc = p_smc;
+ #endif
+ #ifdef FEAT_SPELL
+-	    buf->b_s.b_p_spc = vim_strsave(p_spf);
++	    buf->b_s.b_p_spc = vim_strsave(p_spc);
+ 	    (void)compile_cap_prog(&buf->b_s);
+ 	    buf->b_s.b_p_spf = vim_strsave(p_spf);
+ 	    buf->b_s.b_p_spl = vim_strsave(p_spl);
+diff -Naur vim73.orig/src/option.h vim73/src/option.h
+--- vim73.orig/src/option.h	2010-07-25 10:15:02.000000000 -0400
++++ vim73/src/option.h	2011-01-08 21:01:19.246657477 -0500
+@@ -872,6 +872,7 @@
+ EXTERN char_u	*p_ww;		/* 'whichwrap' */
+ EXTERN long	p_wc;		/* 'wildchar' */
+ EXTERN long	p_wcm;		/* 'wildcharm' */
++EXTERN long	p_wic;		/* 'wildignorecase' */
+ EXTERN char_u	*p_wim;		/* 'wildmode' */
+ #ifdef FEAT_WILDMENU
+ EXTERN int	p_wmnu;		/* 'wildmenu' */
+diff -Naur vim73.orig/src/os_macosx.m vim73/src/os_macosx.m
+--- vim73.orig/src/os_macosx.m	2010-08-15 06:56:50.000000000 -0400
++++ vim73/src/os_macosx.m	2011-01-08 21:01:18.806655841 -0500
+@@ -15,6 +15,10 @@
+     Error: MACOS 9 is no longer supported in Vim 7
+ #endif
+ 
++/* Avoid a conflict for the definition of Boolean between Mac header files and
++ * X11 header files. */
++#define NO_X11_INCLUDES
++
+ #include "vim.h"
+ #import <Cocoa/Cocoa.h>
+ 
+diff -Naur vim73.orig/src/os_msdos.c vim73/src/os_msdos.c
+--- vim73.orig/src/os_msdos.c	2010-05-15 07:04:07.000000000 -0400
++++ vim73/src/os_msdos.c	2011-01-08 21:01:19.382657751 -0500
+@@ -21,7 +21,6 @@
+  * Some functions are also used for Win16 (MS-Windows 3.1).
+  */
+ 
+-#include "vimio.h"
+ #include "vim.h"
+ 
+ #include <conio.h>
+diff -Naur vim73.orig/src/os_mswin.c vim73/src/os_mswin.c
+--- vim73.orig/src/os_mswin.c	2010-07-27 15:39:05.000000000 -0400
++++ vim73/src/os_mswin.c	2011-01-08 21:01:19.434656677 -0500
+@@ -22,7 +22,6 @@
+ # endif
+ #endif
+ 
+-#include "vimio.h"
+ #include "vim.h"
+ 
+ #ifdef WIN16
+@@ -31,7 +30,6 @@
+ # include <string.h>
+ #endif
+ #include <sys/types.h>
+-#include <errno.h>
+ #include <signal.h>
+ #include <limits.h>
+ #include <process.h>
+@@ -817,7 +815,11 @@
+     BOOL fRunTimeLinkSuccess = FALSE;
+ 
+     // Get a handle to the DLL module.
++# ifdef WIN16
+     hinstLib = LoadLibrary(libname);
++# else
++    hinstLib = vimLoadLib(libname);
++# endif
+ 
+     // If the handle is valid, try to get the function address.
+     if (hinstLib != NULL)
+diff -Naur vim73.orig/src/os_unix.c vim73/src/os_unix.c
+--- vim73.orig/src/os_unix.c	2010-08-08 09:14:04.000000000 -0400
++++ vim73/src/os_unix.c	2011-01-08 21:01:19.358658475 -0500
+@@ -1123,6 +1123,30 @@
+ }
+ #endif
+ 
++# if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
++static void loose_clipboard __ARGS((void));
++
++/*
++ * Called when Vim is going to sleep or execute a shell command.
++ * We can't respond to requests for the X selections.  Lose them, otherwise
++ * other applications will hang.  But first copy the text to cut buffer 0.
++ */
++    static void
++loose_clipboard()
++{
++    if (clip_star.owned || clip_plus.owned)
++    {
++	x11_export_final_selection();
++	if (clip_star.owned)
++	    clip_lose_selection(&clip_star);
++	if (clip_plus.owned)
++	    clip_lose_selection(&clip_plus);
++	if (x11_display != NULL)
++	    XFlush(x11_display);
++    }
++}
++#endif
++
+ /*
+  * If the machine has job control, use it to suspend the program,
+  * otherwise fake it by starting a new shell.
+@@ -1137,19 +1161,7 @@
+     out_flush();	    /* needed to disable mouse on some systems */
+ 
+ # if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
+-    /* Since we are going to sleep, we can't respond to requests for the X
+-     * selections.  Lose them, otherwise other applications will hang.  But
+-     * first copy the text to cut buffer 0. */
+-    if (clip_star.owned || clip_plus.owned)
+-    {
+-	x11_export_final_selection();
+-	if (clip_star.owned)
+-	    clip_lose_selection(&clip_star);
+-	if (clip_plus.owned)
+-	    clip_lose_selection(&clip_plus);
+-	if (x11_display != NULL)
+-	    XFlush(x11_display);
+-    }
++    loose_clipboard();
+ # endif
+ 
+ # if defined(_REENTRANT) && defined(SIGCONT)
+@@ -1726,6 +1738,11 @@
+     }
+     if (x11_window == 0 || x11_display == NULL)
+ 	return (result = FAIL);
++
++# ifdef FEAT_EVAL
++    set_vim_var_nr(VV_WINDOWID, (long)x11_window);
++# endif
++
+     return (result = OK);
+ }
+ 
+@@ -3706,6 +3723,10 @@
+     if (options & SHELL_COOKED)
+ 	settmode(TMODE_COOK);	    /* set to normal mode */
+ 
++# if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
++    loose_clipboard();
++# endif
++
+ # ifdef __EMX__
+     if (cmd == NULL)
+ 	x = system("");	/* this starts an interactive shell in emx */
+@@ -3814,13 +3835,17 @@
+ # endif
+     int		did_settmode = FALSE;	/* settmode(TMODE_RAW) called */
+ 
++    newcmd = vim_strsave(p_sh);
++    if (newcmd == NULL)		/* out of memory */
++	goto error;
++
+     out_flush();
+     if (options & SHELL_COOKED)
+ 	settmode(TMODE_COOK);		/* set to normal mode */
+ 
+-    newcmd = vim_strsave(p_sh);
+-    if (newcmd == NULL)		/* out of memory */
+-	goto error;
++# if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
++    loose_clipboard();
++# endif
+ 
+     /*
+      * Do this loop twice:
+@@ -4148,7 +4173,6 @@
+ # ifdef FEAT_GUI
+ 		if (pty_master_fd >= 0)
+ 		{
+-		    close(pty_slave_fd);	/* close slave side of pty */
+ 		    fromshell_fd = pty_master_fd;
+ 		    toshell_fd = dup(pty_master_fd);
+ 		}
+@@ -4430,7 +4454,7 @@
+ 		    ++noread_cnt;
+ 		    while (RealWaitForChar(fromshell_fd, 10L, NULL))
+ 		    {
+-			len = read(fromshell_fd, (char *)buffer
++			len = read_eintr(fromshell_fd, buffer
+ # ifdef FEAT_MBYTE
+ 				+ buffer_off, (size_t)(BUFLEN - buffer_off)
+ # else
+@@ -4617,6 +4641,14 @@
+ 		    break;
+ 	    }
+ 
++# ifdef FEAT_GUI
++	    /* Close slave side of pty.  Only do this after the child has
++	     * exited, otherwise the child may hang when it tries to write on
++	     * the pty. */
++	    if (pty_master_fd >= 0)
++		close(pty_slave_fd);
++# endif
++
+ 	    /* Make sure the child that writes to the external program is
+ 	     * dead. */
+ 	    if (wpid > 0)
+diff -Naur vim73.orig/src/os_win16.c vim73/src/os_win16.c
+--- vim73.orig/src/os_win16.c	2010-06-26 00:03:31.000000000 -0400
++++ vim73/src/os_win16.c	2011-01-08 21:01:19.434656677 -0500
+@@ -20,13 +20,11 @@
+ # pragma warn -obs
+ #endif
+ 
+-#include "vimio.h"
+ #include "vim.h"
+ 
+ #include <dos.h>
+ #include <string.h>
+ #include <sys/types.h>
+-#include <errno.h>
+ #include <signal.h>
+ #include <limits.h>
+ #include <process.h>
+diff -Naur vim73.orig/src/os_win32.c vim73/src/os_win32.c
+--- vim73.orig/src/os_win32.c	2010-07-14 10:49:36.000000000 -0400
++++ vim73/src/os_win32.c	2011-01-08 21:01:19.438656953 -0500
+@@ -20,7 +20,6 @@
+  * Roger Knobbe <rogerk@wonderware.com> did the initial port of Vim 3.0.
+  */
+ 
+-#include "vimio.h"
+ #include "vim.h"
+ 
+ #ifdef FEAT_MZSCHEME
+@@ -28,7 +27,6 @@
+ #endif
+ 
+ #include <sys/types.h>
+-#include <errno.h>
+ #include <signal.h>
+ #include <limits.h>
+ #include <process.h>
+@@ -206,42 +204,73 @@
+ static int suppress_winsize = 1;	/* don't fiddle with console */
+ #endif
+ 
++static char_u *exe_path = NULL;
++
+     static void
+ get_exe_name(void)
+ {
+-    char	temp[256];
+-    static int	did_set_PATH = FALSE;
++    /* Maximum length of $PATH is more than MAXPATHL.  8191 is often mentioned
++     * as the maximum length that works (plus a NUL byte). */
++#define MAX_ENV_PATH_LEN 8192
++    char	temp[MAX_ENV_PATH_LEN];
++    char_u	*p;
+ 
+     if (exe_name == NULL)
+     {
+ 	/* store the name of the executable, may be used for $VIM */
+-	GetModuleFileName(NULL, temp, 255);
++	GetModuleFileName(NULL, temp, MAX_ENV_PATH_LEN - 1);
+ 	if (*temp != NUL)
+ 	    exe_name = FullName_save((char_u *)temp, FALSE);
+     }
+ 
+-    if (!did_set_PATH && exe_name != NULL)
++    if (exe_path == NULL && exe_name != NULL)
+     {
+-	char_u	    *p;
+-	char_u	    *newpath;
+-
+-	/* Append our starting directory to $PATH, so that when doing "!xxd"
+-	 * it's found in our starting directory.  Needed because SearchPath()
+-	 * also looks there. */
+-	p = mch_getenv("PATH");
+-	newpath = alloc((unsigned)(STRLEN(p) + STRLEN(exe_name) + 2));
+-	if (newpath != NULL)
+-	{
+-	    STRCPY(newpath, p);
+-	    STRCAT(newpath, ";");
+-	    vim_strncpy(newpath + STRLEN(newpath), exe_name,
+-					    gettail_sep(exe_name) - exe_name);
+-	    vim_setenv((char_u *)"PATH", newpath);
+-	    vim_free(newpath);
++	exe_path = vim_strnsave(exe_name,
++				     (int)(gettail_sep(exe_name) - exe_name));
++	if (exe_path != NULL)
++	{
++	    /* Append our starting directory to $PATH, so that when doing
++	     * "!xxd" it's found in our starting directory.  Needed because
++	     * SearchPath() also looks there. */
++	    p = mch_getenv("PATH");
++	    if (p == NULL
++		       || STRLEN(p) + STRLEN(exe_path) + 2 < MAX_ENV_PATH_LEN)
++	    {
++		if (p == NULL || *p == NUL)
++		    temp[0] = NUL;
++		else
++		{
++		    STRCPY(temp, p);
++		    STRCAT(temp, ";");
++		}
++		STRCAT(temp, exe_path);
++		vim_setenv((char_u *)"PATH", temp);
++	    }
+ 	}
++    }
++}
++
++/*
++ * Load library "name".
++ */
++    HINSTANCE
++vimLoadLib(char *name)
++{
++    HINSTANCE dll = NULL;
++    char old_dir[MAXPATHL];
+ 
+-	did_set_PATH = TRUE;
++    if (exe_path == NULL)
++	get_exe_name();
++    if (exe_path != NULL && mch_dirname(old_dir, MAXPATHL) == OK)
++    {
++	/* Change directory to where the executable is, both to make sure we
++	 * find a .dll there and to avoid looking for a .dll in the current
++	 * directory. */
++	mch_chdir(exe_path);
++	dll = LoadLibrary(name);
++	mch_chdir(old_dir);
+     }
++    return dll;
+ }
+ 
+ #if defined(DYNAMIC_GETTEXT) || defined(PROTO)
+@@ -254,7 +283,7 @@
+ static char *null_libintl_bindtextdomain(const char *, const char *);
+ static char *null_libintl_bind_textdomain_codeset(const char *, const char *);
+ 
+-static HINSTANCE hLibintlDLL = 0;
++static HINSTANCE hLibintlDLL = NULL;
+ char *(*dyn_libintl_gettext)(const char *) = null_libintl_gettext;
+ char *(*dyn_libintl_textdomain)(const char *) = null_libintl_textdomain;
+ char *(*dyn_libintl_bindtextdomain)(const char *, const char *)
+@@ -282,26 +311,16 @@
+     if (hLibintlDLL)
+ 	return 1;
+     /* Load gettext library (libintl.dll) */
+-    hLibintlDLL = LoadLibrary(libname != NULL ? libname : GETTEXT_DLL);
++    hLibintlDLL = vimLoadLib(libname != NULL ? libname : GETTEXT_DLL);
+     if (!hLibintlDLL)
+     {
+-	char_u	    dirname[_MAX_PATH];
+-
+-	/* Try using the path from gvim.exe to find the .dll there. */
+-	get_exe_name();
+-	STRCPY(dirname, exe_name);
+-	STRCPY(gettail(dirname), GETTEXT_DLL);
+-	hLibintlDLL = LoadLibrary((char *)dirname);
+-	if (!hLibintlDLL)
++	if (p_verbose > 0)
+ 	{
+-	    if (p_verbose > 0)
+-	    {
+-		verbose_enter();
+-		EMSG2(_(e_loadlib), GETTEXT_DLL);
+-		verbose_leave();
+-	    }
+-	    return 0;
++	    verbose_enter();
++	    EMSG2(_(e_loadlib), GETTEXT_DLL);
++	    verbose_leave();
+ 	}
++	return 0;
+     }
+     for (i = 0; libintl_entry[i].name != NULL
+ 					 && libintl_entry[i].ptr != NULL; ++i)
+@@ -430,7 +449,7 @@
+ 	     * Seems like a lot of overhead to load/unload ADVAPI32.DLL each
+ 	     * time we verify security...
+ 	     */
+-	    advapi_lib = LoadLibrary("ADVAPI32.DLL");
++	    advapi_lib = vimLoadLib("ADVAPI32.DLL");
+ 	    if (advapi_lib != NULL)
+ 	    {
+ 		pSetNamedSecurityInfo = (PSNSECINFO)GetProcAddress(advapi_lib,
+@@ -1615,6 +1634,35 @@
+     return TRUE;
+ }
+ 
++#if ((defined(__MINGW32__) || defined (__CYGWIN32__)) && \
++        __MSVCRT_VERSION__ >= 0x800) || (defined(_MSC_VER) && _MSC_VER >= 1400)
++/*
++ * Bad parameter handler.
++ *
++ * Certain MS CRT functions will intentionally crash when passed invalid
++ * parameters to highlight possible security holes.  Setting this function as
++ * the bad parameter handler will prevent the crash.
++ *
++ * In debug builds the parameters contain CRT information that might help track
++ * down the source of a problem, but in non-debug builds the arguments are all
++ * NULL/0.  Debug builds will also produce assert dialogs from the CRT, it is
++ * worth allowing these to make debugging of issues easier.
++ */
++    static void
++bad_param_handler(const wchar_t *expression,
++    const wchar_t *function,
++    const wchar_t *file,
++    unsigned int line,
++    uintptr_t pReserved)
++{
++}
++
++# define SET_INVALID_PARAM_HANDLER \
++	((void)_set_invalid_parameter_handler(bad_param_handler))
++#else
++# define SET_INVALID_PARAM_HANDLER
++#endif
++
+ #ifdef FEAT_GUI_W32
+ 
+ /*
+@@ -1627,6 +1675,9 @@
+     extern int _fmode;
+ #endif
+ 
++    /* Silently handle invalid parameters to CRT functions */
++    SET_INVALID_PARAM_HANDLER;
++
+     /* Let critical errors result in a failure, not in a dialog box.  Required
+      * for the timestamp test to work on removed floppies. */
+     SetErrorMode(SEM_FAILCRITICALERRORS);
+@@ -2103,6 +2154,9 @@
+     extern int _fmode;
+ #endif
+ 
++    /* Silently handle invalid parameters to CRT functions */
++    SET_INVALID_PARAM_HANDLER;
++
+     /* Let critical errors result in a failure, not in a dialog box.  Required
+      * for the timestamp test to work on removed floppies. */
+     SetErrorMode(SEM_FAILCRITICALERRORS);
+@@ -2273,12 +2327,14 @@
+     int		len)
+ {
+     char		szTrueName[_MAX_PATH + 2];
++    char		szTrueNameTemp[_MAX_PATH + 2];
+     char		*ptrue, *ptruePrev;
+     char		*porig, *porigPrev;
+     int			flen;
+     WIN32_FIND_DATA	fb;
+     HANDLE		hFind;
+     int			c;
++    int			slen;
+ 
+     flen = (int)STRLEN(name);
+     if (flen == 0 || flen > _MAX_PATH)
+@@ -2323,12 +2379,19 @@
+ 	}
+ 	*ptrue = NUL;
+ 
++	/* To avoid a slow failure append "\*" when searching a directory,
++	 * server or network share. */
++	STRCPY(szTrueNameTemp, szTrueName);
++	slen = (int)strlen(szTrueNameTemp);
++	if (*porig == psepc && slen + 2 < _MAX_PATH)
++	    STRCPY(szTrueNameTemp + slen, "\\*");
++
+ 	/* Skip "", "." and "..". */
+ 	if (ptrue > ptruePrev
+ 		&& (ptruePrev[0] != '.'
+ 		    || (ptruePrev[1] != NUL
+ 			&& (ptruePrev[1] != '.' || ptruePrev[2] != NUL)))
+-		&& (hFind = FindFirstFile(szTrueName, &fb))
++		&& (hFind = FindFirstFile(szTrueNameTemp, &fb))
+ 						      != INVALID_HANDLE_VALUE)
+ 	{
+ 	    c = *porig;
+@@ -3120,9 +3183,10 @@
+      * It's nicer to run a filter command in a minimized window, but in
+      * Windows 95 this makes the command MUCH slower.  We can't do it under
+      * Win32s either as it stops the synchronous spawn workaround working.
++     * Don't activate the window to keep focus on Vim.
+      */
+     if ((options & SHELL_DOOUT) && !mch_windows95() && !gui_is_win32s())
+-	si.wShowWindow = SW_SHOWMINIMIZED;
++	si.wShowWindow = SW_SHOWMINNOACTIVE;
+     else
+ 	si.wShowWindow = SW_SHOWNORMAL;
+     si.cbReserved2 = 0;
+diff -Naur vim73.orig/src/popupmnu.c vim73/src/popupmnu.c
+--- vim73.orig/src/popupmnu.c	2010-08-08 09:14:58.000000000 -0400
++++ vim73/src/popupmnu.c	2011-01-08 21:01:19.046656594 -0500
+@@ -558,8 +558,11 @@
+ 	    win_T	*curwin_save = curwin;
+ 	    int		res = OK;
+ 
+-	    /* Open a preview window.  3 lines by default. */
++	    /* Open a preview window.  3 lines by default.  Prefer
++	     * 'previewheight' if set and smaller. */
+ 	    g_do_tagpreview = 3;
++	    if (p_pvh > 0 && p_pvh < g_do_tagpreview)
++		g_do_tagpreview = p_pvh;
+ 	    resized = prepare_tagpreview(FALSE);
+ 	    g_do_tagpreview = 0;
+ 
+diff -Naur vim73.orig/src/proto/fileio.pro vim73/src/proto/fileio.pro
+--- vim73.orig/src/proto/fileio.pro	2010-08-15 08:30:28.000000000 -0400
++++ vim73/src/proto/fileio.pro	2011-01-08 21:01:19.354659886 -0500
+@@ -54,4 +54,6 @@
+ 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));
++long write_eintr __ARGS((int fd, void *buf, size_t bufsize));
+ /* vim: set ft=c : */
+diff -Naur vim73.orig/src/proto/getchar.pro vim73/src/proto/getchar.pro
+--- vim73.orig/src/proto/getchar.pro	2010-08-15 08:30:29.000000000 -0400
++++ vim73/src/proto/getchar.pro	2011-01-08 21:01:18.918658776 -0500
+@@ -51,6 +51,7 @@
+ int get_map_mode __ARGS((char_u **cmdp, int forceit));
+ void map_clear __ARGS((char_u *cmdp, char_u *arg, int forceit, int abbr));
+ void map_clear_int __ARGS((buf_T *buf, int mode, int local, int abbr));
++char_u *map_mode_to_chars __ARGS((int mode));
+ int map_to_exists __ARGS((char_u *str, char_u *modechars, int abbr));
+ int map_to_exists_mode __ARGS((char_u *rhs, int mode, int abbr));
+ char_u *set_context_in_map_cmd __ARGS((expand_T *xp, char_u *cmd, char_u *arg, int forceit, int isabbrev, int isunmap, cmdidx_T cmdidx));
+@@ -61,7 +62,7 @@
+ int makemap __ARGS((FILE *fd, buf_T *buf));
+ int put_escstr __ARGS((FILE *fd, char_u *strstart, int what));
+ void check_map_keycodes __ARGS((void));
+-char_u *check_map __ARGS((char_u *keys, int mode, int exact, int ign_mod, int abbr));
++char_u *check_map __ARGS((char_u *keys, int mode, int exact, int ign_mod, int abbr, mapblock_T **mp_ptr, int *local_ptr));
+ void init_mappings __ARGS((void));
+ void add_map __ARGS((char_u *map, int mode));
+ /* vim: set ft=c : */
+diff -Naur vim73.orig/src/proto/message.pro vim73/src/proto/message.pro
+--- vim73.orig/src/proto/message.pro	2010-08-15 08:30:41.000000000 -0400
++++ vim73/src/proto/message.pro	2011-01-08 21:01:18.918658776 -0500
+@@ -33,6 +33,7 @@
+ int msg_outtrans_len_attr __ARGS((char_u *msgstr, int len, int attr));
+ void msg_make __ARGS((char_u *arg));
+ int msg_outtrans_special __ARGS((char_u *strstart, int from));
++char_u *str2special_save __ARGS((char_u *str, int is_lhs));
+ char_u *str2special __ARGS((char_u **sp, int from));
+ void str2specialbuf __ARGS((char_u *sp, char_u *buf, int len));
+ void msg_prt_line __ARGS((char_u *s, int list));
+diff -Naur vim73.orig/src/proto/os_win32.pro vim73/src/proto/os_win32.pro
+--- vim73.orig/src/proto/os_win32.pro	2010-08-15 08:31:14.000000000 -0400
++++ vim73/src/proto/os_win32.pro	2011-01-08 21:01:18.926655661 -0500
+@@ -1,4 +1,5 @@
+ /* os_win32.c */
++HINSTANCE vimLoadLib __ARGS((char *name));
+ int dyn_libintl_init __ARGS((char *libname));
+ void dyn_libintl_end __ARGS((void));
+ void PlatformId __ARGS((void));
+diff -Naur vim73.orig/src/quickfix.c vim73/src/quickfix.c
+--- vim73.orig/src/quickfix.c	2010-08-09 16:12:14.000000000 -0400
++++ vim73/src/quickfix.c	2011-01-08 21:01:19.226656888 -0500
+@@ -1656,9 +1656,7 @@
+ 	    opened_window = TRUE;	/* close it when fail */
+ 	    p_swb = empty_option;	/* don't split again */
+ 	    swb_flags = 0;
+-# ifdef FEAT_SCROLLBIND
+-	    curwin->w_p_scb = FALSE;
+-# endif
++	    RESET_BINDING(curwin);
+ 	    if (ll_ref != NULL)
+ 	    {
+ 		/* The new window should use the location list from the
+@@ -2125,6 +2123,7 @@
+ 	--qi->qf_lists[idx].qf_count;
+     }
+     vim_free(qi->qf_lists[idx].qf_title);
++    qi->qf_lists[idx].qf_title = NULL;
+ }
+ 
+ /*
+@@ -2333,9 +2332,7 @@
+ 	    win_goto(lastwin);
+ 	if (win_split(height, WSP_BELOW | WSP_NEWLOC) == FAIL)
+ 	    return;		/* not enough room for window */
+-#ifdef FEAT_SCROLLBIND
+-	curwin->w_p_scb = FALSE;
+-#endif
++	RESET_BINDING(curwin);
+ 
+ 	if (eap->cmdidx == CMD_lopen || eap->cmdidx == CMD_lwindow)
+ 	{
+@@ -2362,6 +2359,7 @@
+ 	    set_option_value((char_u *)"bt", 0L, (char_u *)"quickfix",
+ 								   OPT_LOCAL);
+ 	    set_option_value((char_u *)"bh", 0L, (char_u *)"wipe", OPT_LOCAL);
++	    RESET_BINDING(curwin);
+ #ifdef FEAT_DIFF
+ 	    curwin->w_p_diff = FALSE;
+ #endif
+@@ -3435,6 +3433,7 @@
+     char_u	*fname;
+ {
+     buf_T	*newbuf;
++    buf_T	*newbuf_to_wipe = NULL;
+     int		failed = TRUE;
+     aco_save_T	aco;
+ 
+@@ -3471,15 +3470,19 @@
+ 	    failed = FALSE;
+ 	    if (curbuf != newbuf)
+ 	    {
+-		/* Bloody autocommands changed the buffer! */
+-		if (buf_valid(newbuf))
+-		    wipe_buffer(newbuf, FALSE);
++		/* Bloody autocommands changed the buffer!  Can happen when
++		 * using netrw and editing a remote file.  Use the current
++		 * buffer instead, delete the dummy one after restoring the
++		 * window stuff. */
++		newbuf_to_wipe = newbuf;
+ 		newbuf = curbuf;
+ 	    }
+ 	}
+ 
+ 	/* restore curwin/curbuf and a few other things */
+ 	aucmd_restbuf(&aco);
++	if (newbuf_to_wipe != NULL && buf_valid(newbuf_to_wipe))
++	    wipe_buffer(newbuf_to_wipe, FALSE);
+     }
+ 
+     if (!buf_valid(newbuf))
+diff -Naur vim73.orig/src/regexp.c vim73/src/regexp.c
+--- vim73.orig/src/regexp.c	2010-07-12 16:41:48.000000000 -0400
++++ vim73/src/regexp.c	2011-01-08 20:59:37.790766680 -0500
+@@ -3538,6 +3538,7 @@
+ 
+     regline = line;
+     reglnum = 0;
++    reg_toolong = FALSE;
+ 
+     /* Simplest case: Anchored match need be tried only once. */
+     if (prog->reganch)
+diff -Naur vim73.orig/src/screen.c vim73/src/screen.c
+--- vim73.orig/src/screen.c	2010-08-13 09:21:27.000000000 -0400
++++ vim73/src/screen.c	2011-01-08 21:01:19.494656637 -0500
+@@ -2317,7 +2317,7 @@
+ 		num = (long)lnum;
+ 	    else
+ 		/* 'relativenumber', don't use negative numbers */
+-		num = (long)abs((int)get_cursor_rel_lnum(wp, lnum));
++		num = labs((long)get_cursor_rel_lnum(wp, lnum));
+ 
+ 	    sprintf((char *)buf, "%*ld ", w, num);
+ #ifdef FEAT_RIGHTLEFT
+@@ -3405,9 +3405,9 @@
+ # endif
+ 		   )
+ 		{
+-		    int_u	text_sign;
++		    int	text_sign;
+ # ifdef FEAT_SIGN_ICONS
+-		    int_u	icon_sign;
++		    int	icon_sign;
+ # endif
+ 
+ 		    /* Draw two cells with the sign value or blank. */
+@@ -3475,8 +3475,7 @@
+ 			    num = (long)lnum;
+ 			else
+ 			    /* 'relativenumber', don't use negative numbers */
+-			    num = (long)abs((int)get_cursor_rel_lnum(wp,
+-								    lnum));
++			    num = labs((long)get_cursor_rel_lnum(wp, lnum));
+ 
+ 			sprintf((char *)extra, "%*ld ",
+ 						number_width(wp), num);
+@@ -6522,8 +6521,17 @@
+ 				stl, use_sandbox,
+ 				fillchar, maxwidth, hltab, tabtab);
+     vim_free(stl);
+-    len = (int)STRLEN(buf);
+ 
++    /* Make all characters printable. */
++    p = transstr(buf);
++    if (p != NULL)
++    {
++	vim_strncpy(buf, p, sizeof(buf) - 1);
++	vim_free(p);
++    }
++
++    /* fill up with "fillchar" */
++    len = (int)STRLEN(buf);
+     while (width < maxwidth && len < (int)sizeof(buf) - 1)
+     {
+ #ifdef FEAT_MBYTE
+diff -Naur vim73.orig/src/search.c vim73/src/search.c
+--- vim73.orig/src/search.c	2010-07-14 10:49:41.000000000 -0400
++++ vim73/src/search.c	2011-01-08 20:59:41.002656834 -0500
+@@ -5075,9 +5075,7 @@
+ 			if (win_split(0, 0) == FAIL)
+ #endif
+ 			    break;
+-#ifdef FEAT_SCROLLBIND
+-			curwin->w_p_scb = FALSE;
+-#endif
++			RESET_BINDING(curwin);
+ 		    }
+ 		    if (depth == -1)
+ 		    {
+diff -Naur vim73.orig/src/spell.c vim73/src/spell.c
+--- vim73.orig/src/spell.c	2010-08-01 09:43:01.000000000 -0400
++++ vim73/src/spell.c	2011-01-08 21:01:19.386656778 -0500
+@@ -303,10 +303,6 @@
+  *			    few bytes as possible, see offset2bytes())
+  */
+ 
+-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+-# include "vimio.h"	/* for lseek(), must be before vim.h */
+-#endif
+-
+ #include "vim.h"
+ 
+ #if defined(FEAT_SPELL) || defined(PROTO)
+@@ -327,6 +323,16 @@
+ typedef long idx_T;
+ #endif
+ 
++#ifdef VMS
++# define SPL_FNAME_TMPL  "%s_%s.spl"
++# define SPL_FNAME_ADD   "_add."
++# define SPL_FNAME_ASCII "_ascii."
++#else
++# define SPL_FNAME_TMPL  "%s.%s.spl"
++# define SPL_FNAME_ADD   ".add."
++# define SPL_FNAME_ASCII ".ascii."
++#endif
++
+ /* Flags used for a word.  Only the lowest byte can be used, the region byte
+  * comes above it. */
+ #define WF_REGION   0x01	/* region byte follows */
+@@ -2471,14 +2477,24 @@
+ 	 * Find the first spell file for "lang" in 'runtimepath' and load it.
+ 	 */
+ 	vim_snprintf((char *)fname_enc, sizeof(fname_enc) - 5,
+-					"spell/%s.%s.spl", lang, spell_enc());
++#ifdef VMS
++					"spell/%s_%s.spl",
++#else
++					"spell/%s.%s.spl",
++#endif
++							   lang, spell_enc());
+ 	r = do_in_runtimepath(fname_enc, FALSE, spell_load_cb, &sl);
+ 
+ 	if (r == FAIL && *sl.sl_lang != NUL)
+ 	{
+ 	    /* Try loading the ASCII version. */
+ 	    vim_snprintf((char *)fname_enc, sizeof(fname_enc) - 5,
+-						  "spell/%s.ascii.spl", lang);
++#ifdef VMS
++						  "spell/%s_ascii.spl",
++#else
++						  "spell/%s.ascii.spl",
++#endif
++									lang);
+ 	    r = do_in_runtimepath(fname_enc, FALSE, spell_load_cb, &sl);
+ 
+ #ifdef FEAT_AUTOCMD
+@@ -2496,7 +2512,12 @@
+ 
+     if (r == FAIL)
+     {
+-	smsg((char_u *)_("Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""),
++	smsg((char_u *)
++#ifdef VMS
++	_("Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""),
++#else
++	_("Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""),
++#endif
+ 						     lang, spell_enc(), lang);
+     }
+     else if (sl.sl_slang != NULL)
+@@ -2530,7 +2551,7 @@
+ int_wordlist_spl(fname)
+     char_u	    *fname;
+ {
+-    vim_snprintf((char *)fname, MAXPATHL, "%s.%s.spl",
++    vim_snprintf((char *)fname, MAXPATHL, SPL_FNAME_TMPL,
+ 						  int_wordlist, spell_enc());
+ }
+ 
+@@ -2785,8 +2806,8 @@
+ 	if (lp->sl_fname == NULL)
+ 	    goto endFAIL;
+ 
+-	/* Check for .add.spl. */
+-	lp->sl_add = strstr((char *)gettail(fname), ".add.") != NULL;
++	/* Check for .add.spl (_add.spl for VMS). */
++	lp->sl_add = strstr((char *)gettail(fname), SPL_FNAME_ADD) != NULL;
+     }
+     else
+ 	lp = old_lp;
+@@ -4679,7 +4700,7 @@
+     buf_T	*buf;
+     char_u	fname[MAXPATHL];
+ 
+-    /* Go through all buffers and handle 'spelllang'. */ //<VN>
++    /* Go through all buffers and handle 'spelllang'. <VN> */
+     for (buf = firstbuf; buf != NULL; buf = buf->b_next)
+ 	ga_clear(&buf->b_s.b_langp);
+ 
+@@ -4951,7 +4972,7 @@
+     char_u	*si_info;	/* info text chars or NULL  */
+     int		si_region_count; /* number of regions supported (1 when there
+ 				    are no regions) */
+-    char_u	si_region_name[16]; /* region names; used only if
++    char_u	si_region_name[17]; /* region names; used only if
+ 				     * si_region_count > 1) */
+ 
+     garray_T	si_rep;		/* list of fromto_T entries from REP lines */
+@@ -9109,8 +9130,8 @@
+ 	    /* For ":mkspell path/vim" output file is "path/vim.latin1.spl". */
+ 	    innames = &fnames[0];
+ 	    incount = 1;
+-	    vim_snprintf((char *)wfname, sizeof(wfname), "%s.%s.spl", fnames[0],
+-			     spin.si_ascii ? (char_u *)"ascii" : spell_enc());
++	    vim_snprintf((char *)wfname, sizeof(wfname), SPL_FNAME_TMPL,
++		  fnames[0], spin.si_ascii ? (char_u *)"ascii" : spell_enc());
+ 	}
+ 	else if (len > 4 && STRCMP(fnames[0] + len - 4, ".spl") == 0)
+ 	{
+@@ -9119,15 +9140,15 @@
+ 	}
+ 	else
+ 	    /* Name should be language, make the file name from it. */
+-	    vim_snprintf((char *)wfname, sizeof(wfname), "%s.%s.spl", fnames[0],
+-			     spin.si_ascii ? (char_u *)"ascii" : spell_enc());
++	    vim_snprintf((char *)wfname, sizeof(wfname), SPL_FNAME_TMPL,
++		  fnames[0], spin.si_ascii ? (char_u *)"ascii" : spell_enc());
+ 
+ 	/* Check for .ascii.spl. */
+-	if (strstr((char *)gettail(wfname), ".ascii.") != NULL)
++	if (strstr((char *)gettail(wfname), SPL_FNAME_ASCII) != NULL)
+ 	    spin.si_ascii = TRUE;
+ 
+ 	/* Check for .add.spl. */
+-	if (strstr((char *)gettail(wfname), ".add.") != NULL)
++	if (strstr((char *)gettail(wfname), SPL_FNAME_ADD) != NULL)
+ 	    spin.si_add = TRUE;
+     }
+ 
+@@ -9530,7 +9551,8 @@
+ 	    if (aspath)
+ 		/* Use directory of an entry with path, e.g., for
+ 		 * "/dir/lg.utf-8.spl" use "/dir". */
+-		vim_strncpy(buf, curbuf->b_s.b_p_spl, lstart - curbuf->b_s.b_p_spl - 1);
++		vim_strncpy(buf, curbuf->b_s.b_p_spl,
++					    lstart - curbuf->b_s.b_p_spl - 1);
+ 	    else
+ 		/* Copy the path from 'runtimepath' to buf[]. */
+ 		copy_option_part(&rtp, buf, MAXPATHL, ",");
+@@ -9539,13 +9561,14 @@
+ 		/* Use the first language name from 'spelllang' and the
+ 		 * encoding used in the first loaded .spl file. */
+ 		if (aspath)
+-		    vim_strncpy(buf, curbuf->b_s.b_p_spl, lend - curbuf->b_s.b_p_spl);
++		    vim_strncpy(buf, curbuf->b_s.b_p_spl,
++						  lend - curbuf->b_s.b_p_spl);
+ 		else
+ 		{
+ 		    /* Create the "spell" directory if it doesn't exist yet. */
+ 		    l = (int)STRLEN(buf);
+ 		    vim_snprintf((char *)buf + l, MAXPATHL - l, "/spell");
+-		    if (!filewritable(buf) != 2)
++		    if (filewritable(buf) != 2)
+ 			vim_mkdir(buf, 0755);
+ 
+ 		    l = (int)STRLEN(buf);
+@@ -9837,10 +9860,7 @@
+ 	{
+ 	    /* be quick for ASCII */
+ 	    if (wp->w_s->b_spell_ismw[*p])
+-	    {
+ 		s = p + 1;		/* skip a mid-word character */
+-		l = MB_BYTE2LEN(*s);
+-	    }
+ 	}
+ 	else
+ 	{
+@@ -9848,10 +9868,7 @@
+ 	    if (c < 256 ? wp->w_s->b_spell_ismw[c]
+ 		    : (wp->w_s->b_spell_ismw_mb != NULL
+ 			   && vim_strchr(wp->w_s->b_spell_ismw_mb, c) != NULL))
+-	    {
+ 		s = p + l;
+-		l = MB_BYTE2LEN(*s);
+-	    }
+ 	}
+ 
+ 	c = mb_ptr2char(s);
+@@ -13811,11 +13828,8 @@
+ 		    su->su_sfmaxscore = cleanup_suggestions(gap,
+ 				      su->su_sfmaxscore, SUG_CLEAN_COUNT(su));
+ 		else
+-		{
+-		    i = su->su_maxscore;
+ 		    su->su_maxscore = cleanup_suggestions(gap,
+ 					su->su_maxscore, SUG_CLEAN_COUNT(su));
+-		}
+ 	    }
+ 	}
+     }
+diff -Naur vim73.orig/src/structs.h vim73/src/structs.h
+--- vim73.orig/src/structs.h	2010-08-07 10:59:27.000000000 -0400
++++ vim73/src/structs.h	2011-01-08 21:01:18.918658776 -0500
+@@ -979,9 +979,10 @@
+ struct mapblock
+ {
+     mapblock_T	*m_next;	/* next mapblock in list */
+-    char_u	*m_keys;	/* mapped from */
++    char_u	*m_keys;	/* mapped from, lhs */
+     int		m_keylen;	/* strlen(m_keys) */
+-    char_u	*m_str;		/* mapped to */
++    char_u	*m_str;		/* mapped to, rhs */
++    char_u	*m_orig_str;	/* rhs as entered by the user */
+     int		m_mode;		/* valid mode */
+     int		m_noremap;	/* if non-zero no re-mapping for m_str */
+     char	m_silent;	/* <silent> used, don't echo commands */
+diff -Naur vim73.orig/src/syntax.c vim73/src/syntax.c
+--- vim73.orig/src/syntax.c	2010-08-08 09:17:03.000000000 -0400
++++ vim73/src/syntax.c	2011-01-08 21:01:18.790655926 -0500
+@@ -7600,10 +7600,10 @@
+ 		/*
+ 		 * Copy characters from arg[] to buf[], translating <> codes.
+ 		 */
+-		for (p = arg, off = 0; off < 100 && *p; )
++		for (p = arg, off = 0; off < 100 - 6 && *p; )
+ 		{
+ 		    len = trans_special(&p, buf + off, FALSE);
+-		    if (len)		    /* recognized special char */
++		    if (len > 0)	    /* recognized special char */
+ 			off += len;
+ 		    else		    /* copy as normal char */
+ 			buf[off++] = *p++;
+diff -Naur vim73.orig/src/tag.c vim73/src/tag.c
+--- vim73.orig/src/tag.c	2010-08-10 03:25:22.000000000 -0400
++++ vim73/src/tag.c	2011-01-08 21:01:19.386656778 -0500
+@@ -11,10 +11,6 @@
+  * Code to handle tags and the tag stack
+  */
+ 
+-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+-# include "vimio.h"	/* for lseek(), must be before vim.h */
+-#endif
+-
+ #include "vim.h"
+ 
+ /*
+@@ -3143,9 +3139,7 @@
+     {
+ 	win_split(postponed_split > 0 ? postponed_split : 0,
+ 						       postponed_split_flags);
+-# ifdef FEAT_SCROLLBIND
+-	curwin->w_p_scb = FALSE;
+-# endif
++	RESET_BINDING(curwin);
+     }
+ #endif
+ 
+diff -Naur vim73.orig/src/term.c vim73/src/term.c
+--- vim73.orig/src/term.c	2010-07-25 09:30:31.000000000 -0400
++++ vim73/src/term.c	2011-01-08 21:01:19.486656758 -0500
+@@ -3053,10 +3053,13 @@
+     int		old_Rows = Rows;
+     int		old_Columns = Columns;
+ 
+-    (void)ui_get_shellsize();
+-    check_shellsize();
+-    if (old_Rows != Rows || old_Columns != Columns)
+-	shell_resized();
++    if (!exiting)
++    {
++	(void)ui_get_shellsize();
++	check_shellsize();
++	if (old_Rows != Rows || old_Columns != Columns)
++	    shell_resized();
++    }
+ }
+ 
+ /*
+@@ -3828,6 +3831,7 @@
+  * Check from typebuf.tb_buf[typebuf.tb_off] to typebuf.tb_buf[typebuf.tb_off
+  * + max_offset].
+  * Return 0 for no match, -1 for partial match, > 0 for full match.
++ * Return KEYLEN_REMOVED when a key code was deleted.
+  * With a match, the match is removed, the replacement code is inserted in
+  * typebuf.tb_buf[] and the number of characters in typebuf.tb_buf[] is
+  * returned.
+@@ -3845,6 +3849,7 @@
+     int		slen = 0;	/* init for GCC */
+     int		modslen;
+     int		len;
++    int		retval = 0;
+     int		offset;
+     char_u	key_name[2];
+     int		modifiers;
+@@ -4940,6 +4945,13 @@
+ #endif
+ 		string[new_slen++] = key_name[1];
+ 	}
++	else if (new_slen == 0 && key_name[0] == KS_EXTRA
++						  && key_name[1] == KE_IGNORE)
++	{
++	    /* Do not put K_IGNORE into the buffer, do return KEYLEN_REMOVED
++	     * to indicate what happened. */
++	    retval = KEYLEN_REMOVED;
++	}
+ 	else
+ 	{
+ 	    string[new_slen++] = K_SPECIAL;
+@@ -4976,7 +4988,7 @@
+ 						   (size_t)(buflen - offset));
+ 	    mch_memmove(buf + offset, string, (size_t)new_slen);
+ 	}
+-	return (len + extra + offset);
++	return retval == 0 ? (len + extra + offset) : retval;
+     }
+ 
+     return 0;			    /* no match found */
+diff -Naur vim73.orig/src/testdir/Make_amiga.mak vim73/src/testdir/Make_amiga.mak
+--- vim73.orig/src/testdir/Make_amiga.mak	2010-08-04 10:34:34.000000000 -0400
++++ vim73/src/testdir/Make_amiga.mak	2011-01-08 21:01:19.138657005 -0500
+@@ -27,7 +27,8 @@
+ 		test56.out test57.out test58.out test59.out test60.out \
+ 		test61.out test62.out test63.out test64.out test65.out \
+ 		test66.out test67.out test68.out test69.out test70.out \
+-		test71.out test72.out test73.out
++		test71.out test72.out test73.out test74.out test75.out \
++		test76.out
+ 
+ .SUFFIXES: .in .out
+ 
+@@ -120,3 +121,6 @@
+ test71.out: test71.in
+ test72.out: test72.in
+ test73.out: test73.in
++test74.out: test74.in
++test75.out: test75.in
++test76.out: test76.in
+diff -Naur vim73.orig/src/testdir/Make_dos.mak vim73/src/testdir/Make_dos.mak
+--- vim73.orig/src/testdir/Make_dos.mak	2010-08-13 12:27:19.000000000 -0400
++++ vim73/src/testdir/Make_dos.mak	2011-01-08 21:01:19.138657005 -0500
+@@ -27,7 +27,8 @@
+ 		test30.out test31.out test32.out test33.out test34.out \
+ 		test37.out test38.out test39.out test40.out test41.out \
+ 		test42.out test52.out test65.out test66.out test67.out \
+-		test68.out test69.out test71.out test72.out test73.out
++		test68.out test69.out test71.out test72.out test73.out \
++		test74.out test75.out test76.out
+ 
+ SCRIPTS32 =	test50.out test70.out
+ 
+diff -Naur vim73.orig/src/testdir/Make_ming.mak vim73/src/testdir/Make_ming.mak
+--- vim73.orig/src/testdir/Make_ming.mak	2010-08-04 10:34:47.000000000 -0400
++++ vim73/src/testdir/Make_ming.mak	2011-01-08 21:01:19.138657005 -0500
+@@ -47,7 +47,8 @@
+ 		test30.out test31.out test32.out test33.out test34.out \
+ 		test37.out test38.out test39.out test40.out test41.out \
+ 		test42.out test52.out test65.out test66.out test67.out \
+-		test68.out test69.out test71.out test72.out test72.out
++		test68.out test69.out test71.out test72.out test73.out \
++		test74.out test75.out test76.out
+ 
+ SCRIPTS32 =	test50.out test70.out
+ 
+diff -Naur vim73.orig/src/testdir/Make_os2.mak vim73/src/testdir/Make_os2.mak
+--- vim73.orig/src/testdir/Make_os2.mak	2010-08-04 10:34:55.000000000 -0400
++++ vim73/src/testdir/Make_os2.mak	2011-01-08 21:01:19.138657005 -0500
+@@ -27,7 +27,8 @@
+ 		test56.out test57.out test58.out test59.out test60.out \
+ 		test61.out test62.out test63.out test64.out test65.out \
+ 		test66.out test67.out test68.out test69.out test70.out \
+-		test71.out test72.out test73.out
++		test71.out test72.out test73.out test74.out test75.out \
++		test76.out
+ 
+ .SUFFIXES: .in .out
+ 
+diff -Naur vim73.orig/src/testdir/Make_vms.mms vim73/src/testdir/Make_vms.mms
+--- vim73.orig/src/testdir/Make_vms.mms	2010-08-04 10:35:46.000000000 -0400
++++ vim73/src/testdir/Make_vms.mms	2011-01-08 21:01:19.138657005 -0500
+@@ -4,7 +4,7 @@
+ # Authors:	Zoltan Arpadffy, <arpadffy@polarhome.com>
+ #		Sandor Kopanyi,  <sandor.kopanyi@mailbox.hu>
+ #
+-# Last change:  2010 Aug 04
++# Last change:  2010 Nov 10
+ #
+ # 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.
+@@ -74,7 +74,7 @@
+ 	 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
++	 test71.out test72.out test74.out test75.out test76.out
+ 
+ # Known problems:
+ # Test 30: a problem around mac format - unknown reason
+diff -Naur vim73.orig/src/testdir/Makefile vim73/src/testdir/Makefile
+--- vim73.orig/src/testdir/Makefile	2010-08-15 08:56:30.000000000 -0400
++++ vim73/src/testdir/Makefile	2011-01-08 21:01:19.138657005 -0500
+@@ -10,6 +10,7 @@
+ #   This will make testing about 10 times as slow.
+ # VALGRIND = valgrind --tool=memcheck --leak-check=yes --num-callers=15 --log-file=valgrind.$*
+ 
++
+ SCRIPTS = test1.out test2.out test3.out test4.out test5.out test6.out \
+ 		test7.out test8.out test9.out test10.out test11.out \
+ 		test12.out  test13.out test14.out test15.out test17.out \
+@@ -23,7 +24,8 @@
+ 		test54.out test55.out test56.out test57.out test58.out \
+ 		test59.out test60.out test61.out test62.out test63.out \
+ 		test64.out test65.out test66.out test67.out test68.out \
+-		test69.out test70.out test71.out test72.out test73.out
++		test69.out test70.out test71.out test72.out test73.out \
++		test74.out test75.out test76.out
+ 
+ SCRIPTS_GUI = test16.out
+ 
+@@ -44,7 +46,7 @@
+ $(SCRIPTS) $(SCRIPTS_GUI): $(VIMPROG)
+ 
+ clean:
+-	-rm -rf *.out *.failed *.rej *.orig test.log tiny.vim small.vim mbyte.vim mzscheme.vim test.ok X* valgrind.pid* viminfo
++	-rm -rf *.out *.failed *.rej *.orig test.log tiny.vim small.vim mbyte.vim mzscheme.vim test.ok X* valgrind.* viminfo
+ 
+ test1.out: test1.in
+ 	-rm -f $*.failed tiny.vim small.vim mbyte.vim mzscheme.vim test.ok X* viminfo
+diff -Naur vim73.orig/src/testdir/main.aap vim73/src/testdir/main.aap
+--- vim73.orig/src/testdir/main.aap	2010-07-30 16:03:23.000000000 -0400
++++ vim73/src/testdir/main.aap	2011-01-08 21:01:18.878656504 -0500
+@@ -13,7 +13,7 @@
+ 		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 test47.out
+-		test48.out test49.out
++		test48.out test49.out test74.out
+ 
+ ScriptsGUI = test16.out
+ 
+diff -Naur vim73.orig/src/testdir/test49.vim vim73/src/testdir/test49.vim
+--- vim73.orig/src/testdir/test49.vim	2010-05-15 07:04:10.000000000 -0400
++++ vim73/src/testdir/test49.vim	2011-01-08 21:01:18.782656702 -0500
+@@ -1,6 +1,6 @@
+ " Vim script language tests
+ " Author:	Servatius Brandt <Servatius.Brandt@fujitsu-siemens.com>
+-" Last Change:	2006 Apr 28
++" Last Change:	2010 Sep 29
+ 
+ "-------------------------------------------------------------------------------
+ " Test environment							    {{{1
+@@ -8711,7 +8711,7 @@
+ 		endif
+ 	    else
+ 		if cmd == "let"
+-		    let match = MATCH(0, thrmsg, 'E106', "Unknown variable")
++		    let match = MATCH(0, thrmsg, 'E121', "Undefined variable")
+ 		elseif cmd == "unlet"
+ 		    let match = MATCH(0, thrmsg, 'E108', "No such variable")
+ 		endif
+diff -Naur vim73.orig/src/testdir/test55.in vim73/src/testdir/test55.in
+--- vim73.orig/src/testdir/test55.in	2010-05-15 07:04:10.000000000 -0400
++++ vim73/src/testdir/test55.in	2011-01-08 21:01:19.158657647 -0500
+@@ -342,7 +342,18 @@
+ :$put =(d == d)
+ :$put =(l != deepcopy(l))
+ :$put =(d != deepcopy(d))
++:"
++:" compare complex recursively linked list and dict
++:let l = []
++:call add(l, l)
++:let dict4 = {"l": l}
++:call add(dict4.l, dict4)
++:let lcopy = deepcopy(l)
++:let dict4copy = deepcopy(dict4)
++:$put =(l == lcopy)
++:$put =(dict4 == dict4copy)
+ :endfun
++:"
+ :call Test(1, 2, [3, 4], {5: 6})  " This may take a while
+ :"
+ :delfunc Test
+diff -Naur vim73.orig/src/testdir/test55.ok vim73/src/testdir/test55.ok
+--- vim73.orig/src/testdir/test55.ok	2010-05-15 07:04:10.000000000 -0400
++++ vim73/src/testdir/test55.ok	2011-01-08 21:01:19.158657647 -0500
+@@ -109,3 +109,5 @@
+ 1
+ 0
+ 0
++1
++1
+diff -Naur vim73.orig/src/testdir/test57.in vim73/src/testdir/test57.in
+--- vim73.orig/src/testdir/test57.in	2010-05-15 07:04:10.000000000 -0400
++++ vim73/src/testdir/test57.in	2011-01-08 21:01:18.866656341 -0500
+@@ -53,15 +53,19 @@
+ t02: numeric
+ abc
+ ab
+-a
+ a321
+ a123
+ a122
++a
++x-22
+ b321
+ b123
++
+ c123d
++-24
+  123b
+ c321d
++0
+ b322b
+ b321
+ b321b
+diff -Naur vim73.orig/src/testdir/test57.ok vim73/src/testdir/test57.ok
+--- vim73.orig/src/testdir/test57.ok	2010-05-15 07:04:10.000000000 -0400
++++ vim73/src/testdir/test57.ok	2011-01-08 21:01:18.866656341 -0500
+@@ -21,6 +21,10 @@
+ a
+ 
+ 
++
++-24
++x-22
++0
+ a122
+ a123
+ b123
+diff -Naur vim73.orig/src/testdir/test61.in vim73/src/testdir/test61.in
+--- vim73.orig/src/testdir/test61.in	2010-06-26 23:07:58.000000000 -0400
++++ vim73/src/testdir/test61.in	2011-01-08 20:59:38.610657137 -0500
+@@ -4,6 +4,10 @@
+ Also tests :earlier and :later.
+ 
+ STARTTEST
++:echo undotree().entries
++ENDTEST
++
++STARTTEST
+ :" Delete three characters and undo
+ Gx:set ul=100
+ x:set ul=100
+diff -Naur vim73.orig/src/testdir/test68.in vim73/src/testdir/test68.in
+--- vim73.orig/src/testdir/test68.in	2010-05-15 07:04:10.000000000 -0400
++++ vim73/src/testdir/test68.in	2011-01-08 21:01:18.806655841 -0500
+@@ -51,6 +51,17 @@
+ }
+ 
+ STARTTEST
++/^{/+2
++:set tw& fo=a
++I^^
++ENDTEST
++
++{
++   1aa
++   2bb
++}
++
++STARTTEST
+ :g/^STARTTEST/.,/^ENDTEST/d
+ :1;/^Results/,$wq! test.out
+ ENDTEST
+diff -Naur vim73.orig/src/testdir/test68.ok vim73/src/testdir/test68.ok
+--- vim73.orig/src/testdir/test68.ok	2010-05-15 07:04:10.000000000 -0400
++++ vim73/src/testdir/test68.ok	2011-01-08 21:01:18.806655841 -0500
+@@ -33,3 +33,6 @@
+ #a b
+ }
+ 
++
++{ 1aa ^^2bb }
++
+diff -Naur vim73.orig/src/testdir/test74.in vim73/src/testdir/test74.in
+--- vim73.orig/src/testdir/test74.in	1969-12-31 19:00:00.000000000 -0500
++++ vim73/src/testdir/test74.in	2011-01-08 21:01:18.878656504 -0500
+@@ -0,0 +1,36 @@
++" Tests for storing global variables in the .viminfo file vim: set ft=vim:
++
++STARTTEST
++:so small.vim
++:" Do all test in a separate window to avoid E211 when we recursively
++:" delete the Xfind directory during cleanup
++:"
++:" This will cause a few errors, do it silently.
++:set visualbell
++:set nocp viminfo+=!,nviminfo
++:let MY_GLOBAL_DICT={'foo': 1, 'bar': 0, 'longvarible': 1000}
++:" store a really long list, so line wrapping will occur in viminfo file
++:let MY_GLOBAL_LIST=range(1,100)
++:wv! Xviminfo
++:unlet MY_GLOBAL_DICT
++:unlet MY_GLOBAL_LIST
++:rv! Xviminfo
++:call delete('Xviminfo')
++:if exists("MY_GLOBAL_DICT")
++:redir >> test.out
++:echo MY_GLOBAL_DICT
++:redir end
++:endif
++:if exists("MY_GLOBAL_LIST")
++:redir >> test.out
++:echo MY_GLOBAL_LIST
++:redir end
++:endif
++:redir >> test.out
++:echo "foobar"
++:redir end
++:endif
++:qa!
++ENDTEST
++
++eof
+diff -Naur vim73.orig/src/testdir/test74.ok vim73/src/testdir/test74.ok
+--- vim73.orig/src/testdir/test74.ok	1969-12-31 19:00:00.000000000 -0500
++++ vim73/src/testdir/test74.ok	2011-01-08 21:01:18.878656504 -0500
+@@ -0,0 +1,5 @@
++
++{'foo': 1, 'longvarible': 1000, 'bar': 0}
++[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]
++
++foobar
+diff -Naur vim73.orig/src/testdir/test75.in vim73/src/testdir/test75.in
+--- vim73.orig/src/testdir/test75.in	1969-12-31 19:00:00.000000000 -0500
++++ vim73/src/testdir/test75.in	2011-01-08 21:01:18.918658776 -0500
+@@ -0,0 +1,16 @@
++" Tests for functions.
++
++STARTTEST
++:so small.vim
++:" Test maparg() with a string result
++:map foo<C-V> is<F4>foo
++:vnoremap <script> <buffer> <expr> <silent> bar isbar
++:call append('$', maparg('foo<C-V>'))
++:call append('$', string(maparg('foo<C-V>', '', 0, 1)))
++:call append('$', string(maparg('bar', '', 0, 1)))
++:"
++:/^eof/+1,$w! test.out
++:qa!
++ENDTEST
++
++eof
+diff -Naur vim73.orig/src/testdir/test75.ok vim73/src/testdir/test75.ok
+--- vim73.orig/src/testdir/test75.ok	1969-12-31 19:00:00.000000000 -0500
++++ vim73/src/testdir/test75.ok	2011-01-08 21:01:18.918658776 -0500
+@@ -0,0 +1,3 @@
++is<F4>foo
++{'silent': 0, 'noremap': 0, 'lhs': 'foo<C-V>', 'mode': ' ', 'expr': 0, 'sid': 0, 'rhs': 'is<F4>foo', 'buffer': 0}
++{'silent': 1, 'noremap': 1, 'lhs': 'bar', 'mode': 'v', 'expr': 1, 'sid': 0, 'rhs': 'isbar', 'buffer': 1}
+diff -Naur vim73.orig/src/testdir/test76.in vim73/src/testdir/test76.in
+--- vim73.orig/src/testdir/test76.in	1969-12-31 19:00:00.000000000 -0500
++++ vim73/src/testdir/test76.in	2011-01-08 21:01:19.138657005 -0500
+@@ -0,0 +1,46 @@
++Tests for completefunc/omnifunc. vim: set ft=vim :
++
++STARTTEST
++:"Test that nothing happens if the 'completefunc' opens
++:"a new window (no completion, no crash)
++:so small.vim
++:function! DummyCompleteOne(findstart, base)
++:  if a:findstart
++:    return 0
++:  else
++:    wincmd n
++:    return ['onedef', 'oneDEF']
++:  endif
++:endfunction
++:setlocal completefunc=DummyCompleteOne
++/^one
++A:q!
++:function! DummyCompleteTwo(findstart, base)
++:  if a:findstart
++:    wincmd n
++:    return 0
++:  else
++:    return ['twodef', 'twoDEF']
++:  endif
++:endfunction
++:setlocal completefunc=DummyCompleteTwo
++/^two
++A:q!
++:"Test that 'completefunc' works when it's OK.
++:function! DummyCompleteThree(findstart, base)
++:  if a:findstart
++:    return 0
++:  else
++:    return ['threedef', 'threeDEF']
++:  endif
++:endfunction
++:setlocal completefunc=DummyCompleteThree
++/^three
++A:/^+++/,/^three/w! test.out
++:qa!
++ENDTEST
++
+++++
++one
++two
++three
+diff -Naur vim73.orig/src/testdir/test76.ok vim73/src/testdir/test76.ok
+--- vim73.orig/src/testdir/test76.ok	1969-12-31 19:00:00.000000000 -0500
++++ vim73/src/testdir/test76.ok	2011-01-08 21:01:19.142655736 -0500
+@@ -0,0 +1,4 @@
+++++
++
++two
++threeDEF
+diff -Naur vim73.orig/src/ui.c vim73/src/ui.c
+--- vim73.orig/src/ui.c	2010-08-08 09:17:30.000000000 -0400
++++ vim73/src/ui.c	2011-01-08 21:01:18.766656221 -0500
+@@ -469,7 +469,7 @@
+      */
+ #ifdef FEAT_X11
+     /* Always own the selection, we might have lost it without being
+-     * notified. */
++     * notified, e.g. during a ":sh" command. */
+     if (cbd->available)
+     {
+ 	int was_owned = cbd->owned;
+@@ -1944,10 +1944,9 @@
+  */
+ 
+ static Boolean	clip_x11_convert_selection_cb __ARGS((Widget, Atom *, Atom *, Atom *, XtPointer *, long_u *, int *));
+-
+ static void  clip_x11_lose_ownership_cb __ARGS((Widget, Atom *));
+-
+ static void clip_x11_timestamp_cb __ARGS((Widget w, XtPointer n, XEvent *event, Boolean *cont));
++static void  clip_x11_request_selection_cb __ARGS((Widget, XtPointer, Atom *, Atom *, XtPointer, long_u *, int *));
+ 
+ /*
+  * Property callback to get a timestamp for XtOwnSelection.
+@@ -1985,8 +1984,17 @@
+ 	return;
+ 
+     /* Get the selection, using the event timestamp. */
+-    XtOwnSelection(w, xproperty->atom, xproperty->time,
+-	    clip_x11_convert_selection_cb, clip_x11_lose_ownership_cb, NULL);
++    if (XtOwnSelection(w, xproperty->atom, xproperty->time,
++	    clip_x11_convert_selection_cb, clip_x11_lose_ownership_cb,
++	    NULL) == OK)
++    {
++	/* Set the "owned" flag now, there may have been a call to
++	 * lose_ownership_cb in between. */
++	if (xproperty->atom == clip_plus.sel_atom)
++	    clip_plus.owned = TRUE;
++	else
++	    clip_star.owned = TRUE;
++    }
+ }
+ 
+     void
+@@ -1997,8 +2005,6 @@
+ 	    /*(XtEventHandler)*/clip_x11_timestamp_cb, (XtPointer)NULL);
+ }
+ 
+-static void  clip_x11_request_selection_cb __ARGS((Widget, XtPointer, Atom *, Atom *, XtPointer, long_u *, int *));
+-
+     static void
+ clip_x11_request_selection_cb(w, success, sel_atom, type, value, length,
+ 			      format)
+@@ -2336,7 +2342,7 @@
+ 
+     void
+ clip_x11_lose_selection(myShell, cbd)
+-    Widget	myShell;
++    Widget		myShell;
+     VimClipboard	*cbd;
+ {
+     XtDisownSelection(myShell, cbd->sel_atom, CurrentTime);
+@@ -2344,14 +2350,29 @@
+ 
+     int
+ clip_x11_own_selection(myShell, cbd)
+-    Widget	myShell;
++    Widget		myShell;
+     VimClipboard	*cbd;
+ {
+-    /* Get the time by a zero-length append, clip_x11_timestamp_cb will be
+-     * called with the current timestamp.  */
+-    if (!XChangeProperty(XtDisplay(myShell), XtWindow(myShell), cbd->sel_atom,
+-	    timestamp_atom, 32, PropModeAppend, NULL, 0))
++    /* When using the GUI we have proper timestamps, use the one of the last
++     * event.  When in the console we don't get events (the terminal gets
++     * them), Get the time by a zero-length append, clip_x11_timestamp_cb will
++     * be called with the current timestamp.  */
++#ifdef FEAT_GUI
++    if (gui.in_use)
++    {
++	if (XtOwnSelection(myShell, cbd->sel_atom,
++	       XtLastTimestampProcessed(XtDisplay(myShell)),
++	       clip_x11_convert_selection_cb, clip_x11_lose_ownership_cb,
++	       NULL) == False)
+ 	return FAIL;
++    }
++    else
++#endif
++    {
++	if (!XChangeProperty(XtDisplay(myShell), XtWindow(myShell),
++		  cbd->sel_atom, timestamp_atom, 32, PropModeAppend, NULL, 0))
++	return FAIL;
++    }
+     /* Flush is required in a terminal as nothing else is doing it. */
+     XFlush(XtDisplay(myShell));
+     return OK;
+diff -Naur vim73.orig/src/undo.c vim73/src/undo.c
+--- vim73.orig/src/undo.c	2010-08-07 06:48:15.000000000 -0400
++++ vim73/src/undo.c	2011-01-08 21:01:19.386656778 -0500
+@@ -81,10 +81,6 @@
+ #define UH_MAGIC 0x18dade	/* value for uh_magic when in use */
+ #define UE_MAGIC 0xabc123	/* value for ue_magic when in use */
+ 
+-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+-# include "vimio.h"	/* for vim_read(), must be before vim.h */
+-#endif
+-
+ #include "vim.h"
+ 
+ static void u_unch_branch __ARGS((u_header_T *uhp));
+@@ -1386,7 +1382,7 @@
+ 		char_u	mbuf[UF_START_MAGIC_LEN];
+ 		int	len;
+ 
+-		len = vim_read(fd, mbuf, UF_START_MAGIC_LEN);
++		len = read_eintr(fd, mbuf, UF_START_MAGIC_LEN);
+ 		close(fd);
+ 		if (len < UF_START_MAGIC_LEN
+ 		      || memcmp(mbuf, UF_START_MAGIC, UF_START_MAGIC_LEN) != 0)
+@@ -1861,6 +1857,7 @@
+     curbuf->b_u_seq_cur = seq_cur;
+     curbuf->b_u_time_cur = seq_time;
+     curbuf->b_u_save_nr_last = last_save_nr;
++    curbuf->b_u_save_nr_cur = last_save_nr;
+ 
+     curbuf->b_u_synced = TRUE;
+     vim_free(uhp_table);
+@@ -2794,7 +2791,7 @@
+ 								uhp->uh_time);
+ 	    if (uhp->uh_save_nr > 0)
+ 	    {
+-		while (STRLEN(IObuff) < 32)
++		while (STRLEN(IObuff) < 33)
+ 		    STRCAT(IObuff, " ");
+ 		vim_snprintf_add((char *)IObuff, IOSIZE,
+ 						   "  %3ld", uhp->uh_save_nr);
+@@ -2849,7 +2846,7 @@
+ 	sort_strings((char_u **)ga.ga_data, ga.ga_len);
+ 
+ 	msg_start();
+-	msg_puts_attr((char_u *)_("number changes  time            saved"),
++	msg_puts_attr((char_u *)_("number changes  when               saved"),
+ 							      hl_attr(HLF_T));
+ 	for (i = 0; i < ga.ga_len && !got_int; ++i)
+ 	{
+@@ -2879,7 +2876,15 @@
+     if (time(NULL) - tt >= 100)
+     {
+ 	curtime = localtime(&tt);
+-	(void)strftime((char *)buf, buflen, "%H:%M:%S", curtime);
++	if (time(NULL) - tt < (60L * 60L * 12L))
++	    /* within 12 hours */
++	    (void)strftime((char *)buf, buflen, "%H:%M:%S", curtime);
++	else if (time(NULL) - tt < (60L * 60L * 24L * 180L))
++	    /* within 6 months */
++	    (void)strftime((char *)buf, buflen, "%m/%d %H:%M:%S", curtime);
++	else
++	    /* long ago */
++	    (void)strftime((char *)buf, buflen, "%y/%m/%d %H:%M:%S", curtime);
+     }
+     else
+ #endif
+diff -Naur vim73.orig/src/version.c vim73/src/version.c
+--- vim73.orig/src/version.c	2010-08-01 09:45:48.000000000 -0400
++++ vim73/src/version.c	2011-01-08 21:01:19.514657428 -0500
+@@ -715,6 +715,204 @@
+ static int included_patches[] =
+ {   /* Add new patch number below this line */
+ /**/
++    99,
++/**/
++    98,
++/**/
++    97,
++/**/
++    96,
++/**/
++    95,
++/**/
++    94,
++/**/
++    93,
++/**/
++    92,
++/**/
++    91,
++/**/
++    90,
++/**/
++    89,
++/**/
++    88,
++/**/
++    87,
++/**/
++    86,
++/**/
++    85,
++/**/
++    84,
++/**/
++    83,
++/**/
++    82,
++/**/
++    81,
++/**/
++    80,
++/**/
++    79,
++/**/
++    78,
++/**/
++    77,
++/**/
++    76,
++/**/
++    75,
++/**/
++    74,
++/**/
++    73,
++/**/
++    72,
++/**/
++    71,
++/**/
++    70,
++/**/
++    69,
++/**/
++    68,
++/**/
++    67,
++/**/
++    66,
++/**/
++    65,
++/**/
++    64,
++/**/
++    63,
++/**/
++    62,
++/**/
++    61,
++/**/
++    60,
++/**/
++    59,
++/**/
++    58,
++/**/
++    57,
++/**/
++    56,
++/**/
++    55,
++/**/
++    54,
++/**/
++    53,
++/**/
++    52,
++/**/
++    51,
++/**/
++    50,
++/**/
++    49,
++/**/
++    48,
++/**/
++    47,
++/**/
++    46,
++/**/
++    45,
++/**/
++    44,
++/**/
++    43,
++/**/
++    42,
++/**/
++    41,
++/**/
++    40,
++/**/
++    39,
++/**/
++    38,
++/**/
++    37,
++/**/
++    36,
++/**/
++    35,
++/**/
++    34,
++/**/
++    33,
++/**/
++    32,
++/**/
++    31,
++/**/
++    30,
++/**/
++    29,
++/**/
++    28,
++/**/
++    27,
++/**/
++    26,
++/**/
++    25,
++/**/
++    24,
++/**/
++    23,
++/**/
++    22,
++/**/
++    21,
++/**/
++    20,
++/**/
++    19,
++/**/
++    18,
++/**/
++    17,
++/**/
++    16,
++/**/
++    15,
++/**/
++    14,
++/**/
++    13,
++/**/
++    12,
++/**/
++    11,
++/**/
++    10,
++/**/
++    9,
++/**/
++    8,
++/**/
++    7,
++/**/
++    6,
++/**/
++    5,
++/**/
++    4,
++/**/
++    3,
++/**/
++    2,
++/**/
++    1,
++/**/
+     0
+ };
+ 
+@@ -1262,9 +1460,9 @@
+ 	if (highest_patch())
+ 	{
+ 	    /* Check for 9.9x or 9.9xx, alpha/beta version */
+-	    if (isalpha((int)mediumVersion[3]))
++	    if (isalpha((int)vers[3]))
+ 	    {
+-		if (isalpha((int)mediumVersion[4]))
++		if (isalpha((int)vers[4]))
+ 		    sprintf((char *)vers + 5, ".%d%s", highest_patch(),
+ 							   mediumVersion + 5);
+ 		else
+diff -Naur vim73.orig/src/vim.h vim73/src/vim.h
+--- vim73.orig/src/vim.h	2010-07-29 14:46:39.000000000 -0400
++++ vim73/src/vim.h	2011-01-08 21:01:19.466658112 -0500
+@@ -27,6 +27,11 @@
+ # endif
+ #endif
+ 
++#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64) \
++	|| defined(__EMX__)
++# include "vimio.h"
++#endif
++
+ /* ============ the header file puzzle (ca. 50-100 pieces) ========= */
+ 
+ #ifdef HAVE_CONFIG_H	/* GNU autoconf (or something else) was here */
+@@ -192,8 +197,8 @@
+ #endif
+ 
+ #ifdef NO_X11_INCLUDES
+-    /* In os_mac_conv.c NO_X11_INCLUDES is defined to avoid X11 headers.
+-     * Disable all X11 related things to avoid conflicts. */
++    /* In os_mac_conv.c and os_macosx.m NO_X11_INCLUDES is defined to avoid
++     * X11 headers.  Disable all X11 related things to avoid conflicts. */
+ # ifdef FEAT_X11
+ #  undef FEAT_X11
+ # endif
+@@ -475,6 +480,11 @@
+ # include <sys/stat.h>
+ #endif
+ 
++#if defined(HAVE_ERRNO_H) || defined(DJGPP) || defined(WIN16) \
++	|| defined(WIN32) || defined(_WIN64) || defined(__EMX__)
++# include <errno.h>
++#endif
++
+ /*
+  * Allow other (non-unix) systems to configure themselves now
+  * These are also in os_unix.h, because osdef.sh needs them there.
+@@ -798,6 +808,7 @@
+ #define WILD_KEEP_ALL		32
+ #define WILD_SILENT		64
+ #define WILD_ESCAPE		128
++#define WILD_ICASE		256
+ 
+ /* Flags for expand_wildcards() */
+ #define EW_DIR		0x01	/* include directory names */
+@@ -808,6 +819,7 @@
+ #define EW_SILENT	0x20	/* don't print "1 returned" from shell */
+ #define EW_EXEC		0x40	/* executable files */
+ #define EW_PATH		0x80	/* search in 'path' too */
++#define EW_ICASE	0x100	/* ignore case */
+ /* Note: mostly EW_NOTFOUND and EW_SILENT are mutually exclusive: EW_NOTFOUND
+  * is used when executing commands and EW_SILENT for interactive expanding. */
+ 
+@@ -1640,6 +1652,11 @@
+ # define USE_INPUT_BUF
+ #endif
+ 
++#ifndef EINTR
++# define read_eintr(fd, buf, count) vim_read((fd), (buf), (count))
++# define write_eintr(fd, buf, count) vim_write((fd), (buf), (count))
++#endif
++
+ #ifdef MSWIN
+ /* On MS-Windows the third argument isn't size_t.  This matters for Win64,
+  * where sizeof(size_t)==8, not 4 */
+@@ -1842,7 +1859,8 @@
+ #define VV_OP		52
+ #define VV_SEARCHFORWARD 53
+ #define VV_OLDFILES	54
+-#define VV_LEN		55	/* number of v: vars */
++#define VV_WINDOWID	55
++#define VV_LEN		56	/* number of v: vars */
+ 
+ #ifdef FEAT_CLIPBOARD
+ 
+@@ -2193,4 +2211,8 @@
+ #define MSCR_LEFT	-1
+ #define MSCR_RIGHT	-2
+ 
++#define KEYLEN_PART_KEY -1	/* keylen value for incomplete key-code */
++#define KEYLEN_PART_MAP -2	/* keylen value for incomplete mapping */
++#define KEYLEN_REMOVED  9999	/* keylen value for removed sequence */
++
+ #endif /* VIM__H */
+diff -Naur vim73.orig/src/window.c vim73/src/window.c
+--- vim73.orig/src/window.c	2010-07-20 16:23:49.000000000 -0400
++++ vim73/src/window.c	2011-01-08 21:01:19.514657428 -0500
+@@ -70,7 +70,8 @@
+ #endif /* FEAT_WINDOWS */
+ 
+ static win_T *win_alloc __ARGS((win_T *after, int hidden));
+-static void win_new_height __ARGS((win_T *, int));
++static void set_fraction __ARGS((win_T *wp));
++static void win_new_height __ARGS((win_T *wp, int height));
+ 
+ #define URL_SLASH	1		/* path_is_url() has found "://" */
+ #define URL_BACKSLASH	2		/* path_is_url() has found ":\\" */
+@@ -525,9 +526,7 @@
+ 		    setpcmark();
+ 		    if (win_split(0, 0) == OK)
+ 		    {
+-# ifdef FEAT_SCROLLBIND
+-			curwin->w_p_scb = FALSE;
+-# endif
++			RESET_BINDING(curwin);
+ 			(void)do_ecmd(0, ptr, NULL, NULL, ECMD_LASTL,
+ 							   ECMD_HIDE, NULL);
+ 			if (nchar == 'F' && lnum >= 0)
+@@ -985,10 +984,17 @@
+     else
+ 	frame_append(curfrp, frp);
+ 
++    /* Set w_fraction now so that the cursor keeps the same relative
++     * vertical position. */
++    if (oldwin->w_height > 0)
++	set_fraction(oldwin);
++    wp->w_fraction = oldwin->w_fraction;
++
+ #ifdef FEAT_VERTSPLIT
+     if (flags & WSP_VERT)
+     {
+ 	wp->w_p_scr = curwin->w_p_scr;
++
+ 	if (need_status)
+ 	{
+ 	    win_new_height(oldwin, oldwin->w_height - 1);
+@@ -3277,9 +3283,7 @@
+     if (aucmd_win != NULL)
+     {
+ 	win_init_some(aucmd_win, curwin);
+-# ifdef FEAT_SCROLLBIND
+-	aucmd_win->w_p_scb = FALSE;
+-# endif
++	RESET_BINDING(aucmd_win);
+ 	new_frame(aucmd_win);
+     }
+ }
+@@ -3320,10 +3324,8 @@
+ 	/* First window in new tab page, initialize it from "oldwin". */
+ 	win_init(curwin, oldwin, 0);
+ 
+-# ifdef FEAT_SCROLLBIND
+-	/* We don't want scroll-binding in the first window. */
+-	curwin->w_p_scb = FALSE;
+-# endif
++	/* We don't want cursor- and scroll-binding in the first window. */
++	RESET_BINDING(curwin);
+     }
+ #endif
+ 
+@@ -5459,6 +5461,19 @@
+ 
+ #endif /* FEAT_WINDOWS */
+ 
++#define FRACTION_MULT	16384L
++
++/*
++ * Set wp->w_fraction for the current w_wrow and w_height.
++ */
++    static void
++set_fraction(wp)
++    win_T	*wp;
++{
++    wp->w_fraction = ((long)wp->w_wrow * FRACTION_MULT
++				    + FRACTION_MULT / 2) / (long)wp->w_height;
++}
++
+ /*
+  * Set the height of a window.
+  * This takes care of the things inside the window, not what happens to the
+@@ -5471,7 +5486,6 @@
+ {
+     linenr_T	lnum;
+     int		sline, line_size;
+-#define FRACTION_MULT	16384L
+ 
+     /* Don't want a negative height.  Happens when splitting a tiny window.
+      * Will equalize heights soon to fix it. */
+@@ -5481,8 +5495,7 @@
+ 	return;	    /* nothing to do */
+ 
+     if (wp->w_wrow != wp->w_prev_fraction_row && wp->w_height > 0)
+-	wp->w_fraction = ((long)wp->w_wrow * FRACTION_MULT
+-				    + FRACTION_MULT / 2) / (long)wp->w_height;
++	set_fraction(wp);
+ 
+     wp->w_height = height;
+     wp->w_skipcol = 0;
+diff -Naur vim73.orig/src/workshop.c vim73/src/workshop.c
+--- vim73.orig/src/workshop.c	2010-08-08 09:18:24.000000000 -0400
++++ vim73/src/workshop.c	2011-01-08 21:01:19.438656953 -0500
+@@ -16,7 +16,6 @@
+ #include <sys/types.h>
+ #include <netdb.h>
+ #include <netinet/in.h>
+-#include <errno.h>
+ #include <sys/socket.h>
+ #ifdef HAVE_LIBGEN_H
+ # include <libgen.h>
