diff --git a/src/Make_mvc.mak b/src/Make_mvc.mak
index e4b3446..164ed50 100644
--- a/src/Make_mvc.mak
+++ b/src/Make_mvc.mak
@@ -734,7 +734,8 @@
 	- if exist tags del tags
 
 clean:
-	- $(DEL_TREE) $(OUTDIR) auto
+	- if exist $(OUTDIR)/nul $(DEL_TREE) $(OUTDIR)
+	- if exist auto/nul $(DEL_TREE) auto
 	- if exist *.obj del *.obj
 	- if exist $(VIM).exe del $(VIM).exe
 	- if exist $(VIM).ilk del $(VIM).ilk
diff --git a/src/fileio.c b/src/fileio.c
index 460e389..7e14155 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -8937,6 +8937,8 @@
 	    case '*':
 		reg_pat[i++] = '.';
 		reg_pat[i++] = '*';
+		while (p[1] == '*')	/* "**" matches like "*" */
+		    ++p;
 		break;
 	    case '.':
 #ifdef RISCOS
diff --git a/src/gui.c b/src/gui.c
index e955869..f0a5958 100644
--- a/src/gui.c
+++ b/src/gui.c
@@ -1175,6 +1175,9 @@
     --hold_gui_events;
 }
 
+/*
+ * Get the width of the widgets and decorations to the side of the text area.
+ */
     int
 gui_get_base_width()
 {
@@ -1188,6 +1191,9 @@
     return base_width;
 }
 
+/*
+ * Get the height of the widgets and decorations above and below the text area.
+ */
     int
 gui_get_base_height()
 {
@@ -1331,6 +1337,8 @@
 
 /*
  * Set the size of the Vim shell according to Rows and Columns.
+ * If "fit_to_display" is TRUE then the size may be reduced to fit the window
+ * on the screen.
  */
 /*ARGSUSED*/
     void
diff --git a/src/gui.h b/src/gui.h
index 646be97..ce21a7e 100644
--- a/src/gui.h
+++ b/src/gui.h
@@ -318,8 +318,9 @@
     scrollbar_T bottom_sbar;	    /* Bottom scrollbar */
     int		which_scrollbars[3];/* Which scrollbar boxes are active? */
     int		prev_wrap;	    /* For updating the horizontal scrollbar */
-    int		char_width;	    /* Width of char in pixels */
-    int		char_height;	    /* Height of char in pixels + 'linespace' */
+    int		char_width;	    /* Width of char cell in pixels */
+    int		char_height;	    /* Height of char cell in pixels, includes
+				       'linespace' */
     int		char_ascent;	    /* Ascent of char in pixels */
     int		border_width;	    /* Width of our border around text area */
     int		border_offset;	    /* Total pixel offset for all borders */
diff --git a/src/gui_kde_x11.cc b/src/gui_kde_x11.cc
index 21969c5..6a1d99a 100644
--- a/src/gui_kde_x11.cc
+++ b/src/gui_kde_x11.cc
@@ -1412,8 +1412,11 @@
 }//}}}
 #endif
 
+/*
+ * Adjust gui.char_height (after 'linespace' was changed).
+ */
     int
-gui_mch_adjust_charsize ()//{{{
+gui_mch_adjust_charheight ()//{{{
 {
     QFont f(*(gui.current_font));
     QFontMetrics fm(f);
diff --git a/src/gui_mac.c b/src/gui_mac.c
index 8f54249..f01dc86 100644
--- a/src/gui_mac.c
+++ b/src/gui_mac.c
@@ -3936,8 +3936,11 @@
 
 }
 
+/*
+ * Adjust gui.char_height (after 'linespace' was changed).
+ */
     int
-gui_mch_adjust_charsize()
+gui_mch_adjust_charheight()
 {
     FontInfo    font_info;
 
@@ -4092,19 +4095,6 @@
     TextFont(font & 0xFFFF);
 }
 
-#if 0 /* not used */
-/*
- * Return TRUE if the two fonts given are equivalent.
- */
-    int
-gui_mch_same_font(f1, f2)
-    GuiFont	f1;
-    GuiFont	f2;
-{
-    return f1 == f2;
-}
-#endif
-
 /*
  * If a font is not going to be used, free its structure.
  */
@@ -5107,10 +5097,7 @@
     int		flag;
 {
     /*
-     * Menu is always active in itself
-     * (maybe we should only disable a vim menu
-     *	and keep standard menu)
-     *
+     * Menu is always active.
      */
 }
 
@@ -5122,9 +5109,7 @@
     int		h;
 {
     /*
-     * The menu is always at the top of the screen
-     * Maybe a futur version will permit a menu in the window
-     *
+     * The menu is always at the top of the screen.
      */
 }
 
diff --git a/src/gui_photon.c b/src/gui_photon.c
index 293debe..fa7dc92 100644
--- a/src/gui_photon.c
+++ b/src/gui_photon.c
@@ -3004,8 +3004,11 @@
     return( OK );
 }
 
+/*
+ * Adjust gui.char_height (after 'linespace' was changed).
+ */
     int
-gui_mch_adjust_charsize(void)
+gui_mch_adjust_charheight(void)
 {
     FontQueryInfo info;
 
diff --git a/src/gui_riscos.c b/src/gui_riscos.c
index 2f33419..a5d54bd 100644
--- a/src/gui_riscos.c
+++ b/src/gui_riscos.c
@@ -1022,8 +1022,11 @@
     return OK;
 }
 
+/*
+ * Adjust gui.char_height (after 'linespace' was changed).
+ */
     int
-gui_mch_adjust_charsize()
+gui_mch_adjust_charheight()
 {
     return FAIL;
 }
@@ -1083,17 +1086,6 @@
     }
 }
 
-#if 0 /* not used */
-/*
- * Return TRUE if the two fonts given are equivalent.
- */
-    int
-gui_mch_same_font(GuiFont f1, GuiFont f2)
-{
-    return f1 == f2;
-}
-#endif
-
 /*
  * If a font is not going to be used, free its structure.
  */
diff --git a/src/gui_w48.c b/src/gui_w48.c
index 9a0247f..5649aeb 100644
--- a/src/gui_w48.c
+++ b/src/gui_w48.c
@@ -1113,7 +1113,6 @@
 	oldx = x;
 	oldy = y;
     }
-
 }
 
 
@@ -1141,7 +1140,8 @@
     int		w,
     int		h)
 {
-    SetWindowPos(sb->id, NULL, x, y, w, h, SWP_NOZORDER | SWP_NOACTIVATE | SWP_SHOWWINDOW);
+    SetWindowPos(sb->id, NULL, x, y, w, h,
+			      SWP_NOZORDER | SWP_NOACTIVATE | SWP_SHOWWINDOW);
 }
 
     void
@@ -1194,17 +1194,20 @@
 
     gui.char_height = tm.tmHeight
 #ifndef MSWIN16_FASTTEXT
-	+ p_linespace
+				+ p_linespace
 #endif
-	;
+				;
 
     SelectFont(hdc, hfntOld);
 
     ReleaseDC(hwnd, hdc);
 }
 
+/*
+ * Adjust gui.char_height (after 'linespace' was changed).
+ */
     int
-gui_mch_adjust_charsize(void)
+gui_mch_adjust_charheight(void)
 {
     GetFontSize(gui.norm_font);
     return OK;
diff --git a/src/option.c b/src/option.c
index 940c6e7..e177216 100644
--- a/src/option.c
+++ b/src/option.c
@@ -7107,7 +7107,9 @@
 #ifdef FEAT_GUI
     else if (pp == &p_linespace)
     {
-	if (gui.in_use && gui_mch_adjust_charsize() == OK)
+	/* Recompute gui.char_height and resize the Vim window to keep the
+	 * same number of lines. */
+	if (gui.in_use && gui_mch_adjust_charheight() == OK)
 	    gui_set_shellsize(FALSE, FALSE);
     }
 #endif
diff --git a/src/os_mac.c b/src/os_mac.c
index 4a3014b..64f0e09 100644
--- a/src/os_mac.c
+++ b/src/os_mac.c
@@ -55,7 +55,7 @@
  * in `path'.  Called by mch_expandpath().
  * "path" has backslashes before chars that are not to be expanded.
  */
-    int
+    static int
 mac_expandpath(
     garray_T	*gap,
     char_u	*path,
@@ -109,8 +109,7 @@
 	{
 	    if (e)
 		break;
-	    else
-		s = p + 1;
+	    s = p + 1;
 	}
 	/* should use  WILCARDLIST but what about ` */
 	/*	    if (vim_strchr((char_u *)"*?[{~$", *path) != NULL)*/
@@ -134,12 +133,10 @@
     /* now we have one wildcard component between s and e */
     *e = NUL;
 
-#if 1
     dany = *s;
     *s = NUL;
     backslash_halve(buf);
     *s = dany;
-#endif
 
     /* convert the file pattern to a regexp pattern */
     pat = file_pat_to_reg_pat(s, e, NULL, FALSE);
@@ -207,7 +204,7 @@
 	gMyCPB.hFileInfo.ioFDirIndex = index;
 	gMyCPB.hFileInfo.ioDirID     = dirID;
 
-	gErr = PBGetCatInfo(&gMyCPB,false);
+	gErr = PBGetCatInfo(&gMyCPB, false);
 
 	if (gErr == noErr)
 	{
@@ -237,12 +234,14 @@
 		    addfile(gap, buf, flags);
 		}
 	    }
-	    if ((gMyCPB.hFileInfo.ioFlAttrib & ioDirMask) !=0 )
+#if 0	/* What is this supposed to do? */
+	    if ((gMyCPB.hFileInfo.ioFlAttrib & ioDirMask) != 0)
 	    {
 	    }
 	    else
 	    {
 	    }
+#endif
 	}
 	index++;
     }
@@ -254,7 +253,7 @@
 	do
 	{
 	    gMyHPBlock.volumeParam.ioNamePtr = (char_u *) dirname;
-	    gMyHPBlock.volumeParam.ioVRefNum =0;
+	    gMyHPBlock.volumeParam.ioVRefNum = 0;
 	    gMyHPBlock.volumeParam.ioVolIndex = index;
 
 	    gErr = PBHGetVInfo (&gMyHPBlock,false);
@@ -291,164 +290,6 @@
     return gap->ga_len - start_len;
 }
 
-
-#ifdef USE_UNIXFILENAME
-    static int
-pstrcmp(a, b)
-    const void *a, *b;
-{
-    return (pathcmp(*(char **)a, *(char **)b, -1));
-}
-
-    static int
-unix_expandpath(gap, path, wildoff, flags)
-    garray_T	*gap;
-    char_u	*path;
-    int		wildoff;
-    int		flags;		/* EW_* flags */
-{
-    char_u	*buf;
-    char_u	*path_end;
-    char_u	*p, *s, *e;
-    int		start_len, c;
-    char_u	*pat;
-    DIR		*dirp;
-    regmatch_T	regmatch;
-    struct dirent *dp;
-    int		starts_with_dot;
-    int		matches;
-    int		len;
-
-    start_len = gap->ga_len;
-    buf = alloc(STRLEN(path) + BASENAMELEN + 5);/* make room for file name */
-    if (buf == NULL)
-	return 0;
-
-/*
- * Find the first part in the path name that contains a wildcard.
- * Copy it into buf, including the preceding characters.
- */
-    p = buf;
-    s = buf;
-    e = NULL;
-    path_end = path;
-    while (*path_end)
-    {
-	/* May ignore a wildcard that has a backslash before it */
-	if (path_end >= path + wildoff && rem_backslash(path_end))
-	    *p++ = *path_end++;
-	else if (*path_end == '/')
-	{
-	    if (e != NULL)
-		break;
-	    else
-		s = p + 1;
-	}
-	else if (vim_strchr((char_u *)"*?[{~$", *path_end) != NULL)
-	    e = p;
-#ifdef FEAT_MBYTE
-	if (has_mbyte)
-	{
-	    len = (*mb_ptr2len_check)(path_end);
-	    STRNCPY(p, path_end, len);
-	    p += len;
-	    path_end += len;
-	}
-	else
-#endif
-	    *p++ = *path_end++;
-    }
-    e = p;
-    *e = NUL;
-
-    /* now we have one wildcard component between s and e */
-    /* Remove backslashes between "wildoff" and the start of the wildcard
-     * component. */
-    for (p = buf + wildoff; p < s; ++p)
-	if (rem_backslash(p))
-	{
-	    STRCPY(p, p + 1);
-	    --e;
-	    --s;
-	}
-
-    /* convert the file pattern to a regexp pattern */
-    starts_with_dot = (*s == '.');
-    pat = file_pat_to_reg_pat(s, e, NULL, FALSE);
-    if (pat == NULL)
-    {
-	vim_free(buf);
-	return 0;
-    }
-
-    /* compile the regexp into a program */
-#ifdef MACOS_X
-    /* We want to behave like Terminal.app */
-    regmatch.rm_ic = TRUE;
-#else
-    regmatch.rm_ic = FALSE;		/* Don't ever ignore case */
-#endif
-    regmatch.regprog = vim_regcomp(pat, RE_MAGIC);
-    vim_free(pat);
-
-    if (regmatch.regprog == NULL)
-    {
-	vim_free(buf);
-	return 0;
-    }
-
-    /* open the directory for scanning */
-    c = *s;
-    *s = NUL;
-    dirp = opendir(*buf == NUL ? "." : (char *)buf);
-    *s = c;
-
-    /* Find all matching entries */
-    if (dirp != NULL)
-    {
-	for (;;)
-	{
-	    dp = readdir(dirp);
-	    if (dp == NULL)
-		break;
-	    if ((dp->d_name[0] != '.' || starts_with_dot)
-		    && vim_regexec(&regmatch, (char_u *)dp->d_name, (colnr_T)0))
-	    {
-		STRCPY(s, dp->d_name);
-		len = STRLEN(buf);
-		STRCPY(buf + len, path_end);
-		if (mch_has_exp_wildcard(path_end)) /* handle more wildcards */
-		{
-		    /* need to expand another component of the path */
-		    /* remove backslashes for the remaining components only */
-		    (void)unix_expandpath(gap, buf, len + 1, flags);
-		}
-		else
-		{
-		    /* no more wildcards, check if there is a match */
-		    /* remove backslashes for the remaining components only */
-		    if (*path_end)
-			backslash_halve(buf + len + 1);
-		    if (mch_getperm(buf) >= 0)	/* add existing file */
-			addfile(gap, buf, flags);
-		}
-	    }
-	}
-
-	closedir(dirp);
-    }
-
-    vim_free(buf);
-    vim_free(regmatch.regprog);
-
-    matches = gap->ga_len - start_len;
-    if (matches)
-	qsort(((char_u **)gap->ga_data) + start_len, matches,
-						   sizeof(char_u *), pstrcmp);
-    return matches;
-}
-#endif
-
 /*
  * Recursively build up a list of files in "gap" matching the first wildcard
  * in `path'.  Called by expand_wildcards().
@@ -461,7 +302,7 @@
     int		flags)		/* EW_* flags */
 {
 #ifdef USE_UNIXFILENAME
-    return unix_expandpath(gap, path, 0, flags);
+    return unix_expandpath(gap, path, 0, flags, FALSE);
 #else
     char_u first = *path;
     short  scan_volume;
diff --git a/src/os_unix.c b/src/os_unix.c
index 9881d4a..c1b64a7 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -174,8 +174,6 @@
 #endif
 
 #ifndef NO_EXPANDPATH
-static int	pstrcmp __ARGS((const void *, const void *));
-static int	unix_expandpath __ARGS((garray_T *gap, char_u *path, int wildoff, int flags));
 # if defined(MACOS_X) && defined(FEAT_MBYTE)
 extern char_u	*mac_precompose_path __ARGS((char_u *decompPath, size_t decompLen, size_t *precompLen));
 # endif
@@ -4735,19 +4733,11 @@
 #ifndef VMS
 
 #ifndef NO_EXPANDPATH
-    static int
-pstrcmp(a, b)
-    const void *a, *b;
-{
-    return (pathcmp(*(char **)a, *(char **)b, -1));
-}
-
 /*
- * Recursively expand one path component into all matching files and/or
- * directories.
- * "path" has backslashes before chars that are not to be expanded, starting
- * at "path + wildoff".
- * Return the number of matches found.
+ * Expand a path into all matching files and/or directories.  Handles "*",
+ * "?", "[a-z]", "**", etc.
+ * "path" has backslashes before chars that are not to be expanded.
+ * Returns the number of matches found.
  */
     int
 mch_expandpath(gap, path, flags)
@@ -4755,167 +4745,7 @@
     char_u	*path;
     int		flags;		/* EW_* flags */
 {
-    return unix_expandpath(gap, path, 0, flags);
-}
-
-    static int
-unix_expandpath(gap, path, wildoff, flags)
-    garray_T	*gap;
-    char_u	*path;
-    int		wildoff;
-    int		flags;		/* EW_* flags */
-{
-    char_u	*buf;
-    char_u	*path_end;
-    char_u	*p, *s, *e;
-    int		start_len, c;
-    char_u	*pat;
-    DIR		*dirp;
-    regmatch_T	regmatch;
-    struct dirent *dp;
-    int		starts_with_dot;
-    int		matches;
-    int		len;
-
-    start_len = gap->ga_len;
-    buf = alloc(STRLEN(path) + BASENAMELEN + 5);/* make room for file name */
-    if (buf == NULL)
-	return 0;
-
-/*
- * Find the first part in the path name that contains a wildcard.
- * Copy it into buf, including the preceding characters.
- */
-    p = buf;
-    s = buf;
-    e = NULL;
-    path_end = path;
-    while (*path_end != NUL)
-    {
-	/* May ignore a wildcard that has a backslash before it; it will
-	 * be removed by rem_backslash() or file_pat_to_reg_pat() below. */
-	if (path_end >= path + wildoff && rem_backslash(path_end))
-	    *p++ = *path_end++;
-	else if (*path_end == '/')
-	{
-	    if (e != NULL)
-		break;
-	    s = p + 1;
-	}
-	else if (path_end >= path + wildoff
-			 && vim_strchr((char_u *)"*?[{~$", *path_end) != NULL)
-	    e = p;
-#ifdef FEAT_MBYTE
-	if (has_mbyte)
-	{
-	    len = (*mb_ptr2len_check)(path_end);
-	    STRNCPY(p, path_end, len);
-	    p += len;
-	    path_end += len;
-	}
-	else
-#endif
-	    *p++ = *path_end++;
-    }
-    e = p;
-    *e = NUL;
-
-    /* now we have one wildcard component between s and e */
-    /* Remove backslashes between "wildoff" and the start of the wildcard
-     * component. */
-    for (p = buf + wildoff; p < s; ++p)
-	if (rem_backslash(p))
-	{
-	    STRCPY(p, p + 1);
-	    --e;
-	    --s;
-	}
-
-    /* convert the file pattern to a regexp pattern */
-    starts_with_dot = (*s == '.');
-    pat = file_pat_to_reg_pat(s, e, NULL, FALSE);
-    if (pat == NULL)
-    {
-	vim_free(buf);
-	return 0;
-    }
-
-    /* compile the regexp into a program */
-#ifdef MACOS_X /* Can/Should we use CASE_INSENSITIVE_FILENAME instead ?*/
-    regmatch.rm_ic = TRUE;		/* Behave like Terminal.app */
-#else
-    regmatch.rm_ic = FALSE;		/* Don't ever ignore case */
-#endif
-    regmatch.regprog = vim_regcomp(pat, RE_MAGIC);
-    vim_free(pat);
-
-    if (regmatch.regprog == NULL)
-    {
-	vim_free(buf);
-	return 0;
-    }
-
-    /* open the directory for scanning */
-    c = *s;
-    *s = NUL;
-    dirp = opendir(*buf == NUL ? "." : (char *)buf);
-    *s = c;
-
-    /* Find all matching entries */
-    if (dirp != NULL)
-    {
-	for (;;)
-	{
-	    dp = readdir(dirp);
-	    if (dp == NULL)
-		break;
-	    if ((dp->d_name[0] != '.' || starts_with_dot)
-		    && vim_regexec(&regmatch, (char_u *)dp->d_name, (colnr_T)0))
-	    {
-		STRCPY(s, dp->d_name);
-		len = STRLEN(buf);
-		STRCPY(buf + len, path_end);
-		if (mch_has_exp_wildcard(path_end)) /* handle more wildcards */
-		{
-		    /* need to expand another component of the path */
-		    /* remove backslashes for the remaining components only */
-		    (void)unix_expandpath(gap, buf, len + 1, flags);
-		}
-		else
-		{
-		    /* no more wildcards, check if there is a match */
-		    /* remove backslashes for the remaining components only */
-		    if (*path_end != NUL)
-			backslash_halve(buf + len + 1);
-		    if (mch_getperm(buf) >= 0)	/* add existing file */
-		    {
-#if defined(MACOS_X) && defined(FEAT_MBYTE)
-			size_t precomp_len = STRLEN(buf)+1;
-			char_u *precomp_buf =
-			    mac_precompose_path(buf, precomp_len, &precomp_len);
-			if (precomp_buf)
-			{
-			    mch_memmove(buf, precomp_buf, precomp_len);
-			    vim_free(precomp_buf);
-			}
-#endif
-			addfile(gap, buf, flags);
-		    }
-		}
-	    }
-	}
-
-	closedir(dirp);
-    }
-
-    vim_free(buf);
-    vim_free(regmatch.regprog);
-
-    matches = gap->ga_len - start_len;
-    if (matches > 0)
-	qsort(((char_u **)gap->ga_data) + start_len, matches,
-						   sizeof(char_u *), pstrcmp);
-    return matches;
+    return unix_expandpath(gap, path, 0, flags, FALSE);
 }
 #endif
 
diff --git a/src/proto/gui_gtk_x11.pro b/src/proto/gui_gtk_x11.pro
index a22bacf..a97a1ac 100644
--- a/src/proto/gui_gtk_x11.pro
+++ b/src/proto/gui_gtk_x11.pro
@@ -17,7 +17,7 @@
 void gui_mch_settitle __ARGS((char_u *title, char_u *icon));
 void gui_mch_enable_menu __ARGS((int showit));
 void gui_mch_show_toolbar __ARGS((int showit));
-int gui_mch_adjust_charsize __ARGS((void));
+int gui_mch_adjust_charheight __ARGS((void));
 GuiFontset gui_mch_get_fontset __ARGS((char_u *name, int report_error, int fixed_width));
 char_u *gui_mch_font_dialog __ARGS((char_u *oldval));
 int gui_mch_init_font __ARGS((char_u *font_name, int fontset));
diff --git a/src/proto/gui_kde_x11.pro b/src/proto/gui_kde_x11.pro
index b94b979..85ca0ff 100644
--- a/src/proto/gui_kde_x11.pro
+++ b/src/proto/gui_kde_x11.pro
@@ -14,7 +14,7 @@
 void gui_mch_get_screen_dimensions __ARGS((int *screen_w, int *screen_h));
 void gui_mch_enable_menu __ARGS((int flag));
 void gui_mch_show_toolbar __ARGS((int showit));
-int gui_mch_adjust_charsize __ARGS((void));
+int gui_mch_adjust_charheight __ARGS((void));
 GuiFontset gui_mch_get_fontset __ARGS((char_u *name, int report_error, int fixed_width));
 int gui_mch_init_font __ARGS((char_u *font_name, int fontset));
 GuiFont gui_mch_get_font __ARGS((char_u *name, int report_error));
diff --git a/src/proto/gui_mac.pro b/src/proto/gui_mac.pro
index 9a296fd..933fe4d 100644
--- a/src/proto/gui_mac.pro
+++ b/src/proto/gui_mac.pro
@@ -36,7 +36,7 @@
 void gui_mch_set_scrollbar_pos __ARGS((scrollbar_T *sb, int x, int y, int w, int h));
 void gui_mch_create_scrollbar __ARGS((scrollbar_T *sb, int orient));
 void gui_mch_destroy_scrollbar __ARGS((scrollbar_T *sb));
-int gui_mch_adjust_charsize __ARGS((void));
+int gui_mch_adjust_charheight __ARGS((void));
 int gui_mch_init_font __ARGS((char_u *font_name, int fontset));
 GuiFont gui_mch_get_font __ARGS((char_u *name, int giveErrorIfMissing));
 char_u *gui_mch_get_fontname __ARGS((GuiFont font, char_u *name));
diff --git a/src/proto/gui_photon.pro b/src/proto/gui_photon.pro
index f6bb50e..098cdc7 100644
--- a/src/proto/gui_photon.pro
+++ b/src/proto/gui_photon.pro
@@ -59,7 +59,7 @@
 void gui_mch_toggle_tearoffs __ARGS((int enable));
 void gui_mch_show_toolbar __ARGS((int showit));
 int gui_mch_init_font __ARGS((char_u *vim_font_name, int fontset));
-int gui_mch_adjust_charsize __ARGS((void));
+int gui_mch_adjust_charheight __ARGS((void));
 GuiFont gui_mch_get_font __ARGS((char_u *vim_font_name, int report_error));
 char_u *gui_mch_get_fontname __ARGS((GuiFont font, char_u *name));
 void gui_mch_set_font __ARGS((GuiFont font));
diff --git a/src/proto/gui_w16.pro b/src/proto/gui_w16.pro
index 345f148..254a68f 100644
--- a/src/proto/gui_w16.pro
+++ b/src/proto/gui_w16.pro
@@ -12,7 +12,7 @@
 void gui_mch_enable_scrollbar __ARGS((scrollbar_T *sb, int flag));
 void gui_mch_set_scrollbar_pos __ARGS((scrollbar_T *sb, int x, int y, int w, int h));
 void gui_mch_create_scrollbar __ARGS((scrollbar_T *sb, int orient));
-int gui_mch_adjust_charsize __ARGS((void));
+int gui_mch_adjust_charheight __ARGS((void));
 GuiFont gui_mch_get_font __ARGS((char_u *name, int giveErrorIfMissing));
 char_u *gui_mch_get_fontname __ARGS((GuiFont font, char_u *name));
 void gui_mch_free_font __ARGS((GuiFont font));
diff --git a/src/proto/gui_w32.pro b/src/proto/gui_w32.pro
index c10b9a2..491971c 100644
--- a/src/proto/gui_w32.pro
+++ b/src/proto/gui_w32.pro
@@ -12,7 +12,7 @@
 void gui_mch_enable_scrollbar __ARGS((scrollbar_T *sb, int flag));
 void gui_mch_set_scrollbar_pos __ARGS((scrollbar_T *sb, int x, int y, int w, int h));
 void gui_mch_create_scrollbar __ARGS((scrollbar_T *sb, int orient));
-int gui_mch_adjust_charsize __ARGS((void));
+int gui_mch_adjust_charheight __ARGS((void));
 GuiFont gui_mch_get_font __ARGS((char_u *name, int giveErrorIfMissing));
 char_u *gui_mch_get_fontname __ARGS((GuiFont font, char_u *name));
 void gui_mch_free_font __ARGS((GuiFont font));
diff --git a/src/proto/os_mac.pro b/src/proto/os_mac.pro
index ced47fa..ce2fbe6 100644
--- a/src/proto/os_mac.pro
+++ b/src/proto/os_mac.pro
@@ -36,7 +36,6 @@
 int mch_call_shell __ARGS((char_u *cmd, int options));
 int mch_has_wildcard __ARGS((char_u *s));
 int mch_expandpath __ARGS((struct growarray *gap, char_u *path, int flags));
-int mac_expandpath __ARGS((struct growarray *gap, char_u *path, int flags, short start_at, short as_full));
 /*int vim_chdir __ARGS((char *path));*/
 void mch_delay __ARGS((long msec, int ignoreinput));
 void mch_breakcheck __ARGS((void));
diff --git a/src/version.h b/src/version.h
index 208ad48..a2074a2 100644
--- a/src/version.h
+++ b/src/version.h
@@ -36,5 +36,5 @@
 #define VIM_VERSION_NODOT	"vim70aa"
 #define VIM_VERSION_SHORT	"7.0aa"
 #define VIM_VERSION_MEDIUM	"7.0aa ALPHA"
-#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2005 Jul 24)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Jul 24, compiled "
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2005 Jul 25)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Jul 25, compiled "
