diff --git a/src/Makefile b/src/Makefile
index bfdd769..e080477 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -1196,7 +1196,9 @@
 CARBONGUI_INSTALL = install_macosx
 CARBONGUI_TARGETS =
 CARBONGUI_MAN_TARGETS =
-CARBONGUI_TESTTARGET =
+CARBONGUI_TESTTARGET = gui
+CARBONGUI_BUNDLE = $(VIMNAME).app
+CARBONGUI_TESTARG = VIMPROG=../$(CARBONGUI_BUNDLE)/Contents/MacOS/$(VIMTARGET)
 
 # All GUI files
 ALL_GUI_SRC  = gui.c gui_gtk.c gui_gtk_f.c gui_motif.c gui_athena.c gui_gtk_x11.c gui_x11.c gui_at_sb.c gui_at_fs.c pty.c gui_kde.cc gui_kde_widget.cc gui_kde_x11.cc gui_kde_widget_moc.cc
@@ -1465,7 +1467,7 @@
 	os_mswin.pro os_beos.pro os_vms.pro os_riscos.pro $(PERL_PRO)
 
 # Default target is making the executable and tools
-all: $(VIMTARGET) $(TOOLS) languages
+all: $(VIMTARGET) $(TOOLS) languages $(GUI_BUNDLE)
 
 tools: $(TOOLS)
 
@@ -1641,7 +1643,7 @@
 #
 test check:
 	$(MAKE) -f Makefile $(VIMTARGET)
-	cd testdir; $(MAKE) -f Makefile $(GUI_TESTTARGET) VIMPROG=../$(VIMTARGET)
+	cd testdir; $(MAKE) -f Makefile $(GUI_TESTTARGET) VIMPROG=../$(VIMTARGET) $(GUI_TESTARG)
 
 testclean:
 	cd testdir; $(MAKE) -f Makefile clean
@@ -2035,6 +2037,7 @@
 	-rm -f *.o objects/* core $(VIMTARGET).core $(VIMTARGET) xxd/*.o
 	-rm -f $(TOOLS) auto/osdef.h auto/pathdef.c auto/if_perl.c
 	-rm -f conftest* *~ auto/link.sed
+	-rm -rf $(GUI_BUNDLE)
 	-rm -f gui_kde_widget_moc.cc kvim_iface_skel.cc *.kidl
 	if test -d $(PODIR); then \
 		cd $(PODIR); $(MAKE) prefix=$(DESTDIR)$(prefix) clean; \
@@ -2327,6 +2330,9 @@
 objects/os_macosx.o: os_macosx.c
 	$(CCC) -o $@ os_macosx.c
 
+objects/os_mac_conv.o: os_mac_conv.c
+	$(CCC) -o $@ os_mac_conv.c
+
 objects/os_unix.o: os_unix.c
 	$(CCC) -o $@ os_unix.c
 
@@ -2410,13 +2416,11 @@
 ###############################################################################
 ### MacOS X installation
 ###
-### This creates a runnable Vim.app in the src directory
+### This installs a runnable Vim.app in $(prefix)
 
 REZ    = /Developer/Tools/Rez
-APPDIR = $(VIMNAME).app
+APPDIR = $(GUI_BUNDLE)
 RESDIR = $(APPDIR)/Contents/Resources
-# FIXME: i'm sure someone else can do something clever with grep
-# sed and version.h here
 VERSION = $(VIMMAJOR).$(VIMMINOR)
 
 ### Common flags
@@ -2434,7 +2438,10 @@
 #ICON_DOCTXT = $(shell if [ -e doc-txt.icns ] ; then echo doc-txt.icns ; else echo ; fi)
 #ICONS = $(addprefix $(RESDIR)/, $(ICON_APP) $(ICON_DOC) $(ICON_DOCTXT))
 
-install_macosx: bundle-dir bundle-executable bundle-info bundle-resource \
+install_macosx: $(APPDIR)
+	$(INSTALL_DATA_R) $(APPDIR) $(DESTDIR)$(prefix)
+
+$(APPDIR): bundle-dir bundle-executable bundle-info bundle-resource \
 	bundle-language
 
 bundle-dir: $(APPDIR)/Contents $(VIMTARGET)
@@ -2473,11 +2480,8 @@
 bundle-language: bundle-dir
 
 $(APPDIR)/Contents:
-	mkdir $(APPDIR)
-	mkdir $(APPDIR)/Contents
-	mkdir $(APPDIR)/Contents/MacOS
-	mkdir $(RESDIR)
-	mkdir $(RESDIR)/English.lproj
+	-$(SHELL) ./mkinstalldirs $(APPDIR)/Contents/MacOS
+	-$(SHELL) ./mkinstalldirs $(RESDIR)/English.lproj
 
 $(RESDIR)/%.icns: %.icns
 	cp $< $@
diff --git a/src/auto/configure b/src/auto/configure
index 220a981..4b03c67 100755
--- a/src/auto/configure
+++ b/src/auto/configure
@@ -1239,11 +1239,11 @@
 
   if test "$enable_darwin" = "yes"; then
     MACOSX=yes
-    OS_EXTRA_SCR="os_macosx.c";
-    OS_EXTRA_OBJ="objects/os_macosx.o"
+    OS_EXTRA_SCR="os_macosx.c os_mac_conv.c";
+    OS_EXTRA_OBJ="objects/os_macosx.o objects/os_mac_conv.o"
     CPPFLAGS="$CPPFLAGS -DMACOS_X_UNIX -I/Developer/Headers/FlatCarbon -no-cpp-precomp"
 
-            ac_safe=`echo "Carbon/Carbon.h" | sed 'y%./+-%__p_%'`
+                ac_safe=`echo "Carbon/Carbon.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for Carbon/Carbon.h""... $ac_c" 1>&6
 echo "configure:1249: checking for Carbon/Carbon.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
@@ -1277,7 +1277,7 @@
 fi
 
     if test "x$CARBON" = "xyes"; then
-      if test -z "$with_x"; then
+      if test -z "$with_x" -a "X$enable_gui" != Xmotif -a "X$enable_gui" != Xathena -a "X$enable_gui" != Xgtk -a "X$enable_gui" != Xgtk2; then
 	with_x=no
 	DEFAULT_VIMNAME=Vim
       fi
diff --git a/src/config.mk.in b/src/config.mk.in
index ed5f686..d5103ec 100644
--- a/src/config.mk.in
+++ b/src/config.mk.in
@@ -126,6 +126,8 @@
 GUI_TARGETS	= $(@GUITYPE@_TARGETS)
 GUI_MAN_TARGETS	= $(@GUITYPE@_MAN_TARGETS)
 GUI_TESTTARGET	= $(@GUITYPE@_TESTTARGET)
+GUI_TESTARG	= $(@GUITYPE@_TESTARG)
+GUI_BUNDLE	= $(@GUITYPE@_BUNDLE)
 NARROW_PROTO	= @NARROW_PROTO@
 GUI_X_LIBS	= @GUI_X_LIBS@
 MOTIF_LIBNAME	= @MOTIF_LIBNAME@
diff --git a/src/configure.in b/src/configure.in
index a71c20d..4b119f3 100644
--- a/src/configure.in
+++ b/src/configure.in
@@ -103,15 +103,16 @@
 
   if test "$enable_darwin" = "yes"; then
     MACOSX=yes
-    OS_EXTRA_SCR="os_macosx.c";
-    OS_EXTRA_OBJ="objects/os_macosx.o"
+    OS_EXTRA_SCR="os_macosx.c os_mac_conv.c";
+    OS_EXTRA_OBJ="objects/os_macosx.o objects/os_mac_conv.o"
     CPPFLAGS="$CPPFLAGS -DMACOS_X_UNIX -I/Developer/Headers/FlatCarbon -no-cpp-precomp"
 
     dnl If Carbon is found, assume we don't want X11
     dnl unless it was specifically asked for (--with-x)
+    dnl or Motif, Athena or GTK GUI is used.
     AC_CHECK_HEADER(Carbon/Carbon.h, CARBON=yes)
     if test "x$CARBON" = "xyes"; then
-      if test -z "$with_x"; then
+      if test -z "$with_x" -a "X$enable_gui" != Xmotif -a "X$enable_gui" != Xathena -a "X$enable_gui" != Xgtk -a "X$enable_gui" != Xgtk2; then
 	with_x=no
 	DEFAULT_VIMNAME=Vim
       fi
diff --git a/src/eval.c b/src/eval.c
index fa3bad6..21c10fd 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -263,6 +263,7 @@
 static void f_bufnr __ARGS((VAR argvars, VAR retvar));
 static void f_bufwinnr __ARGS((VAR argvars, VAR retvar));
 static void f_byte2line __ARGS((VAR argvars, VAR retvar));
+static void f_byteidx __ARGS((VAR argvars, VAR retvar));
 static void f_char2nr __ARGS((VAR argvars, VAR retvar));
 static void f_cindent __ARGS((VAR argvars, VAR retvar));
 static void f_col __ARGS((VAR argvars, VAR retvar));
@@ -349,6 +350,7 @@
 static void f_remote_peek __ARGS((VAR argvars, VAR retvar));
 static void f_remote_read __ARGS((VAR argvars, VAR retvar));
 static void f_remote_send __ARGS((VAR argvars, VAR retvar));
+static void f_repeat __ARGS((VAR argvars, VAR retvar));
 static void f_server2client __ARGS((VAR argvars, VAR retvar));
 static void f_serverlist __ARGS((VAR argvars, VAR retvar));
 static void f_setline __ARGS((VAR argvars, VAR retvar));
@@ -2817,6 +2819,7 @@
     {"bufnr",		1, 1, f_bufnr},
     {"bufwinnr",	1, 1, f_bufwinnr},
     {"byte2line",	1, 1, f_byte2line},
+    {"byteidx",		2, 2, f_byteidx},
     {"char2nr",		1, 1, f_char2nr},
     {"cindent",		1, 1, f_cindent},
     {"col",		1, 1, f_col},
@@ -2896,6 +2899,7 @@
     {"remote_read",	1, 1, f_remote_read},
     {"remote_send",	2, 3, f_remote_send},
     {"rename",		2, 2, f_rename},
+    {"repeat",		2, 2, f_repeat},
     {"resolve",		1, 1, f_resolve},
     {"search",		1, 2, f_search},
     {"searchpair",	3, 5, f_searchpair},
@@ -3588,6 +3592,42 @@
 }
 
 /*
+ * "byteidx()" function
+ */
+/*ARGSUSED*/
+    static void
+f_byteidx(argvars, retvar)
+    VAR		argvars;
+    VAR		retvar;
+{
+#ifdef FEAT_MBYTE
+    char_u	*t;
+#endif
+    char_u	*str;
+    long	idx;
+
+    str = get_var_string(&argvars[0]);
+    idx = get_var_number(&argvars[1]);
+    retvar->var_val.var_number = -1;
+    if (idx < 0)
+	return;
+
+#ifdef FEAT_MBYTE
+    t = str;
+    for ( ; idx > 0; idx--)
+    {
+	if (*t == NUL)		/* EOL reached */
+	    return;
+	t += mb_ptr2len_check(t);
+    }
+    retvar->var_val.var_number = t - str;
+#else
+    if (idx <= STRLEN(str))
+	retvar->var_val.var_number = idx;
+#endif
+}
+
+/*
  * "char2nr(string)" function
  */
     static void
@@ -6920,6 +6960,45 @@
 #endif
 }
 
+/*
+ * "repeat()" function
+ */
+/*ARGSUSED*/
+    static void
+f_repeat(argvars, retvar)
+    VAR		argvars;
+    VAR		retvar;
+{
+    char_u	*p;
+    int		n;
+    int		slen;
+    int		len;
+    char_u	*r;
+    int		i;
+
+    p = get_var_string(&argvars[0]);
+    n = get_var_number(&argvars[1]);
+
+    retvar->var_type = VAR_STRING;
+    retvar->var_val.var_string = NULL;
+
+    slen = (int)STRLEN(p);
+    len = slen * n;
+
+    if (len <= 0)
+        return;
+
+    r = alloc(len + 1);
+    if (r != NULL)
+    {
+        for (i = 0; i < n; i++)
+	    mch_memmove(r + i * slen, p, (size_t)slen);
+        r[len] = NUL;
+    }
+
+    retvar->var_val.var_string = r;
+}
+
 #ifdef HAVE_STRFTIME
 /*
  * "strftime({format}[, {time}])" function
diff --git a/src/fileio.c b/src/fileio.c
index 02e5ad1..d1c11a0 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -1498,40 +1498,14 @@
 # ifdef MACOS_X
 	    if (fio_flags & FIO_MACROMAN)
 	    {
+		extern int macroman2enc __ARGS((char_u *ptr, long *sizep, long
+			    real_size));
 		/*
 		 * Conversion from Apple MacRoman char encoding to UTF-8 or
-		 * latin1, using standard Carbon framework.
+		 * latin1.  This is in os_mac_conv.c.
 		 */
-		CFStringRef	cfstr;
-		CFRange		r;
-		CFIndex		len = size;
-
-		/* MacRoman is an 8-bit encoding, no need to move bytes to
-		 * conv_rest[]. */
-		cfstr = CFStringCreateWithBytes(NULL, ptr, len,
-						kCFStringEncodingMacRoman, 0);
-		/*
-		 * If there is a conversion error, try using another
-		 * conversion.
-		 */
-		if (cfstr == NULL)
+		if (macroman2enc(ptr, &size, real_size) == FAIL)
 		    goto rewind_retry;
-
-		r.location = 0;
-		r.length = CFStringGetLength(cfstr);
-		if (r.length != CFStringGetBytes(cfstr, r,
-			(enc_utf8) ? kCFStringEncodingUTF8
-						 : kCFStringEncodingISOLatin1,
-			0, /* no lossy conversion */
-			0, /* not external representation */
-			ptr + size, real_size - size, &len))
-		{
-		    CFRelease(cfstr);
-		    goto rewind_retry;
-		}
-		CFRelease(cfstr);
-		mch_memmove(ptr, ptr + size, len);
-		size = len;
 	    }
 	    else
 # endif
@@ -2744,7 +2718,7 @@
 	    if (!(did_cmd = apply_autocmds_exarg(EVENT_FILEAPPENDCMD,
 					 sfname, sfname, FALSE, curbuf, eap)))
 	    {
-		if (bt_nofile(curbuf))
+		if (overwriting && bt_nofile(curbuf))
 		    nofile_err = TRUE;
 		else
 		    apply_autocmds_exarg(EVENT_FILEAPPENDPRE,
@@ -4789,11 +4763,11 @@
 	    /*
 	     * Convert UTF-8 or latin1 to Apple MacRoman.
 	     */
-	    CFStringRef	cfstr;
-	    CFRange	r;
-	    CFIndex	l;
 	    char_u	*from;
 	    size_t	fromlen;
+	    extern int enc2macroman __ARGS((char_u *from, size_t fromlen,
+			char_u *to, int *tolenp, int maxtolen, char_u *rest,
+			int *restlenp));
 
 	    if (ip->bw_restlen > 0)
 	    {
@@ -4811,41 +4785,14 @@
 		fromlen = len;
 	    }
 
-	    ip->bw_restlen = 0;
-	    cfstr = CFStringCreateWithBytes(NULL, from, fromlen,
-		    (enc_utf8) ?
-		    kCFStringEncodingUTF8 : kCFStringEncodingISOLatin1,
-		    0);
-	    while (cfstr == NULL && ip->bw_restlen < 3 && fromlen > 1)
-	    {
-		ip->bw_rest[ip->bw_restlen++] = from[--fromlen];
-		cfstr = CFStringCreateWithBytes(NULL, from, fromlen,
-		    (enc_utf8) ?
-		    kCFStringEncodingUTF8 : kCFStringEncodingISOLatin1,
-		    0);
-	    }
-	    if (cfstr == NULL)
+	    if (enc2macroman(from, fromlen,
+			ip->bw_conv_buf, &len, ip->bw_conv_buflen,
+			ip->bw_rest, &ip->bw_restlen) == FAIL)
 	    {
 		ip->bw_conv_error = TRUE;
 		return FAIL;
 	    }
-
-	    r.location = 0;
-	    r.length = CFStringGetLength(cfstr);
-	    if (r.length != CFStringGetBytes(cfstr, r,
-			kCFStringEncodingMacRoman,
-			0, /* no lossy conversion */
-			0, /* not external representation (since vim
-			    * handles this internally */
-			ip->bw_conv_buf, ip->bw_conv_buflen, &l))
-	    {
-		CFRelease(cfstr);
-		ip->bw_conv_error = TRUE;
-		return FAIL;
-	    }
-	    CFRelease(cfstr);
 	    buf = ip->bw_conv_buf;
-	    len = l;
 	}
 # endif
 
@@ -6696,7 +6643,8 @@
     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-    NULL, NULL, NULL, NULL, NULL, NULL, NULL
+    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
 };
 
 /*
diff --git a/src/mbyte.c b/src/mbyte.c
index db7c652..407f667 100644
--- a/src/mbyte.c
+++ b/src/mbyte.c
@@ -5553,99 +5553,8 @@
 }
 
 #if defined(MACOS_X)
-static char_u *mac_string_convert __ARGS((char_u *ptr, int len, int *lenp, int fail_on_error, CFStringEncoding from, CFStringEncoding to, int *unconvlenp));
-
-/*
- * A Mac version of string_convert_ext() for special cases.
- */
-    static char_u *
-mac_string_convert(ptr, len, lenp, fail_on_error, from, to, unconvlenp)
-    char_u		*ptr;
-    int			len;
-    int			*lenp;
-    int			fail_on_error;
-    CFStringEncoding	from;
-    CFStringEncoding	to;
-    int			*unconvlenp;
-{
-    char_u		*retval, *d;
-    CFStringRef		cfstr;
-    int			buflen, in, out, l, i;
-
-    if (unconvlenp != NULL)
-	*unconvlenp = 0;
-    cfstr = CFStringCreateWithBytes(NULL, ptr, len, from, 0);
-    /* When conversion failed, try excluding bytes from the end, helps when
-     * there is an incomplete byte sequence.  Only do up to 6 bytes to avoid
-     * looping a long time when there really is something unconvertable. */
-    while (cfstr == NULL && unconvlenp != NULL && len > 1 && *unconvlenp < 6)
-    {
-	--len;
-	++*unconvlenp;
-	cfstr = CFStringCreateWithBytes(NULL, ptr, len, from, 0);
-    }
-    if (cfstr == NULL)
-	return NULL;
-    if (to == kCFStringEncodingUTF8)
-	buflen = len * 6 + 1;
-    else
-	buflen = len + 1;
-    retval = alloc(buflen);
-    if (retval == NULL)
-    {
-	CFRelease(cfstr);
-	return NULL;
-    }
-    if (!CFStringGetCString(cfstr, retval, buflen, to))
-    {
-	CFRelease(cfstr);
-	if (fail_on_error)
-	{
-	    vim_free(retval);
-	    return NULL;
-	}
-
-	/* conversion failed for the whole string, but maybe it will work
-	 * for each character */
-	for (d = retval, in = 0, out = 0; in < len && out < buflen - 1;)
-	{
-	    if (from == kCFStringEncodingUTF8)
-		l = utf_ptr2len_check(ptr + in);
-	    else
-		l = 1;
-	    cfstr = CFStringCreateWithBytes(NULL, ptr + in, l, from, 0);
-	    if (cfstr == NULL)
-	    {
-		*d++ = '?';
-		out++;
-	    }
-	    else
-	    {
-		if (!CFStringGetCString(cfstr, d, buflen - out, to))
-		{
-		    *d++ = '?';
-		    out++;
-		}
-		else
-		{
-		    i = strlen(d);
-		    d += i;
-		    out += i;
-		}
-		CFRelease(cfstr);
-	    }
-	    in += l;
-	}
-	*d = NUL;
-	if (lenp != NULL)
-	    *lenp = out;
-	return retval;
-    }
-    CFRelease(cfstr);
-    if (lenp != NULL)
-	*lenp = strlen(retval);
-    return retval;
-}
+/* This is in os_mac_conv.c. */
+extern char_u *mac_string_convert __ARGS((char_u *ptr, int len, int *lenp, int fail_on_error, int from, int to, int *unconvlenp));
 #endif
 
 /*
@@ -5762,30 +5671,22 @@
 # ifdef MACOS_X
 	case CONV_MAC_LATIN1:
 	    retval = mac_string_convert(ptr, len, lenp, vcp->vc_fail,
-					kCFStringEncodingMacRoman,
-					kCFStringEncodingISOLatin1,
-					unconvlenp);
+					'm', 'l', unconvlenp);
 	    break;
 
 	case CONV_LATIN1_MAC:
 	    retval = mac_string_convert(ptr, len, lenp, vcp->vc_fail,
-					kCFStringEncodingISOLatin1,
-					kCFStringEncodingMacRoman,
-					unconvlenp);
+					'l', 'm', unconvlenp);
 	    break;
 
 	case CONV_MAC_UTF8:
 	    retval = mac_string_convert(ptr, len, lenp, vcp->vc_fail,
-					kCFStringEncodingMacRoman,
-					kCFStringEncodingUTF8,
-					unconvlenp);
+					'm', 'u', unconvlenp);
 	    break;
 
 	case CONV_UTF8_MAC:
 	    retval = mac_string_convert(ptr, len, lenp, vcp->vc_fail,
-					kCFStringEncodingUTF8,
-					kCFStringEncodingMacRoman,
-					unconvlenp);
+					'u', 'm', unconvlenp);
 	    break;
 # endif
 
diff --git a/src/mysign b/src/mysign
index dea18b4..1581aa7 100644
--- a/src/mysign
+++ b/src/mysign
@@ -1 +1 @@
-=auto/configure-lastupdate=1089626426.19-@buildcheck=2c92a9e4676b2304fab9af16f1664194=configure.in@md5=021fe2d41058c80f220721c96886b73b
+=auto/configure-lastupdate=1090067895.52-@buildcheck=2c92a9e4676b2304fab9af16f1664194=configure.in@md5=9058353ef67f4d224686695cb80f645e
diff --git a/src/option.c b/src/option.c
index 0dee50b..bcf4183 100644
--- a/src/option.c
+++ b/src/option.c
@@ -3237,7 +3237,15 @@
 	if (p_hlg == NULL)
 	    p_hlg = empty_option;
 	else
+	{
+	    /* zh_CN becomes "cn", zh_TW becomes "tw". */
+	    if (STRNICMP(p_hlg, "zh_", 3) == 0 && STRLEN(p_hlg) >= 5)
+	    {
+		p_hlg[0] = TOLOWER_ASC(p_hlg[3]);
+		p_hlg[1] = TOLOWER_ASC(p_hlg[4]);
+	    }
 	    p_hlg[2] = NUL;
+	}
 	options[idx].flags |= P_ALLOCED;
     }
 }
diff --git a/src/os_mac.h b/src/os_mac.h
index 7991769..940e267 100644
--- a/src/os_mac.h
+++ b/src/os_mac.h
@@ -18,18 +18,23 @@
 
 /*
  * Macintosh machine-dependent things.
+ *
+ * Include the Mac header files, unless also compiling with X11 (the header
+ * files have many conflicts).
  */
-#include <QuickDraw.h>
-#include <ToolUtils.h>
-#include <LowMem.h>
-#include <Scrap.h>
-#include <Sound.h>
-#include <TextUtils.h>
-#include <Memory.h>
-#include <OSUtils.h>
-#include <Files.h>
-#ifdef FEAT_MBYTE
-# include <Script.h>
+#ifndef FEAT_X11
+# include <QuickDraw.h>
+# include <ToolUtils.h>
+# include <LowMem.h>
+# include <Scrap.h>
+# include <Sound.h>
+# include <TextUtils.h>
+# include <Memory.h>
+# include <OSUtils.h>
+# include <Files.h>
+# ifdef FEAT_MBYTE
+#  include <Script.h>
+# endif
 #endif
 
 /*
@@ -303,10 +308,13 @@
 #endif
 
 #define DFLT_ERRORFILE		"errors.err"
-#ifdef COLON_AS_PATHSEP
-# define DFLT_RUNTIMEPATH	"$VIM:vimfiles,$VIMRUNTIME,$VIM:vimfiles:after"
-#else
-# define DFLT_RUNTIMEPATH	"~/.vim,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,~/.vim/after"
+
+#ifndef DFLT_RUNTIMEPATH
+# ifdef COLON_AS_PATHSEP
+#  define DFLT_RUNTIMEPATH	"$VIM:vimfiles,$VIMRUNTIME,$VIM:vimfiles:after"
+# else
+#  define DFLT_RUNTIMEPATH	"~/.vim,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,~/.vim/after"
+# endif
 #endif
 
 /*
diff --git a/src/os_mac.pbproj/project.pbxproj b/src/os_mac.pbproj/project.pbxproj
new file mode 100644
index 0000000..cacf9c9
--- /dev/null
+++ b/src/os_mac.pbproj/project.pbxproj
@@ -0,0 +1,1537 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 34;
+	objects = {
+		00EF808200C49A857F000001 = {
+			isa = PBXFileReference;
+			path = gui_mac.rsrc;
+			refType = 2;
+		};
+		00EF808300C49A857F000001 = {
+			fileRef = 00EF808200C49A857F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+//000
+//001
+//002
+//003
+//004
+//010
+//011
+//012
+//013
+//014
+		014D3B8900BB52A07F000001 = {
+			children = (
+				273798BE00B36B037F000001,
+				273798C600B36B037F000001,
+				273798CA00B36B037F000001,
+				273798CE00B36B037F000001,
+				273798D200B36B037F000001,
+				273798D400B36B037F000001,
+				273798D500B36B037F000001,
+				273798D600B36B037F000001,
+				273798E000B36B037F000001,
+				273798E100B36B037F000001,
+				273798E500B36B037F000001,
+				273798E800B36B037F000001,
+				273798EC00B36B047F000001,
+				273798F100B36B047F000001,
+				273798F200B36B047F000001,
+				2737992C00B36BA77F000001,
+			);
+			isa = PBXGroup;
+			name = Headers;
+			refType = 4;
+		};
+		014D3B8B00BB59CA7F000001 = {
+			children = (
+				273798E200B36B037F000001,
+				273798ED00B36B047F000001,
+				273798D300B36B037F000001,
+			);
+			isa = PBXGroup;
+			name = "Unused Source";
+			path = "";
+			refType = 4;
+		};
+//010
+//011
+//012
+//013
+//014
+//020
+//021
+//022
+//023
+//024
+		0249A665FF388DC511CA2CEA = {
+			isa = PBXApplicationReference;
+			path = Vim.app;
+			refType = 3;
+		};
+		0249A669FF388E3911CA2CEA = {
+			isa = PBXFileReference;
+			name = "libstdc++.a";
+			path = "/usr/lib/libstdc++.a";
+			refType = 0;
+		};
+		0249A66AFF388E3911CA2CEA = {
+			fileRef = 0249A669FF388E3911CA2CEA;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+//020
+//021
+//022
+//023
+//024
+//040
+//041
+//042
+//043
+//044
+		04313892FE3035C9C02AAC07 = {
+			buildActionMask = 2147483647;
+			files = (
+				2737992900B36B047F000001,
+				00EF808300C49A857F000001,
+			);
+			isa = PBXRezBuildPhase;
+			name = "ResourceManager Resources";
+		};
+//040
+//041
+//042
+//043
+//044
+//050
+//051
+//052
+//053
+//054
+		05952DFCFFF02D1B11CA0E50 = {
+			buildRules = (
+			);
+			buildSettings = {
+				COPY_PHASE_STRIP = NO;
+				OPTIMIZATION_CFLAGS = "-O0";
+			};
+			isa = PBXBuildStyle;
+			name = Development;
+		};
+		05952DFDFFF02D1B11CA0E50 = {
+			buildRules = (
+			);
+			buildSettings = {
+				COPY_PHASE_STRIP = YES;
+			};
+			isa = PBXBuildStyle;
+			name = Deployment;
+		};
+//050
+//051
+//052
+//053
+//054
+//060
+//061
+//062
+//063
+//064
+		0640BAA4FFF0323A11CA0E50 = {
+			isa = PBXFrameworkReference;
+			name = ApplicationServices.framework;
+			path = /System/Library/Frameworks/ApplicationServices.framework;
+			refType = 0;
+		};
+		0640BAA5FFF0323A11CA0E50 = {
+			isa = PBXFrameworkReference;
+			name = CoreServices.framework;
+			path = /System/Library/Frameworks/CoreServices.framework;
+			refType = 0;
+		};
+		06B64A4A00BBD0257F000001 = {
+			isa = PBXFileReference;
+			path = move.c;
+			refType = 4;
+		};
+		06B64A4B00BBD0257F000001 = {
+			fileRef = 06B64A4A00BBD0257F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+//060
+//061
+//062
+//063
+//064
+//0C0
+//0C1
+//0C2
+//0C3
+//0C4
+		0C11626000BD3A897F000001 = {
+			isa = PBXFileReference;
+			path = os_unix.c;
+			refType = 4;
+		};
+//0C0
+//0C1
+//0C2
+//0C3
+//0C4
+//0D0
+//0D1
+//0D2
+//0D3
+//0D4
+		0D29631B00C303B07F000001 = {
+			children = (
+				273798CF00B36B037F000001,
+				273798DF00B36B037F000001,
+				0C11626000BD3A897F000001,
+				F5E2C53F00FACD0901000001,
+			);
+			isa = PBXGroup;
+			name = "Mac Port Sources";
+			refType = 4;
+		};
+//0D0
+//0D1
+//0D2
+//0D3
+//0D4
+//120
+//121
+//122
+//123
+//124
+		12FD6A1900C500167F000001 = {
+			isa = PBXFileReference;
+			path = gui_mac.icns;
+			refType = 4;
+		};
+		12FD6A1A00C500167F000001 = {
+			fileRef = 12FD6A1900C500167F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+//120
+//121
+//122
+//123
+//124
+//190
+//191
+//192
+//193
+//194
+		195DF8C9FE9D4F0611CA2CBB = {
+			children = (
+				0249A665FF388DC511CA2CEA,
+			);
+			isa = PBXGroup;
+			name = Products;
+			refType = 4;
+		};
+//190
+//191
+//192
+//193
+//194
+//200
+//201
+//202
+//203
+//204
+		20286C28FDCF999611CA2CEA = {
+			buildStyles = (
+				05952DFCFFF02D1B11CA0E50,
+				05952DFDFFF02D1B11CA0E50,
+			);
+			isa = PBXProject;
+			mainGroup = 20286C29FDCF999611CA2CEA;
+			projectDirPath = "";
+			targets = (
+				20286C34FDCF999611CA2CEA,
+			);
+		};
+		20286C29FDCF999611CA2CEA = {
+			children = (
+				2737993000B36BF77F000001,
+				014D3B8900BB52A07F000001,
+				014D3B8B00BB59CA7F000001,
+				F5D0FB2B00F8C29A01000001,
+				0D29631B00C303B07F000001,
+				20286C2AFDCF999611CA2CEA,
+				20286C2CFDCF999611CA2CEA,
+				20286C32FDCF999611CA2CEA,
+				195DF8C9FE9D4F0611CA2CBB,
+			);
+			isa = PBXGroup;
+			name = vim;
+			path = "";
+			refType = 4;
+		};
+		20286C2AFDCF999611CA2CEA = {
+			children = (
+				20286C2BFDCF999611CA2CEA,
+				273798BF00B36B037F000001,
+				273798C000B36B037F000001,
+				273798C100B36B037F000001,
+				273798C200B36B037F000001,
+				273798C300B36B037F000001,
+				273798C400B36B037F000001,
+				273798C500B36B037F000001,
+				273798C700B36B037F000001,
+				273798C800B36B037F000001,
+				7E3AAAD704841C0000EFC20E,
+				273798C900B36B037F000001,
+				273798CB00B36B037F000001,
+				273798CC00B36B037F000001,
+				273798CD00B36B037F000001,
+				273798D100B36B037F000001,
+				273798D700B36B037F000001,
+				273798D800B36B037F000001,
+				273798D900B36B037F000001,
+				273798DA00B36B037F000001,
+				273798DB00B36B037F000001,
+				273798DC00B36B037F000001,
+				273798DD00B36B037F000001,
+				06B64A4A00BBD0257F000001,
+				2737992A00B36BA77F000001,
+				2737992B00B36BA77F000001,
+				273798DE00B36B037F000001,
+				273798E300B36B037F000001,
+				273798E400B36B037F000001,
+				273798E600B36B037F000001,
+				273798E700B36B037F000001,
+				273798E900B36B037F000001,
+				273798EA00B36B037F000001,
+				273798EB00B36B047F000001,
+				273798EE00B36B047F000001,
+				273798EF00B36B047F000001,
+				273798F000B36B047F000001,
+				273798F300B36B047F000001,
+			);
+			isa = PBXGroup;
+			name = Sources;
+			path = "";
+			refType = 4;
+		};
+		20286C2BFDCF999611CA2CEA = {
+			isa = PBXFileReference;
+			path = main.c;
+			refType = 4;
+		};
+		20286C2CFDCF999611CA2CEA = {
+			children = (
+				12FD6A1900C500167F000001,
+				00EF808200C49A857F000001,
+				273798D000B36B037F000001,
+			);
+			isa = PBXGroup;
+			name = Resources;
+			path = "";
+			refType = 4;
+		};
+		20286C32FDCF999611CA2CEA = {
+			children = (
+				20286C33FDCF999611CA2CEA,
+				0249A669FF388E3911CA2CEA,
+				0640BAA4FFF0323A11CA0E50,
+				0640BAA5FFF0323A11CA0E50,
+			);
+			isa = PBXGroup;
+			name = "External Frameworks and Libraries";
+			path = "";
+			refType = 4;
+		};
+		20286C33FDCF999611CA2CEA = {
+			isa = PBXFrameworkReference;
+			name = Carbon.framework;
+			path = /System/Library/Frameworks/Carbon.framework;
+			refType = 0;
+		};
+		20286C34FDCF999611CA2CEA = {
+			buildPhases = (
+				20286C35FDCF999611CA2CEA,
+				20286C36FDCF999611CA2CEA,
+				20286C38FDCF999611CA2CEA,
+				20286C3BFDCF999611CA2CEA,
+				04313892FE3035C9C02AAC07,
+			);
+			buildSettings = {
+				FRAMEWORK_SEARCH_PATHS = "";
+				HEADER_SEARCH_PATHS = "proto /Developer/Headers/FlatCarbon";
+				INSTALL_PATH = "$(HOME)/Applications";
+				LIBRARY_SEARCH_PATHS = "";
+				OTHER_CFLAGS = "-DMACOS_X_UNIX";
+				OTHER_LDFLAGS = "";
+				OTHER_REZFLAGS = "";
+				PRODUCT_NAME = Vim;
+				SECTORDER_FLAGS = "";
+				WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas";
+				WRAPPER_EXTENSION = app;
+			};
+			dependencies = (
+			);
+			isa = PBXApplicationTarget;
+			name = vim;
+			productInstallPath = "$(HOME)/Applications";
+			productName = vim;
+			productReference = 0249A665FF388DC511CA2CEA;
+			productSettingsXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
+<!DOCTYPE plist SYSTEM \"file://localhost/System/Library/DTDs/PropertyList.dtd\">
+<plist version=\"0.9\">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>English</string>
+	<key>CFBundleDocumentTypes</key>
+	<array>
+	    <dict>
+		<key>CFBundleTypeExtensions</key>
+		<array>
+		    <string>*</string>
+		</array>
+		<key>CFBundleTypeIconFile</key>
+		<string>txt.icns</string>
+		<key>CFBundleTypeName</key>
+		<string>NSStringPboardType</string>
+		<key>CFBundleTypeOSTypes</key>
+		<array>
+		    <string>****</string>
+		</array>
+		<key>CFBundleTypeRole</key>
+		<string>Editor</string>
+	    </dict>
+	</array>
+	<key>CFBundleExecutable</key>
+	<string>Vim</string>
+	<key>CFBundleGetInfoString</key>
+	<string></string>
+	<key>CFBundleIconFile</key>
+	<string>gui_mac.icns</string>
+	<key>CFBundleIdentifier</key>
+	<string></string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>7.0aa</string>
+	<key>CFBundleName</key>
+	<string>Vim</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>Vim 7.0aa</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>0.1</string>
+	<key>CSResourcesFileMapped</key>
+	<true/>
+</dict>
+</plist>
+";
+			shouldUseHeadermap = 1;
+		};
+		20286C35FDCF999611CA2CEA = {
+			buildActionMask = 2147483647;
+			files = (
+				273798F400B36B047F000001,
+				273798F500B36B047F000001,
+				273798F600B36B047F000001,
+				273798F700B36B047F000001,
+				273798F800B36B047F000001,
+				273798F900B36B047F000001,
+				273798FA00B36B047F000001,
+				273798FB00B36B047F000001,
+				273798FC00B36B047F000001,
+				273798FD00B36B047F000001,
+				273798FE00B36B047F000001,
+				273798FF00B36B047F000001,
+				2737990000B36B047F000001,
+				2737990100B36B047F000001,
+				2737990200B36B047F000001,
+				2737992D00B36BA77F000001,
+			);
+			isa = PBXHeadersBuildPhase;
+			name = Headers;
+		};
+		20286C36FDCF999611CA2CEA = {
+			buildActionMask = 2147483647;
+			files = (
+				12FD6A1A00C500167F000001,
+			);
+			isa = PBXResourcesBuildPhase;
+			name = "Bundle Resources";
+		};
+		20286C38FDCF999611CA2CEA = {
+			buildActionMask = 2147483647;
+			files = (
+				20286C39FDCF999611CA2CEA,
+				2737990300B36B047F000001,
+				2737990400B36B047F000001,
+				2737990500B36B047F000001,
+				2737990600B36B047F000001,
+				2737990700B36B047F000001,
+				2737990800B36B047F000001,
+				2737990900B36B047F000001,
+				2737990A00B36B047F000001,
+				2737990B00B36B047F000001,
+				2737990C00B36B047F000001,
+				2737990D00B36B047F000001,
+				2737990E00B36B047F000001,
+				2737990F00B36B047F000001,
+				2737991000B36B047F000001,
+				2737991100B36B047F000001,
+				2737991300B36B047F000001,
+				2737991400B36B047F000001,
+				2737991500B36B047F000001,
+				2737991600B36B047F000001,
+				2737991700B36B047F000001,
+				2737991800B36B047F000001,
+				2737991900B36B047F000001,
+				2737991A00B36B047F000001,
+				2737991D00B36B047F000001,
+				2737991E00B36B047F000001,
+				2737991F00B36B047F000001,
+				2737992000B36B047F000001,
+				2737992100B36B047F000001,
+				2737992200B36B047F000001,
+				2737992300B36B047F000001,
+				2737992500B36B047F000001,
+				2737992600B36B047F000001,
+				2737992700B36B047F000001,
+				2737992800B36B047F000001,
+				2737992E00B36BA77F000001,
+				2737992F00B36BA77F000001,
+				06B64A4B00BBD0257F000001,
+				F5D0FB2D00F8C2BF01000001,
+				F5E2C54000FACD0901000001,
+				F5CC3220018E3F6801891561,
+				7E3AAAD804841C0000EFC20E,
+				7E556E1404841F7900882585,
+			);
+			isa = PBXSourcesBuildPhase;
+			name = Sources;
+		};
+		20286C39FDCF999611CA2CEA = {
+			fileRef = 20286C2BFDCF999611CA2CEA;
+			isa = PBXBuildFile;
+			settings = {
+				ATTRIBUTES = (
+				);
+			};
+		};
+		20286C3BFDCF999611CA2CEA = {
+			buildActionMask = 2147483647;
+			files = (
+				20286C3CFDCF999611CA2CEA,
+				0249A66AFF388E3911CA2CEA,
+			);
+			isa = PBXFrameworksBuildPhase;
+			name = "Frameworks & Libraries";
+		};
+		20286C3CFDCF999611CA2CEA = {
+			fileRef = 20286C33FDCF999611CA2CEA;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+//200
+//201
+//202
+//203
+//204
+//270
+//271
+//272
+//273
+//274
+		273798BE00B36B037F000001 = {
+			isa = PBXFileReference;
+			path = ascii.h;
+			refType = 4;
+		};
+		273798BF00B36B037F000001 = {
+			isa = PBXFileReference;
+			path = buffer.c;
+			refType = 4;
+		};
+		273798C000B36B037F000001 = {
+			isa = PBXFileReference;
+			path = charset.c;
+			refType = 4;
+		};
+		273798C100B36B037F000001 = {
+			isa = PBXFileReference;
+			path = diff.c;
+			refType = 4;
+		};
+		273798C200B36B037F000001 = {
+			isa = PBXFileReference;
+			path = digraph.c;
+			refType = 4;
+		};
+		273798C300B36B037F000001 = {
+			isa = PBXFileReference;
+			path = edit.c;
+			refType = 4;
+		};
+		273798C400B36B037F000001 = {
+			isa = PBXFileReference;
+			path = eval.c;
+			refType = 4;
+		};
+		273798C500B36B037F000001 = {
+			isa = PBXFileReference;
+			path = ex_cmds.c;
+			refType = 4;
+		};
+		273798C600B36B037F000001 = {
+			isa = PBXFileReference;
+			path = ex_cmds.h;
+			refType = 4;
+		};
+		273798C700B36B037F000001 = {
+			isa = PBXFileReference;
+			path = ex_cmds2.c;
+			refType = 4;
+		};
+		273798C800B36B037F000001 = {
+			isa = PBXFileReference;
+			path = ex_docmd.c;
+			refType = 4;
+		};
+		273798C900B36B037F000001 = {
+			isa = PBXFileReference;
+			path = ex_getln.c;
+			refType = 4;
+		};
+		273798CA00B36B037F000001 = {
+			isa = PBXFileReference;
+			path = feature.h;
+			refType = 4;
+		};
+		273798CB00B36B037F000001 = {
+			isa = PBXFileReference;
+			path = fileio.c;
+			refType = 4;
+		};
+		273798CC00B36B037F000001 = {
+			isa = PBXFileReference;
+			path = fold.c;
+			refType = 4;
+		};
+		273798CD00B36B037F000001 = {
+			isa = PBXFileReference;
+			path = getchar.c;
+			refType = 4;
+		};
+		273798CE00B36B037F000001 = {
+			isa = PBXFileReference;
+			path = globals.h;
+			refType = 4;
+		};
+		273798CF00B36B037F000001 = {
+			isa = PBXFileReference;
+			path = gui_mac.c;
+			refType = 4;
+		};
+		273798D000B36B037F000001 = {
+			isa = PBXFileReference;
+			path = gui_mac.r;
+			refType = 4;
+		};
+		273798D100B36B037F000001 = {
+			isa = PBXFileReference;
+			path = gui.c;
+			refType = 4;
+		};
+		273798D200B36B037F000001 = {
+			isa = PBXFileReference;
+			path = gui.h;
+			refType = 4;
+		};
+		273798D300B36B037F000001 = {
+			isa = PBXFileReference;
+			path = integration.c;
+			refType = 4;
+		};
+		273798D400B36B037F000001 = {
+			isa = PBXFileReference;
+			path = integration.h;
+			refType = 4;
+		};
+		273798D500B36B037F000001 = {
+			isa = PBXFileReference;
+			path = keymap.h;
+			refType = 4;
+		};
+		273798D600B36B037F000001 = {
+			isa = PBXFileReference;
+			path = macros.h;
+			refType = 4;
+		};
+		273798D700B36B037F000001 = {
+			isa = PBXFileReference;
+			path = mark.c;
+			refType = 4;
+		};
+		273798D800B36B037F000001 = {
+			isa = PBXFileReference;
+			path = memfile.c;
+			refType = 4;
+		};
+		273798D900B36B037F000001 = {
+			isa = PBXFileReference;
+			path = memline.c;
+			refType = 4;
+		};
+		273798DA00B36B037F000001 = {
+			isa = PBXFileReference;
+			path = menu.c;
+			refType = 4;
+		};
+		273798DB00B36B037F000001 = {
+			isa = PBXFileReference;
+			path = message.c;
+			refType = 4;
+		};
+		273798DC00B36B037F000001 = {
+			isa = PBXFileReference;
+			path = misc1.c;
+			refType = 4;
+		};
+		273798DD00B36B037F000001 = {
+			isa = PBXFileReference;
+			path = misc2.c;
+			refType = 4;
+		};
+		273798DE00B36B037F000001 = {
+			isa = PBXFileReference;
+			path = ops.c;
+			refType = 4;
+		};
+		273798DF00B36B037F000001 = {
+			isa = PBXFileReference;
+			path = os_mac.c;
+			refType = 4;
+		};
+		273798E000B36B037F000001 = {
+			isa = PBXFileReference;
+			path = os_mac.h;
+			refType = 4;
+		};
+		273798E100B36B037F000001 = {
+			isa = PBXFileReference;
+			path = proto.h;
+			refType = 4;
+		};
+		273798E200B36B037F000001 = {
+			isa = PBXFileReference;
+			path = pty.c;
+			refType = 4;
+		};
+		273798E300B36B037F000001 = {
+			isa = PBXFileReference;
+			path = quickfix.c;
+			refType = 4;
+		};
+		273798E400B36B037F000001 = {
+			isa = PBXFileReference;
+			path = regexp.c;
+			refType = 4;
+		};
+		273798E500B36B037F000001 = {
+			isa = PBXFileReference;
+			path = regexp.h;
+			refType = 4;
+		};
+		273798E600B36B037F000001 = {
+			isa = PBXFileReference;
+			path = screen.c;
+			refType = 4;
+		};
+		273798E700B36B037F000001 = {
+			isa = PBXFileReference;
+			path = search.c;
+			refType = 4;
+		};
+		273798E800B36B037F000001 = {
+			isa = PBXFileReference;
+			path = structs.h;
+			refType = 4;
+		};
+		273798E900B36B037F000001 = {
+			isa = PBXFileReference;
+			path = syntax.c;
+			refType = 4;
+		};
+		273798EA00B36B037F000001 = {
+			isa = PBXFileReference;
+			path = tag.c;
+			refType = 4;
+		};
+		273798EB00B36B047F000001 = {
+			isa = PBXFileReference;
+			path = term.c;
+			refType = 4;
+		};
+		273798EC00B36B047F000001 = {
+			isa = PBXFileReference;
+			path = term.h;
+			refType = 4;
+		};
+		273798ED00B36B047F000001 = {
+			isa = PBXFileReference;
+			path = termlib.c;
+			refType = 4;
+		};
+		273798EE00B36B047F000001 = {
+			isa = PBXFileReference;
+			path = ui.c;
+			refType = 4;
+		};
+		273798EF00B36B047F000001 = {
+			isa = PBXFileReference;
+			path = undo.c;
+			refType = 4;
+		};
+		273798F000B36B047F000001 = {
+			isa = PBXFileReference;
+			path = version.c;
+			refType = 4;
+		};
+		273798F100B36B047F000001 = {
+			isa = PBXFileReference;
+			path = version.h;
+			refType = 4;
+		};
+		273798F200B36B047F000001 = {
+			isa = PBXFileReference;
+			path = vim.h;
+			refType = 4;
+		};
+		273798F300B36B047F000001 = {
+			isa = PBXFileReference;
+			path = window.c;
+			refType = 4;
+		};
+		273798F400B36B047F000001 = {
+			fileRef = 273798BE00B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+				ATTRIBUTES = (
+				);
+			};
+		};
+		273798F500B36B047F000001 = {
+			fileRef = 273798C600B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		273798F600B36B047F000001 = {
+			fileRef = 273798CA00B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+				ATTRIBUTES = (
+				);
+			};
+		};
+		273798F700B36B047F000001 = {
+			fileRef = 273798CE00B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		273798F800B36B047F000001 = {
+			fileRef = 273798D200B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		273798F900B36B047F000001 = {
+			fileRef = 273798D400B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		273798FA00B36B047F000001 = {
+			fileRef = 273798D500B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		273798FB00B36B047F000001 = {
+			fileRef = 273798D600B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		273798FC00B36B047F000001 = {
+			fileRef = 273798E000B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		273798FD00B36B047F000001 = {
+			fileRef = 273798E100B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		273798FE00B36B047F000001 = {
+			fileRef = 273798E500B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		273798FF00B36B047F000001 = {
+			fileRef = 273798E800B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737990000B36B047F000001 = {
+			fileRef = 273798EC00B36B047F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737990100B36B047F000001 = {
+			fileRef = 273798F100B36B047F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737990200B36B047F000001 = {
+			fileRef = 273798F200B36B047F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737990300B36B047F000001 = {
+			fileRef = 273798BF00B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737990400B36B047F000001 = {
+			fileRef = 273798C000B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737990500B36B047F000001 = {
+			fileRef = 273798C100B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737990600B36B047F000001 = {
+			fileRef = 273798C200B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737990700B36B047F000001 = {
+			fileRef = 273798C300B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737990800B36B047F000001 = {
+			fileRef = 273798C400B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737990900B36B047F000001 = {
+			fileRef = 273798C500B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737990A00B36B047F000001 = {
+			fileRef = 273798C700B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737990B00B36B047F000001 = {
+			fileRef = 273798C800B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737990C00B36B047F000001 = {
+			fileRef = 273798C900B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737990D00B36B047F000001 = {
+			fileRef = 273798CB00B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737990E00B36B047F000001 = {
+			fileRef = 273798CC00B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737990F00B36B047F000001 = {
+			fileRef = 273798CD00B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737991000B36B047F000001 = {
+			fileRef = 273798CF00B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737991100B36B047F000001 = {
+			fileRef = 273798D100B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737991300B36B047F000001 = {
+			fileRef = 273798D700B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737991400B36B047F000001 = {
+			fileRef = 273798D800B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737991500B36B047F000001 = {
+			fileRef = 273798D900B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737991600B36B047F000001 = {
+			fileRef = 273798DA00B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737991700B36B047F000001 = {
+			fileRef = 273798DB00B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737991800B36B047F000001 = {
+			fileRef = 273798DC00B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737991900B36B047F000001 = {
+			fileRef = 273798DD00B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737991A00B36B047F000001 = {
+			fileRef = 273798DE00B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737991D00B36B047F000001 = {
+			fileRef = 273798E300B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737991E00B36B047F000001 = {
+			fileRef = 273798E400B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737991F00B36B047F000001 = {
+			fileRef = 273798E600B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737992000B36B047F000001 = {
+			fileRef = 273798E700B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737992100B36B047F000001 = {
+			fileRef = 273798E900B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737992200B36B047F000001 = {
+			fileRef = 273798EA00B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737992300B36B047F000001 = {
+			fileRef = 273798EB00B36B047F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737992500B36B047F000001 = {
+			fileRef = 273798EE00B36B047F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737992600B36B047F000001 = {
+			fileRef = 273798EF00B36B047F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737992700B36B047F000001 = {
+			fileRef = 273798F000B36B047F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737992800B36B047F000001 = {
+			fileRef = 273798F300B36B047F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737992900B36B047F000001 = {
+			fileRef = 273798D000B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737992A00B36BA77F000001 = {
+			isa = PBXFileReference;
+			path = normal.c;
+			refType = 4;
+		};
+		2737992B00B36BA77F000001 = {
+			isa = PBXFileReference;
+			path = option.c;
+			refType = 4;
+		};
+		2737992C00B36BA77F000001 = {
+			isa = PBXFileReference;
+			path = option.h;
+			refType = 4;
+		};
+		2737992D00B36BA77F000001 = {
+			fileRef = 2737992C00B36BA77F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737992E00B36BA77F000001 = {
+			fileRef = 2737992A00B36BA77F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737992F00B36BA77F000001 = {
+			fileRef = 2737992B00B36BA77F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		2737993000B36BF77F000001 = {
+			children = (
+				2737993100B36C397F000001,
+				2737993200B36C397F000001,
+				2737993300B36C397F000001,
+				2737993400B36C397F000001,
+				2737993500B36C397F000001,
+				2737993600B36C397F000001,
+				2737993700B36C397F000001,
+				2737993800B36C397F000001,
+				2737993900B36C397F000001,
+				2737993A00B36C397F000001,
+				2737993B00B36C397F000001,
+				2737993C00B36C397F000001,
+				2737993D00B36C397F000001,
+				2737993E00B36C397F000001,
+				2737993F00B36C397F000001,
+				2737994000B36C397F000001,
+				2737994100B36C397F000001,
+				2737994200B36C397F000001,
+				2737994300B36C397F000001,
+				2737994400B36C397F000001,
+				2737994500B36C397F000001,
+				2737994600B36C397F000001,
+				2737994700B36C397F000001,
+				2737994800B36C397F000001,
+				2737994900B36C397F000001,
+				2737994A00B36C397F000001,
+				2737994B00B36C397F000001,
+				2737994C00B36C397F000001,
+				2737994D00B36C397F000001,
+				2737994E00B36C397F000001,
+				2737994F00B36C397F000001,
+				2737995000B36C397F000001,
+				2737995100B36C397F000001,
+				2737995200B36C397F000001,
+				2737995300B36C397F000001,
+				2737995400B36C397F000001,
+				2737995500B36C397F000001,
+				2737995600B36C397F000001,
+				2737995700B36C397F000001,
+				2737995800B36C397F000001,
+				2737995900B36C397F000001,
+			);
+			isa = PBXGroup;
+			name = Prototype;
+			path = proto;
+			refType = 4;
+		};
+		2737993100B36C397F000001 = {
+			isa = PBXFileReference;
+			name = buffer.pro;
+			path = proto/buffer.pro;
+			refType = 4;
+		};
+		2737993200B36C397F000001 = {
+			isa = PBXFileReference;
+			name = charset.pro;
+			path = proto/charset.pro;
+			refType = 4;
+		};
+		2737993300B36C397F000001 = {
+			isa = PBXFileReference;
+			name = diff.pro;
+			path = proto/diff.pro;
+			refType = 4;
+		};
+		2737993400B36C397F000001 = {
+			isa = PBXFileReference;
+			name = digraph.pro;
+			path = proto/digraph.pro;
+			refType = 4;
+		};
+		2737993500B36C397F000001 = {
+			isa = PBXFileReference;
+			name = edit.pro;
+			path = proto/edit.pro;
+			refType = 4;
+		};
+		2737993600B36C397F000001 = {
+			isa = PBXFileReference;
+			name = eval.pro;
+			path = proto/eval.pro;
+			refType = 4;
+		};
+		2737993700B36C397F000001 = {
+			isa = PBXFileReference;
+			name = ex_cmds.pro;
+			path = proto/ex_cmds.pro;
+			refType = 4;
+		};
+		2737993800B36C397F000001 = {
+			isa = PBXFileReference;
+			name = ex_cmds2.pro;
+			path = proto/ex_cmds2.pro;
+			refType = 4;
+		};
+		2737993900B36C397F000001 = {
+			isa = PBXFileReference;
+			name = ex_docmd.pro;
+			path = proto/ex_docmd.pro;
+			refType = 4;
+		};
+		2737993A00B36C397F000001 = {
+			isa = PBXFileReference;
+			name = ex_getln.pro;
+			path = proto/ex_getln.pro;
+			refType = 4;
+		};
+		2737993B00B36C397F000001 = {
+			isa = PBXFileReference;
+			name = fileio.pro;
+			path = proto/fileio.pro;
+			refType = 4;
+		};
+		2737993C00B36C397F000001 = {
+			isa = PBXFileReference;
+			name = fold.pro;
+			path = proto/fold.pro;
+			refType = 4;
+		};
+		2737993D00B36C397F000001 = {
+			isa = PBXFileReference;
+			name = getchar.pro;
+			path = proto/getchar.pro;
+			refType = 4;
+		};
+		2737993E00B36C397F000001 = {
+			isa = PBXFileReference;
+			name = gui_mac.pro;
+			path = proto/gui_mac.pro;
+			refType = 4;
+		};
+		2737993F00B36C397F000001 = {
+			isa = PBXFileReference;
+			name = gui.pro;
+			path = proto/gui.pro;
+			refType = 4;
+		};
+		2737994000B36C397F000001 = {
+			isa = PBXFileReference;
+			name = main.pro;
+			path = proto/main.pro;
+			refType = 4;
+		};
+		2737994100B36C397F000001 = {
+			isa = PBXFileReference;
+			name = mark.pro;
+			path = proto/mark.pro;
+			refType = 4;
+		};
+		2737994200B36C397F000001 = {
+			isa = PBXFileReference;
+			name = memfile.pro;
+			path = proto/memfile.pro;
+			refType = 4;
+		};
+		2737994300B36C397F000001 = {
+			isa = PBXFileReference;
+			name = memline.pro;
+			path = proto/memline.pro;
+			refType = 4;
+		};
+		2737994400B36C397F000001 = {
+			isa = PBXFileReference;
+			name = menu.pro;
+			path = proto/menu.pro;
+			refType = 4;
+		};
+		2737994500B36C397F000001 = {
+			isa = PBXFileReference;
+			name = message.pro;
+			path = proto/message.pro;
+			refType = 4;
+		};
+		2737994600B36C397F000001 = {
+			isa = PBXFileReference;
+			name = misc1.pro;
+			path = proto/misc1.pro;
+			refType = 4;
+		};
+		2737994700B36C397F000001 = {
+			isa = PBXFileReference;
+			name = misc2.pro;
+			path = proto/misc2.pro;
+			refType = 4;
+		};
+		2737994800B36C397F000001 = {
+			isa = PBXFileReference;
+			name = move.pro;
+			path = proto/move.pro;
+			refType = 4;
+		};
+		2737994900B36C397F000001 = {
+			isa = PBXFileReference;
+			name = normal.pro;
+			path = proto/normal.pro;
+			refType = 4;
+		};
+		2737994A00B36C397F000001 = {
+			isa = PBXFileReference;
+			name = ops.pro;
+			path = proto/ops.pro;
+			refType = 4;
+		};
+		2737994B00B36C397F000001 = {
+			isa = PBXFileReference;
+			name = option.pro;
+			path = proto/option.pro;
+			refType = 4;
+		};
+		2737994C00B36C397F000001 = {
+			isa = PBXFileReference;
+			name = os_mac.pro;
+			path = proto/os_mac.pro;
+			refType = 4;
+		};
+		2737994D00B36C397F000001 = {
+			isa = PBXFileReference;
+			name = pty.pro;
+			path = proto/pty.pro;
+			refType = 4;
+		};
+		2737994E00B36C397F000001 = {
+			isa = PBXFileReference;
+			name = quickfix.pro;
+			path = proto/quickfix.pro;
+			refType = 4;
+		};
+		2737994F00B36C397F000001 = {
+			isa = PBXFileReference;
+			name = regexp.pro;
+			path = proto/regexp.pro;
+			refType = 4;
+		};
+		2737995000B36C397F000001 = {
+			isa = PBXFileReference;
+			name = screen.pro;
+			path = proto/screen.pro;
+			refType = 4;
+		};
+		2737995100B36C397F000001 = {
+			isa = PBXFileReference;
+			name = search.pro;
+			path = proto/search.pro;
+			refType = 4;
+		};
+		2737995200B36C397F000001 = {
+			isa = PBXFileReference;
+			name = syntax.pro;
+			path = proto/syntax.pro;
+			refType = 4;
+		};
+		2737995300B36C397F000001 = {
+			isa = PBXFileReference;
+			name = tag.pro;
+			path = proto/tag.pro;
+			refType = 4;
+		};
+		2737995400B36C397F000001 = {
+			isa = PBXFileReference;
+			name = term.pro;
+			path = proto/term.pro;
+			refType = 4;
+		};
+		2737995500B36C397F000001 = {
+			isa = PBXFileReference;
+			name = termlib.pro;
+			path = proto/termlib.pro;
+			refType = 4;
+		};
+		2737995600B36C397F000001 = {
+			isa = PBXFileReference;
+			name = ui.pro;
+			path = proto/ui.pro;
+			refType = 4;
+		};
+		2737995700B36C397F000001 = {
+			isa = PBXFileReference;
+			name = undo.pro;
+			path = proto/undo.pro;
+			refType = 4;
+		};
+		2737995800B36C397F000001 = {
+			isa = PBXFileReference;
+			name = version.pro;
+			path = proto/version.pro;
+			refType = 4;
+		};
+		2737995900B36C397F000001 = {
+			isa = PBXFileReference;
+			name = window.pro;
+			path = proto/window.pro;
+			refType = 4;
+		};
+//270
+//271
+//272
+//273
+//274
+//7E0
+//7E1
+//7E2
+//7E3
+//7E4
+		7E3AAAD704841C0000EFC20E = {
+			isa = PBXFileReference;
+			path = ex_eval.c;
+			refType = 4;
+		};
+		7E3AAAD804841C0000EFC20E = {
+			fileRef = 7E3AAAD704841C0000EFC20E;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		7E556E1404841F7900882585 = {
+			fileRef = 273798ED00B36B047F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+//7E0
+//7E1
+//7E2
+//7E3
+//7E4
+//F50
+//F51
+//F52
+//F53
+//F54
+		F5CC3220018E3F6801891561 = {
+			fileRef = 273798E200B36B037F000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		F5D0FB2B00F8C29A01000001 = {
+			children = (
+				F5D0FB2C00F8C2BF01000001,
+			);
+			isa = PBXGroup;
+			name = "Optional Source";
+			path = "";
+			refType = 4;
+		};
+		F5D0FB2C00F8C2BF01000001 = {
+			isa = PBXFileReference;
+			path = mbyte.c;
+			refType = 4;
+		};
+		F5D0FB2D00F8C2BF01000001 = {
+			fileRef = F5D0FB2C00F8C2BF01000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		F5E2C53F00FACD0901000001 = {
+			isa = PBXFileReference;
+			path = os_macosx.c;
+			refType = 4;
+		};
+		F5E2C54000FACD0901000001 = {
+			fileRef = F5E2C53F00FACD0901000001;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+	};
+	rootObject = 20286C28FDCF999611CA2CEA;
+}
diff --git a/src/os_mac_conv.c b/src/os_mac_conv.c
new file mode 100644
index 0000000..3dfacfe
--- /dev/null
+++ b/src/os_mac_conv.c
@@ -0,0 +1,230 @@
+/* vi:set ts=8 sts=4 sw=4:
+ *
+ * VIM - Vi IMproved	by Bram Moolenaar
+ *
+ * Do ":help uganda"  in Vim to read copying and usage conditions.
+ * Do ":help credits" in Vim to see a list of people who contributed.
+ * See README.txt for an overview of the Vim source code.
+ */
+/*
+ * os_mac_conv.c: Code specifically for Mac string conversions.
+ *
+ * This code has been put in a separate file to avoid the conflicts that are
+ * caused by including both the X11 and Carbon header files.
+ */
+
+#define NO_X11_INCLUDES
+#include "vim.h"
+
+extern char_u *mac_string_convert __ARGS((char_u *ptr, int len, int *lenp, int fail_on_error, int from, int to, int *unconvlenp));
+extern int macroman2enc __ARGS((char_u *ptr, long *sizep, long real_size));
+extern int enc2macroman __ARGS((char_u *from, size_t fromlen, char_u *to, int *tolenp, int maxtolen, char_u *rest, int *restlenp));
+
+/*
+ * A Mac version of string_convert_ext() for special cases.
+ */
+    char_u *
+mac_string_convert(ptr, len, lenp, fail_on_error, from_enc, to_enc, unconvlenp)
+    char_u		*ptr;
+    int			len;
+    int			*lenp;
+    int			fail_on_error;
+    int			from_enc;
+    int			to_enc;
+    int			*unconvlenp;
+{
+    char_u		*retval, *d;
+    CFStringRef		cfstr;
+    int			buflen, in, out, l, i;
+    CFStringEncoding	from;
+    CFStringEncoding	to;
+
+    switch (from_enc)
+    {
+	case 'l':   from = kCFStringEncodingISOLatin1; break;
+	case 'm':   from = kCFStringEncodingMacRoman; break;
+	case 'u':   from = kCFStringEncodingUTF8; break;
+	default:    return NULL;
+    }
+    switch (to_enc)
+    {
+	case 'l':   to = kCFStringEncodingISOLatin1; break;
+	case 'm':   to = kCFStringEncodingMacRoman; break;
+	case 'u':   to = kCFStringEncodingUTF8; break;
+	default:    return NULL;
+    }
+
+    if (unconvlenp != NULL)
+	*unconvlenp = 0;
+    cfstr = CFStringCreateWithBytes(NULL, ptr, len, from, 0);
+
+    /* When conversion failed, try excluding bytes from the end, helps when
+     * there is an incomplete byte sequence.  Only do up to 6 bytes to avoid
+     * looping a long time when there really is something unconvertable. */
+    while (cfstr == NULL && unconvlenp != NULL && len > 1 && *unconvlenp < 6)
+    {
+	--len;
+	++*unconvlenp;
+	cfstr = CFStringCreateWithBytes(NULL, ptr, len, from, 0);
+    }
+    if (cfstr == NULL)
+	return NULL;
+    if (to == kCFStringEncodingUTF8)
+	buflen = len * 6 + 1;
+    else
+	buflen = len + 1;
+    retval = alloc(buflen);
+    if (retval == NULL)
+    {
+	CFRelease(cfstr);
+	return NULL;
+    }
+    if (!CFStringGetCString(cfstr, retval, buflen, to))
+    {
+	CFRelease(cfstr);
+	if (fail_on_error)
+	{
+	    vim_free(retval);
+	    return NULL;
+	}
+
+	/* conversion failed for the whole string, but maybe it will work
+	 * for each character */
+	for (d = retval, in = 0, out = 0; in < len && out < buflen - 1;)
+	{
+	    if (from == kCFStringEncodingUTF8)
+		l = utf_ptr2len_check(ptr + in);
+	    else
+		l = 1;
+	    cfstr = CFStringCreateWithBytes(NULL, ptr + in, l, from, 0);
+	    if (cfstr == NULL)
+	    {
+		*d++ = '?';
+		out++;
+	    }
+	    else
+	    {
+		if (!CFStringGetCString(cfstr, d, buflen - out, to))
+		{
+		    *d++ = '?';
+		    out++;
+		}
+		else
+		{
+		    i = strlen(d);
+		    d += i;
+		    out += i;
+		}
+		CFRelease(cfstr);
+	    }
+	    in += l;
+	}
+	*d = NUL;
+	if (lenp != NULL)
+	    *lenp = out;
+	return retval;
+    }
+    CFRelease(cfstr);
+    if (lenp != NULL)
+	*lenp = strlen(retval);
+    return retval;
+}
+
+/*
+ * Conversion from Apple MacRoman char encoding to UTF-8 or latin1, using
+ * standard Carbon framework.
+ * Input: "ptr[*sizep]".
+ * "real_size" is the size of the buffer that "ptr" points to.
+ * output is in-place, "sizep" is adjusted.
+ * Returns OK or FAIL.
+ */
+    int
+macroman2enc(ptr, sizep, real_size)
+    char_u	*ptr;
+    long	*sizep;
+    long	real_size;
+{
+    CFStringRef		cfstr;
+    CFRange		r;
+    CFIndex		len = *sizep;
+
+    /* MacRoman is an 8-bit encoding, no need to move bytes to
+     * conv_rest[]. */
+    cfstr = CFStringCreateWithBytes(NULL, ptr, len,
+						kCFStringEncodingMacRoman, 0);
+    /*
+     * If there is a conversion error, try using another
+     * conversion.
+     */
+    if (cfstr == NULL)
+	return FAIL;
+
+    r.location = 0;
+    r.length = CFStringGetLength(cfstr);
+    if (r.length != CFStringGetBytes(cfstr, r,
+	    (enc_utf8) ? kCFStringEncodingUTF8 : kCFStringEncodingISOLatin1,
+	    0, /* no lossy conversion */
+	    0, /* not external representation */
+	    ptr + *sizep, real_size - *sizep, &len))
+    {
+	CFRelease(cfstr);
+	return FAIL;
+    }
+    CFRelease(cfstr);
+    mch_memmove(ptr, ptr + *sizep, len);
+    *sizep = len;
+
+    return OK;
+}
+
+/*
+ * Conversion from UTF-8 or latin1 to MacRoman.
+ * Input: "from[fromlen]"
+ * Output: "to[maxtolen]" length in "*tolenp"
+ * Unconverted rest in rest[*restlenp].
+ * Returns OK or FAIL.
+ */
+    int
+enc2macroman(from, fromlen, to, tolenp, maxtolen, rest, restlenp)
+    char_u	*from;
+    size_t	fromlen;
+    char_u	*to;
+    int		*tolenp;
+    int		maxtolen;
+    char_u	*rest;
+    int		*restlenp;
+{
+    CFStringRef	cfstr;
+    CFRange	r;
+    CFIndex	l;
+
+    *restlenp = 0;
+    cfstr = CFStringCreateWithBytes(NULL, from, fromlen,
+	    (enc_utf8) ? kCFStringEncodingUTF8 : kCFStringEncodingISOLatin1,
+	    0);
+    while (cfstr == NULL && *restlenp < 3 && fromlen > 1)
+    {
+	rest[*restlenp++] = from[--fromlen];
+	cfstr = CFStringCreateWithBytes(NULL, from, fromlen,
+		(enc_utf8) ? kCFStringEncodingUTF8 : kCFStringEncodingISOLatin1,
+		0);
+    }
+    if (cfstr == NULL)
+	return FAIL;
+
+    r.location = 0;
+    r.length = CFStringGetLength(cfstr);
+    if (r.length != CFStringGetBytes(cfstr, r,
+		kCFStringEncodingMacRoman,
+		0, /* no lossy conversion */
+		0, /* not external representation (since vim
+		    * handles this internally */
+		to, maxtolen, &l))
+    {
+	CFRelease(cfstr);
+	return FAIL;
+    }
+    CFRelease(cfstr);
+    *tolenp = l;
+    return OK;
+}
diff --git a/src/os_macosx.c b/src/os_macosx.c
index 871eb7e..d361958 100644
--- a/src/os_macosx.c
+++ b/src/os_macosx.c
@@ -338,8 +338,8 @@
  * TECCreateConverter() failed.
  */
     static size_t
-null_conv(iconv_t cd, const char** inbuf, size_t *inbytesleft,
-	char** outbuf, size_t *outbytesleft)
+null_conv(iconv_t cd, const char **inbuf, size_t *inbytesleft,
+	char **outbuf, size_t *outbytesleft)
 {
     const char* buf_in = inbuf && *inbuf ? *inbuf : NULL;
     char* buf_out = outbuf && *outbuf ? *outbuf : NULL;
@@ -375,14 +375,14 @@
 }
 
     size_t
-iconv(iconv_t cd, const char** inbuf, size_t *inbytesleft,
-	char** outbuf, size_t *outbytesleft)
+iconv(iconv_t cd, const char **inbuf, size_t *inbytesleft,
+	char **outbuf, size_t *outbytesleft)
 {
-    ConstTextPtr buf_in;
-    TextPtr buf_out;
-    ByteCount out_len, out_true;
-    ByteCount in_len, in_true;
-    OSStatus st;
+    ConstTextPtr    buf_in;
+    TextPtr	    buf_out;
+    ByteCount	    out_len, out_true;
+    ByteCount	    in_len, in_true;
+    OSStatus	    st;
 
     if (!cd)
     {
@@ -537,7 +537,7 @@
     }
 }
 
-    int*
+    int *
 iconv_errno()
 {
     return &last_errno;
@@ -549,8 +549,8 @@
 #define GETTEXT_BUFNUM		64
 #define GETTEXT_BUFSIZE		256
 
-    char*
-mch_gettext(const char* msgid)
+    char *
+mch_gettext(const char *msgid)
 {
     static char		buf[GETTEXT_BUFNUM][GETTEXT_BUFSIZE];
     static int		bufnum = 0;
@@ -593,18 +593,18 @@
 	CFRelease(strkey);
     if (strmsg)
 	CFRelease(strmsg);
-    return (char*)(msg ? msg : msgid);
+    return (char *)(msg ? msg : msgid);
 }
 
-    char*
-mch_bindtextdomain(const char* domain, const char* dirname)
+    char *
+mch_bindtextdomain(const char *domain, const char *dirname)
 {
     TRACE("mch_bindtextdomain(%s, %s)\n", domain, dirname);
     return (char*)dirname;
 }
 
-    char*
-mch_textdomain(const char* domain)
+    char *
+mch_textdomain(const char *domain)
 {
     TRACE("mch_textdomain(%s)\n", domain);
     return (char*)domain;
diff --git a/src/testdir/test11.in b/src/testdir/test11.in
index 6b296fd..510ed72 100644
--- a/src/testdir/test11.in
+++ b/src/testdir/test11.in
@@ -20,13 +20,12 @@
 :set bin
 :au FileWritePre    *.gz   '[,']!gzip
 :au FileWritePost   *.gz   undo
-:/start of testfile/,/end of testfile/w! Xtestfile.gz
+:/^start of testfile/,/^end of testfile/w! Xtestfile.gz
 :au FileReadPost    *.gz   '[,']!gzip -d
 :$r Xtestfile.gz                " Read and decompress the testfile
 :?startstart?,$w! test.out      " Write contents of this file
 :au BufNewFile      *.c    read Xtest.c
-gg/^end of testfile
-:/start of test.c/+1,/end of test.c/-1w! Xtest.c
+:/^start of test.c/+1,/^end of test.c/-1w! Xtest.c
 :e! foo.c                       " Will load Xtest.c
 :au FileAppendPre   *.out  '[,']s/new/NEW/
 :au FileAppendPost  *.out  !cat Xtest.c >>test.out
diff --git a/src/vim.h b/src/vim.h
index eb7d2a7..dadb17e 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -91,7 +91,7 @@
     || defined(FEAT_GUI_AMIGA) \
     || defined(FEAT_GUI_PHOTON) \
     || defined(FEAT_GUI_KDE)
-# ifndef FEAT_GUI
+# if !defined(FEAT_GUI) && !defined(NO_X11_INCLUDES)
 #  define FEAT_GUI
 # endif
 #endif
@@ -160,6 +160,35 @@
 # define FEAT_X11
 #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. */
+# ifdef FEAT_X11
+#  undef FEAT_X11
+# endif
+# ifdef FEAT_XCLIPBOARD
+#  undef FEAT_XCLIPBOARD
+# endif
+# ifdef FEAT_GUI_MOTIF
+#  undef FEAT_GUI_MOTIF
+# endif
+# ifdef FEAT_GUI_ATHENA
+#  undef FEAT_GUI_ATHENA
+# endif
+# ifdef FEAT_GUI_GTK
+#  undef FEAT_GUI_GTK
+# endif
+# ifdef FEAT_BEVAL_TIP
+#  undef FEAT_BEVAL_TIP
+# endif
+# ifdef FEAT_XIM
+#  undef FEAT_XIM
+# endif
+# ifdef FEAT_CLIENTSERVER
+#  undef FEAT_CLIENTSERVER
+# endif
+#endif
+
 /* Can't use "PACKAGE" here, conflicts with a Perl include file. */
 #ifndef VIMPACKAGE
 # define VIMPACKAGE	"vim"
