diff --git a/README_vms.txt b/README_vms.txt
index f92cd03..43740da 100644
--- a/README_vms.txt
+++ b/README_vms.txt
@@ -14,27 +14,34 @@
   vim-X.X-extra.tar.gz	extra source files
 
 Compilation is recommended, in order to make sure that the correct
-libraries are used for your specific system.  However, you might not be
-able to compile Vim, read more from src/INSTALLvms.txt.
+libraries are used for your specific system.  Read about compiling in
+src/INSTALLvms.txt.
 
 To use the binary version, you need one of these archives:
 
-  vim-XX-exe-alpha-gui.zip	Alpha GUI/Motif executables
-  vim-XX-exe-alpha-gtk.zip      Alpha GUI/GTK executables
-  vim-XX-exe-alpha-term.zip	Alpha console executables
+  vim-XX-exe-ia64-gui.zip       IA64 GUI/Motif executables
+  vim-XX-exe-ia64-gtk.zip       IA64 GUI/GTK executables
+  vim-XX-exe-ia64-term.zip      IA64 console executables
+  vim-XX-exe-axp-gui.zip        Alpha GUI/Motif executables
+  vim-XX-exe-axp-gtk.zip        Alpha GUI/GTK executables
+  vim-XX-exe-axp-term.zip       Alpha console executables
   vim-XX-exe-vax-gui.zip	VAX GUI executables
-  vim-XX-exe-vax-term.zip	VAX console executables
+  vim-XX-exe-vax-term.zip       VAX console executables
 
 and of course
   vim-XX-runtime.zip		runtime files
 
-The binary archives contain: vim.exe, ctags.exe, xxd.exe, mms_vim.exe files,
+The binary archives contain: vim.exe, ctags.exe, xxd.exe files,
 but there are also prepared "deploy ready" archives:
 
-vim-XX-alpha.zip		GUI and console executables with runtime and
-				help files for Alpha systems
-vim-XX-vax.zip			GUI and console executables with runtime and
-				help files for VAX systems
+vim-XX-ia64.zip                 GUI and console executables with runtime and
+                                help files for IA64 systems
+vim-XX-axp.zip                  GUI and console executables with runtime and
+                                help files for Alpha systems
+vim-XX-vax.zip                  GUI and console executables with runtime and
+                                help files for VAX systems
+
+GTK builds need LIBGTK library installed.
 
 These executables and up to date patches for OpenVMS system are downloadable
 from http://www.polarhome.com/vim/ or ftp://ftp.polarhome.com/pub/vim/
diff --git a/runtime/doc/tagsrch.txt b/runtime/doc/tagsrch.txt
index 87608f1..fbecaa2 100644
--- a/runtime/doc/tagsrch.txt
+++ b/runtime/doc/tagsrch.txt
@@ -1,4 +1,4 @@
-*tagsrch.txt*   For Vim version 7.0aa.  Last change: 2005 Apr 01
+*tagsrch.txt*   For Vim version 7.0aa.  Last change: 2005 Jul 12
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -352,6 +352,8 @@
 When the argument both exists literally, and match when used as a regexp, a
 literal match has a higher priority.  For example, ":tag /open" matches "open"
 before "open_file" and "file_open".
+When using a pattern case is ignored.  If you want to match case use "\C" in
+the pattern.
 
 							*tag-!*
 If the tag is in the current file this will always work.  Otherwise the
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index 9554f56..989f7d5 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 7.0aa.  Last change: 2005 Jul 11
+*todo.txt*      For Vim version 7.0aa.  Last change: 2005 Jul 13
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -30,6 +30,10 @@
 							*known-bugs*
 -------------------- Known bugs and current work -----------------------
 
+Use vim_strncpy() in more places.
+
+When going over 'synmaxcol' don't highlight anything, stop regions.
+
 Add extra list of file locations.  Can be used with:
     :ltag	      list of matching tags, like :tselect
 
diff --git a/runtime/doc/version7.txt b/runtime/doc/version7.txt
index 702f224..6a35fcd 100644
--- a/runtime/doc/version7.txt
+++ b/runtime/doc/version7.txt
@@ -1,4 +1,4 @@
-*version7.txt*  For Vim version 7.0aa.  Last change: 2005 Jul 11
+*version7.txt*  For Vim version 7.0aa.  Last change: 2005 Jul 12
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1180,4 +1180,7 @@
 When opening a new buffer the local value of 'bomb' was not initialized from
 the global value.
 
+Win32: When using the "Edit with Vim" entry the file name was limited to about
+200 characters.
+
  vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/syntax/xf86conf.vim b/runtime/syntax/xf86conf.vim
index 8d0f606..4658b46 100644
--- a/runtime/syntax/xf86conf.vim
+++ b/runtime/syntax/xf86conf.vim
@@ -2,7 +2,7 @@
 " This is a GENERATED FILE. Please always refer to source file at the URI below.
 " Language: XF86Config (XFree86 configuration file)
 " Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
-" Last Change: 2003-05-01
+" Last Change: 2005 Jul 12
 " URL: http://trific.ath.cx/Ftp/vim/syntax/xf86conf.vim
 " Required Vim Version: 6.0
 "
@@ -63,7 +63,7 @@
 
 " Sections and subsections
 if b:xf86conf_xfree86_version >= 4
-	syn region xf86confSection matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"\(Files\|Server[_ ]*Flags\|Input[_ ]*Device\|Device\|Video[_ ]*Adaptor\|Server[_ ]*Layout\|DRI\|Vendor\|Keyboard\|Pointer\)\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confComment,xf86confOption,xf86confKeyword,xf86confSectionError
+	syn region xf86confSection matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"\(Files\|Server[_ ]*Flags\|Input[_ ]*Device\|Device\|Video[_ ]*Adaptor\|Server[_ ]*Layout\|DRI\|Extensions\|Vendor\|Keyboard\|Pointer\)\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confComment,xf86confOption,xf86confKeyword,xf86confSectionError
 	syn region xf86confSectionModule matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"Module\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confSubsectionAny,xf86confComment,xf86confOption,xf86confKeyword
 	syn region xf86confSectionMonitor matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"Monitor\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confSubsectionMode,xf86confModeLine,xf86confComment,xf86confOption,xf86confKeyword
 	syn region xf86confSectionModes matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"Modes\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confSubsectionMode,xf86confModeLine,xf86confComment
@@ -165,7 +165,7 @@
 
 " Synchronization
 if b:xf86conf_xfree86_version >= 4
-	syn sync match xf86confSyncSection grouphere xf86confSection "^\s*Section\s\+\"\(Files\|Server[_ ]*Flags\|Input[_ ]*Device\|Device\|Video[_ ]*Adaptor\|Server[_ ]*Layout\|DRI\|Vendor\|Keyboard\|Pointer\)\""
+	syn sync match xf86confSyncSection grouphere xf86confSection "^\s*Section\s\+\"\(Files\|Server[_ ]*Flags\|Input[_ ]*Device\|Device\|Video[_ ]*Adaptor\|Server[_ ]*Layout\|DRI\|Extensions\|Vendor\|Keyboard\|Pointer\)\""
 	syn sync match xf86confSyncSectionModule grouphere xf86confSectionModule "^\s*Section\s\+\"Module\""
 	syn sync match xf86confSyncSectionModes groupthere xf86confSectionModes "^\s*Section\s\+\"Modes\""
 else
diff --git a/src/GvimExt/gvimext.cpp b/src/GvimExt/gvimext.cpp
index 5a175d3..c204a0c 100644
--- a/src/GvimExt/gvimext.cpp
+++ b/src/GvimExt/gvimext.cpp
@@ -38,10 +38,14 @@
 HRESULT hres = 0;
 UINT cbFiles = 0;
 
+/* The buffers size used to be MAX_PATH (256 bytes), but that's not always
+ * enough */
+#define BUFSIZE 1100
+
 //
 // Get the name of the Gvim executable to use, with the path.
 // When "runtime" is non-zero, we were called to find the runtime directory.
-// Returns the path in name[MAX_PATH].  It's empty when it fails.
+// Returns the path in name[BUFSIZE].  It's empty when it fails.
 //
     static void
 getGvimName(char *name, int runtime)
@@ -54,7 +58,7 @@
     if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Vim\\Gvim", 0,
 				       KEY_READ, &keyhandle) == ERROR_SUCCESS)
     {
-	hlen = MAX_PATH;
+	hlen = BUFSIZE;
 	if (RegQueryValueEx(keyhandle, "path", 0, NULL, (BYTE *)name, &hlen)
 							     != ERROR_SUCCESS)
 	    name[0] = 0;
@@ -82,7 +86,7 @@
 }
 
 //
-// Get the Vim runtime directory into buf[MAX_PATH].
+// Get the Vim runtime directory into buf[BUFSIZE].
 // The result is empty when it failed.
 // When it works, the path ends in a slash or backslash.
 //
@@ -218,8 +222,8 @@
     static void
 dyn_gettext_load(void)
 {
-    char    szBuff[MAX_PATH];
-    char    szLang[MAX_PATH];
+    char    szBuff[BUFSIZE];
+    char    szLang[BUFSIZE];
     DWORD   len;
     HKEY    keyhandle;
     int	    gotlang = 0;
@@ -231,7 +235,7 @@
     if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Vim\\Gvim", 0,
 				       KEY_READ, &keyhandle) == ERROR_SUCCESS)
     {
-	len = MAX_PATH;
+	len = BUFSIZE;
 	if (RegQueryValueEx(keyhandle, "lang", 0, NULL, (BYTE*)szBuff, &len)
 							     == ERROR_SUCCESS)
 	{
@@ -249,7 +253,7 @@
 	// LOCALE_SABBREVLANGNAME gives us three letters, like "enu", we use
 	// only the first two.
 	len = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SABBREVLANGNAME,
-						    (LPTSTR)szBuff, MAX_PATH);
+						    (LPTSTR)szBuff, BUFSIZE);
 	if (len >= 2 && _strnicmp(szBuff, "en", 2) != 0)
 	{
 	    // There are a few exceptions (probably more)
@@ -615,11 +619,11 @@
     // Now display all the vim instances
     for (int i = 0; i < m_cntOfHWnd; i++)
     {
-	char title[MAX_PATH];
-	char temp[MAX_PATH];
+	char title[BUFSIZE];
+	char temp[BUFSIZE];
 
 	// Obtain window title, continue if can not
-	if (GetWindowText(m_hWnd[i], title, MAX_PATH - 1) == 0)
+	if (GetWindowText(m_hWnd[i], title, BUFSIZE - 1) == 0)
 	    continue;
 	// Truncate the title before the path, keep the file name
 	char *pos = strchr(title, '(');
@@ -630,8 +634,8 @@
 	    *pos = 0;
 	}
 	// Now concatenate
-	strncpy(temp, _("Edit with existing Vim - "), MAX_PATH - 1);
-	strncat(temp, title, MAX_PATH - 1);
+	strncpy(temp, _("Edit with existing Vim - "), BUFSIZE - 1);
+	strncat(temp, title, BUFSIZE - 1);
 	InsertMenu(hMenu,
 		indexMenu++,
 		MF_STRING|MF_BYPOSITION,
@@ -750,7 +754,7 @@
 
 BOOL CALLBACK CShellExt::EnumWindowsProc(HWND hWnd, LPARAM lParam)
 {
-    char temp[MAX_PATH];
+    char temp[BUFSIZE];
 
     // First do a bunch of check
     // No invisible window
@@ -807,8 +811,8 @@
     static char *
 searchpath(char *name)
 {
-    static char widename[2 * MAX_PATH];
-    static char location[2 * MAX_PATH + 2];
+    static char widename[2 * BUFSIZE];
+    static char location[2 * BUFSIZE + 2];
 
     // There appears to be a bug in FindExecutableA() on Windows NT.
     // Use FindExecutableW() instead...
@@ -816,12 +820,12 @@
     if (g_PlatformId == VER_PLATFORM_WIN32_NT)
     {
 	MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)name, -1,
-		(LPWSTR)widename, MAX_PATH);
+		(LPWSTR)widename, BUFSIZE);
 	if (FindExecutableW((LPCWSTR)widename, (LPCWSTR)"",
 		    (LPWSTR)location) > (HINSTANCE)32)
 	{
 	    WideCharToMultiByte(CP_ACP, 0, (LPWSTR)location, -1,
-		    (LPSTR)widename, 2 * MAX_PATH, NULL, NULL);
+		    (LPSTR)widename, 2 * BUFSIZE, NULL, NULL);
 	    return widename;
 	}
     }
@@ -842,8 +846,8 @@
 				   LPCSTR pszParam,
 				   int iShowCmd)
 {
-    char m_szFileUserClickedOn[MAX_PATH];
-    char cmdStr[MAX_PATH];
+    char m_szFileUserClickedOn[BUFSIZE];
+    char cmdStr[BUFSIZE];
     UINT i;
 
     for (i = 0; i < cbFiles; i++)
@@ -856,7 +860,7 @@
 	getGvimName(cmdStr, 0);
 	strcat(cmdStr, " \"");
 
-	if ((strlen(cmdStr) + strlen(m_szFileUserClickedOn) + 2) < MAX_PATH)
+	if ((strlen(cmdStr) + strlen(m_szFileUserClickedOn) + 2) < BUFSIZE)
 	{
 	    strcat(cmdStr, m_szFileUserClickedOn);
 	    strcat(cmdStr, "\"");
@@ -913,13 +917,13 @@
 				   int iShowCmd,
 				   int useDiff)
 {
-    char	m_szFileUserClickedOn[MAX_PATH];
+    char	m_szFileUserClickedOn[BUFSIZE];
     char	*cmdStr;
     size_t	cmdlen;
     size_t	len;
     UINT i;
 
-    cmdlen = MAX_PATH;
+    cmdlen = BUFSIZE;
     cmdStr = (char *)malloc(cmdlen);
     getGvimName(cmdStr, 0);
     if (useDiff)
@@ -934,7 +938,7 @@
 	len = strlen(cmdStr) + strlen(m_szFileUserClickedOn) + 4;
 	if (len > cmdlen)
 	{
-	    cmdlen = len + MAX_PATH;
+	    cmdlen = len + BUFSIZE;
 	    cmdStr = (char *)realloc(cmdStr, cmdlen);
 	}
 	strcat(cmdStr, " \"");
diff --git a/src/testdir/test58.in b/src/testdir/test58.in
index 0575a44..9e14270 100644
--- a/src/testdir/test58.in
+++ b/src/testdir/test58.in
@@ -3,10 +3,12 @@
 STARTTEST
 :so small.vim
 :"
-:" First generate a .spl file from a .dic and a .aff file.
+:" Don't want to depend on the locale from the environment
 :set enc=latin1
-:/^affstart1/+1,/affend1/-1w Xtest.aff
-:/^dicstart/+1,/dicend/-1w Xtest.dic
+:e!
+:" First generate a .spl file from a .dic and a .aff file.
+gg:/^affstart1/+1,/^affend1/-1w Xtest.aff
+gg:/^dicstart/+1,/^dicend/-1w Xtest.dic
 :mkspell Xtest Xtest
 :"
 :" use that spell file
diff --git a/src/ui.c b/src/ui.c
index 3fe99c5..befa5bb 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -184,10 +184,12 @@
 # endif
     {
 	if (wtime == -1 || wtime > 100L)
-	    (void)handle_signal(SIGNAL_UNBLOCK);  /* allow signals to kill us */
+	    /* allow signals to kill us */
+	    (void)vim_handle_signal(SIGNAL_UNBLOCK);
 	retval = mch_inchar(buf, maxlen, wtime, tb_change_cnt);
 	if (wtime == -1 || wtime > 100L)
-	    (void)handle_signal(SIGNAL_BLOCK);    /* block SIGHUP et al. */
+	    /* block SIGHUP et al. */
+	    (void)vim_handle_signal(SIGNAL_BLOCK);
     }
 #endif
 
