Index: tches/coreutils-5.96-suppress_uptime_kill_su-1.patch
===================================================================
--- patches/coreutils-5.96-suppress_uptime_kill_su-1.patch	(revision d1fc2f36f3ed91443b4882c6c62071e1968c3e62)
+++ 	(revision )
@@ -1,272 +1,0 @@
-Submitted By: Matthew Burgess <matthew at linuxfromscratch dot org>
-Date: 2006-03-15
-Initial Package Version: 5.94
-Origin: original suppress_hotname_uptame_kill_su patch (Robert Connolly)
-Upstream Status: N/A
-Description: This patch supresses the building of uptime, and kill.  The su
-command is built so the testsuite can run, use './src/su', but it will not
-be installed. Also see:
-           http://www.linuxfromscratch.org/patches/downloads/coreutils/
-           coreutils-5.0-dupes-2.patch
-
-diff -Naur coreutils-5.94.orig/AUTHORS coreutils-5.94/AUTHORS
---- coreutils-5.94.orig/AUTHORS	2004-11-03 23:10:50.000000000 +0000
-+++ coreutils-5.94/AUTHORS	2006-03-15 22:20:49.000000000 +0000
-@@ -34,7 +34,6 @@
- hostname: Jim Meyering
- id: Arnold Robbins, David MacKenzie
- join: Mike Haertel
--kill: Paul Eggert
- link: Michael Stone
- ln: Mike Parker, David MacKenzie
- logname: FIXME: unknown
-@@ -83,7 +82,6 @@
- unexpand: David MacKenzie
- uniq: Richard Stallman, David MacKenzie
- unlink: Michael Stone
--uptime: Joseph Arceneaux, David MacKenzie, Kaveh Ghazi
- users: Joseph Arceneaux, David MacKenzie
- vdir: Richard Stallman, David MacKenzie
- wc: Paul Rubin, David MacKenzie
-diff -Naur coreutils-5.94.orig/Makefile.in coreutils-5.94/Makefile.in
---- coreutils-5.94.orig/Makefile.in	2006-02-13 12:52:03.000000000 +0000
-+++ coreutils-5.94/Makefile.in	2006-03-15 22:20:49.000000000 +0000
-@@ -148,7 +148,7 @@
- 	$(top_srcdir)/m4/ullong_max.m4 $(top_srcdir)/m4/ulonglong.m4 \
- 	$(top_srcdir)/m4/unicodeio.m4 $(top_srcdir)/m4/unistd-safer.m4 \
- 	$(top_srcdir)/m4/unlink-busy.m4 $(top_srcdir)/m4/unlinkdir.m4 \
--	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/uptime.m4 \
-+	$(top_srcdir)/m4/unlocked-io.m4 \
- 	$(top_srcdir)/m4/userspec.m4 $(top_srcdir)/m4/utimbuf.m4 \
- 	$(top_srcdir)/m4/utime.m4 $(top_srcdir)/m4/utimecmp.m4 \
- 	$(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes-null.m4 \
-diff -Naur coreutils-5.94.orig/README coreutils-5.94/README
---- coreutils-5.94.orig/README	2005-09-28 18:34:26.000000000 +0000
-+++ coreutils-5.94/README	2006-03-15 22:20:49.000000000 +0000
-@@ -9,11 +9,11 @@
- 
-   [ basename cat chgrp chmod chown chroot cksum comm cp csplit cut date dd
-   df dir dircolors dirname du echo env expand expr factor false fmt fold
--  ginstall groups head hostid hostname id join kill link ln logname ls
-+  ginstall groups head hostid hostname id join link ln logname ls
-   md5sum mkdir mkfifo mknod mv nice nl nohup od paste pathchk pinky pr
-   printenv printf ptx pwd readlink rm rmdir seq sha1sum shred sleep sort
-   split stat stty su sum sync tac tail tee test touch tr true tsort tty
--  uname unexpand uniq unlink uptime users vdir wc who whoami yes
-+  uname unexpand uniq unlink users vdir wc who whoami yes
- 
- See the file NEWS for a list of major changes in the current release.
- 
-diff -Naur coreutils-5.94.orig/configure coreutils-5.94/configure
---- coreutils-5.94.orig/configure	2006-02-13 12:52:04.000000000 +0000
-+++ coreutils-5.94/configure	2006-03-15 22:20:49.000000000 +0000
-@@ -50418,8 +50418,7 @@
- { echo "$as_me:$LINENO: result: $gnulib_cv_have_boot_time" >&5
- echo "${ECHO_T}$gnulib_cv_have_boot_time" >&6; }
-   if test $gnulib_cv_have_boot_time = yes; then
--  OPTIONAL_BIN_PROGS="$OPTIONAL_BIN_PROGS uptime\$(EXEEXT)"
--  MAN="$MAN uptime.1"
-+echo "uptime is suppressed"
- fi
- 
- 
-diff -Naur coreutils-5.94.orig/man/Makefile.in coreutils-5.94/man/Makefile.in
---- coreutils-5.94.orig/man/Makefile.in	2006-02-13 12:51:58.000000000 +0000
-+++ coreutils-5.94/man/Makefile.in	2006-03-15 22:20:50.000000000 +0000
-@@ -142,7 +142,7 @@
- 	$(top_srcdir)/m4/ullong_max.m4 $(top_srcdir)/m4/ulonglong.m4 \
- 	$(top_srcdir)/m4/unicodeio.m4 $(top_srcdir)/m4/unistd-safer.m4 \
- 	$(top_srcdir)/m4/unlink-busy.m4 $(top_srcdir)/m4/unlinkdir.m4 \
--	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/uptime.m4 \
-+	$(top_srcdir)/m4/unlocked-io.m4 \
- 	$(top_srcdir)/m4/userspec.m4 $(top_srcdir)/m4/utimbuf.m4 \
- 	$(top_srcdir)/m4/utime.m4 $(top_srcdir)/m4/utimecmp.m4 \
- 	$(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes-null.m4 \
-@@ -303,13 +303,13 @@
-   basename.1 cat.1 chgrp.1 chmod.1 chown.1 chroot.1 cksum.1 comm.1 \
-   cp.1 csplit.1 cut.1 date.1 dd.1 df.1 dir.1 dircolors.1 dirname.1 du.1 \
-   echo.1 env.1 expand.1 expr.1 factor.1 false.1 fmt.1 fold.1 groups.1 \
--  head.1 hostid.1 hostname.1 id.1 install.1 join.1 kill.1 \
-+  head.1 hostid.1 hostname.1 id.1 install.1 join.1 \
-   link.1 ln.1 logname.1 \
-   ls.1 md5sum.1 mkdir.1 mkfifo.1 mknod.1 mv.1 nice.1 nl.1 nohup.1 od.1 \
-   paste.1 pathchk.1 pinky.1 pr.1 printenv.1 printf.1 ptx.1 pwd.1 readlink.1 \
-   rm.1 rmdir.1 seq.1 sha1sum.1 shred.1 sleep.1 sort.1 split.1 stat.1 stty.1 \
--  su.1 sum.1 sync.1 tac.1 tail.1 tee.1 test.1 touch.1 tr.1 true.1 tsort.1 \
--  tty.1 uname.1 unexpand.1 uniq.1 unlink.1 uptime.1 users.1 vdir.1 wc.1 \
-+  sum.1 sync.1 tac.1 tail.1 tee.1 test.1 touch.1 tr.1 true.1 tsort.1 \
-+  tty.1 uname.1 unexpand.1 uniq.1 unlink.1 users.1 vdir.1 wc.1 \
-   who.1 whoami.1 yes.1
- 
- man_aux = $(dist_man_MANS:.1=.x)
-@@ -575,7 +575,6 @@
- id.1:		$(common_dep)	$(srcdir)/id.x		../src/id.c
- install.1:	$(common_dep)	$(srcdir)/install.x	../src/install.c
- join.1:		$(common_dep)	$(srcdir)/join.x	../src/join.c
--kill.1:		$(common_dep)	$(srcdir)/kill.x	../src/kill.c
- link.1:		$(common_dep)	$(srcdir)/link.x	../src/link.c
- ln.1:		$(common_dep)	$(srcdir)/ln.x		../src/ln.c
- logname.1:	$(common_dep)	$(srcdir)/logname.x	../src/logname.c
-@@ -608,7 +607,6 @@
- split.1:	$(common_dep)	$(srcdir)/split.x	../src/split.c
- stat.1:		$(common_dep)	$(srcdir)/stat.x	../src/stat.c
- stty.1:		$(common_dep)	$(srcdir)/stty.x	../src/stty.c
--su.1:		$(common_dep)	$(srcdir)/su.x		../src/su.c
- sum.1:		$(common_dep)	$(srcdir)/sum.x		../src/sum.c
- sync.1:		$(common_dep)	$(srcdir)/sync.x	../src/sync.c
- tac.1:		$(common_dep)	$(srcdir)/tac.x		../src/tac.c
-@@ -624,7 +622,6 @@
- unexpand.1:	$(common_dep)	$(srcdir)/unexpand.x	../src/unexpand.c
- uniq.1:		$(common_dep)	$(srcdir)/uniq.x	../src/uniq.c
- unlink.1:	$(common_dep)	$(srcdir)/unlink.x	../src/unlink.c
--uptime.1:	$(common_dep)	$(srcdir)/uptime.x	../src/uptime.c
- users.1:	$(common_dep)	$(srcdir)/users.x	../src/users.c
- vdir.1:		$(common_dep)	$(srcdir)/vdir.x	../src/ls.c
- wc.1:		$(common_dep)	$(srcdir)/wc.x		../src/wc.c
-@@ -656,7 +653,7 @@
- check-x-vs-1:
- 	PATH=../src$(PATH_SEPARATOR)$$PATH; export PATH;		\
- 	t=ls-files.$$$$;						\
--	(cd $(srcdir) && ls -1 *.x) | sed 's/\.x$$//' | $(ASSORT) > $$t;\
-+	(cd $(srcdir) && ls -1 *.x) | grep -v -e 'kill.x' -e 'su.x' -e 'uptime.x' | sed 's/\.x$$//' | $(ASSORT) > $$t;\
- 	echo $(dist_man_MANS) | tr -s ' ' '\n' | sed 's/\.1$$//'	\
- 	  | $(ASSORT) | diff - $$t || { rm $$t; exit 1; };		\
- 	rm $$t
-diff -Naur coreutils-5.94.orig/src/Makefile.in coreutils-5.94/src/Makefile.in
---- coreutils-5.94.orig/src/Makefile.in	2006-02-13 13:08:11.000000000 +0000
-+++ coreutils-5.94/src/Makefile.in	2006-03-15 22:20:50.000000000 +0000
-@@ -39,7 +39,7 @@
- host_triplet = @host@
- EXTRA_PROGRAMS = chroot$(EXEEXT) df$(EXEEXT) hostid$(EXEEXT) \
- 	nice$(EXEEXT) pinky$(EXEEXT) stty$(EXEEXT) su$(EXEEXT) \
--	uname$(EXEEXT) uptime$(EXEEXT) users$(EXEEXT) who$(EXEEXT)
-+	uname$(EXEEXT) users$(EXEEXT) who$(EXEEXT)
- bin_PROGRAMS = [$(EXEEXT) chgrp$(EXEEXT) chown$(EXEEXT) chmod$(EXEEXT) \
- 	cp$(EXEEXT) dd$(EXEEXT) dircolors$(EXEEXT) du$(EXEEXT) \
- 	ginstall$(EXEEXT) link$(EXEEXT) ln$(EXEEXT) dir$(EXEEXT) \
-@@ -56,7 +56,7 @@
- 	uniq$(EXEEXT) wc$(EXEEXT) basename$(EXEEXT) date$(EXEEXT) \
- 	dirname$(EXEEXT) echo$(EXEEXT) env$(EXEEXT) expr$(EXEEXT) \
- 	factor$(EXEEXT) false$(EXEEXT) hostname$(EXEEXT) id$(EXEEXT) \
--	kill$(EXEEXT) logname$(EXEEXT) pathchk$(EXEEXT) \
-+	logname$(EXEEXT) pathchk$(EXEEXT) \
- 	printenv$(EXEEXT) printf$(EXEEXT) pwd$(EXEEXT) seq$(EXEEXT) \
- 	sleep$(EXEEXT) tee$(EXEEXT) test$(EXEEXT) true$(EXEEXT) \
- 	tty$(EXEEXT) whoami$(EXEEXT) yes$(EXEEXT) $(am__EXEEXT_1) \
-@@ -169,7 +169,7 @@
- 	$(top_srcdir)/m4/ullong_max.m4 $(top_srcdir)/m4/ulonglong.m4 \
- 	$(top_srcdir)/m4/unicodeio.m4 $(top_srcdir)/m4/unistd-safer.m4 \
- 	$(top_srcdir)/m4/unlink-busy.m4 $(top_srcdir)/m4/unlinkdir.m4 \
--	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/uptime.m4 \
-+	$(top_srcdir)/m4/unlocked-io.m4 \
- 	$(top_srcdir)/m4/userspec.m4 $(top_srcdir)/m4/utimbuf.m4 \
- 	$(top_srcdir)/m4/utime.m4 $(top_srcdir)/m4/utimecmp.m4 \
- 	$(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes-null.m4 \
-@@ -350,11 +350,6 @@
- join_LDADD = $(LDADD)
- join_DEPENDENCIES = ../lib/libcoreutils.a $(am__DEPENDENCIES_1) \
- 	../lib/libcoreutils.a
--kill_SOURCES = kill.c
--kill_OBJECTS = kill.$(OBJEXT)
--kill_LDADD = $(LDADD)
--kill_DEPENDENCIES = ../lib/libcoreutils.a $(am__DEPENDENCIES_1) \
--	../lib/libcoreutils.a
- link_SOURCES = link.c
- link_OBJECTS = link.$(OBJEXT)
- link_LDADD = $(LDADD)
-@@ -577,9 +572,6 @@
- unlink_LDADD = $(LDADD)
- unlink_DEPENDENCIES = ../lib/libcoreutils.a $(am__DEPENDENCIES_1) \
- 	../lib/libcoreutils.a
--uptime_SOURCES = uptime.c
--uptime_OBJECTS = uptime.$(OBJEXT)
--uptime_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1)
- users_SOURCES = users.c
- users_OBJECTS = users.$(OBJEXT)
- users_LDADD = $(LDADD)
-@@ -622,28 +614,28 @@
- 	csplit.c cut.c date.c dd.c df.c $(dir_SOURCES) dircolors.c \
- 	dirname.c du.c echo.c env.c expand.c expr.c factor.c false.c \
- 	fmt.c fold.c $(ginstall_SOURCES) head.c hostid.c hostname.c \
--	id.c join.c kill.c link.c ln.c logname.c $(ls_SOURCES) \
-+	id.c join.c link.c ln.c logname.c $(ls_SOURCES) \
- 	$(md5sum_SOURCES) mkdir.c mkfifo.c mknod.c $(mv_SOURCES) \
- 	nice.c nl.c nohup.c od.c paste.c pathchk.c pinky.c pr.c \
- 	printenv.c printf.c ptx.c pwd.c readlink.c $(rm_SOURCES) \
- 	rmdir.c seq.c setuidgid.c $(sha1sum_SOURCES) shred.c sleep.c \
- 	sort.c split.c stat.c stty.c su.c sum.c sync.c tac.c tail.c \
- 	tee.c test.c touch.c tr.c true.c tsort.c tty.c uname.c \
--	unexpand.c uniq.c unlink.c uptime.c users.c $(vdir_SOURCES) \
-+	unexpand.c uniq.c unlink.c users.c $(vdir_SOURCES) \
- 	wc.c who.c whoami.c yes.c
- DIST_SOURCES = $(__SOURCES) basename.c cat.c $(chgrp_SOURCES) chmod.c \
- 	$(chown_SOURCES) chroot.c cksum.c comm.c $(cp_SOURCES) \
- 	csplit.c cut.c date.c dd.c df.c $(dir_SOURCES) dircolors.c \
- 	dirname.c du.c echo.c env.c expand.c expr.c factor.c false.c \
- 	fmt.c fold.c $(ginstall_SOURCES) head.c hostid.c hostname.c \
--	id.c join.c kill.c link.c ln.c logname.c $(ls_SOURCES) \
-+	id.c join.c link.c ln.c logname.c $(ls_SOURCES) \
- 	$(md5sum_SOURCES) mkdir.c mkfifo.c mknod.c $(mv_SOURCES) \
- 	nice.c nl.c nohup.c od.c paste.c pathchk.c pinky.c pr.c \
- 	printenv.c printf.c ptx.c pwd.c readlink.c $(rm_SOURCES) \
- 	rmdir.c seq.c setuidgid.c $(sha1sum_SOURCES) shred.c sleep.c \
- 	sort.c split.c stat.c stty.c su.c sum.c sync.c tac.c tail.c \
- 	tee.c test.c touch.c tr.c true.c tsort.c tty.c uname.c \
--	unexpand.c uniq.c unlink.c uptime.c users.c $(vdir_SOURCES) \
-+	unexpand.c uniq.c unlink.c users.c $(vdir_SOURCES) \
- 	wc.c who.c whoami.c yes.c
- HEADERS = $(noinst_HEADERS)
- ETAGS = etags
-@@ -840,7 +832,6 @@
- nanosec_libs = $(LDADD) $(POW_LIB) $(LIB_NANOSLEEP)
- sleep_LDADD = $(nanosec_libs)
- tail_LDADD = $(nanosec_libs)
--uptime_LDADD = $(LDADD) $(GETLOADAVG_LIBS)
- su_LDADD = $(LDADD) $(LIB_CRYPT)
- SUFFIXES = .sh
- installed_su = $(DESTDIR)$(bindir)/`echo su|sed '$(transform)'`
-@@ -1076,9 +1067,6 @@
- join$(EXEEXT): $(join_OBJECTS) $(join_DEPENDENCIES) 
- 	@rm -f join$(EXEEXT)
- 	$(LINK) $(join_LDFLAGS) $(join_OBJECTS) $(join_LDADD) $(LIBS)
--kill$(EXEEXT): $(kill_OBJECTS) $(kill_DEPENDENCIES) 
--	@rm -f kill$(EXEEXT)
--	$(LINK) $(kill_LDFLAGS) $(kill_OBJECTS) $(kill_LDADD) $(LIBS)
- link$(EXEEXT): $(link_OBJECTS) $(link_DEPENDENCIES) 
- 	@rm -f link$(EXEEXT)
- 	$(LINK) $(link_LDFLAGS) $(link_OBJECTS) $(link_LDADD) $(LIBS)
-@@ -1226,9 +1214,6 @@
- unlink$(EXEEXT): $(unlink_OBJECTS) $(unlink_DEPENDENCIES) 
- 	@rm -f unlink$(EXEEXT)
- 	$(LINK) $(unlink_LDFLAGS) $(unlink_OBJECTS) $(unlink_LDADD) $(LIBS)
--uptime$(EXEEXT): $(uptime_OBJECTS) $(uptime_DEPENDENCIES) 
--	@rm -f uptime$(EXEEXT)
--	$(LINK) $(uptime_LDFLAGS) $(uptime_OBJECTS) $(uptime_LDADD) $(LIBS)
- users$(EXEEXT): $(users_OBJECTS) $(users_DEPENDENCIES) 
- 	@rm -f users$(EXEEXT)
- 	$(LINK) $(users_LDFLAGS) $(users_OBJECTS) $(users_LDADD) $(LIBS)
-@@ -1322,7 +1307,6 @@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/id.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/install.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/join.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kill.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lbracket.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/link.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ln.Po@am__quote@
-@@ -1378,7 +1362,6 @@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unexpand.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uniq.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unlink.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uptime.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/users.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wc.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/who.Po@am__quote@
-@@ -1606,7 +1589,7 @@
- 	  && can_create_suid_root_executable=yes; \
- 	rm -f $$TMPFILE; \
- 	if test $$can_create_suid_root_executable = yes; then \
--	  $(INSTALL_SU); \
-+	  echo "Installation of su is suppressed"; \
- 	else \
- 	  echo "WARNING: insufficient access; not installing su"; \
- 	  echo "NOTE: to install su, run 'make install-root' as root"; \
Index: tches/coreutils-5.96-uname-1.patch
===================================================================
--- patches/coreutils-5.96-uname-1.patch	(revision d1fc2f36f3ed91443b4882c6c62071e1968c3e62)
+++ 	(revision )
@@ -1,182 +1,0 @@
-Submitted By: Matthew Burgess <matthew at linuxfromscratch dot org>
-Date: 2005-10-23
-Initial Package Version: 5.92
-Upstream Status: pending
-Origin: Scot McPherson
-Description: Fix the output of uname once and for all.
-
-	$ uname -m	# This always worked.
-	i686
-	$ uname -i	# Used to report 'unknown'.
-	i386
-	$ uname -p	# Likewise.
-	athlon-4
-
-diff -Naur coreutils-5.92.orig/src/uname.c coreutils-5.92/src/uname.c
---- coreutils-5.92.orig/src/uname.c	2005-09-15 20:34:42.000000000 +0000
-+++ coreutils-5.92/src/uname.c	2005-10-23 10:14:06.000000000 +0000
-@@ -29,6 +29,12 @@
- # include <sys/systeminfo.h>
- #endif
- 
-+#ifdef linux
-+#define cpuid(in,a,b,c,d)\
-+  asm("cpuid": "=a" (a), "=b" (b), "=c" (c), "=d" (d) : "a" (in));
-+int has_sse( void );
-+#endif
-+
- #if HAVE_SYS_SYSCTL_H
- # if HAVE_SYS_PARAM_H
- #  include <sys/param.h> /* needed for OpenBSD 3.0 */
-@@ -256,6 +262,96 @@
- 	if (0 <= sysinfo (SI_ARCHITECTURE, processor, sizeof processor))
- 	  element = processor;
-       }
-+#else
-+      {
-+	struct utsname u;
-+	uname (&u);
-+	element = u.machine;
-+#ifdef linux
-+/******************************************************************************
-+ *
-+ * Hello, major hack.  I shouldn't have to do this.  struct utsname should
-+ * have another element with this info in it.  There's probably a struct
-+ * somewhere that has this info, I just don't know where it is.
-+ *
-+ *****************************************************************************/
-+
-+	if( !strcmp( element, "i586" ) || !strcmp( element, "i686" ) ) {
-+	  int eax, ebx, ecx, edx, unused;
-+	  int model, family, sse;
-+     
-+	  cpuid(0,unused,ebx,ecx,edx);
-+	  cpuid(1,eax,unused,unused,unused);
-+	  model = (eax >> 4) & 0xf;
-+	  family = (eax >> 8) & 0xf;
-+
-+	  switch(ebx) {
-+	  case 0x756e6547: // Intel
-+	    switch( family ) {
-+	    case 5: // Pentium
-+	      if( model <= 3 )
-+		element="pentium";
-+	      if( model > 3 )
-+		element="pentium-mmx";
-+	      break;
-+	    case 6: // PentiumPro - Pentium III
-+	      if( model == 1 ) // Pentium Pro
-+		element="pentiumpro";
-+	      if( ( model == 3 ) || ( model == 5 ) ||
-+		  ( model == 6 ) ) // Pentium II
-+		element="pentium2";
-+	      if( ( model == 7 ) || ( model == 8 ) ||
-+		  ( model == 10 ) || ( model == 11 ) ) // These are all Pentium III
-+		element="pentium3";
-+	      break;
-+	    case 15: // Pentium4
-+	      element="pentium4";
-+	      break;
-+	    default:
-+	      break;
-+	    } // end switch( family )
-+	    break;
-+	  case 0x68747541: // AMD
-+	    switch(family) {
-+	    case 5:
-+	      if( ( model == 0 ) || ( model == 1 ) || 
-+		  ( model == 2 ) || ( model == 3 ) ) // K5
-+		element="i586";
-+	      if( ( model == 6 ) || ( model == 7 ) ) // K6
-+		element="k6";
-+	      if( model == 8 ) // K6-2
-+		element="k6-2";
-+	      if( model == 9 ) // K6-3
-+		element="k6-3";
-+	      break;
-+	    case 6:
-+	      if( model <= 4 )
-+		element="athlon";
-+	      if( model > 4 ) {
-+		sse = has_sse();
-+		if( sse == 0 )
-+		  element="athlon";
-+		if( sse == 1 )
-+		  element="athlon-4";
-+	      }
-+	      break;
-+	    case 15:
-+	      element="athlon-4";
-+	      break;
-+	    default:
-+	      break;
-+	    } // end switch( family )
-+	    break;
-+	  case 0x69727943: // Cyrix
-+	    element="i386"; // who knows what cyrix supports, lets be safe
-+	    break;
-+	  default:
-+	    break;
-+	  } // end switch(ebx)
-+	}
-+
-+#endif
-+      }
- #endif
- #ifdef UNAME_PROCESSOR
-       if (element == unknown)
-@@ -293,7 +389,7 @@
- 
-   if (toprint & PRINT_HARDWARE_PLATFORM)
-     {
--      char const *element = unknown;
-+      char *element = unknown;
- #if HAVE_SYSINFO && defined SI_PLATFORM
-       {
- 	static char hardware_platform[257];
-@@ -301,6 +397,15 @@
- 			  hardware_platform, sizeof hardware_platform))
- 	  element = hardware_platform;
-       }
-+#else
-+      {
-+	struct utsname u;
-+	uname (&u);
-+	element = u.machine;
-+	if (strlen (element) == 4 && element[0] == 'i' && element[2] == '8'
-+	    && element[3] == '6')
-+	  element[1] = '3';
-+      }
- #endif
- #ifdef UNAME_HARDWARE_PLATFORM
-       if (element == unknown)
-@@ -323,3 +428,29 @@
- 
-   exit (EXIT_SUCCESS);
- }
-+
-+#ifdef linux
-+
-+/******************************************************************************
-+ *
-+ * int has_sse( void )
-+ * Checks Athlon CPU's to see if they support SSE.
-+ *
-+ *****************************************************************************/
-+
-+int has_sse( void )
-+{
-+  unsigned long edx, unused;
-+  int sse;
-+  cpuid(1,unused,unused,unused,edx);
-+  // I think, I need this tested on a Duron with SSE
-+  // and one without it.
-+  sse = edx & 0x2000000;
-+  if( sse == 0 ) {
-+    return 0;
-+  } else {
-+    return 1;
-+  }
-+
-+}
-+#endif
Index: patches/coreutils-5.97-suppress_uptime_kill_su-1.patch
===================================================================
--- patches/coreutils-5.97-suppress_uptime_kill_su-1.patch	(revision f74ae220ea44ef0bf9ca176a36b4d53f5c8b8e27)
+++ patches/coreutils-5.97-suppress_uptime_kill_su-1.patch	(revision f74ae220ea44ef0bf9ca176a36b4d53f5c8b8e27)
@@ -0,0 +1,272 @@
+Submitted By: Matthew Burgess <matthew at linuxfromscratch dot org>
+Date: 2006-03-15
+Initial Package Version: 5.94
+Origin: original suppress_hotname_uptame_kill_su patch (Robert Connolly)
+Upstream Status: N/A
+Description: This patch supresses the building of uptime, and kill.  The su
+command is built so the testsuite can run, use './src/su', but it will not
+be installed. Also see:
+           http://www.linuxfromscratch.org/patches/downloads/coreutils/
+           coreutils-5.0-dupes-2.patch
+
+diff -Naur coreutils-5.94.orig/AUTHORS coreutils-5.94/AUTHORS
+--- coreutils-5.94.orig/AUTHORS	2004-11-03 23:10:50.000000000 +0000
++++ coreutils-5.94/AUTHORS	2006-03-15 22:20:49.000000000 +0000
+@@ -34,7 +34,6 @@
+ hostname: Jim Meyering
+ id: Arnold Robbins, David MacKenzie
+ join: Mike Haertel
+-kill: Paul Eggert
+ link: Michael Stone
+ ln: Mike Parker, David MacKenzie
+ logname: FIXME: unknown
+@@ -83,7 +82,6 @@
+ unexpand: David MacKenzie
+ uniq: Richard Stallman, David MacKenzie
+ unlink: Michael Stone
+-uptime: Joseph Arceneaux, David MacKenzie, Kaveh Ghazi
+ users: Joseph Arceneaux, David MacKenzie
+ vdir: Richard Stallman, David MacKenzie
+ wc: Paul Rubin, David MacKenzie
+diff -Naur coreutils-5.94.orig/Makefile.in coreutils-5.94/Makefile.in
+--- coreutils-5.94.orig/Makefile.in	2006-02-13 12:52:03.000000000 +0000
++++ coreutils-5.94/Makefile.in	2006-03-15 22:20:49.000000000 +0000
+@@ -148,7 +148,7 @@
+ 	$(top_srcdir)/m4/ullong_max.m4 $(top_srcdir)/m4/ulonglong.m4 \
+ 	$(top_srcdir)/m4/unicodeio.m4 $(top_srcdir)/m4/unistd-safer.m4 \
+ 	$(top_srcdir)/m4/unlink-busy.m4 $(top_srcdir)/m4/unlinkdir.m4 \
+-	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/uptime.m4 \
++	$(top_srcdir)/m4/unlocked-io.m4 \
+ 	$(top_srcdir)/m4/userspec.m4 $(top_srcdir)/m4/utimbuf.m4 \
+ 	$(top_srcdir)/m4/utime.m4 $(top_srcdir)/m4/utimecmp.m4 \
+ 	$(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes-null.m4 \
+diff -Naur coreutils-5.94.orig/README coreutils-5.94/README
+--- coreutils-5.94.orig/README	2005-09-28 18:34:26.000000000 +0000
++++ coreutils-5.94/README	2006-03-15 22:20:49.000000000 +0000
+@@ -9,11 +9,11 @@
+ 
+   [ basename cat chgrp chmod chown chroot cksum comm cp csplit cut date dd
+   df dir dircolors dirname du echo env expand expr factor false fmt fold
+-  ginstall groups head hostid hostname id join kill link ln logname ls
++  ginstall groups head hostid hostname id join link ln logname ls
+   md5sum mkdir mkfifo mknod mv nice nl nohup od paste pathchk pinky pr
+   printenv printf ptx pwd readlink rm rmdir seq sha1sum shred sleep sort
+   split stat stty su sum sync tac tail tee test touch tr true tsort tty
+-  uname unexpand uniq unlink uptime users vdir wc who whoami yes
++  uname unexpand uniq unlink users vdir wc who whoami yes
+ 
+ See the file NEWS for a list of major changes in the current release.
+ 
+diff -Naur coreutils-5.94.orig/configure coreutils-5.94/configure
+--- coreutils-5.94.orig/configure	2006-02-13 12:52:04.000000000 +0000
++++ coreutils-5.94/configure	2006-03-15 22:20:49.000000000 +0000
+@@ -50418,8 +50418,7 @@
+ { echo "$as_me:$LINENO: result: $gnulib_cv_have_boot_time" >&5
+ echo "${ECHO_T}$gnulib_cv_have_boot_time" >&6; }
+   if test $gnulib_cv_have_boot_time = yes; then
+-  OPTIONAL_BIN_PROGS="$OPTIONAL_BIN_PROGS uptime\$(EXEEXT)"
+-  MAN="$MAN uptime.1"
++echo "uptime is suppressed"
+ fi
+ 
+ 
+diff -Naur coreutils-5.94.orig/man/Makefile.in coreutils-5.94/man/Makefile.in
+--- coreutils-5.94.orig/man/Makefile.in	2006-02-13 12:51:58.000000000 +0000
++++ coreutils-5.94/man/Makefile.in	2006-03-15 22:20:50.000000000 +0000
+@@ -142,7 +142,7 @@
+ 	$(top_srcdir)/m4/ullong_max.m4 $(top_srcdir)/m4/ulonglong.m4 \
+ 	$(top_srcdir)/m4/unicodeio.m4 $(top_srcdir)/m4/unistd-safer.m4 \
+ 	$(top_srcdir)/m4/unlink-busy.m4 $(top_srcdir)/m4/unlinkdir.m4 \
+-	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/uptime.m4 \
++	$(top_srcdir)/m4/unlocked-io.m4 \
+ 	$(top_srcdir)/m4/userspec.m4 $(top_srcdir)/m4/utimbuf.m4 \
+ 	$(top_srcdir)/m4/utime.m4 $(top_srcdir)/m4/utimecmp.m4 \
+ 	$(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes-null.m4 \
+@@ -303,13 +303,13 @@
+   basename.1 cat.1 chgrp.1 chmod.1 chown.1 chroot.1 cksum.1 comm.1 \
+   cp.1 csplit.1 cut.1 date.1 dd.1 df.1 dir.1 dircolors.1 dirname.1 du.1 \
+   echo.1 env.1 expand.1 expr.1 factor.1 false.1 fmt.1 fold.1 groups.1 \
+-  head.1 hostid.1 hostname.1 id.1 install.1 join.1 kill.1 \
++  head.1 hostid.1 hostname.1 id.1 install.1 join.1 \
+   link.1 ln.1 logname.1 \
+   ls.1 md5sum.1 mkdir.1 mkfifo.1 mknod.1 mv.1 nice.1 nl.1 nohup.1 od.1 \
+   paste.1 pathchk.1 pinky.1 pr.1 printenv.1 printf.1 ptx.1 pwd.1 readlink.1 \
+   rm.1 rmdir.1 seq.1 sha1sum.1 shred.1 sleep.1 sort.1 split.1 stat.1 stty.1 \
+-  su.1 sum.1 sync.1 tac.1 tail.1 tee.1 test.1 touch.1 tr.1 true.1 tsort.1 \
+-  tty.1 uname.1 unexpand.1 uniq.1 unlink.1 uptime.1 users.1 vdir.1 wc.1 \
++  sum.1 sync.1 tac.1 tail.1 tee.1 test.1 touch.1 tr.1 true.1 tsort.1 \
++  tty.1 uname.1 unexpand.1 uniq.1 unlink.1 users.1 vdir.1 wc.1 \
+   who.1 whoami.1 yes.1
+ 
+ man_aux = $(dist_man_MANS:.1=.x)
+@@ -575,7 +575,6 @@
+ id.1:		$(common_dep)	$(srcdir)/id.x		../src/id.c
+ install.1:	$(common_dep)	$(srcdir)/install.x	../src/install.c
+ join.1:		$(common_dep)	$(srcdir)/join.x	../src/join.c
+-kill.1:		$(common_dep)	$(srcdir)/kill.x	../src/kill.c
+ link.1:		$(common_dep)	$(srcdir)/link.x	../src/link.c
+ ln.1:		$(common_dep)	$(srcdir)/ln.x		../src/ln.c
+ logname.1:	$(common_dep)	$(srcdir)/logname.x	../src/logname.c
+@@ -608,7 +607,6 @@
+ split.1:	$(common_dep)	$(srcdir)/split.x	../src/split.c
+ stat.1:		$(common_dep)	$(srcdir)/stat.x	../src/stat.c
+ stty.1:		$(common_dep)	$(srcdir)/stty.x	../src/stty.c
+-su.1:		$(common_dep)	$(srcdir)/su.x		../src/su.c
+ sum.1:		$(common_dep)	$(srcdir)/sum.x		../src/sum.c
+ sync.1:		$(common_dep)	$(srcdir)/sync.x	../src/sync.c
+ tac.1:		$(common_dep)	$(srcdir)/tac.x		../src/tac.c
+@@ -624,7 +622,6 @@
+ unexpand.1:	$(common_dep)	$(srcdir)/unexpand.x	../src/unexpand.c
+ uniq.1:		$(common_dep)	$(srcdir)/uniq.x	../src/uniq.c
+ unlink.1:	$(common_dep)	$(srcdir)/unlink.x	../src/unlink.c
+-uptime.1:	$(common_dep)	$(srcdir)/uptime.x	../src/uptime.c
+ users.1:	$(common_dep)	$(srcdir)/users.x	../src/users.c
+ vdir.1:		$(common_dep)	$(srcdir)/vdir.x	../src/ls.c
+ wc.1:		$(common_dep)	$(srcdir)/wc.x		../src/wc.c
+@@ -656,7 +653,7 @@
+ check-x-vs-1:
+ 	PATH=../src$(PATH_SEPARATOR)$$PATH; export PATH;		\
+ 	t=ls-files.$$$$;						\
+-	(cd $(srcdir) && ls -1 *.x) | sed 's/\.x$$//' | $(ASSORT) > $$t;\
++	(cd $(srcdir) && ls -1 *.x) | grep -v -e 'kill.x' -e 'su.x' -e 'uptime.x' | sed 's/\.x$$//' | $(ASSORT) > $$t;\
+ 	echo $(dist_man_MANS) | tr -s ' ' '\n' | sed 's/\.1$$//'	\
+ 	  | $(ASSORT) | diff - $$t || { rm $$t; exit 1; };		\
+ 	rm $$t
+diff -Naur coreutils-5.94.orig/src/Makefile.in coreutils-5.94/src/Makefile.in
+--- coreutils-5.94.orig/src/Makefile.in	2006-02-13 13:08:11.000000000 +0000
++++ coreutils-5.94/src/Makefile.in	2006-03-15 22:20:50.000000000 +0000
+@@ -39,7 +39,7 @@
+ host_triplet = @host@
+ EXTRA_PROGRAMS = chroot$(EXEEXT) df$(EXEEXT) hostid$(EXEEXT) \
+ 	nice$(EXEEXT) pinky$(EXEEXT) stty$(EXEEXT) su$(EXEEXT) \
+-	uname$(EXEEXT) uptime$(EXEEXT) users$(EXEEXT) who$(EXEEXT)
++	uname$(EXEEXT) users$(EXEEXT) who$(EXEEXT)
+ bin_PROGRAMS = [$(EXEEXT) chgrp$(EXEEXT) chown$(EXEEXT) chmod$(EXEEXT) \
+ 	cp$(EXEEXT) dd$(EXEEXT) dircolors$(EXEEXT) du$(EXEEXT) \
+ 	ginstall$(EXEEXT) link$(EXEEXT) ln$(EXEEXT) dir$(EXEEXT) \
+@@ -56,7 +56,7 @@
+ 	uniq$(EXEEXT) wc$(EXEEXT) basename$(EXEEXT) date$(EXEEXT) \
+ 	dirname$(EXEEXT) echo$(EXEEXT) env$(EXEEXT) expr$(EXEEXT) \
+ 	factor$(EXEEXT) false$(EXEEXT) hostname$(EXEEXT) id$(EXEEXT) \
+-	kill$(EXEEXT) logname$(EXEEXT) pathchk$(EXEEXT) \
++	logname$(EXEEXT) pathchk$(EXEEXT) \
+ 	printenv$(EXEEXT) printf$(EXEEXT) pwd$(EXEEXT) seq$(EXEEXT) \
+ 	sleep$(EXEEXT) tee$(EXEEXT) test$(EXEEXT) true$(EXEEXT) \
+ 	tty$(EXEEXT) whoami$(EXEEXT) yes$(EXEEXT) $(am__EXEEXT_1) \
+@@ -169,7 +169,7 @@
+ 	$(top_srcdir)/m4/ullong_max.m4 $(top_srcdir)/m4/ulonglong.m4 \
+ 	$(top_srcdir)/m4/unicodeio.m4 $(top_srcdir)/m4/unistd-safer.m4 \
+ 	$(top_srcdir)/m4/unlink-busy.m4 $(top_srcdir)/m4/unlinkdir.m4 \
+-	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/uptime.m4 \
++	$(top_srcdir)/m4/unlocked-io.m4 \
+ 	$(top_srcdir)/m4/userspec.m4 $(top_srcdir)/m4/utimbuf.m4 \
+ 	$(top_srcdir)/m4/utime.m4 $(top_srcdir)/m4/utimecmp.m4 \
+ 	$(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes-null.m4 \
+@@ -350,11 +350,6 @@
+ join_LDADD = $(LDADD)
+ join_DEPENDENCIES = ../lib/libcoreutils.a $(am__DEPENDENCIES_1) \
+ 	../lib/libcoreutils.a
+-kill_SOURCES = kill.c
+-kill_OBJECTS = kill.$(OBJEXT)
+-kill_LDADD = $(LDADD)
+-kill_DEPENDENCIES = ../lib/libcoreutils.a $(am__DEPENDENCIES_1) \
+-	../lib/libcoreutils.a
+ link_SOURCES = link.c
+ link_OBJECTS = link.$(OBJEXT)
+ link_LDADD = $(LDADD)
+@@ -577,9 +572,6 @@
+ unlink_LDADD = $(LDADD)
+ unlink_DEPENDENCIES = ../lib/libcoreutils.a $(am__DEPENDENCIES_1) \
+ 	../lib/libcoreutils.a
+-uptime_SOURCES = uptime.c
+-uptime_OBJECTS = uptime.$(OBJEXT)
+-uptime_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1)
+ users_SOURCES = users.c
+ users_OBJECTS = users.$(OBJEXT)
+ users_LDADD = $(LDADD)
+@@ -622,28 +614,28 @@
+ 	csplit.c cut.c date.c dd.c df.c $(dir_SOURCES) dircolors.c \
+ 	dirname.c du.c echo.c env.c expand.c expr.c factor.c false.c \
+ 	fmt.c fold.c $(ginstall_SOURCES) head.c hostid.c hostname.c \
+-	id.c join.c kill.c link.c ln.c logname.c $(ls_SOURCES) \
++	id.c join.c link.c ln.c logname.c $(ls_SOURCES) \
+ 	$(md5sum_SOURCES) mkdir.c mkfifo.c mknod.c $(mv_SOURCES) \
+ 	nice.c nl.c nohup.c od.c paste.c pathchk.c pinky.c pr.c \
+ 	printenv.c printf.c ptx.c pwd.c readlink.c $(rm_SOURCES) \
+ 	rmdir.c seq.c setuidgid.c $(sha1sum_SOURCES) shred.c sleep.c \
+ 	sort.c split.c stat.c stty.c su.c sum.c sync.c tac.c tail.c \
+ 	tee.c test.c touch.c tr.c true.c tsort.c tty.c uname.c \
+-	unexpand.c uniq.c unlink.c uptime.c users.c $(vdir_SOURCES) \
++	unexpand.c uniq.c unlink.c users.c $(vdir_SOURCES) \
+ 	wc.c who.c whoami.c yes.c
+ DIST_SOURCES = $(__SOURCES) basename.c cat.c $(chgrp_SOURCES) chmod.c \
+ 	$(chown_SOURCES) chroot.c cksum.c comm.c $(cp_SOURCES) \
+ 	csplit.c cut.c date.c dd.c df.c $(dir_SOURCES) dircolors.c \
+ 	dirname.c du.c echo.c env.c expand.c expr.c factor.c false.c \
+ 	fmt.c fold.c $(ginstall_SOURCES) head.c hostid.c hostname.c \
+-	id.c join.c kill.c link.c ln.c logname.c $(ls_SOURCES) \
++	id.c join.c link.c ln.c logname.c $(ls_SOURCES) \
+ 	$(md5sum_SOURCES) mkdir.c mkfifo.c mknod.c $(mv_SOURCES) \
+ 	nice.c nl.c nohup.c od.c paste.c pathchk.c pinky.c pr.c \
+ 	printenv.c printf.c ptx.c pwd.c readlink.c $(rm_SOURCES) \
+ 	rmdir.c seq.c setuidgid.c $(sha1sum_SOURCES) shred.c sleep.c \
+ 	sort.c split.c stat.c stty.c su.c sum.c sync.c tac.c tail.c \
+ 	tee.c test.c touch.c tr.c true.c tsort.c tty.c uname.c \
+-	unexpand.c uniq.c unlink.c uptime.c users.c $(vdir_SOURCES) \
++	unexpand.c uniq.c unlink.c users.c $(vdir_SOURCES) \
+ 	wc.c who.c whoami.c yes.c
+ HEADERS = $(noinst_HEADERS)
+ ETAGS = etags
+@@ -840,7 +832,6 @@
+ nanosec_libs = $(LDADD) $(POW_LIB) $(LIB_NANOSLEEP)
+ sleep_LDADD = $(nanosec_libs)
+ tail_LDADD = $(nanosec_libs)
+-uptime_LDADD = $(LDADD) $(GETLOADAVG_LIBS)
+ su_LDADD = $(LDADD) $(LIB_CRYPT)
+ SUFFIXES = .sh
+ installed_su = $(DESTDIR)$(bindir)/`echo su|sed '$(transform)'`
+@@ -1076,9 +1067,6 @@
+ join$(EXEEXT): $(join_OBJECTS) $(join_DEPENDENCIES) 
+ 	@rm -f join$(EXEEXT)
+ 	$(LINK) $(join_LDFLAGS) $(join_OBJECTS) $(join_LDADD) $(LIBS)
+-kill$(EXEEXT): $(kill_OBJECTS) $(kill_DEPENDENCIES) 
+-	@rm -f kill$(EXEEXT)
+-	$(LINK) $(kill_LDFLAGS) $(kill_OBJECTS) $(kill_LDADD) $(LIBS)
+ link$(EXEEXT): $(link_OBJECTS) $(link_DEPENDENCIES) 
+ 	@rm -f link$(EXEEXT)
+ 	$(LINK) $(link_LDFLAGS) $(link_OBJECTS) $(link_LDADD) $(LIBS)
+@@ -1226,9 +1214,6 @@
+ unlink$(EXEEXT): $(unlink_OBJECTS) $(unlink_DEPENDENCIES) 
+ 	@rm -f unlink$(EXEEXT)
+ 	$(LINK) $(unlink_LDFLAGS) $(unlink_OBJECTS) $(unlink_LDADD) $(LIBS)
+-uptime$(EXEEXT): $(uptime_OBJECTS) $(uptime_DEPENDENCIES) 
+-	@rm -f uptime$(EXEEXT)
+-	$(LINK) $(uptime_LDFLAGS) $(uptime_OBJECTS) $(uptime_LDADD) $(LIBS)
+ users$(EXEEXT): $(users_OBJECTS) $(users_DEPENDENCIES) 
+ 	@rm -f users$(EXEEXT)
+ 	$(LINK) $(users_LDFLAGS) $(users_OBJECTS) $(users_LDADD) $(LIBS)
+@@ -1322,7 +1307,6 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/id.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/install.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/join.Po@am__quote@
+-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kill.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lbracket.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/link.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ln.Po@am__quote@
+@@ -1378,7 +1362,6 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unexpand.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uniq.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unlink.Po@am__quote@
+-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uptime.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/users.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wc.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/who.Po@am__quote@
+@@ -1606,7 +1589,7 @@
+ 	  && can_create_suid_root_executable=yes; \
+ 	rm -f $$TMPFILE; \
+ 	if test $$can_create_suid_root_executable = yes; then \
+-	  $(INSTALL_SU); \
++	  echo "Installation of su is suppressed"; \
+ 	else \
+ 	  echo "WARNING: insufficient access; not installing su"; \
+ 	  echo "NOTE: to install su, run 'make install-root' as root"; \
Index: patches/coreutils-5.97-uname-2.patch
===================================================================
--- patches/coreutils-5.97-uname-2.patch	(revision f74ae220ea44ef0bf9ca176a36b4d53f5c8b8e27)
+++ patches/coreutils-5.97-uname-2.patch	(revision f74ae220ea44ef0bf9ca176a36b4d53f5c8b8e27)
@@ -0,0 +1,161 @@
+Submitted By: Jim Gifford <jim at linuxfromscratch dot org>
+Date: 2006-08-24
+Initial Package Version: 5.97
+Upstream Status: Not Accepted
+Origin: Gentoo - http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/coreutils
+Description: Display CPU Information from /proc/cpuinfo or /proc/sysinfo
+
+Original Patch by - Matthew Burgess and Scot McPherson
+
+diff -Naur coreutils-5.97.orig/src/uname.c coreutils-5.97/src/uname.c
+--- coreutils-5.97.orig/src/uname.c	2005-09-15 12:57:04.000000000 -0700
++++ coreutils-5.97/src/uname.c	2006-08-24 15:52:53.000000000 -0700
+@@ -51,6 +51,11 @@
+ # include <mach-o/arch.h>
+ #endif
+ 
++#if defined (__linux__)
++# define USE_PROCINFO
++# define UNAME_HARDWARE_PLATFORM
++#endif
++
+ #include "system.h"
+ #include "error.h"
+ #include "quote.h"
+@@ -138,6 +143,106 @@
+   exit (status);
+ }
+ 
++#if defined(USE_PROCINFO)
++
++# if defined(__s390__) || defined(__s390x__)
++#  define CPUINFO_FILE    "/proc/sysinfo"
++#  define CPUINFO_FORMAT  "%64[^\t :]%*[ :]%256[^\n]%c"
++# else
++#  define CPUINFO_FILE    "/proc/cpuinfo"
++#  define CPUINFO_FORMAT  "%64[^\t:]\t:%256[^\n]%c"
++# endif
++
++# define PROCINFO_PROCESSOR      0
++# define PROCINFO_HARDWARE_PLATFORM 1
++
++static void __eat_cpuinfo_space(char *buf)
++{
++	/* first eat trailing space */
++	char *tmp = buf + strlen(buf) - 1;
++	while (tmp > buf && isspace(*tmp))
++		*tmp-- = '\0';
++	/* then eat leading space */
++	tmp = buf;
++	while (*tmp && isspace(*tmp))
++		tmp++;
++	if (tmp != buf)
++		memmove(buf, tmp, strlen(tmp)+1);
++}
++
++static int __linux_procinfo (int x, char *fstr, size_t s)
++{
++	FILE *fp;
++
++	char *procinfo_keys[] = {
++		/* --processor --hardware-platform */
++		#if defined(__alpha__)
++			"cpu model", "system type"
++		#elif defined(__arm__)
++			"Processor", "Hardware"
++		#elif defined(bfin)
++			"CPU", "BOARD Name"
++		#elif defined(__cris__)
++			"cpu", "cpu model"
++		#elif defined(__frv__)
++			"CPU-Core", "System"
++		#elif defined(__i386__) || defined(__x86_64__)
++			"model name", "vendor_id"
++		#elif defined(__ia64__)
++			"family", "vendor"
++		#elif defined(__hppa__)
++			"cpu", "model"
++		#elif defined(__m68k__)
++			"CPU", "MMU"
++		#elif defined(__mips__)
++			"cpu model", "system type"
++		#elif defined(__powerpc__) || defined(__powerpc64__)
++			"cpu", "machine"
++		#elif defined(__s390__) || defined(__s390x__)
++			"Type", "Manufacturer"
++		#elif defined(__sh__)
++			"cpu type", "machine"
++		#elif defined(sparc) || defined(__sparc__)
++			"type", "cpu"
++		#elif defined(__vax__)
++			"cpu type", "cpu"
++		#else
++			"unknown", "unknown"
++		#endif
++	};
++
++	if ((fp = fopen(CPUINFO_FILE, "r")) != NULL) {
++		char key[65], value[257], eol, *ret = NULL;
++
++		while (fscanf(fp, CPUINFO_FORMAT, key, value, &eol) != EOF) {
++			__eat_cpuinfo_space(key);
++			if (!strcmp(key, procinfo_keys[x])) {
++				__eat_cpuinfo_space(value);
++				ret = value;
++				break;
++			}
++			if (eol != '\n') {
++				/* we need two fscanf's here in case the previous
++				 * length limit caused us to read right up to the
++				 * newline ... doing "%*[^\n]\n" wont eat the newline
++				 */
++				fscanf(fp, "%*[^\n]");
++				fscanf(fp, "\n");
++			}
++		}
++		fclose(fp);
++
++		if (ret) {
++			strncpy(fstr, ret, s);
++			return 0;
++		}
++	}
++
++	return -1;
++}
++
++#endif
++
+ /* Print ELEMENT, preceded by a space if something has already been
+    printed.  */
+ 
+@@ -250,10 +355,14 @@
+   if (toprint & PRINT_PROCESSOR)
+     {
+       char const *element = unknown;
+-#if HAVE_SYSINFO && defined SI_ARCHITECTURE
++#if ( HAVE_SYSINFO && defined SI_ARCHITECTURE ) || defined(USE_PROCINFO)
+       {
+ 	static char processor[257];
++#if defined(USE_PROCINFO)
++	if (0 <= __linux_procinfo (PROCINFO_PROCESSOR, processor, sizeof processor))
++#else
+ 	if (0 <= sysinfo (SI_ARCHITECTURE, processor, sizeof processor))
++#endif
+ 	  element = processor;
+       }
+ #endif
+@@ -306,9 +415,13 @@
+       if (element == unknown)
+ 	{
+ 	  static char hardware_platform[257];
++#if defined(USE_PROCINFO)
++	  if (0 <= __linux_procinfo (PROCINFO_HARDWARE_PLATFORM, hardware_platform, sizeof hardware_platform))
++#else
+ 	  size_t s = sizeof hardware_platform;
+ 	  static int mib[] = { CTL_HW, UNAME_HARDWARE_PLATFORM };
+ 	  if (sysctl (mib, 2, hardware_platform, &s, 0, 0) >= 0)
++#endif
+ 	    element = hardware_platform;
+ 	}
+ #endif
Index: tches/lilo-22.7.1-cross_compile_x86_64-1.patch
===================================================================
--- patches/lilo-22.7.1-cross_compile_x86_64-1.patch	(revision d1fc2f36f3ed91443b4882c6c62071e1968c3e62)
+++ 	(revision )
@@ -1,38 +1,0 @@
-Submitted By: Ken Moffat <ken at linuxfromscratch dot org>
-Date: 2006-03-11
-Initial Package Version: 22.7.1
-Upstream Status: Not submitted, purely for cross-compiling for x86_64(-64)
-Origin: Self
-Description: Allows lilo-static to be built with a cross-compiler (plus
- cross as86, ld86).   
-
-diff -Naur lilo-22.7.1-vanilla/Makefile lilo-22.7.1/Makefile
---- lilo-22.7.1-vanilla/Makefile	2005-09-17 22:36:25.000000000 +0100
-+++ lilo-22.7.1/Makefile	2006-03-11 18:35:13.000000000 +0000
-@@ -94,10 +94,10 @@
- 
- 
- SHELL=/bin/sh
--CC=gcc
-+#CC=gcc
- CPP=$(CC) -E
--AS86=as86 -0 -a
--LD86=ld86 -0
-+AS86=x86_64-unknown-linux-gnu-as86 -0 -a
-+LD86=x86_64-unknown-linux-gnu-ld86 -0
- NASM=nasm
- 
- CFLAGS=$(OPT) -Wall -g $(PCONFIG)
-@@ -424,10 +424,10 @@
- 		mv tmp_make Makefile
- 
- version:	common.c lilo.h common.h
--		$(CC) $(CFLAGS) -DSHS_MAIN -o version common.c
-+		gcc $(CFLAGS) -DSHS_MAIN -o version common.c
- 
- mkloader:	temp.c
--		$(CC) $(CFLAGS) -DLILO_BINARY -o mkloader temp.c
-+		gcc $(CFLAGS) -DLILO_BINARY -o mkloader temp.c
- 
- tidy:
- 		rm -f core $(LIS) *.shs *.crc $(TMP)*
Index: patches/lilo-22.7.3-cross_compile_x86_64-1.patch
===================================================================
--- patches/lilo-22.7.3-cross_compile_x86_64-1.patch	(revision f74ae220ea44ef0bf9ca176a36b4d53f5c8b8e27)
+++ patches/lilo-22.7.3-cross_compile_x86_64-1.patch	(revision f74ae220ea44ef0bf9ca176a36b4d53f5c8b8e27)
@@ -0,0 +1,38 @@
+Submitted By: Ken Moffat <ken at linuxfromscratch dot org>
+Date: 2006-03-11
+Initial Package Version: 22.7.1
+Upstream Status: Not submitted, purely for cross-compiling for x86_64(-64)
+Origin: Self
+Description: Allows lilo-static to be built with a cross-compiler (plus
+ cross as86, ld86).   
+
+diff -Naur lilo-22.7.1-vanilla/Makefile lilo-22.7.1/Makefile
+--- lilo-22.7.1-vanilla/Makefile	2005-09-17 22:36:25.000000000 +0100
++++ lilo-22.7.1/Makefile	2006-03-11 18:35:13.000000000 +0000
+@@ -94,10 +94,10 @@
+ 
+ 
+ SHELL=/bin/sh
+-CC=gcc
++#CC=gcc
+ CPP=$(CC) -E
+-AS86=as86 -0 -a
+-LD86=ld86 -0
++AS86=x86_64-unknown-linux-gnu-as86 -0 -a
++LD86=x86_64-unknown-linux-gnu-ld86 -0
+ NASM=nasm
+ 
+ CFLAGS=$(OPT) -Wall -g $(PCONFIG)
+@@ -424,10 +424,10 @@
+ 		mv tmp_make Makefile
+ 
+ version:	common.c lilo.h common.h
+-		$(CC) $(CFLAGS) -DSHS_MAIN -o version common.c
++		gcc $(CFLAGS) -DSHS_MAIN -o version common.c
+ 
+ mkloader:	temp.c
+-		$(CC) $(CFLAGS) -DLILO_BINARY -o mkloader temp.c
++		gcc $(CFLAGS) -DLILO_BINARY -o mkloader temp.c
+ 
+ tidy:
+ 		rm -f core $(LIS) *.shs *.crc $(TMP)*
Index: patches/vim-7.0-fixes-10.patch
===================================================================
--- patches/vim-7.0-fixes-10.patch	(revision f74ae220ea44ef0bf9ca176a36b4d53f5c8b8e27)
+++ patches/vim-7.0-fixes-10.patch	(revision f74ae220ea44ef0bf9ca176a36b4d53f5c8b8e27)
@@ -0,0 +1,2302 @@
+Submitted By: Jim Gifford (jim at linuxfromscratch dot org)
+Date: 2006-08-27
+Initial Package Version: 7.0
+Origin: Upstream
+Upstream Status: Applied
+Description: Contains Patch 001-004, 006-026, 028-031, 033-044, 036-056,
+        058-064, and 066 from Upstream
+        005, 027, 032, 045, 057, and 066 is for the extras, Mac, or
+        Windows 32 only
+
+diff -Naur vim70.orig/configure vim70/configure
+--- vim70.orig/configure	2004-07-05 02:02:24.000000000 -0700
++++ vim70/configure	2006-08-09 08:37:06.000000000 -0700
+@@ -3,4 +3,4 @@
+ # This is just a stub for the Unix configure script, to provide support for
+ # doing "./configure" in the top Vim directory.
+ 
+-cd src && ./configure "$@"
++cd src && exec ./configure "$@"
+diff -Naur vim70.orig/runtime/autoload/ccomplete.vim vim70/runtime/autoload/ccomplete.vim
+--- vim70.orig/runtime/autoload/ccomplete.vim	2006-05-03 07:35:56.000000000 -0700
++++ vim70/runtime/autoload/ccomplete.vim	2006-07-14 08:51:21.000000000 -0700
+@@ -1,7 +1,7 @@
+ " Vim completion script
+ " Language:	C
+ " Maintainer:	Bram Moolenaar <Bram@vim.org>
+-" Last Change:	2006 May 03
++" Last Change:	2006 May 08
+ 
+ 
+ " This function is used for the 'omnifunc' option.
+@@ -458,7 +458,7 @@
+ " member.
+ function! s:StructMembers(typename, items, all)
+   " Todo: What about local structures?
+-  let fnames = join(map(tagfiles(), 'escape(v:val, " \\")'))
++  let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")'))
+   if fnames == ''
+     return []
+   endif
+diff -Naur vim70.orig/runtime/autoload/gzip.vim vim70/runtime/autoload/gzip.vim
+--- vim70.orig/runtime/autoload/gzip.vim	2006-03-31 07:12:15.000000000 -0800
++++ vim70/runtime/autoload/gzip.vim	2006-08-09 08:37:36.000000000 -0700
+@@ -1,6 +1,6 @@
+ " Vim autoload file for editing compressed files.
+ " Maintainer: Bram Moolenaar <Bram@vim.org>
+-" Last Change: 2006 Mar 31
++" Last Change: 2006 Jul 19
+ 
+ " These functions are used by the gzip plugin.
+ 
+@@ -127,9 +127,9 @@
+     let nmt = s:tempname(nm)
+     if rename(nm, nmt) == 0
+       if exists("b:gzip_comp_arg")
+-	call system(a:cmd . " " . b:gzip_comp_arg . " " . nmt)
++	call system(a:cmd . " " . b:gzip_comp_arg . " '" . nmt . "'")
+       else
+-	call system(a:cmd . " " . nmt)
++	call system(a:cmd . " '" . nmt . "'")
+       endif
+       call rename(nmt . "." . expand("<afile>:e"), nm)
+     endif
+diff -Naur vim70.orig/runtime/autoload/paste.vim vim70/runtime/autoload/paste.vim
+--- vim70.orig/runtime/autoload/paste.vim	2006-04-21 11:31:01.000000000 -0700
++++ vim70/runtime/autoload/paste.vim	2006-07-14 08:51:21.000000000 -0700
+@@ -1,6 +1,6 @@
+ " Vim support file to help with paste mappings and menus
+ " Maintainer:	Bram Moolenaar <Bram@vim.org>
+-" Last Change:	2006 Apr 21
++" Last Change:	2006 Jun 23
+ 
+ " Define the string to use for items that are present both in Edit, Popup and
+ " Toolbar menu.  Also used in mswin.vim and macmap.vim.
+@@ -12,7 +12,7 @@
+ if has("virtualedit")
+   let paste#paste_cmd = {'n': ":call paste#Paste()<CR>"}
+   let paste#paste_cmd['v'] = '"-c<Esc>' . paste#paste_cmd['n']
+-  let paste#paste_cmd['i'] = '<Esc>' . paste#paste_cmd['n'] . 'gi'
++  let paste#paste_cmd['i'] = 'x<BS><Esc>' . paste#paste_cmd['n'] . 'gi'
+ 
+   func! paste#Paste()
+     let ove = &ve
+diff -Naur vim70.orig/runtime/autoload/spellfile.vim vim70/runtime/autoload/spellfile.vim
+--- vim70.orig/runtime/autoload/spellfile.vim	2006-02-01 04:12:24.000000000 -0800
++++ vim70/runtime/autoload/spellfile.vim	2006-07-14 08:51:21.000000000 -0700
+@@ -1,9 +1,9 @@
+ " Vim script to download a missing spell file
+ " Maintainer:	Bram Moolenaar <Bram@vim.org>
+-" Last Change:	2006 Feb 01
++" Last Change:	2006 May 10
+ 
+ if !exists('g:spellfile_URL')
+-  let g:spellfile_URL = 'ftp://ftp.vim.org/pub/vim/unstable/runtime/spell'
++  let g:spellfile_URL = 'ftp://ftp.vim.org/pub/vim/runtime/spell'
+ endif
+ let s:spellfile_URL = ''    " Start with nothing so that s:donedict is reset.
+ 
+@@ -61,13 +61,13 @@
+     new
+     setlocal bin
+     echo 'Downloading ' . fname . '...'
+-    exe 'Nread ' g:spellfile_URL . '/' . fname
++    call spellfile#Nread(fname)
+     if getline(2) !~ 'VIMspell'
+       " Didn't work, perhaps there is an ASCII one.
+       g/^/d
+       let fname = a:lang . '.ascii.spl'
+       echo 'Could not find it, trying ' . fname . '...'
+-      exe 'Nread ' g:spellfile_URL . '/' . fname
++      call spellfile#Nread(fname)
+       if getline(2) !~ 'VIMspell'
+ 	echo 'Sorry, downloading failed'
+ 	bwipe!
+@@ -95,7 +95,7 @@
+ 	g/^/d
+ 	let fname = substitute(fname, '\.spl$', '.sug', '')
+ 	echo 'Downloading ' . fname . '...'
+-	exe 'Nread ' g:spellfile_URL . '/' . fname
++	call spellfile#Nread(fname)
+ 	if getline(2) !~ 'VIMsug'
+ 	  echo 'Sorry, downloading failed'
+ 	else
+@@ -109,3 +109,10 @@
+     bwipe
+   endif
+ endfunc
++
++" Read "fname" from the ftp server.
++function! spellfile#Nread(fname)
++  let machine = substitute(g:spellfile_URL, 'ftp://\([^/]*\).*', '\1', '')
++  let dir = substitute(g:spellfile_URL, 'ftp://[^/]*/\(.*\)', '\1', '')
++  exe 'Nread "' . machine . ' anonymous vim7user ' . dir . '/' . a:fname . '"'
++endfunc
+diff -Naur vim70.orig/runtime/plugin/matchparen.vim vim70/runtime/plugin/matchparen.vim
+--- vim70.orig/runtime/plugin/matchparen.vim	2006-04-27 06:31:26.000000000 -0700
++++ vim70/runtime/plugin/matchparen.vim	2006-08-09 08:36:40.000000000 -0700
+@@ -1,6 +1,6 @@
+ " Vim plugin for showing matching parens
+ " Maintainer:  Bram Moolenaar <Bram@vim.org>
+-" Last Change: 2006 Apr 27
++" Last Change: 2006 Jun 26
+ 
+ " Exit quickly when:
+ " - this plugin was already loaded (or disabled)
+@@ -90,19 +90,19 @@
+   " Find the match.  When it was just before the cursor move it there for a
+   " moment.
+   if before > 0
+-    let save_cursor = getpos('.')
++    let save_cursor = winsaveview()
+     call cursor(c_lnum, c_col - before)
+   endif
+ 
+   " When not in a string or comment ignore matches inside them.
+   let s_skip ='synIDattr(synID(line("."), col("."), 0), "name") ' .
+-	\ '=~?  "string\\|comment"'
++	\ '=~?  "string\\|character\\|singlequote\\|comment"'
+   execute 'if' s_skip '| let s_skip = 0 | endif'
+ 
+   let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline)
+ 
+   if before > 0
+-    call setpos('.', save_cursor)
++    call winrestview(save_cursor)
+   endif
+ 
+   " If a match is found setup match highlighting.
+diff -Naur vim70.orig/runtime/scripts.vim vim70/runtime/scripts.vim
+--- vim70.orig/runtime/scripts.vim	2006-03-28 11:30:49.000000000 -0800
++++ vim70/runtime/scripts.vim	2006-08-09 08:38:04.000000000 -0700
+@@ -1,7 +1,7 @@
+ " Vim support file to detect file types in scripts
+ "
+ " Maintainer:	Bram Moolenaar <Bram@vim.org>
+-" Last change:	2006 Mar 28
++" Last change:	2006 Jul 08
+ 
+ " This file is called by an autocommand for every file that has just been
+ " loaded into a buffer.  It checks if the type of file can be recognized by
+@@ -54,6 +54,12 @@
+     let s:name = substitute(s:line1, '^#!\s*\S*[/\\]\(\i\+\).*', '\1', '')
+   endif
+ 
++  " tcl scripts may have #!/bin/sh in the first line and "exec wish" in the
++  " third line.  Suggested by Steven Atkinson.
++  if getline(3) =~ '^exec wish'
++    let s:name = 'wish'
++  endif
++
+   " Bourne-like shell scripts: bash bash2 ksh ksh93 sh
+   if s:name =~ '^\(bash\d*\|\|ksh\d*\|sh\)\>'
+     call SetFileTypeSH(s:line1)	" defined in filetype.vim
+diff -Naur vim70.orig/src/buffer.c vim70/src/buffer.c
+--- vim70.orig/src/buffer.c	2006-04-26 14:37:23.000000000 -0700
++++ vim70/src/buffer.c	2006-08-19 16:39:01.000000000 -0700
+@@ -5420,11 +5420,7 @@
+     buf_T	*newbuf;
+     int		differ = TRUE;
+     linenr_T	lnum;
+-#ifdef FEAT_AUTOCMD
+     aco_save_T	aco;
+-#else
+-    buf_T	*old_curbuf = curbuf;
+-#endif
+     exarg_T	ea;
+ 
+     /* Allocate a buffer without putting it in the buffer list. */
+@@ -5439,13 +5435,8 @@
+ 	return TRUE;
+     }
+ 
+-#ifdef FEAT_AUTOCMD
+     /* set curwin/curbuf to buf and save a few things */
+     aucmd_prepbuf(&aco, newbuf);
+-#else
+-    curbuf = newbuf;
+-    curwin->w_buffer = newbuf;
+-#endif
+ 
+     if (ml_open(curbuf) == OK
+ 	    && readfile(buf->b_ffname, buf->b_fname,
+@@ -5466,13 +5457,8 @@
+     }
+     vim_free(ea.cmd);
+ 
+-#ifdef FEAT_AUTOCMD
+     /* restore curwin/curbuf and a few other things */
+     aucmd_restbuf(&aco);
+-#else
+-    curbuf = old_curbuf;
+-    curwin->w_buffer = old_curbuf;
+-#endif
+ 
+     if (curbuf != newbuf)	/* safety check */
+ 	wipe_buffer(newbuf, FALSE);
+diff -Naur vim70.orig/src/configure vim70/src/configure
+--- vim70.orig/src/configure	2006-05-07 07:17:49.000000000 -0700
++++ vim70/src/configure	2006-08-09 08:37:06.000000000 -0700
+@@ -2,5 +2,9 @@
+ # run the automatically generated configure script
+ CONFIG_STATUS=auto/config.status \
+ 	auto/configure "$@" --srcdir="${srcdir:-.}" --cache-file=auto/config.cache
++result=$?
++
+ # Stupid autoconf 2.5x causes this file to be left behind.
+ if test -f configure.lineno; then rm -f configure.lineno; fi
++
++exit $result
+diff -Naur vim70.orig/src/edit.c vim70/src/edit.c
+--- vim70.orig/src/edit.c	2006-05-07 04:48:51.000000000 -0700
++++ vim70/src/edit.c	2006-08-27 12:47:33.000000000 -0700
+@@ -719,9 +719,14 @@
+ #ifdef FEAT_INS_EXPAND
+ 	/*
+ 	 * Special handling of keys while the popup menu is visible or wanted
+-	 * and the cursor is still in the completed word.
++	 * and the cursor is still in the completed word.  Only when there is
++	 * a match, skip this when no matches were found.
+ 	 */
+-	if (compl_started && pum_wanted() && curwin->w_cursor.col >= compl_col)
++	if (compl_started
++		&& pum_wanted()
++		&& curwin->w_cursor.col >= compl_col
++		&& (compl_shown_match == NULL
++		    || compl_shown_match != compl_shown_match->cp_next))
+ 	{
+ 	    /* BS: Delete one character from "compl_leader". */
+ 	    if ((c == K_BS || c == Ctrl_H)
+@@ -751,7 +756,7 @@
+ 		    continue;
+ 		}
+ 
+-		/* Pressing CTRL-Y selects the current match.  Shen
++		/* Pressing CTRL-Y selects the current match.  When
+ 		 * compl_enter_selects is set the Enter key does the same. */
+ 		if (c == Ctrl_Y || (compl_enter_selects
+ 				   && (c == CAR || c == K_KENTER || c == NL)))
+@@ -877,6 +882,7 @@
+ 		/* Close the cmdline window. */
+ 		cmdwin_result = K_IGNORE;
+ 		got_int = FALSE; /* don't stop executing autocommands et al. */
++		nomove = TRUE;
+ 		goto doESCkey;
+ 	    }
+ #endif
+@@ -2409,6 +2415,7 @@
+     compl_matches = ins_compl_make_cyclic();
+     compl_started = TRUE;
+     compl_used_match = TRUE;
++    compl_cont_status = 0;
+ 
+     compl_curr_match = compl_first_match;
+     ins_complete(Ctrl_N);
+@@ -2753,6 +2760,7 @@
+ 	}
+ 	else
+ # endif
++	    if (count > 0)	/* avoid warning for using "files" uninit */
+ 	{
+ 	    ins_compl_files(count, files, thesaurus, flags,
+ 							&regmatch, buf, &dir);
+@@ -3015,9 +3023,6 @@
+     if ((int)(p - line) - (int)compl_col <= 0)
+ 	return K_BS;
+ 
+-    /* For redo we need to repeat this backspace. */
+-    AppendCharToRedobuff(K_BS);
+-
+     /* Deleted more than what was used to find matches or didn't finish
+      * finding all matches: need to look for matches all over again. */
+     if (curwin->w_cursor.col <= compl_col + compl_length
+@@ -3046,7 +3051,6 @@
+     ins_compl_delete();
+     ins_bytes(compl_leader + curwin->w_cursor.col - compl_col);
+     compl_used_match = FALSE;
+-    compl_enter_selects = FALSE;
+ 
+     if (compl_started)
+ 	ins_compl_set_original_text(compl_leader);
+@@ -3076,6 +3080,7 @@
+ 	compl_restarting = FALSE;
+     }
+ 
++#if 0   /* disabled, made CTRL-L, BS and typing char jump to original text. */
+     if (!compl_used_match)
+     {
+ 	/* Go to the original text, since none of the matches is inserted. */
+@@ -3087,6 +3092,8 @@
+ 	compl_curr_match = compl_shown_match;
+ 	compl_shows_dir = compl_direction;
+     }
++#endif
++    compl_enter_selects = !compl_used_match;
+ 
+     /* Show the popup menu with a different set of matches. */
+     ins_compl_show_pum();
+@@ -3115,10 +3122,6 @@
+ #endif
+ 	ins_char(c);
+ 
+-    /* For redo we need to count this character so that the number of
+-     * backspaces is correct. */
+-    AppendCharToRedobuff(c);
+-
+     /* If we didn't complete finding matches we must search again. */
+     if (compl_was_interrupted)
+ 	ins_compl_restart();
+@@ -3175,10 +3178,32 @@
+     char_u	*p;
+     int		len = curwin->w_cursor.col - compl_col;
+     int		c;
++    compl_T	*cp;
+ 
+     p = compl_shown_match->cp_str;
+     if ((int)STRLEN(p) <= len)   /* the match is too short */
+-	return;
++    {
++	/* When still at the original match use the first entry that matches
++	 * the leader. */
++	if (compl_shown_match->cp_flags & ORIGINAL_TEXT)
++	{
++	    p = NULL;
++	    for (cp = compl_shown_match->cp_next; cp != NULL
++				 && cp != compl_first_match; cp = cp->cp_next)
++	    {
++		if (ins_compl_equal(cp, compl_leader,
++						   (int)STRLEN(compl_leader)))
++		{
++		    p = cp->cp_str;
++		    break;
++		}
++	    }
++	    if (p == NULL || (int)STRLEN(p) <= len)
++		return;
++	}
++	else
++	    return;
++    }
+     p += len;
+ #ifdef FEAT_MBYTE
+     c = mb_ptr2char(p);
+@@ -3198,7 +3223,6 @@
+     int	    c;
+ {
+     char_u	*ptr;
+-    int		temp;
+     int		want_cindent;
+     int		retval = FALSE;
+ 
+@@ -3354,6 +3378,7 @@
+ 	    if (compl_curr_match != NULL || compl_leader != NULL || c == Ctrl_E)
+ 	    {
+ 		char_u	*p;
++		int	temp = 0;
+ 
+ 		/*
+ 		 * If any of the original typed text has been changed, eg when
+@@ -3369,16 +3394,21 @@
+ 		    ptr = compl_leader;
+ 		else
+ 		    ptr = compl_orig_text;
+-		p = compl_orig_text;
+-		for (temp = 0; p[temp] != NUL && p[temp] == ptr[temp]; ++temp)
+-		    ;
++		if (compl_orig_text != NULL)
++		{
++		    p = compl_orig_text;
++		    for (temp = 0; p[temp] != NUL && p[temp] == ptr[temp];
++								       ++temp)
++			;
+ #ifdef FEAT_MBYTE
+-		if (temp > 0)
+-		    temp -= (*mb_head_off)(compl_orig_text, p + temp);
++		    if (temp > 0)
++			temp -= (*mb_head_off)(compl_orig_text, p + temp);
+ #endif
+-		for (p += temp; *p != NUL; mb_ptr_adv(p))
+-		    AppendCharToRedobuff(K_BS);
+-		AppendToRedobuffLit(ptr + temp, -1);
++		    for (p += temp; *p != NUL; mb_ptr_adv(p))
++			AppendCharToRedobuff(K_BS);
++		}
++		if (ptr != NULL)
++		    AppendToRedobuffLit(ptr + temp, -1);
+ 	    }
+ 
+ #ifdef FEAT_CINDENT
+@@ -4100,6 +4130,21 @@
+ 		&& compl_shown_match->cp_next != NULL
+ 		&& compl_shown_match->cp_next != compl_first_match)
+ 	    compl_shown_match = compl_shown_match->cp_next;
++
++	/* If we didn't find it searching forward, and compl_shows_dir is
++	 * backward, find the last match. */
++	if (compl_shows_dir == BACKWARD
++		&& !ins_compl_equal(compl_shown_match,
++				      compl_leader, (int)STRLEN(compl_leader))
++		&& (compl_shown_match->cp_next == NULL
++		    || compl_shown_match->cp_next == compl_first_match))
++	{
++	    while (!ins_compl_equal(compl_shown_match,
++				      compl_leader, (int)STRLEN(compl_leader))
++		    && compl_shown_match->cp_prev != NULL
++		    && compl_shown_match->cp_prev != compl_first_match)
++		compl_shown_match = compl_shown_match->cp_prev;
++	}
+     }
+ 
+     if (allow_get_expansion && insert_match
+@@ -4124,8 +4169,6 @@
+     {
+ 	if (compl_shows_dir == FORWARD && compl_shown_match->cp_next != NULL)
+ 	{
+-	    if (compl_pending != 0)
+-		--compl_pending;
+ 	    compl_shown_match = compl_shown_match->cp_next;
+ 	    found_end = (compl_first_match != NULL
+ 			   && (compl_shown_match->cp_next == compl_first_match
+@@ -4134,14 +4177,24 @@
+ 	else if (compl_shows_dir == BACKWARD
+ 					&& compl_shown_match->cp_prev != NULL)
+ 	{
+-	    if (compl_pending != 0)
+-		++compl_pending;
+ 	    found_end = (compl_shown_match == compl_first_match);
+ 	    compl_shown_match = compl_shown_match->cp_prev;
+ 	    found_end |= (compl_shown_match == compl_first_match);
+ 	}
+ 	else
+ 	{
++	    if (!allow_get_expansion)
++	    {
++		if (advance)
++		{
++		    if (compl_shows_dir == BACKWARD)
++			compl_pending -= todo + 1;
++		    else
++			compl_pending += todo + 1;
++		}
++		return -1;
++	    }
++
+ 	    if (advance)
+ 	    {
+ 		if (compl_shows_dir == BACKWARD)
+@@ -4149,14 +4202,27 @@
+ 		else
+ 		    ++compl_pending;
+ 	    }
+-	    if (!allow_get_expansion)
+-		return -1;
+ 
+ 	    /* Find matches. */
+ 	    num_matches = ins_compl_get_exp(&compl_startpos);
+-	    if (compl_pending != 0 && compl_direction == compl_shows_dir
++
++	    /* handle any pending completions */
++	    while (compl_pending != 0 && compl_direction == compl_shows_dir
+ 								   && advance)
+-		compl_shown_match = compl_curr_match;
++	    {
++		if (compl_pending > 0 && compl_shown_match->cp_next != NULL)
++		{
++		    compl_shown_match = compl_shown_match->cp_next;
++		    --compl_pending;
++		}
++		if (compl_pending < 0 && compl_shown_match->cp_prev != NULL)
++		{
++		    compl_shown_match = compl_shown_match->cp_prev;
++		    ++compl_pending;
++		}
++		else
++		    break;
++	    }
+ 	    found_end = FALSE;
+ 	}
+ 	if ((compl_shown_match->cp_flags & ORIGINAL_TEXT) == 0
+@@ -4265,9 +4331,9 @@
+ 	return;
+     count = 0;
+ 
+-    ++no_mapping;
++    /* Check for a typed key.  Do use mappings, otherwise vim_is_ctrl_x_key()
++     * can't do its work correctly. */
+     c = vpeekc_any();
+-    --no_mapping;
+     if (c != NUL)
+     {
+ 	if (vim_is_ctrl_x_key(c) && c != Ctrl_X && c != Ctrl_R)
+@@ -4277,12 +4343,27 @@
+ 	    (void)ins_compl_next(FALSE, ins_compl_key2count(c),
+ 						    c != K_UP && c != K_DOWN);
+ 	}
+-	else if (c != Ctrl_R)
+-	    compl_interrupted = TRUE;
++	else
++	{
++	    /* Need to get the character to have KeyTyped set.  We'll put it
++	     * back with vungetc() below. */
++	    c = safe_vgetc();
++
++	    /* Don't interrupt completion when the character wasn't typed,
++	     * e.g., when doing @q to replay keys. */
++	    if (c != Ctrl_R && KeyTyped)
++		compl_interrupted = TRUE;
++
++	    vungetc(c);
++	}
+     }
+     if (compl_pending != 0 && !got_int)
+-	(void)ins_compl_next(FALSE, compl_pending > 0
+-				      ? compl_pending : -compl_pending, TRUE);
++    {
++	int todo = compl_pending > 0 ? compl_pending : -compl_pending;
++
++	compl_pending = 0;
++	(void)ins_compl_next(FALSE, todo, TRUE);
++    }
+ }
+ 
+ /*
+@@ -4611,10 +4692,12 @@
+ 				     (int)STRLEN(compl_pattern), curs_col);
+ 	    if (compl_xp.xp_context == EXPAND_UNSUCCESSFUL
+ 		    || compl_xp.xp_context == EXPAND_NOTHING)
+-		return FAIL;
+-	    startcol = (int)(compl_xp.xp_pattern - compl_pattern);
+-	    compl_col = startcol;
+-	    compl_length = curs_col - startcol;
++		/* No completion possible, use an empty pattern to get a
++		 * "pattern not found" message. */
++		compl_col = curs_col;
++	    else
++		compl_col = (int)(compl_xp.xp_pattern - compl_pattern);
++	    compl_length = curs_col - compl_col;
+ 	}
+ 	else if (ctrl_x_mode == CTRL_X_FUNCTION || ctrl_x_mode == CTRL_X_OMNI)
+ 	{
+@@ -4668,11 +4751,17 @@
+ 	    else
+ 		compl_col = spell_word_start(startcol);
+ 	    if (compl_col >= (colnr_T)startcol)
+-		return FAIL;
+-	    spell_expand_check_cap(compl_col);
++	    {
++		compl_length = 0;
++		compl_col = curs_col;
++	    }
++	    else
++	    {
++		spell_expand_check_cap(compl_col);
++		compl_length = (int)curs_col - compl_col;
++	    }
+ 	    /* Need to obtain "line" again, it may have become invalid. */
+ 	    line = ml_get(curwin->w_cursor.lnum);
+-	    compl_length = (int)curs_col - compl_col;
+ 	    compl_pattern = vim_strnsave(line + compl_col, compl_length);
+ 	    if (compl_pattern == NULL)
+ #endif
+diff -Naur vim70.orig/src/eval.c vim70/src/eval.c
+--- vim70.orig/src/eval.c	2006-05-05 10:15:26.000000000 -0700
++++ vim70/src/eval.c	2006-08-19 16:40:29.000000000 -0700
+@@ -8252,6 +8252,12 @@
+ 	EMSG(_("E785: complete() can only be used in Insert mode"));
+ 	return;
+     }
++
++    /* Check for undo allowed here, because if something was already inserted
++     * the line was already saved for undo and this check isn't done. */
++    if (!undo_allowed())
++	return;
++
+     if (argvars[1].v_type != VAR_LIST || argvars[1].vval.v_list == NULL)
+     {
+ 	EMSG(_(e_invarg));
+@@ -9792,6 +9798,9 @@
+     varnumber_T		n;
+     int			error = FALSE;
+ 
++    /* Position the cursor.  Needed after a message that ends in a space. */
++    windgoto(msg_row, msg_col);
++
+     ++no_mapping;
+     ++allow_keys;
+     if (argvars[0].v_type == VAR_UNKNOWN)
+@@ -11312,14 +11321,19 @@
+ 
+ static int inputsecret_flag = 0;
+ 
++static void get_user_input __ARGS((typval_T *argvars, typval_T *rettv, int inputdialog));
++
+ /*
+- * "input()" function
+- *     Also handles inputsecret() when inputsecret is set.
++ * This function is used by f_input() and f_inputdialog() functions. The third
++ * argument to f_input() specifies the type of completion to use at the
++ * prompt. The third argument to f_inputdialog() specifies the value to return
++ * when the user cancels the prompt.
+  */
+     static void
+-f_input(argvars, rettv)
++get_user_input(argvars, rettv, inputdialog)
+     typval_T	*argvars;
+     typval_T	*rettv;
++    int		inputdialog;
+ {
+     char_u	*prompt = get_tv_string_chk(&argvars[0]);
+     char_u	*p = NULL;
+@@ -11369,10 +11383,10 @@
+ 	    if (defstr != NULL)
+ 		stuffReadbuffSpec(defstr);
+ 
+-	    if (argvars[2].v_type != VAR_UNKNOWN)
++	    if (!inputdialog && argvars[2].v_type != VAR_UNKNOWN)
+ 	    {
+ 		char_u	*xp_name;
+-		int		xp_namelen;
++		int	xp_namelen;
+ 		long	argt;
+ 
+ 		rettv->vval.v_string = NULL;
+@@ -11404,6 +11418,18 @@
+ }
+ 
+ /*
++ * "input()" function
++ *     Also handles inputsecret() when inputsecret is set.
++ */
++    static void
++f_input(argvars, rettv)
++    typval_T	*argvars;
++    typval_T	*rettv;
++{
++    get_user_input(argvars, rettv, FALSE);
++}
++
++/*
+  * "inputdialog()" function
+  */
+     static void
+@@ -11443,7 +11469,7 @@
+     }
+     else
+ #endif
+-	f_input(argvars, rettv);
++	get_user_input(argvars, rettv, TRUE);
+ }
+ 
+ /*
+@@ -11471,6 +11497,7 @@
+     }
+ 
+     msg_start();
++    msg_row = Rows - 1;	/* for when 'cmdheight' > 1 */
+     lines_left = Rows;	/* avoid more prompt */
+     msg_scroll = TRUE;
+     msg_clr_eos();
+@@ -13250,7 +13277,7 @@
+ 	if (argvars[2].v_type != VAR_UNKNOWN)
+ 	    EMSG2(_(e_toomanyarg), "remove()");
+ 	else if ((d = argvars[0].vval.v_dict) != NULL
+-		&& !tv_check_lock(d->dv_lock, (char_u *)"remove()"))
++		&& !tv_check_lock(d->dv_lock, (char_u *)"remove() argument"))
+ 	{
+ 	    key = get_tv_string_chk(&argvars[1]);
+ 	    if (key != NULL)
+@@ -13270,7 +13297,7 @@
+     else if (argvars[0].v_type != VAR_LIST)
+ 	EMSG2(_(e_listdictarg), "remove()");
+     else if ((l = argvars[0].vval.v_list) != NULL
+-	    && !tv_check_lock(l->lv_lock, (char_u *)"remove()"))
++	    && !tv_check_lock(l->lv_lock, (char_u *)"remove() argument"))
+     {
+ 	int	    error = FALSE;
+ 
+@@ -14157,11 +14184,7 @@
+     typval_T	*rettv;
+ {
+     buf_T	*buf;
+-#ifdef FEAT_AUTOCMD
+     aco_save_T	aco;
+-#else
+-    buf_T	*save_curbuf;
+-#endif
+     char_u	*varname, *bufvarname;
+     typval_T	*varp;
+     char_u	nbuf[NUMBUFLEN];
+@@ -14178,12 +14201,7 @@
+     if (buf != NULL && varname != NULL && varp != NULL)
+     {
+ 	/* set curbuf to be our buf, temporarily */
+-#ifdef FEAT_AUTOCMD
+ 	aucmd_prepbuf(&aco, buf);
+-#else
+-	save_curbuf = curbuf;
+-	curbuf = buf;
+-#endif
+ 
+ 	if (*varname == '&')
+ 	{
+@@ -14210,11 +14228,7 @@
+ 	}
+ 
+ 	/* reset notion of buffer */
+-#ifdef FEAT_AUTOCMD
+ 	aucmd_restbuf(&aco);
+-#else
+-	curbuf = save_curbuf;
+-#endif
+     }
+ }
+ 
+@@ -16438,9 +16452,12 @@
+     long	i = 0;
+     long	n;
+ 
+-    /* List must be: [fnum, lnum, col, coladd] */
+-    if (arg->v_type != VAR_LIST || l == NULL
+-				      || l->lv_len != (fnump == NULL ? 3 : 4))
++    /* List must be: [fnum, lnum, col, coladd], where "fnum" is only there
++     * when "fnump" isn't NULL and "coladd" is optional. */
++    if (arg->v_type != VAR_LIST
++	    || l == NULL
++	    || l->lv_len < (fnump == NULL ? 2 : 3)
++	    || l->lv_len > (fnump == NULL ? 3 : 4))
+ 	return FAIL;
+ 
+     if (fnump != NULL)
+@@ -16466,8 +16483,9 @@
+ #ifdef FEAT_VIRTUALEDIT
+     n = list_find_nr(l, i, NULL);
+     if (n < 0)
+-	return FAIL;
+-    posp->coladd = n;
++	posp->coladd = 0;
++    else
++	posp->coladd = n;
+ #endif
+ 
+     return OK;
+@@ -17759,6 +17777,13 @@
+     }
+     else		    /* add a new variable */
+     {
++	/* Can't add "v:" variable. */
++	if (ht == &vimvarht)
++	{
++	    EMSG2(_(e_illvar), name);
++	    return;
++	}
++
+ 	/* Make sure the variable name is valid. */
+ 	for (p = varname; *p != NUL; ++p)
+ 	    if (!eval_isnamec1(*p) && (p == varname || !VIM_ISDIGIT(*p))
+@@ -18786,6 +18811,7 @@
+ 		if (dict_add(fudi.fd_dict, fudi.fd_di) == FAIL)
+ 		{
+ 		    vim_free(fudi.fd_di);
++		    vim_free(fp);
+ 		    goto erret;
+ 		}
+ 	    }
+@@ -18963,7 +18989,8 @@
+     else if (lead > 0)
+     {
+ 	lead = 3;
+-	if (eval_fname_sid(lv.ll_exp_name != NULL ? lv.ll_exp_name : *pp))
++	if ((lv.ll_exp_name != NULL && eval_fname_sid(lv.ll_exp_name))
++						       || eval_fname_sid(*pp))
+ 	{
+ 	    /* It's "s:" or "<SID>" */
+ 	    if (current_SID <= 0)
+@@ -19685,6 +19712,7 @@
+     v->di_tv.vval.v_list = &fc.l_varlist;
+     vim_memset(&fc.l_varlist, 0, sizeof(list_T));
+     fc.l_varlist.lv_refcount = 99999;
++    fc.l_varlist.lv_lock = VAR_FIXED;
+ 
+     /*
+      * Set a:firstline to "firstline" and a:lastline to "lastline".
+diff -Naur vim70.orig/src/ex_cmds.h vim70/src/ex_cmds.h
+--- vim70.orig/src/ex_cmds.h	2006-04-07 02:44:46.000000000 -0700
++++ vim70/src/ex_cmds.h	2006-07-14 08:51:21.000000000 -0700
+@@ -262,7 +262,7 @@
+ EX(CMD_comclear,	"comclear",	ex_comclear,
+ 			TRLBAR|CMDWIN),
+ EX(CMD_compiler,	"compiler",	ex_compiler,
+-			BANG|TRLBAR|WORD1),
++			BANG|TRLBAR|WORD1|CMDWIN),
+ EX(CMD_continue,	"continue",	ex_continue,
+ 			TRLBAR|SBOXOK|CMDWIN),
+ EX(CMD_confirm,		"confirm",	ex_wrongmodifier,
+diff -Naur vim70.orig/src/ex_docmd.c vim70/src/ex_docmd.c
+--- vim70.orig/src/ex_docmd.c	2006-05-05 09:33:19.000000000 -0700
++++ vim70/src/ex_docmd.c	2006-08-19 16:34:11.000000000 -0700
+@@ -833,7 +833,7 @@
+      * If requested, store and reset the global values controlling the
+      * exception handling (used when debugging).
+      */
+-    else if (flags & DOCMD_EXCRESET)
++    if (flags & DOCMD_EXCRESET)
+ 	save_dbg_stuff(&debug_saved);
+ 
+     initial_trylevel = trylevel;
+@@ -1710,6 +1710,10 @@
+     save_cmdmod = cmdmod;
+     vim_memset(&cmdmod, 0, sizeof(cmdmod));
+ 
++    /* "#!anything" is handled like a comment. */
++    if ((*cmdlinep)[0] == '#' && (*cmdlinep)[1] == '!')
++	goto doend;
++
+     /*
+      * Repeat until no more command modifiers are found.
+      */
+diff -Naur vim70.orig/src/ex_getln.c vim70/src/ex_getln.c
+--- vim70.orig/src/ex_getln.c	2006-04-30 08:32:01.000000000 -0700
++++ vim70/src/ex_getln.c	2006-08-19 16:33:52.000000000 -0700
+@@ -5982,6 +5982,8 @@
+     typestr[0] = cmdwin_type;
+     typestr[1] = NUL;
+     apply_autocmds(EVENT_CMDWINENTER, typestr, typestr, FALSE, curbuf);
++    if (restart_edit != 0)	/* autocmd with ":startinsert" */
++	stuffcharReadbuff(K_NOP);
+ # endif
+ 
+     i = RedrawingDisabled;
+diff -Naur vim70.orig/src/fileio.c vim70/src/fileio.c
+--- vim70.orig/src/fileio.c	2006-04-30 08:28:57.000000000 -0700
++++ vim70/src/fileio.c	2006-08-19 16:39:01.000000000 -0700
+@@ -6450,17 +6450,10 @@
+     int		old_ro = buf->b_p_ro;
+     buf_T	*savebuf;
+     int		saved = OK;
+-#ifdef FEAT_AUTOCMD
+     aco_save_T	aco;
+ 
+     /* set curwin/curbuf for "buf" and save some things */
+     aucmd_prepbuf(&aco, buf);
+-#else
+-    buf_T	*save_curbuf = curbuf;
+-
+-    curbuf = buf;
+-    curwin->w_buffer = buf;
+-#endif
+ 
+     /* We only want to read the text from the file, not reset the syntax
+      * highlighting, clear marks, diff status, etc.  Force the fileformat
+@@ -6573,14 +6566,9 @@
+ 	    curbuf->b_p_ro |= old_ro;
+     }
+ 
+-#ifdef FEAT_AUTOCMD
+     /* restore curwin/curbuf and a few other things */
+     aucmd_restbuf(&aco);
+     /* Careful: autocommands may have made "buf" invalid! */
+-#else
+-    curwin->w_buffer = save_curbuf;
+-    curbuf = save_curbuf;
+-#endif
+ }
+ 
+ /*ARGSUSED*/
+@@ -8088,6 +8076,7 @@
+  * Search a window for the current buffer.  Save the cursor position and
+  * screen offset.
+  * Set "curbuf" and "curwin" to match "buf".
++ * When FEAT_AUTOCMD is not defined another version is used, see below.
+  */
+     void
+ aucmd_prepbuf(aco, buf)
+@@ -8151,6 +8140,7 @@
+ /*
+  * Cleanup after executing autocommands for a (hidden) buffer.
+  * Restore the window as it was (if possible).
++ * When FEAT_AUTOCMD is not defined another version is used, see below.
+  */
+     void
+ aucmd_restbuf(aco)
+@@ -9063,8 +9053,38 @@
+     return retval;
+ }
+ 
++#else	/* FEAT_AUTOCMD */
++
++/*
++ * Prepare for executing commands for (hidden) buffer "buf".
++ * This is the non-autocommand version, it simply saves "curbuf" and sets
++ * "curbuf" and "curwin" to match "buf".
++ */
++    void
++aucmd_prepbuf(aco, buf)
++    aco_save_T	*aco;		/* structure to save values in */
++    buf_T	*buf;		/* new curbuf */
++{
++    aco->save_buf = buf;
++    curbuf = buf;
++    curwin->w_buffer = buf;
++}
++
++/*
++ * Restore after executing commands for a (hidden) buffer.
++ * This is the non-autocommand version.
++ */
++    void
++aucmd_restbuf(aco)
++    aco_save_T	*aco;		/* structure holding saved values */
++{
++    curbuf = aco->save_buf;
++    curwin->w_buffer = curbuf;
++}
++
+ #endif	/* FEAT_AUTOCMD */
+ 
++
+ #if defined(FEAT_AUTOCMD) || defined(FEAT_WILDIGN) || defined(PROTO)
+ /*
+  * Try matching a filename with a "pattern" ("prog" is NULL), or use the
+diff -Naur vim70.orig/src/gui_at_fs.c vim70/src/gui_at_fs.c
+--- vim70.orig/src/gui_at_fs.c	2005-07-09 04:30:17.000000000 -0700
++++ vim70/src/gui_at_fs.c	2006-07-14 08:51:21.000000000 -0700
+@@ -1861,27 +1861,27 @@
+     XtPointer	pnew;
+ {
+     SFDir	*dir;
+-    int		nw;
++    int		nw = (int)(long)pnew;
+ 
+     dir = &(SFdirs[SFdirPtr + (int)(long)n]);
+ 
+ #ifdef FEAT_GUI_NEXTAW
+-    if ((int)(long)pnew < 0)
++    if (nw < 0)
+     {
+-	if ((int)(long)pnew > -SFvScrollHeight)
+-	    (int)(long)pnew = -1;
++	if (nw > -SFvScrollHeight)
++	    nw = -1;
+ 	else
+-	    (int)(long)pnew = -SFlistSize;
++	    nw = -SFlistSize;
+     }
+-    else if ((int)(long)pnew > 0)
++    else if (nw > 0)
+     {
+-	if ((int)(long)pnew < SFvScrollHeight)
+-	    (int)(long)pnew = 1;
++	if (nw < SFvScrollHeight)
++	    nw = 1;
+ 	else
+-	    (int)(long)pnew = SFlistSize;
++	    nw = SFlistSize;
+     }
+ #endif
+-    nw = dir->vOrigin + (int)(long)pnew;
++    nw += dir->vOrigin;
+ 
+     if (nw > dir->nEntries - SFlistSize)
+ 	nw = dir->nEntries - SFlistSize;
+@@ -1941,27 +1941,27 @@
+     XtPointer	pnew;
+ {
+     SFDir	*dir;
+-    int		nw;
++    int		nw = (int)(long)pnew;
+ 
+     dir = &(SFdirs[SFdirPtr + (int)(long)n]);
+ 
+ #ifdef FEAT_GUI_NEXTAW
+-    if ((int)(long)pnew < 0)
++    if (nw < 0)
+     {
+-	if ((int)(long)pnew > -SFhScrollWidth)
+-	    (int)(long)pnew = -1;
++	if (nw > -SFhScrollWidth)
++	    nw = -1;
+ 	else
+-	    (int)(long)pnew = -SFcharsPerEntry;
++	    nw = -SFcharsPerEntry;
+     }
+-    else if ((int)(long)pnew > 0)
++    else if (nw > 0)
+     {
+-	if ((int)(long)pnew < SFhScrollWidth)
+-	    (int)(long)pnew = 1;
++	if (nw < SFhScrollWidth)
++	    nw = 1;
+ 	else
+-	    (int)(long)pnew = SFcharsPerEntry;
++	    nw = SFcharsPerEntry;
+     }
+ #endif
+-    nw = dir->hOrigin + (int)(long)pnew;
++    nw += dir->hOrigin;
+ 
+     if (nw > dir->nChars - SFcharsPerEntry)
+ 	nw = dir->nChars - SFcharsPerEntry;
+@@ -2038,26 +2038,26 @@
+     XtPointer	client_data;
+     XtPointer	pnew;
+ {
+-    int		nw;
++    int		nw = (int)(long)pnew;
+     float	f;
+ 
+ #ifdef FEAT_GUI_NEXTAW
+-    if ((int)(long)pnew < 0)
++    if (nw < 0)
+     {
+-	if ((int)(long)pnew > -SFpathScrollWidth)
+-	    (int)(long)pnew = -1;
++	if (nw > -SFpathScrollWidth)
++	    nw = -1;
+ 	else
+-	    (int)(long)pnew = -3;
++	    nw = -3;
+     }
+-    else if ((int)(long)pnew > 0)
++    else if (nw > 0)
+     {
+-	if ((int)(long)pnew < SFpathScrollWidth)
+-	    (int)(long)pnew = 1;
++	if (nw < SFpathScrollWidth)
++	    nw = 1;
+ 	else
+-	    (int)(long)pnew = 3;
++	    nw = 3;
+     }
+ #endif
+-    nw = SFdirPtr + (int)(long)pnew;
++    nw += SFdirPtr;
+ 
+     if (nw > SFdirEnd - 3)
+ 	nw = SFdirEnd - 3;
+diff -Naur vim70.orig/src/gui.c vim70/src/gui.c
+--- vim70.orig/src/gui.c	2006-05-03 04:00:59.000000000 -0700
++++ vim70/src/gui.c	2006-07-14 08:51:21.000000000 -0700
+@@ -4515,7 +4515,7 @@
+     int		y;
+ {
+     win_T	*wp;
+-    char_u	st[6];
++    char_u	st[8];
+ 
+     /* Ignore this while still starting up. */
+     if (!gui.in_use || gui.starting)
+@@ -4603,11 +4603,11 @@
+     /* Don't move the mouse when it's left or right of the Vim window */
+     if (x < 0 || x > Columns * gui.char_width)
+ 	return;
++    if (y >= 0
+ # ifdef FEAT_WINDOWS
+-    if (Y_2_ROW(y) >= tabline_height())
+-# else
+-    if (y >= 0)
++	    && Y_2_ROW(y) >= tabline_height()
+ # endif
++       )
+ 	wp = xy2win(x, y);
+     if (wp != curwin && wp != NULL)	/* If in other than current window */
+     {
+diff -Naur vim70.orig/src/gui_xmebw.c vim70/src/gui_xmebw.c
+--- vim70.orig/src/gui_xmebw.c	2006-04-30 08:32:32.000000000 -0700
++++ vim70/src/gui_xmebw.c	2006-07-14 08:51:21.000000000 -0700
+@@ -47,13 +47,13 @@
+ #include "gui_xmebwp.h"
+ 
+ /* Provide some missing wrappers, which are missed from the LessTif
+- * implementation.
++ * implementation.  Also missing in Motif 1.2 and earlier.
+  *
+  * We neither use XmeGetPixmapData or _XmGetPixmapData, since with LessTif the
+  * pixmap will not appear in it's caches properly. We cache the interresting
+  * values in XmEnhancedButtonPart instead ourself.
+  */
+-#ifdef LESSTIF_VERSION
++#if defined(LESSTIF_VERSION) || (XmVersion <= 1002)
+ # ifndef Lab_IsMenupane
+ #  define Lab_IsMenupane(w) (Lab_MenuType(w) == (int)XmMENU_POPUP || \
+ 		    Lab_MenuType(w) == (int)XmMENU_PULLDOWN)
+@@ -480,7 +480,7 @@
+ 	    || (eb->core.height <= 2 * eb->primitive.highlight_thickness))
+ 	return;
+ 
+-#ifndef LESSTIF_VERSION
++#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
+     {
+ 	XmDisplay	dpy;
+ 
+@@ -641,7 +641,7 @@
+     GC		tmp_gc = NULL;
+     Boolean	replaceGC = False;
+     Boolean	deadjusted = False;
+-#ifndef LESSTIF_VERSION
++#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
+     XmDisplay	dpy = (XmDisplay)XmGetXmDisplay(XtDisplay(eb));
+     Boolean	etched_in = dpy->display.enable_etched_in_menu;
+ #else
+@@ -726,7 +726,7 @@
+ 	if ((((ShellWidget) XtParent(XtParent(eb)))->shell.popped_up)
+ 		&& _XmGetInDragMode((Widget) eb))
+ 	{
+-#ifndef LESSTIF_VERSION
++#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
+ 	    XmDisplay dpy = (XmDisplay) XmGetXmDisplay(XtDisplay(wid));
+ 	    Boolean etched_in = dpy->display.enable_etched_in_menu;
+ #else
+@@ -810,7 +810,7 @@
+ 
+     if (Lab_IsMenupane(eb))
+     {
+-#ifndef LESSTIF_VERSION
++#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
+ 	XmDisplay dpy = (XmDisplay) XmGetXmDisplay(XtDisplay(wid));
+ 	Boolean etched_in = dpy->display.enable_etched_in_menu;
+ #else
+@@ -1150,7 +1150,7 @@
+ Redisplay(Widget w, XEvent *event, Region region)
+ {
+     XmEnhancedButtonWidget  eb = (XmEnhancedButtonWidget) w;
+-#ifndef LESSTIF_VERSION
++#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
+     XmDisplay		    dpy;
+     XtEnum		    default_button_emphasis;
+ #endif
+@@ -1162,7 +1162,7 @@
+     if (!XtIsRealized((Widget)eb))
+ 	return;
+ 
+-#ifndef LESSTIF_VERSION
++#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
+     dpy = (XmDisplay)XmGetXmDisplay(XtDisplay(eb));
+     default_button_emphasis = dpy->display.default_button_emphasis;
+ #endif
+@@ -1241,7 +1241,7 @@
+     {
+ 	int adjust = 0;
+ 
+-#ifndef LESSTIF_VERSION
++#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
+ 	/*
+ 	 *  NOTE: PushButton has two types of shadows: primitive-shadow and
+ 	 *  default-button-shadow.  If pushbutton is in a menu only primitive
+@@ -1289,7 +1289,7 @@
+ 			  adjust, adjust, rectwidth, rectheight, borderwidth);
+ 	    }
+ 
+-#ifndef LESSTIF_VERSION
++#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
+ 	    switch (default_button_emphasis)
+ 	    {
+ 		case XmINTERNAL_HIGHLIGHT:
+@@ -1365,7 +1365,7 @@
+ 		    default_button_shadow_thickness =
+ 			       eb->pushbutton.default_button_shadow_thickness;
+ 
+-#ifndef LESSTIF_VERSION
++#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
+ 		/*
+ 		 * Compute location of bounding box to contain the
+ 		 * defaultButtonShadow.
+diff -Naur vim70.orig/src/if_perl.xs vim70/src/if_perl.xs
+--- vim70.orig/src/if_perl.xs	2006-03-06 10:57:16.000000000 -0800
++++ vim70/src/if_perl.xs	2006-08-19 16:39:02.000000000 -0700
+@@ -155,8 +155,8 @@
+ static int (*perl_run)(PerlInterpreter*);
+ static int (*perl_parse)(PerlInterpreter*, XSINIT_t, int, char**, char**);
+ static void* (*Perl_get_context)(void);
+-static void (*Perl_croak)(pTHX_ const char*, ...) __attribute__((noreturn));
+-static void (*Perl_croak_nocontext)(const char*, ...) __attribute__((noreturn));
++static void (*Perl_croak)(pTHX_ const char*, ...);
++static void (*Perl_croak_nocontext)(const char*, ...);
+ static I32 (*Perl_dowantarray)(pTHX);
+ static void (*Perl_free_tmps)(pTHX);
+ static HV* (*Perl_gv_stashpv)(pTHX_ const char*, I32);
+@@ -1056,7 +1056,6 @@
+     int i;
+     long lnum;
+     char *line;
+-    buf_T *savebuf;
+     PPCODE:
+     if (buf_valid(vimbuf))
+     {
+@@ -1069,14 +1068,20 @@
+ 	    line = SvPV(ST(i),PL_na);
+ 	    if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count && line != NULL)
+ 	    {
+-		savebuf = curbuf;
+-		curbuf = vimbuf;
++		aco_save_T	aco;
++
++		/* set curwin/curbuf for "vimbuf" and save some things */
++		aucmd_prepbuf(&aco, vimbuf);
++
+ 		if (u_savesub(lnum) == OK)
+ 		{
+ 		    ml_replace(lnum, (char_u *)line, TRUE);
+ 		    changed_bytes(lnum, 0);
+ 		}
+-		curbuf = savebuf;
++
++		/* restore curwin/curbuf and a few other things */
++		aucmd_restbuf(&aco);
++		/* Careful: autocommands may have made "vimbuf" invalid! */
+ 	    }
+ 	}
+     }
+@@ -1087,7 +1092,6 @@
+ 
+     PREINIT:
+     long i, lnum = 0, count = 0;
+-    buf_T *savebuf;
+     PPCODE:
+     if (buf_valid(vimbuf))
+     {
+@@ -1114,16 +1118,23 @@
+ 	    {
+ 		if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count)
+ 		{
+-		    savebuf = curbuf;
+-		    curbuf = vimbuf;
++		    aco_save_T	aco;
++
++		    /* set curwin/curbuf for "vimbuf" and save some things */
++		    aucmd_prepbuf(&aco, vimbuf);
++
+ 		    if (u_savedel(lnum, 1) == OK)
+ 		    {
+ 			ml_delete(lnum, 0);
+ 			deleted_lines_mark(lnum, 1L);
+-			if (savebuf == curbuf)
++			if (aco.save_buf == curbuf)
+ 			    check_cursor();
+ 		    }
+-		    curbuf = savebuf;
++
++		    /* restore curwin/curbuf and a few other things */
++		    aucmd_restbuf(&aco);
++		    /* Careful: autocommands may have made "vimbuf" invalid! */
++
+ 		    update_curbuf(VALID);
+ 		}
+ 	    }
+@@ -1138,7 +1149,6 @@
+     int		i;
+     long	lnum;
+     char	*line;
+-    buf_T	*savebuf;
+     PPCODE:
+     if (buf_valid(vimbuf))
+     {
+@@ -1151,14 +1161,21 @@
+ 	    line = SvPV(ST(i),PL_na);
+ 	    if (lnum >= 0 && lnum <= vimbuf->b_ml.ml_line_count && line != NULL)
+ 	    {
+-		savebuf = curbuf;
+-		curbuf = vimbuf;
++		aco_save_T	aco;
++
++		/* set curwin/curbuf for "vimbuf" and save some things */
++		aucmd_prepbuf(&aco, vimbuf);
++
+ 		if (u_inssub(lnum + 1) == OK)
+ 		{
+ 		    ml_append(lnum, (char_u *)line, (colnr_T)0, FALSE);
+ 		    appended_lines_mark(lnum, 1L);
+ 		}
+-		curbuf = savebuf;
++
++		/* restore curwin/curbuf and a few other things */
++		aucmd_restbuf(&aco);
++		/* Careful: autocommands may have made "vimbuf" invalid! */
++
+ 		update_curbuf(VALID);
+ 	    }
+ 	}
+diff -Naur vim70.orig/src/if_ruby.c vim70/src/if_ruby.c
+--- vim70.orig/src/if_ruby.c	2006-04-30 08:37:52.000000000 -0700
++++ vim70/src/if_ruby.c	2006-08-19 16:39:01.000000000 -0700
+@@ -643,11 +643,14 @@
+ 
+ static VALUE set_buffer_line(buf_T *buf, linenr_T n, VALUE str)
+ {
+-    buf_T *savebuf = curbuf;
+-    char *line = STR2CSTR(str);
++    char	*line = STR2CSTR(str);
++    aco_save_T	aco;
++
++    if (n > 0 && n <= buf->b_ml.ml_line_count && line != NULL)
++    {
++	/* set curwin/curbuf for "buf" and save some things */
++	aucmd_prepbuf(&aco, buf);
+ 
+-    if (n > 0 && n <= buf->b_ml.ml_line_count && line != NULL) {
+-	curbuf = buf;
+ 	if (u_savesub(n) == OK) {
+ 	    ml_replace(n, (char_u *)line, TRUE);
+ 	    changed();
+@@ -655,10 +658,15 @@
+ 	    syn_changed(n); /* recompute syntax hl. for this line */
+ #endif
+ 	}
+-	curbuf = savebuf;
++
++	/* restore curwin/curbuf and a few other things */
++	aucmd_restbuf(&aco);
++	/* Careful: autocommands may have made "buf" invalid! */
++
+ 	update_curbuf(NOT_VALID);
+     }
+-    else {
++    else
++    {
+ 	rb_raise(rb_eIndexError, "index %d out of buffer", n);
+ 	return Qnil; /* For stop warning */
+     }
+@@ -676,12 +684,15 @@
+ 
+ static VALUE buffer_delete(VALUE self, VALUE num)
+ {
+-    buf_T *buf = get_buf(self);
+-    buf_T *savebuf = curbuf;
+-    long n = NUM2LONG(num);
++    buf_T	*buf = get_buf(self);
++    long	n = NUM2LONG(num);
++    aco_save_T	aco;
++
++    if (n > 0 && n <= buf->b_ml.ml_line_count)
++    {
++	/* set curwin/curbuf for "buf" and save some things */
++	aucmd_prepbuf(&aco, buf);
+ 
+-    if (n > 0 && n <= buf->b_ml.ml_line_count) {
+-	curbuf = buf;
+ 	if (u_savedel(n, 1) == OK) {
+ 	    ml_delete(n, 0);
+ 
+@@ -691,10 +702,15 @@
+ 
+ 	    changed();
+ 	}
+-	curbuf = savebuf;
++
++	/* restore curwin/curbuf and a few other things */
++	aucmd_restbuf(&aco);
++	/* Careful: autocommands may have made "buf" invalid! */
++
+ 	update_curbuf(NOT_VALID);
+     }
+-    else {
++    else
++    {
+ 	rb_raise(rb_eIndexError, "index %d out of buffer", n);
+     }
+     return Qnil;
+@@ -702,13 +718,16 @@
+ 
+ static VALUE buffer_append(VALUE self, VALUE num, VALUE str)
+ {
+-    buf_T *buf = get_buf(self);
+-    buf_T *savebuf = curbuf;
+-    char *line = STR2CSTR(str);
+-    long n = NUM2LONG(num);
++    buf_T	*buf = get_buf(self);
++    char	*line = STR2CSTR(str);
++    long	n = NUM2LONG(num);
++    aco_save_T	aco;
++
++    if (n >= 0 && n <= buf->b_ml.ml_line_count && line != NULL)
++    {
++	/* set curwin/curbuf for "buf" and save some things */
++	aucmd_prepbuf(&aco, buf);
+ 
+-    if (n >= 0 && n <= buf->b_ml.ml_line_count && line != NULL) {
+-	curbuf = buf;
+ 	if (u_inssub(n + 1) == OK) {
+ 	    ml_append(n, (char_u *) line, (colnr_T) 0, FALSE);
+ 
+@@ -718,7 +737,11 @@
+ 
+ 	    changed();
+ 	}
+-	curbuf = savebuf;
++
++	/* restore curwin/curbuf and a few other things */
++	aucmd_restbuf(&aco);
++	/* Careful: autocommands may have made "buf" invalid! */
++
+ 	update_curbuf(NOT_VALID);
+     }
+     else {
+diff -Naur vim70.orig/src/main.c vim70/src/main.c
+--- vim70.orig/src/main.c	2006-05-03 10:36:44.000000000 -0700
++++ vim70/src/main.c	2006-08-19 16:32:24.000000000 -0700
+@@ -564,7 +564,11 @@
+      */
+     if (p_lpl)
+     {
++# ifdef VMS	/* Somehow VMS doesn't handle the "**". */
++	source_runtime((char_u *)"plugin/*.vim", TRUE);
++# else
+ 	source_runtime((char_u *)"plugin/**/*.vim", TRUE);
++# endif
+ 	TIME_MSG("loading plugins");
+     }
+ #endif
+@@ -3208,10 +3212,15 @@
+      * Register for remote command execution with :serversend and --remote
+      * unless there was a -X or a --servername '' on the command line.
+      * Only register nongui-vim's with an explicit --servername argument.
++     * When running as root --servername is also required.
+      */
+     if (X_DISPLAY != NULL && parmp->servername != NULL && (
+ #  ifdef FEAT_GUI
+-		gui.in_use ||
++		(gui.in_use
++#   ifdef UNIX
++		 && getuid() != 0
++#   endif
++		) ||
+ #  endif
+ 		parmp->serverName_arg != NULL))
+     {
+diff -Naur vim70.orig/src/Makefile vim70/src/Makefile
+--- vim70.orig/src/Makefile	2006-05-07 06:25:27.000000000 -0700
++++ vim70/src/Makefile	2006-07-14 08:51:21.000000000 -0700
+@@ -2177,6 +2177,7 @@
+ 	cd $(SHADOWDIR)/xxd; ln -s ../../xxd/*.[ch] ../../xxd/Make* .
+ 	if test -d $(RSRC_DIR); then \
+ 		cd $(SHADOWDIR); \
++		ln -s ../infplist.xml .; \
+ 		ln -s ../$(RSRC_DIR) ../os_mac.rsr.hqx ../dehqx.py .; \
+ 	fi
+ 	mkdir $(SHADOWDIR)/testdir
+diff -Naur vim70.orig/src/mbyte.c vim70/src/mbyte.c
+--- vim70.orig/src/mbyte.c	2006-04-30 04:51:01.000000000 -0700
++++ vim70/src/mbyte.c	2006-08-19 16:34:45.000000000 -0700
+@@ -311,7 +311,11 @@
+ 
+ #define IDX_MACROMAN	57
+     {"macroman",	ENC_8BIT + ENC_MACROMAN, 0},	/* Mac OS */
+-#define IDX_COUNT	58
++#define IDX_DECMCS	58
++    {"dec-mcs",		ENC_8BIT,		0},	/* DEC MCS */
++#define IDX_HPROMAN8	59
++    {"hp-roman8",	ENC_8BIT,		0},	/* HP Roman8 */
++#define IDX_COUNT	60
+ };
+ 
+ /*
+@@ -359,6 +363,8 @@
+     {"932",		IDX_CP932},
+     {"949",		IDX_CP949},
+     {"936",		IDX_CP936},
++    {"gbk",		IDX_CP936},
++    {"gb18030",		IDX_CP936},	/* only 99% the same */
+     {"950",		IDX_CP950},
+     {"eucjp",		IDX_EUC_JP},
+     {"unix-jis",	IDX_EUC_JP},
+@@ -386,6 +392,7 @@
+     {"950",		IDX_BIG5},
+ #endif
+     {"mac",		IDX_MACROMAN},
++    {"mac-roman",	IDX_MACROMAN},
+     {NULL,		0}
+ };
+ 
+diff -Naur vim70.orig/src/menu.c vim70/src/menu.c
+--- vim70.orig/src/menu.c	2006-05-03 10:30:48.000000000 -0700
++++ vim70/src/menu.c	2006-08-19 16:40:11.000000000 -0700
+@@ -511,6 +511,14 @@
+ 	 * name (without mnemonic and accelerator text). */
+ 	next_name = menu_name_skip(name);
+ 	dname = menu_text(name, NULL, NULL);
++	if (dname == NULL)
++	    goto erret;
++	if (*dname == NUL)
++	{
++	    /* Only a mnemonic or accelerator is not valid. */
++	    EMSG(_("E792: Empty menu name"));
++	    goto erret;
++	}
+ 
+ 	/* See if it's already there */
+ 	lower_pri = menup;
+@@ -704,6 +712,7 @@
+ 	parent = menu;
+ 	name = next_name;
+ 	vim_free(dname);
++	dname = NULL;
+ 	if (pri_tab[pri_idx + 1] != -1)
+ 	    ++pri_idx;
+     }
+@@ -793,6 +802,22 @@
+ erret:
+     vim_free(path_name);
+     vim_free(dname);
++
++    /* Delete any empty submenu we added before discovering the error.  Repeat
++     * for higher levels. */
++    while (parent != NULL && parent->children == NULL)
++    {
++	if (parent->parent == NULL)
++	    menup = &root_menu;
++	else
++	    menup = &parent->parent->children;
++	for ( ; *menup != NULL && *menup != parent; menup = &((*menup)->next))
++	    ;
++	if (*menup == NULL) /* safety check */
++	    break;
++	parent = parent->parent;
++	free_menu(menup);
++    }
+     return FAIL;
+ }
+ 
+@@ -1753,6 +1778,27 @@
+ }
+ 
+ /*
++ * Check that a pointer appears in the menu tree.  Used to protect from using
++ * a menu that was deleted after it was selected but before the event was
++ * handled.
++ * Return OK or FAIL.  Used recursively.
++ */
++    int
++check_menu_pointer(root, menu_to_check)
++    vimmenu_T *root;
++    vimmenu_T *menu_to_check;
++{
++    vimmenu_T	*p;
++
++    for (p = root; p != NULL; p = p->next)
++	if (p == menu_to_check
++		|| (p->children != NULL
++		    && check_menu_pointer(p->children, menu_to_check) == OK))
++	    return OK;
++    return FAIL;
++}
++
++/*
+  * After we have started the GUI, then we can create any menus that have been
+  * defined.  This is done once here.  add_menu_path() may have already been
+  * called to define these menus, and may be called again.  This function calls
+diff -Naur vim70.orig/src/message.c vim70/src/message.c
+--- vim70.orig/src/message.c	2006-05-06 13:07:37.000000000 -0700
++++ vim70/src/message.c	2006-07-14 08:51:21.000000000 -0700
+@@ -4175,15 +4175,16 @@
+ 			str_arg_l = 0;
+ 		    else
+ 		    {
+-			/* memchr on HP does not like n > 2^31  !!! */
+-			char *q = memchr(str_arg, '\0',
++			/* Don't put the #if inside memchr(), it can be a
++			 * macro. */
+ #if SIZEOF_INT <= 2
+-				precision
++			char *q = memchr(str_arg, '\0', precision);
+ #else
+-				precision <= (size_t)0x7fffffffL ? precision
+-						       : (size_t)0x7fffffffL
++			/* memchr on HP does not like n > 2^31  !!! */
++			char *q = memchr(str_arg, '\0',
++				  precision <= (size_t)0x7fffffffL ? precision
++						       : (size_t)0x7fffffffL);
+ #endif
+-						       );
+ 			str_arg_l = (q == NULL) ? precision : q - str_arg;
+ 		    }
+ 		    break;
+diff -Naur vim70.orig/src/misc1.c vim70/src/misc1.c
+--- vim70.orig/src/misc1.c	2006-04-30 08:30:02.000000000 -0700
++++ vim70/src/misc1.c	2006-08-19 16:32:45.000000000 -0700
+@@ -4492,7 +4492,7 @@
+ 		int l = mb_ptr2len(s);
+ 
+ 		while (--l > 0)
+-		    *d++ = *s++;
++		    *d++ = *++s;
+ 	    }
+ # endif
+ 	}
+diff -Naur vim70.orig/src/netbeans.c vim70/src/netbeans.c
+--- vim70.orig/src/netbeans.c	2006-04-22 11:00:05.000000000 -0700
++++ vim70/src/netbeans.c	2006-08-09 08:38:32.000000000 -0700
+@@ -1986,6 +1986,8 @@
+ 	    if (buf->bufp != NULL)
+ 		do_buffer(DOBUF_WIPE, DOBUF_FIRST, FORWARD,
+ 						     buf->bufp->b_fnum, TRUE);
++	    buf->bufp = NULL;
++	    buf->initDone = FALSE;
+ 	    doupdate = 1;
+ /* =====================================================================*/
+ 	}
+diff -Naur vim70.orig/src/normal.c vim70/src/normal.c
+--- vim70.orig/src/normal.c	2006-04-29 06:11:18.000000000 -0700
++++ vim70/src/normal.c	2006-08-19 16:40:11.000000000 -0700
+@@ -2504,7 +2504,8 @@
+ 	     * NOTE: Ignore right button down and drag mouse events.
+ 	     * Windows only shows the popup menu on the button up event.
+ 	     */
+-#if defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_PHOTON)
++#if defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_GTK) \
++			  || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MAC)
+ 	    if (!is_click)
+ 		return FALSE;
+ #endif
+diff -Naur vim70.orig/src/ops.c vim70/src/ops.c
+--- vim70.orig/src/ops.c	2006-04-30 08:13:44.000000000 -0700
++++ vim70/src/ops.c	2006-08-09 08:33:53.000000000 -0700
+@@ -2413,6 +2413,7 @@
+ 	else
+ 	{
+ 	    curwin->w_cursor = oap->end;
++	    check_cursor_col();
+ 
+ 	    /* Works just like an 'i'nsert on the next character. */
+ 	    if (!lineempty(curwin->w_cursor.lnum)
+@@ -3492,8 +3493,15 @@
+ # endif
+ 	if (flags & PUT_CURSEND)
+ 	{
++	    colnr_T len;
++
+ 	    curwin->w_cursor = curbuf->b_op_end;
+ 	    curwin->w_cursor.col++;
++
++	    /* in Insert mode we might be after the NUL, correct for that */
++	    len = (colnr_T)STRLEN(ml_get_curline());
++	    if (curwin->w_cursor.col > len)
++		curwin->w_cursor.col = len;
+ 	}
+ 	else
+ 	    curwin->w_cursor.lnum = lnum;
+diff -Naur vim70.orig/src/option.c vim70/src/option.c
+--- vim70.orig/src/option.c	2006-05-03 10:32:28.000000000 -0700
++++ vim70/src/option.c	2006-08-09 08:34:17.000000000 -0700
+@@ -2294,7 +2294,7 @@
+ 			    {(char_u *)0L, (char_u *)0L}
+ #endif
+ 			    },
+-    {"spellsuggest", "sps", P_STRING|P_VI_DEF|P_EXPAND|P_SECURE,
++    {"spellsuggest", "sps", P_STRING|P_VI_DEF|P_EXPAND|P_SECURE|P_COMMA,
+ #ifdef FEAT_SPELL
+ 			    (char_u *)&p_sps, PV_NONE,
+ 			    {(char_u *)"best", (char_u *)0L}
+@@ -5227,13 +5227,13 @@
+ 	    case PV_STL:	return &curwin->w_p_stl_flags;
+ #endif
+ #ifdef FEAT_EVAL
++# ifdef FEAT_FOLDING
+ 	    case PV_FDE:	return &curwin->w_p_fde_flags;
+ 	    case PV_FDT:	return &curwin->w_p_fdt_flags;
++# endif
+ # ifdef FEAT_BEVAL
+ 	    case PV_BEXPR:	return &curbuf->b_p_bexpr_flags;
+ # endif
+-#endif
+-#if defined(FEAT_EVAL)
+ # if defined(FEAT_CINDENT)
+ 	    case PV_INDE:	return &curbuf->b_p_inde_flags;
+ # endif
+@@ -6325,7 +6325,8 @@
+ 	    else
+ 		errmsg = check_stl_option(p_ruf);
+ 	}
+-	else
++	/* check 'statusline' only if it doesn't start with "%!" */
++	else if (varp != &p_stl || s[0] != '%' || s[1] != '!')
+ 	    errmsg = check_stl_option(s);
+ 	if (varp == &p_ruf && errmsg == NULL)
+ 	    comp_col();
+diff -Naur vim70.orig/src/os_unix.c vim70/src/os_unix.c
+--- vim70.orig/src/os_unix.c	2006-05-01 01:13:15.000000000 -0700
++++ vim70/src/os_unix.c	2006-07-14 08:51:21.000000000 -0700
+@@ -4971,7 +4971,8 @@
+ 		    if (((*file)[*num_file] = alloc(len + 2)) != NULL)
+ 		    {
+ 			STRCPY((*file)[*num_file], p);
+-			if (!after_pathsep((*file)[*num_file] + len))
++			if (!after_pathsep((*file)[*num_file],
++						    (*file)[*num_file] + len))
+ 			{
+ 			    (*file)[*num_file][len] = psepc;
+ 			    (*file)[*num_file][len + 1] = NUL;
+@@ -5757,8 +5758,13 @@
+     int		retval_int = 0;
+     int		success = FALSE;
+ 
+-    /* Get a handle to the DLL module. */
++    /*
++     * Get a handle to the DLL module.
++     */
+ # if defined(USE_DLOPEN)
++    /* First clear any error, it's not cleared by the dlopen() call. */
++    (void)dlerror();
++
+     hinstLib = dlopen((char *)libname, RTLD_LAZY
+ #  ifdef RTLD_LOCAL
+ 	    | RTLD_LOCAL
+diff -Naur vim70.orig/src/popupmnu.c vim70/src/popupmnu.c
+--- vim70.orig/src/popupmnu.c	2006-04-20 13:18:37.000000000 -0700
++++ vim70/src/popupmnu.c	2006-08-27 12:48:28.000000000 -0700
+@@ -552,6 +552,9 @@
+ {
+     pum_array = NULL;
+     redraw_all_later(SOME_VALID);
++#ifdef FEAT_WINDOWS
++    redraw_tabline = TRUE;
++#endif
+     status_redraw_all();
+ }
+ 
+diff -Naur vim70.orig/src/proto/menu.pro vim70/src/proto/menu.pro
+--- vim70.orig/src/proto/menu.pro	2006-05-07 06:08:51.000000000 -0700
++++ vim70/src/proto/menu.pro	2006-08-19 16:40:11.000000000 -0700
+@@ -10,6 +10,7 @@
+ extern int menu_is_child_of_popup __ARGS((vimmenu_T *menu));
+ extern int menu_is_toolbar __ARGS((char_u *name));
+ extern int menu_is_separator __ARGS((char_u *name));
++extern int check_menu_pointer __ARGS((vimmenu_T *root, vimmenu_T *menu_to_check));
+ extern void gui_create_initial_menus __ARGS((vimmenu_T *menu));
+ extern void gui_update_menus __ARGS((int modes));
+ extern int gui_is_menu_shortcut __ARGS((int key));
+diff -Naur vim70.orig/src/proto/undo.pro vim70/src/proto/undo.pro
+--- vim70.orig/src/proto/undo.pro	2006-05-07 06:09:11.000000000 -0700
++++ vim70/src/proto/undo.pro	2006-07-14 10:51:11.000000000 -0700
+@@ -4,6 +4,7 @@
+ extern int u_savesub __ARGS((linenr_T lnum));
+ extern int u_inssub __ARGS((linenr_T lnum));
+ extern int u_savedel __ARGS((linenr_T lnum, long nlines));
++extern int undo_allowed __ARGS((void));
+ extern void u_undo __ARGS((int count));
+ extern void u_redo __ARGS((int count));
+ extern void undo_time __ARGS((long step, int sec, int absolute));
+diff -Naur vim70.orig/src/quickfix.c vim70/src/quickfix.c
+--- vim70.orig/src/quickfix.c	2006-05-03 00:47:42.000000000 -0700
++++ vim70/src/quickfix.c	2006-08-19 16:39:02.000000000 -0700
+@@ -602,13 +602,19 @@
+ 		else
+ 		    type = 0;
+ 		/*
+-		 * Extract error message data from matched line
++		 * Extract error message data from matched line.
++		 * We check for an actual submatch, because "\[" and "\]" in
++		 * the 'errorformat' may cause the wrong submatch to be used.
+ 		 */
+ 		if ((i = (int)fmt_ptr->addr[0]) > 0)		/* %f */
+ 		{
+-		    int c = *regmatch.endp[i];
++		    int c;
++
++		    if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
++			continue;
+ 
+ 		    /* Expand ~/file and $HOME/file to full path. */
++		    c = *regmatch.endp[i];
+ 		    *regmatch.endp[i] = NUL;
+ 		    expand_env(regmatch.startp[i], namebuf, CMDBUFFSIZE);
+ 		    *regmatch.endp[i] = c;
+@@ -618,35 +624,63 @@
+ 			continue;
+ 		}
+ 		if ((i = (int)fmt_ptr->addr[1]) > 0)		/* %n */
++		{
++		    if (regmatch.startp[i] == NULL)
++			continue;
+ 		    enr = (int)atol((char *)regmatch.startp[i]);
++		}
+ 		if ((i = (int)fmt_ptr->addr[2]) > 0)		/* %l */
++		{
++		    if (regmatch.startp[i] == NULL)
++			continue;
+ 		    lnum = atol((char *)regmatch.startp[i]);
++		}
+ 		if ((i = (int)fmt_ptr->addr[3]) > 0)		/* %c */
++		{
++		    if (regmatch.startp[i] == NULL)
++			continue;
+ 		    col = (int)atol((char *)regmatch.startp[i]);
++		}
+ 		if ((i = (int)fmt_ptr->addr[4]) > 0)		/* %t */
++		{
++		    if (regmatch.startp[i] == NULL)
++			continue;
+ 		    type = *regmatch.startp[i];
++		}
+ 		if (fmt_ptr->flags == '+' && !multiscan)	/* %+ */
+ 		    STRCPY(errmsg, IObuff);
+ 		else if ((i = (int)fmt_ptr->addr[5]) > 0)	/* %m */
+ 		{
++		    if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
++			continue;
+ 		    len = (int)(regmatch.endp[i] - regmatch.startp[i]);
+ 		    vim_strncpy(errmsg, regmatch.startp[i], len);
+ 		}
+ 		if ((i = (int)fmt_ptr->addr[6]) > 0)		/* %r */
++		{
++		    if (regmatch.startp[i] == NULL)
++			continue;
+ 		    tail = regmatch.startp[i];
++		}
+ 		if ((i = (int)fmt_ptr->addr[7]) > 0)		/* %p */
+ 		{
++		    if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
++			continue;
+ 		    col = (int)(regmatch.endp[i] - regmatch.startp[i] + 1);
+ 		    if (*((char_u *)regmatch.startp[i]) != TAB)
+ 			use_viscol = TRUE;
+ 		}
+ 		if ((i = (int)fmt_ptr->addr[8]) > 0)		/* %v */
+ 		{
++		    if (regmatch.startp[i] == NULL)
++			continue;
+ 		    col = (int)atol((char *)regmatch.startp[i]);
+ 		    use_viscol = TRUE;
+ 		}
+ 		if ((i = (int)fmt_ptr->addr[9]) > 0)		/* %s */
+ 		{
++		    if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
++			continue;
+ 		    len = (int)(regmatch.endp[i] - regmatch.startp[i]);
+ 		    if (len > CMDBUFFSIZE - 5)
+ 			len = CMDBUFFSIZE - 5;
+@@ -2429,32 +2463,19 @@
+     qf_info_T	*qi;
+ {
+     buf_T	*buf;
+-#ifdef FEAT_AUTOCMD
+     aco_save_T	aco;
+-#else
+-    buf_T	*save_curbuf;
+-#endif
+ 
+     /* Check if a buffer for the quickfix list exists.  Update it. */
+     buf = qf_find_buf(qi);
+     if (buf != NULL)
+     {
+-#ifdef FEAT_AUTOCMD
+ 	/* set curwin/curbuf to buf and save a few things */
+ 	aucmd_prepbuf(&aco, buf);
+-#else
+-	save_curbuf = curbuf;
+-	curbuf = buf;
+-#endif
+ 
+ 	qf_fill_buffer(qi);
+ 
+-#ifdef FEAT_AUTOCMD
+ 	/* restore curwin/curbuf and a few other things */
+ 	aucmd_restbuf(&aco);
+-#else
+-	curbuf = save_curbuf;
+-#endif
+ 
+ 	(void)qf_win_pos_update(qi, 0);
+     }
+@@ -2943,10 +2964,8 @@
+ #if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
+     char_u	*save_ei = NULL;
+ #endif
+-#ifndef FEAT_AUTOCMD
+-    buf_T	*save_curbuf;
+-#else
+     aco_save_T	aco;
++#ifdef FEAT_AUTOCMD
+     char_u	*au_name =  NULL;
+     int		flags = 0;
+     colnr_T	col;
+@@ -3167,24 +3186,13 @@
+ 		     * need to be done now, in that buffer.  And the modelines
+ 		     * need to be done (again).  But not the window-local
+ 		     * options! */
+-#if defined(FEAT_AUTOCMD)
+ 		    aucmd_prepbuf(&aco, buf);
+-#else
+-		    save_curbuf = curbuf;
+-		    curbuf = buf;
+-		    curwin->w_buffer = curbuf;
+-#endif
+ #if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
+ 		    apply_autocmds(EVENT_FILETYPE, buf->b_p_ft,
+ 						     buf->b_fname, TRUE, buf);
+ #endif
+ 		    do_modelines(OPT_NOWIN);
+-#if defined(FEAT_AUTOCMD)
+ 		    aucmd_restbuf(&aco);
+-#else
+-		    curbuf = save_curbuf;
+-		    curwin->w_buffer = curbuf;
+-#endif
+ 		}
+ 	    }
+ 	}
+@@ -3285,11 +3293,7 @@
+ {
+     buf_T	*newbuf;
+     int		failed = TRUE;
+-#ifdef FEAT_AUTOCMD
+     aco_save_T	aco;
+-#else
+-    buf_T	*old_curbuf = curbuf;
+-#endif
+ 
+     /* Allocate a buffer without putting it in the buffer list. */
+     newbuf = buflist_new(NULL, NULL, (linenr_T)1, BLN_DUMMY);
+@@ -3299,13 +3303,8 @@
+     /* Init the options. */
+     buf_copy_options(newbuf, BCO_ENTER | BCO_NOHELP);
+ 
+-#ifdef FEAT_AUTOCMD
+     /* set curwin/curbuf to buf and save a few things */
+     aucmd_prepbuf(&aco, newbuf);
+-#else
+-    curbuf = newbuf;
+-    curwin->w_buffer = newbuf;
+-#endif
+ 
+     /* Need to set the filename for autocommands. */
+     (void)setfname(curbuf, fname, NULL, FALSE);
+@@ -3336,13 +3335,8 @@
+ 	}
+     }
+ 
+-#ifdef FEAT_AUTOCMD
+     /* restore curwin/curbuf and a few other things */
+     aucmd_restbuf(&aco);
+-#else
+-    curbuf = old_curbuf;
+-    curwin->w_buffer = old_curbuf;
+-#endif
+ 
+     if (!buf_valid(newbuf))
+ 	return NULL;
+diff -Naur vim70.orig/src/screen.c vim70/src/screen.c
+--- vim70.orig/src/screen.c	2006-05-05 03:13:55.000000000 -0700
++++ vim70/src/screen.c	2006-07-14 10:50:30.000000000 -0700
+@@ -2612,7 +2612,8 @@
+ #ifdef FEAT_LINEBREAK
+     int		need_showbreak = FALSE;
+ #endif
+-#if defined(FEAT_SIGNS) || (defined(FEAT_QUICKFIX) && defined(FEAT_WINDOWS))
++#if defined(FEAT_SIGNS) || (defined(FEAT_QUICKFIX) && defined(FEAT_WINDOWS)) \
++	|| defined(FEAT_SYN_HL) || defined(FEAT_DIFF)
+ # define LINE_ATTR
+     int		line_attr = 0;		/* atrribute for the whole line */
+ #endif
+@@ -2626,7 +2627,7 @@
+     int		prev_c = 0;		/* previous Arabic character */
+     int		prev_c1 = 0;		/* first composing char for prev_c */
+ #endif
+-#if defined(FEAT_DIFF) || defined(LINE_ATTR)
++#if defined(LINE_ATTR)
+     int		did_line_attr = 0;
+ #endif
+ 
+@@ -4116,17 +4117,12 @@
+ 		    --ptr;	    /* put it back at the NUL */
+ 		}
+ #endif
+-#if defined(FEAT_DIFF) || defined(LINE_ATTR)
++#if defined(LINE_ATTR)
+ 		else if ((
+ # ifdef FEAT_DIFF
+-			    diff_hlf != (hlf_T)0
+-#  ifdef LINE_ATTR
+-			    ||
+-#  endif
++			    diff_hlf != (hlf_T)0 ||
+ # endif
+-# ifdef LINE_ATTR
+ 			    line_attr != 0
+-# endif
+ 			) && (
+ # ifdef FEAT_RIGHTLEFT
+ 			    wp->w_p_rl ? (col >= 0) :
+@@ -4237,7 +4233,7 @@
+ 	 * At end of the text line or just after the last character.
+ 	 */
+ 	if (c == NUL
+-#if defined(FEAT_DIFF) || defined(LINE_ATTR)
++#if defined(LINE_ATTR)
+ 		|| did_line_attr == 1
+ #endif
+ 		)
+@@ -4258,7 +4254,7 @@
+ 				|| prevcol == (long)match_hl[0].startcol
+ 				|| prevcol == (long)match_hl[1].startcol
+ 				|| prevcol == (long)match_hl[2].startcol)
+-# if defined(FEAT_DIFF) || defined(LINE_ATTR)
++# if defined(LINE_ATTR)
+ 			    && did_line_attr <= 1
+ # endif
+ 			   )
+@@ -7133,6 +7129,12 @@
+ 	return;
+     entered = TRUE;
+ 
++    /*
++     * Note that the window sizes are updated before reallocating the arrays,
++     * thus we must not redraw here!
++     */
++    ++RedrawingDisabled;
++
+     win_new_shellsize();    /* fit the windows in the new sized shell */
+ 
+     comp_col();		/* recompute columns for shown command and ruler */
+@@ -7367,6 +7369,7 @@
+ #endif
+ 
+     entered = FALSE;
++    --RedrawingDisabled;
+ 
+ #ifdef FEAT_AUTOCMD
+     if (starting == 0)
+diff -Naur vim70.orig/src/spell.c vim70/src/spell.c
+--- vim70.orig/src/spell.c	2006-05-05 00:49:58.000000000 -0700
++++ vim70/src/spell.c	2006-08-09 08:31:46.000000000 -0700
+@@ -2108,7 +2108,8 @@
+ 	 * possible. */
+ 	STRCPY(buf, line);
+ 	if (lnum < wp->w_buffer->b_ml.ml_line_count)
+-	    spell_cat_line(buf + STRLEN(buf), ml_get(lnum + 1), MAXWLEN);
++	    spell_cat_line(buf + STRLEN(buf),
++			  ml_get_buf(wp->w_buffer, lnum + 1, FALSE), MAXWLEN);
+ 
+ 	p = buf + skip;
+ 	endp = buf + len;
+@@ -10070,6 +10071,7 @@
+ 
+ 	/* List the suggestions. */
+ 	msg_start();
++	msg_row = Rows - 1;	/* for when 'cmdheight' > 1 */
+ 	lines_left = Rows;	/* avoid more prompt */
+ 	vim_snprintf((char *)IObuff, IOSIZE, _("Change \"%.*s\" to:"),
+ 						sug.su_badlen, sug.su_badptr);
+diff -Naur vim70.orig/src/structs.h vim70/src/structs.h
+--- vim70.orig/src/structs.h	2006-04-09 10:57:46.000000000 -0700
++++ vim70/src/structs.h	2006-08-19 16:39:02.000000000 -0700
+@@ -2213,18 +2213,20 @@
+ 
+ /*
+  * Struct to save values in before executing autocommands for a buffer that is
+- * not the current buffer.
++ * not the current buffer.  Without FEAT_AUTOCMD only "curbuf" is remembered.
+  */
+ typedef struct
+ {
+     buf_T	*save_buf;	/* saved curbuf */
++#ifdef FEAT_AUTOCMD
+     buf_T	*new_curbuf;	/* buffer to be used */
+     win_T	*save_curwin;	/* saved curwin, NULL if it didn't change */
+     win_T	*new_curwin;	/* new curwin if save_curwin != NULL */
+     pos_T	save_cursor;	/* saved cursor pos of save_curwin */
+     linenr_T	save_topline;	/* saved topline of save_curwin */
+-#ifdef FEAT_DIFF
++# ifdef FEAT_DIFF
+     int		save_topfill;	/* saved topfill of save_curwin */
++# endif
+ #endif
+ } aco_save_T;
+ 
+diff -Naur vim70.orig/src/term.c vim70/src/term.c
+--- vim70.orig/src/term.c	2006-05-03 10:34:57.000000000 -0700
++++ vim70/src/term.c	2006-08-19 16:40:11.000000000 -0700
+@@ -4783,6 +4783,14 @@
+ 		return -1;
+ 	    current_menu = (vimmenu_T *)val;
+ 	    slen += num_bytes;
++
++	    /* The menu may have been deleted right after it was used, check
++	     * for that. */
++	    if (check_menu_pointer(root_menu, current_menu) == FAIL)
++	    {
++		key_name[0] = KS_EXTRA;
++		key_name[1] = (int)KE_IGNORE;
++	    }
+ 	}
+ # endif
+ # ifdef FEAT_GUI_TABLINE
+diff -Naur vim70.orig/src/undo.c vim70/src/undo.c
+--- vim70.orig/src/undo.c	2006-04-21 02:30:59.000000000 -0700
++++ vim70/src/undo.c	2006-07-14 10:51:11.000000000 -0700
+@@ -84,7 +84,6 @@
+ static void u_unch_branch __ARGS((u_header_T *uhp));
+ static u_entry_T *u_get_headentry __ARGS((void));
+ static void u_getbot __ARGS((void));
+-static int undo_allowed __ARGS((void));
+ static int u_savecommon __ARGS((linenr_T, linenr_T, linenr_T));
+ static void u_doit __ARGS((int count));
+ static void u_undoredo __ARGS((int undo));
+@@ -196,7 +195,7 @@
+  * Return TRUE when undo is allowed.  Otherwise give an error message and
+  * return FALSE.
+  */
+-    static int
++    int
+ undo_allowed()
+ {
+     /* Don't allow changes when 'modifiable' is off.  */
+diff -Naur vim70.orig/src/version.c vim70/src/version.c
+--- vim70.orig/src/version.c	2006-05-03 00:50:42.000000000 -0700
++++ vim70/src/version.c	2006-08-27 12:48:28.000000000 -0700
+@@ -667,6 +667,126 @@
+ static int included_patches[] =
+ {   /* Add new patch number below this line */
+ /**/
++    66,
++/**/
++    64,
++/**/
++    63,
++/**/
++    62,
++/**/
++    61,
++/**/
++    60,
++/**/
++    59,
++/**/
++    58,
++/**/
++    56,
++/**/
++    55,
++/**/
++    54,
++/**/
++    53,
++/**/
++    52,
++/**/
++    51,
++/**/
++    50,
++/**/
++    49,
++/**/
++    48,
++/**/
++    47,
++/**/
++    46,
++/**/
++    44,
++/**/
++    43,
++/**/
++    42,
++/**/
++    41,
++/**/
++    40,
++/**/
++    39,
++/**/
++    38,
++/**/
++    37,
++/**/
++    36,
++/**/
++    35,
++/**/
++    34,
++/**/
++    33,
++/**/
++    31,
++/**/
++    30,
++/**/
++    29,
++/**/
++    28,
++/**/
++    26,
++/**/
++    25,
++/**/
++    24,
++/**/
++    23,
++/**/
++    22,
++/**/
++    21,
++/**/
++    20,
++/**/
++    19,
++/**/
++    18,
++/**/
++    17,
++/**/
++    16,
++/**/
++    15,
++/**/
++    14,
++/**/
++    13,
++/**/
++    12,
++/**/
++    11,
++/**/
++    10,
++/**/
++    9,
++/**/
++    8,
++/**/
++    7,
++/**/
++    6,
++/**/
++    4,
++/**/
++    3,
++/**/
++    2,
++/**/
++    1,
++/**/
+     0
+ };
+ 
+diff -Naur vim70.orig/src/vim.h vim70/src/vim.h
+--- vim70.orig/src/vim.h	2006-04-30 08:32:38.000000000 -0700
++++ vim70/src/vim.h	2006-07-14 08:51:21.000000000 -0700
+@@ -585,7 +585,6 @@
+ #define INSERT		0x10	/* Insert mode */
+ #define LANGMAP		0x20	/* Language mapping, can be combined with
+ 				   INSERT and CMDLINE */
+-#define MAP_ALL_MODES	0x3f	/* all mode bits used for mapping */
+ 
+ #define REPLACE_FLAG	0x40	/* Replace mode flag */
+ #define REPLACE		(REPLACE_FLAG + INSERT)
+@@ -605,6 +604,9 @@
+ #define CONFIRM		0x800	/* ":confirm" prompt */
+ #define SELECTMODE	0x1000	/* Select mode, only for mappings */
+ 
++#define MAP_ALL_MODES	(0x3f | SELECTMODE)	/* all mode bits used for
++						 * mapping */
++
+ /* directions */
+ #define FORWARD			1
+ #define BACKWARD		(-1)
+@@ -1983,7 +1985,7 @@
+ /* values for vim_handle_signal() that are not a signal */
+ #define SIGNAL_BLOCK	-1
+ #define SIGNAL_UNBLOCK  -2
+-#if !defined(UNIX) && !defined(VMS)
++#if !defined(UNIX) && !defined(VMS) && !defined(OS2)
+ # define vim_handle_signal(x) 0
+ #endif
+ 
+	
Index: tches/vim-7.0-fixes-5.patch
===================================================================
--- patches/vim-7.0-fixes-5.patch	(revision d1fc2f36f3ed91443b4882c6c62071e1968c3e62)
+++ 	(revision )
@@ -1,1081 +1,0 @@
-Submitted By: Jim Gifford (jim at linuxfromscratch dot org)
-Date: 2006-06-22
-Initial Package Version: 7.0
-Origin: Upstream
-Upstream Status: Applied
-Description: Contains Patch 001-004, 006-026, and 028 from Upstream
-        005 and 027 is for the extras and Windows 32 only
-
-diff -Naur vim70.orig/runtime/autoload/ccomplete.vim vim70/runtime/autoload/ccomplete.vim
---- vim70.orig/runtime/autoload/ccomplete.vim	2006-05-03 07:35:56.000000000 -0700
-+++ vim70/runtime/autoload/ccomplete.vim	2006-06-21 23:50:50.000000000 -0700
-@@ -1,7 +1,7 @@
- " Vim completion script
- " Language:	C
- " Maintainer:	Bram Moolenaar <Bram@vim.org>
--" Last Change:	2006 May 03
-+" Last Change:	2006 May 08
- 
- 
- " This function is used for the 'omnifunc' option.
-@@ -458,7 +458,7 @@
- " member.
- function! s:StructMembers(typename, items, all)
-   " Todo: What about local structures?
--  let fnames = join(map(tagfiles(), 'escape(v:val, " \\")'))
-+  let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")'))
-   if fnames == ''
-     return []
-   endif
-diff -Naur vim70.orig/runtime/autoload/spellfile.vim vim70/runtime/autoload/spellfile.vim
---- vim70.orig/runtime/autoload/spellfile.vim	2006-02-01 04:12:24.000000000 -0800
-+++ vim70/runtime/autoload/spellfile.vim	2006-06-21 23:50:50.000000000 -0700
-@@ -1,9 +1,9 @@
- " Vim script to download a missing spell file
- " Maintainer:	Bram Moolenaar <Bram@vim.org>
--" Last Change:	2006 Feb 01
-+" Last Change:	2006 May 10
- 
- if !exists('g:spellfile_URL')
--  let g:spellfile_URL = 'ftp://ftp.vim.org/pub/vim/unstable/runtime/spell'
-+  let g:spellfile_URL = 'ftp://ftp.vim.org/pub/vim/runtime/spell'
- endif
- let s:spellfile_URL = ''    " Start with nothing so that s:donedict is reset.
- 
-@@ -61,13 +61,13 @@
-     new
-     setlocal bin
-     echo 'Downloading ' . fname . '...'
--    exe 'Nread ' g:spellfile_URL . '/' . fname
-+    call spellfile#Nread(fname)
-     if getline(2) !~ 'VIMspell'
-       " Didn't work, perhaps there is an ASCII one.
-       g/^/d
-       let fname = a:lang . '.ascii.spl'
-       echo 'Could not find it, trying ' . fname . '...'
--      exe 'Nread ' g:spellfile_URL . '/' . fname
-+      call spellfile#Nread(fname)
-       if getline(2) !~ 'VIMspell'
- 	echo 'Sorry, downloading failed'
- 	bwipe!
-@@ -95,7 +95,7 @@
- 	g/^/d
- 	let fname = substitute(fname, '\.spl$', '.sug', '')
- 	echo 'Downloading ' . fname . '...'
--	exe 'Nread ' g:spellfile_URL . '/' . fname
-+	call spellfile#Nread(fname)
- 	if getline(2) !~ 'VIMsug'
- 	  echo 'Sorry, downloading failed'
- 	else
-@@ -109,3 +109,10 @@
-     bwipe
-   endif
- endfunc
-+
-+" Read "fname" from the ftp server.
-+function! spellfile#Nread(fname)
-+  let machine = substitute(g:spellfile_URL, 'ftp://\([^/]*\).*', '\1', '')
-+  let dir = substitute(g:spellfile_URL, 'ftp://[^/]*/\(.*\)', '\1', '')
-+  exe 'Nread "' . machine . ' anonymous vim7user ' . dir . '/' . a:fname . '"'
-+endfunc
-diff -Naur vim70.orig/runtime/plugin/matchparen.vim vim70/runtime/plugin/matchparen.vim
---- vim70.orig/runtime/plugin/matchparen.vim	2006-04-27 06:31:26.000000000 -0700
-+++ vim70/runtime/plugin/matchparen.vim	2006-06-21 23:50:50.000000000 -0700
-@@ -1,6 +1,6 @@
- " Vim plugin for showing matching parens
- " Maintainer:  Bram Moolenaar <Bram@vim.org>
--" Last Change: 2006 Apr 27
-+" Last Change: 2006 May 11
- 
- " Exit quickly when:
- " - this plugin was already loaded (or disabled)
-@@ -90,7 +90,7 @@
-   " Find the match.  When it was just before the cursor move it there for a
-   " moment.
-   if before > 0
--    let save_cursor = getpos('.')
-+    let save_cursor = winsaveview()
-     call cursor(c_lnum, c_col - before)
-   endif
- 
-@@ -102,7 +102,7 @@
-   let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline)
- 
-   if before > 0
--    call setpos('.', save_cursor)
-+    call winrestview(save_cursor)
-   endif
- 
-   " If a match is found setup match highlighting.
-diff -Naur vim70.orig/src/edit.c vim70/src/edit.c
---- vim70.orig/src/edit.c	2006-05-07 04:48:51.000000000 -0700
-+++ vim70/src/edit.c	2006-06-22 11:03:06.000000000 -0700
-@@ -719,9 +719,14 @@
- #ifdef FEAT_INS_EXPAND
- 	/*
- 	 * Special handling of keys while the popup menu is visible or wanted
--	 * and the cursor is still in the completed word.
-+	 * and the cursor is still in the completed word.  Only when there is
-+	 * a match, skip this when no matches were found.
- 	 */
--	if (compl_started && pum_wanted() && curwin->w_cursor.col >= compl_col)
-+	if (compl_started
-+		&& pum_wanted()
-+		&& curwin->w_cursor.col >= compl_col
-+		&& (compl_shown_match == NULL
-+		    || compl_shown_match != compl_shown_match->cp_next))
- 	{
- 	    /* BS: Delete one character from "compl_leader". */
- 	    if ((c == K_BS || c == Ctrl_H)
-@@ -751,7 +756,7 @@
- 		    continue;
- 		}
- 
--		/* Pressing CTRL-Y selects the current match.  Shen
-+		/* Pressing CTRL-Y selects the current match.  When
- 		 * compl_enter_selects is set the Enter key does the same. */
- 		if (c == Ctrl_Y || (compl_enter_selects
- 				   && (c == CAR || c == K_KENTER || c == NL)))
-@@ -3046,7 +3051,6 @@
-     ins_compl_delete();
-     ins_bytes(compl_leader + curwin->w_cursor.col - compl_col);
-     compl_used_match = FALSE;
--    compl_enter_selects = FALSE;
- 
-     if (compl_started)
- 	ins_compl_set_original_text(compl_leader);
-@@ -3076,6 +3080,7 @@
- 	compl_restarting = FALSE;
-     }
- 
-+#if 0   /* disabled, made CTRL-L, BS and typing char jump to original text. */
-     if (!compl_used_match)
-     {
- 	/* Go to the original text, since none of the matches is inserted. */
-@@ -3087,6 +3092,8 @@
- 	compl_curr_match = compl_shown_match;
- 	compl_shows_dir = compl_direction;
-     }
-+#endif
-+    compl_enter_selects = !compl_used_match;
- 
-     /* Show the popup menu with a different set of matches. */
-     ins_compl_show_pum();
-@@ -3175,10 +3182,32 @@
-     char_u	*p;
-     int		len = curwin->w_cursor.col - compl_col;
-     int		c;
-+    compl_T	*cp;
- 
-     p = compl_shown_match->cp_str;
-     if ((int)STRLEN(p) <= len)   /* the match is too short */
--	return;
-+    {
-+	/* When still at the original match use the first entry that matches
-+	 * the leader. */
-+	if (compl_shown_match->cp_flags & ORIGINAL_TEXT)
-+	{
-+	    p = NULL;
-+	    for (cp = compl_shown_match->cp_next; cp != NULL
-+				 && cp != compl_first_match; cp = cp->cp_next)
-+	    {
-+		if (ins_compl_equal(cp, compl_leader,
-+						   (int)STRLEN(compl_leader)))
-+		{
-+		    p = cp->cp_str;
-+		    break;
-+		}
-+	    }
-+	    if (p == NULL || (int)STRLEN(p) <= len)
-+		return;
-+	}
-+	else
-+	    return;
-+    }
-     p += len;
- #ifdef FEAT_MBYTE
-     c = mb_ptr2char(p);
-@@ -3369,16 +3398,21 @@
- 		    ptr = compl_leader;
- 		else
- 		    ptr = compl_orig_text;
--		p = compl_orig_text;
--		for (temp = 0; p[temp] != NUL && p[temp] == ptr[temp]; ++temp)
--		    ;
-+		if (compl_orig_text != NULL)
-+		{
-+		    p = compl_orig_text;
-+		    for (temp = 0; p[temp] != NUL && p[temp] == ptr[temp];
-+								       ++temp)
-+			;
- #ifdef FEAT_MBYTE
--		if (temp > 0)
--		    temp -= (*mb_head_off)(compl_orig_text, p + temp);
-+		    if (temp > 0)
-+			temp -= (*mb_head_off)(compl_orig_text, p + temp);
- #endif
--		for (p += temp; *p != NUL; mb_ptr_adv(p))
--		    AppendCharToRedobuff(K_BS);
--		AppendToRedobuffLit(ptr + temp, -1);
-+		    for (p += temp; *p != NUL; mb_ptr_adv(p))
-+			AppendCharToRedobuff(K_BS);
-+		}
-+		if (ptr != NULL)
-+		    AppendToRedobuffLit(ptr + temp, -1);
- 	    }
- 
- #ifdef FEAT_CINDENT
-@@ -4100,6 +4134,21 @@
- 		&& compl_shown_match->cp_next != NULL
- 		&& compl_shown_match->cp_next != compl_first_match)
- 	    compl_shown_match = compl_shown_match->cp_next;
-+
-+	/* If we didn't find it searching forward, and compl_shows_dir is
-+	 * backward, find the last match. */
-+	if (compl_shows_dir == BACKWARD
-+		&& !ins_compl_equal(compl_shown_match,
-+				      compl_leader, (int)STRLEN(compl_leader))
-+		&& (compl_shown_match->cp_next == NULL
-+		    || compl_shown_match->cp_next == compl_first_match))
-+	{
-+	    while (!ins_compl_equal(compl_shown_match,
-+				      compl_leader, (int)STRLEN(compl_leader))
-+		    && compl_shown_match->cp_prev != NULL
-+		    && compl_shown_match->cp_prev != compl_first_match)
-+		compl_shown_match = compl_shown_match->cp_prev;
-+	}
-     }
- 
-     if (allow_get_expansion && insert_match
-@@ -4611,10 +4660,18 @@
- 				     (int)STRLEN(compl_pattern), curs_col);
- 	    if (compl_xp.xp_context == EXPAND_UNSUCCESSFUL
- 		    || compl_xp.xp_context == EXPAND_NOTHING)
--		return FAIL;
--	    startcol = (int)(compl_xp.xp_pattern - compl_pattern);
--	    compl_col = startcol;
--	    compl_length = curs_col - startcol;
-+	    {
-+		compl_col = curs_col;
-+		compl_length = 0;
-+		vim_free(compl_pattern);
-+		compl_pattern = NULL;
-+	    }
-+	    else
-+	    {
-+		startcol = (int)(compl_xp.xp_pattern - compl_pattern);
-+		compl_col = startcol;
-+		compl_length = curs_col - startcol;
-+	    }
- 	}
- 	else if (ctrl_x_mode == CTRL_X_FUNCTION || ctrl_x_mode == CTRL_X_OMNI)
- 	{
-@@ -4668,11 +4725,17 @@
- 	    else
- 		compl_col = spell_word_start(startcol);
- 	    if (compl_col >= (colnr_T)startcol)
--		return FAIL;
--	    spell_expand_check_cap(compl_col);
-+	    {
-+		compl_length = 0;
-+		compl_col = curs_col;
-+	    }
-+	    else
-+	    {
-+		spell_expand_check_cap(compl_col);
-+		compl_length = (int)curs_col - compl_col;
-+	    }
- 	    /* Need to obtain "line" again, it may have become invalid. */
- 	    line = ml_get(curwin->w_cursor.lnum);
--	    compl_length = (int)curs_col - compl_col;
- 	    compl_pattern = vim_strnsave(line + compl_col, compl_length);
- 	    if (compl_pattern == NULL)
- #endif
-diff -Naur vim70.orig/src/eval.c vim70/src/eval.c
---- vim70.orig/src/eval.c	2006-05-05 10:15:26.000000000 -0700
-+++ vim70/src/eval.c	2006-06-22 11:03:59.000000000 -0700
-@@ -11372,7 +11372,7 @@
- 	    if (argvars[2].v_type != VAR_UNKNOWN)
- 	    {
- 		char_u	*xp_name;
--		int		xp_namelen;
-+		int	xp_namelen;
- 		long	argt;
- 
- 		rettv->vval.v_string = NULL;
-@@ -13250,7 +13250,7 @@
- 	if (argvars[2].v_type != VAR_UNKNOWN)
- 	    EMSG2(_(e_toomanyarg), "remove()");
- 	else if ((d = argvars[0].vval.v_dict) != NULL
--		&& !tv_check_lock(d->dv_lock, (char_u *)"remove()"))
-+		&& !tv_check_lock(d->dv_lock, (char_u *)"remove() argument"))
- 	{
- 	    key = get_tv_string_chk(&argvars[1]);
- 	    if (key != NULL)
-@@ -13270,7 +13270,7 @@
-     else if (argvars[0].v_type != VAR_LIST)
- 	EMSG2(_(e_listdictarg), "remove()");
-     else if ((l = argvars[0].vval.v_list) != NULL
--	    && !tv_check_lock(l->lv_lock, (char_u *)"remove()"))
-+	    && !tv_check_lock(l->lv_lock, (char_u *)"remove() argument"))
-     {
- 	int	    error = FALSE;
- 
-@@ -17759,6 +17759,13 @@
-     }
-     else		    /* add a new variable */
-     {
-+	/* Can't add "v:" variable. */
-+	if (ht == &vimvarht)
-+	{
-+	    EMSG2(_(e_illvar), name);
-+	    return;
-+	}
-+
- 	/* Make sure the variable name is valid. */
- 	for (p = varname; *p != NUL; ++p)
- 	    if (!eval_isnamec1(*p) && (p == varname || !VIM_ISDIGIT(*p))
-@@ -18963,7 +18970,8 @@
-     else if (lead > 0)
-     {
- 	lead = 3;
--	if (eval_fname_sid(lv.ll_exp_name != NULL ? lv.ll_exp_name : *pp))
-+	if ((lv.ll_exp_name != NULL && eval_fname_sid(lv.ll_exp_name))
-+						       || eval_fname_sid(*pp))
- 	{
- 	    /* It's "s:" or "<SID>" */
- 	    if (current_SID <= 0)
-@@ -19685,6 +19693,7 @@
-     v->di_tv.vval.v_list = &fc.l_varlist;
-     vim_memset(&fc.l_varlist, 0, sizeof(list_T));
-     fc.l_varlist.lv_refcount = 99999;
-+    fc.l_varlist.lv_lock = VAR_FIXED;
- 
-     /*
-      * Set a:firstline to "firstline" and a:lastline to "lastline".
-diff -Naur vim70.orig/src/ex_docmd.c vim70/src/ex_docmd.c
---- vim70.orig/src/ex_docmd.c	2006-05-05 09:33:19.000000000 -0700
-+++ vim70/src/ex_docmd.c	2006-06-21 23:50:50.000000000 -0700
-@@ -833,7 +833,7 @@
-      * If requested, store and reset the global values controlling the
-      * exception handling (used when debugging).
-      */
--    else if (flags & DOCMD_EXCRESET)
-+    if (flags & DOCMD_EXCRESET)
- 	save_dbg_stuff(&debug_saved);
- 
-     initial_trylevel = trylevel;
-diff -Naur vim70.orig/src/gui_at_fs.c vim70/src/gui_at_fs.c
---- vim70.orig/src/gui_at_fs.c	2005-07-09 04:30:17.000000000 -0700
-+++ vim70/src/gui_at_fs.c	2006-06-21 23:50:50.000000000 -0700
-@@ -1861,27 +1861,27 @@
-     XtPointer	pnew;
- {
-     SFDir	*dir;
--    int		nw;
-+    int		nw = (int)(long)pnew;
- 
-     dir = &(SFdirs[SFdirPtr + (int)(long)n]);
- 
- #ifdef FEAT_GUI_NEXTAW
--    if ((int)(long)pnew < 0)
-+    if (nw < 0)
-     {
--	if ((int)(long)pnew > -SFvScrollHeight)
--	    (int)(long)pnew = -1;
-+	if (nw > -SFvScrollHeight)
-+	    nw = -1;
- 	else
--	    (int)(long)pnew = -SFlistSize;
-+	    nw = -SFlistSize;
-     }
--    else if ((int)(long)pnew > 0)
-+    else if (nw > 0)
-     {
--	if ((int)(long)pnew < SFvScrollHeight)
--	    (int)(long)pnew = 1;
-+	if (nw < SFvScrollHeight)
-+	    nw = 1;
- 	else
--	    (int)(long)pnew = SFlistSize;
-+	    nw = SFlistSize;
-     }
- #endif
--    nw = dir->vOrigin + (int)(long)pnew;
-+    nw += dir->vOrigin;
- 
-     if (nw > dir->nEntries - SFlistSize)
- 	nw = dir->nEntries - SFlistSize;
-@@ -1941,27 +1941,27 @@
-     XtPointer	pnew;
- {
-     SFDir	*dir;
--    int		nw;
-+    int		nw = (int)(long)pnew;
- 
-     dir = &(SFdirs[SFdirPtr + (int)(long)n]);
- 
- #ifdef FEAT_GUI_NEXTAW
--    if ((int)(long)pnew < 0)
-+    if (nw < 0)
-     {
--	if ((int)(long)pnew > -SFhScrollWidth)
--	    (int)(long)pnew = -1;
-+	if (nw > -SFhScrollWidth)
-+	    nw = -1;
- 	else
--	    (int)(long)pnew = -SFcharsPerEntry;
-+	    nw = -SFcharsPerEntry;
-     }
--    else if ((int)(long)pnew > 0)
-+    else if (nw > 0)
-     {
--	if ((int)(long)pnew < SFhScrollWidth)
--	    (int)(long)pnew = 1;
-+	if (nw < SFhScrollWidth)
-+	    nw = 1;
- 	else
--	    (int)(long)pnew = SFcharsPerEntry;
-+	    nw = SFcharsPerEntry;
-     }
- #endif
--    nw = dir->hOrigin + (int)(long)pnew;
-+    nw += dir->hOrigin;
- 
-     if (nw > dir->nChars - SFcharsPerEntry)
- 	nw = dir->nChars - SFcharsPerEntry;
-@@ -2038,26 +2038,26 @@
-     XtPointer	client_data;
-     XtPointer	pnew;
- {
--    int		nw;
-+    int		nw = (int)(long)pnew;
-     float	f;
- 
- #ifdef FEAT_GUI_NEXTAW
--    if ((int)(long)pnew < 0)
-+    if (nw < 0)
-     {
--	if ((int)(long)pnew > -SFpathScrollWidth)
--	    (int)(long)pnew = -1;
-+	if (nw > -SFpathScrollWidth)
-+	    nw = -1;
- 	else
--	    (int)(long)pnew = -3;
-+	    nw = -3;
-     }
--    else if ((int)(long)pnew > 0)
-+    else if (nw > 0)
-     {
--	if ((int)(long)pnew < SFpathScrollWidth)
--	    (int)(long)pnew = 1;
-+	if (nw < SFpathScrollWidth)
-+	    nw = 1;
- 	else
--	    (int)(long)pnew = 3;
-+	    nw = 3;
-     }
- #endif
--    nw = SFdirPtr + (int)(long)pnew;
-+    nw += SFdirPtr;
- 
-     if (nw > SFdirEnd - 3)
- 	nw = SFdirEnd - 3;
-diff -Naur vim70.orig/src/gui.c vim70/src/gui.c
---- vim70.orig/src/gui.c	2006-05-03 04:00:59.000000000 -0700
-+++ vim70/src/gui.c	2006-06-21 23:52:38.000000000 -0700
-@@ -4515,7 +4515,7 @@
-     int		y;
- {
-     win_T	*wp;
--    char_u	st[6];
-+    char_u	st[8];
- 
-     /* Ignore this while still starting up. */
-     if (!gui.in_use || gui.starting)
-@@ -4603,11 +4603,11 @@
-     /* Don't move the mouse when it's left or right of the Vim window */
-     if (x < 0 || x > Columns * gui.char_width)
- 	return;
-+    if (y >= 0
- # ifdef FEAT_WINDOWS
--    if (Y_2_ROW(y) >= tabline_height())
--# else
--    if (y >= 0)
-+	    && Y_2_ROW(y) >= tabline_height()
- # endif
-+       )
- 	wp = xy2win(x, y);
-     if (wp != curwin && wp != NULL)	/* If in other than current window */
-     {
-diff -Naur vim70.orig/src/gui_xmebw.c vim70/src/gui_xmebw.c
---- vim70.orig/src/gui_xmebw.c	2006-04-30 08:32:32.000000000 -0700
-+++ vim70/src/gui_xmebw.c	2006-06-21 23:50:50.000000000 -0700
-@@ -47,13 +47,13 @@
- #include "gui_xmebwp.h"
- 
- /* Provide some missing wrappers, which are missed from the LessTif
-- * implementation.
-+ * implementation.  Also missing in Motif 1.2 and earlier.
-  *
-  * We neither use XmeGetPixmapData or _XmGetPixmapData, since with LessTif the
-  * pixmap will not appear in it's caches properly. We cache the interresting
-  * values in XmEnhancedButtonPart instead ourself.
-  */
--#ifdef LESSTIF_VERSION
-+#if defined(LESSTIF_VERSION) || (XmVersion <= 1002)
- # ifndef Lab_IsMenupane
- #  define Lab_IsMenupane(w) (Lab_MenuType(w) == (int)XmMENU_POPUP || \
- 		    Lab_MenuType(w) == (int)XmMENU_PULLDOWN)
-@@ -480,7 +480,7 @@
- 	    || (eb->core.height <= 2 * eb->primitive.highlight_thickness))
- 	return;
- 
--#ifndef LESSTIF_VERSION
-+#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
-     {
- 	XmDisplay	dpy;
- 
-@@ -641,7 +641,7 @@
-     GC		tmp_gc = NULL;
-     Boolean	replaceGC = False;
-     Boolean	deadjusted = False;
--#ifndef LESSTIF_VERSION
-+#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
-     XmDisplay	dpy = (XmDisplay)XmGetXmDisplay(XtDisplay(eb));
-     Boolean	etched_in = dpy->display.enable_etched_in_menu;
- #else
-@@ -726,7 +726,7 @@
- 	if ((((ShellWidget) XtParent(XtParent(eb)))->shell.popped_up)
- 		&& _XmGetInDragMode((Widget) eb))
- 	{
--#ifndef LESSTIF_VERSION
-+#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
- 	    XmDisplay dpy = (XmDisplay) XmGetXmDisplay(XtDisplay(wid));
- 	    Boolean etched_in = dpy->display.enable_etched_in_menu;
- #else
-@@ -810,7 +810,7 @@
- 
-     if (Lab_IsMenupane(eb))
-     {
--#ifndef LESSTIF_VERSION
-+#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
- 	XmDisplay dpy = (XmDisplay) XmGetXmDisplay(XtDisplay(wid));
- 	Boolean etched_in = dpy->display.enable_etched_in_menu;
- #else
-@@ -1150,7 +1150,7 @@
- Redisplay(Widget w, XEvent *event, Region region)
- {
-     XmEnhancedButtonWidget  eb = (XmEnhancedButtonWidget) w;
--#ifndef LESSTIF_VERSION
-+#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
-     XmDisplay		    dpy;
-     XtEnum		    default_button_emphasis;
- #endif
-@@ -1162,7 +1162,7 @@
-     if (!XtIsRealized((Widget)eb))
- 	return;
- 
--#ifndef LESSTIF_VERSION
-+#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
-     dpy = (XmDisplay)XmGetXmDisplay(XtDisplay(eb));
-     default_button_emphasis = dpy->display.default_button_emphasis;
- #endif
-@@ -1241,7 +1241,7 @@
-     {
- 	int adjust = 0;
- 
--#ifndef LESSTIF_VERSION
-+#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
- 	/*
- 	 *  NOTE: PushButton has two types of shadows: primitive-shadow and
- 	 *  default-button-shadow.  If pushbutton is in a menu only primitive
-@@ -1289,7 +1289,7 @@
- 			  adjust, adjust, rectwidth, rectheight, borderwidth);
- 	    }
- 
--#ifndef LESSTIF_VERSION
-+#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
- 	    switch (default_button_emphasis)
- 	    {
- 		case XmINTERNAL_HIGHLIGHT:
-@@ -1365,7 +1365,7 @@
- 		    default_button_shadow_thickness =
- 			       eb->pushbutton.default_button_shadow_thickness;
- 
--#ifndef LESSTIF_VERSION
-+#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
- 		/*
- 		 * Compute location of bounding box to contain the
- 		 * defaultButtonShadow.
-diff -Naur vim70.orig/src/if_ruby.c vim70/src/if_ruby.c
---- vim70.orig/src/if_ruby.c	2006-04-30 08:37:52.000000000 -0700
-+++ vim70/src/if_ruby.c	2006-06-21 23:56:28.000000000 -0700
-@@ -643,11 +643,23 @@
- 
- static VALUE set_buffer_line(buf_T *buf, linenr_T n, VALUE str)
- {
--    buf_T *savebuf = curbuf;
--    char *line = STR2CSTR(str);
-+    char	*line = STR2CSTR(str);
-+#ifdef FEAT_AUTOCMD
-+    aco_save_T	aco;
-+#else
-+    buf_T	*save_curbuf = curbuf;
-+#endif
- 
--    if (n > 0 && n <= buf->b_ml.ml_line_count && line != NULL) {
-+    if (n > 0 && n <= buf->b_ml.ml_line_count && line != NULL)
-+    {
-+#ifdef FEAT_AUTOCMD
-+	/* set curwin/curbuf for "buf" and save some things */
-+	aucmd_prepbuf(&aco, buf);
-+#else
- 	curbuf = buf;
-+	curwin->w_buffer = buf;
-+#endif
-+
- 	if (u_savesub(n) == OK) {
- 	    ml_replace(n, (char_u *)line, TRUE);
- 	    changed();
-@@ -655,10 +667,19 @@
- 	    syn_changed(n); /* recompute syntax hl. for this line */
- #endif
- 	}
--	curbuf = savebuf;
-+
-+#ifdef FEAT_AUTOCMD
-+	/* restore curwin/curbuf and a few other things */
-+	aucmd_restbuf(&aco);
-+	/* Careful: autocommands may have made "buf" invalid! */
-+#else
-+	curwin->w_buffer = save_curbuf;
-+	curbuf = save_curbuf;
-+#endif
- 	update_curbuf(NOT_VALID);
-     }
--    else {
-+    else
-+    {
- 	rb_raise(rb_eIndexError, "index %d out of buffer", n);
- 	return Qnil; /* For stop warning */
-     }
-@@ -676,12 +697,24 @@
- 
- static VALUE buffer_delete(VALUE self, VALUE num)
- {
--    buf_T *buf = get_buf(self);
--    buf_T *savebuf = curbuf;
--    long n = NUM2LONG(num);
-+    buf_T	*buf = get_buf(self);
-+    long	n = NUM2LONG(num);
-+#ifdef FEAT_AUTOCMD
-+    aco_save_T	aco;
-+#else
-+    buf_T	*save_curbuf = curbuf;
-+#endif
- 
--    if (n > 0 && n <= buf->b_ml.ml_line_count) {
-+    if (n > 0 && n <= buf->b_ml.ml_line_count)
-+    {
-+#ifdef FEAT_AUTOCMD
-+	/* set curwin/curbuf for "buf" and save some things */
-+	aucmd_prepbuf(&aco, buf);
-+#else
- 	curbuf = buf;
-+	curwin->w_buffer = buf;
-+#endif
-+
- 	if (u_savedel(n, 1) == OK) {
- 	    ml_delete(n, 0);
- 
-@@ -691,10 +724,19 @@
- 
- 	    changed();
- 	}
--	curbuf = savebuf;
-+
-+#ifdef FEAT_AUTOCMD
-+	/* restore curwin/curbuf and a few other things */
-+	aucmd_restbuf(&aco);
-+	/* Careful: autocommands may have made "buf" invalid! */
-+#else
-+	curwin->w_buffer = save_curbuf;
-+	curbuf = save_curbuf;
-+#endif
- 	update_curbuf(NOT_VALID);
-     }
--    else {
-+    else
-+    {
- 	rb_raise(rb_eIndexError, "index %d out of buffer", n);
-     }
-     return Qnil;
-@@ -702,13 +744,25 @@
- 
- static VALUE buffer_append(VALUE self, VALUE num, VALUE str)
- {
--    buf_T *buf = get_buf(self);
--    buf_T *savebuf = curbuf;
--    char *line = STR2CSTR(str);
--    long n = NUM2LONG(num);
-+    buf_T	*buf = get_buf(self);
-+    char	*line = STR2CSTR(str);
-+    long	n = NUM2LONG(num);
-+#ifdef FEAT_AUTOCMD
-+    aco_save_T	aco;
-+#else
-+    buf_T	*save_curbuf = curbuf;
-+#endif
- 
--    if (n >= 0 && n <= buf->b_ml.ml_line_count && line != NULL) {
-+    if (n >= 0 && n <= buf->b_ml.ml_line_count && line != NULL)
-+    {
-+#ifdef FEAT_AUTOCMD
-+	/* set curwin/curbuf for "buf" and save some things */
-+	aucmd_prepbuf(&aco, buf);
-+#else
- 	curbuf = buf;
-+	curwin->w_buffer = buf;
-+#endif
-+
- 	if (u_inssub(n + 1) == OK) {
- 	    ml_append(n, (char_u *) line, (colnr_T) 0, FALSE);
- 
-@@ -718,7 +772,15 @@
- 
- 	    changed();
- 	}
--	curbuf = savebuf;
-+
-+#ifdef FEAT_AUTOCMD
-+	/* restore curwin/curbuf and a few other things */
-+	aucmd_restbuf(&aco);
-+	/* Careful: autocommands may have made "buf" invalid! */
-+#else
-+	curwin->w_buffer = save_curbuf;
-+	curbuf = save_curbuf;
-+#endif
- 	update_curbuf(NOT_VALID);
-     }
-     else {
-diff -Naur vim70.orig/src/main.c vim70/src/main.c
---- vim70.orig/src/main.c	2006-05-03 10:36:44.000000000 -0700
-+++ vim70/src/main.c	2006-06-21 23:51:37.000000000 -0700
-@@ -564,7 +564,11 @@
-      */
-     if (p_lpl)
-     {
-+# ifdef VMS	/* Somehow VMS doesn't handle the "**". */
-+	source_runtime((char_u *)"plugin/*.vim", TRUE);
-+# else
- 	source_runtime((char_u *)"plugin/**/*.vim", TRUE);
-+# endif
- 	TIME_MSG("loading plugins");
-     }
- #endif
-diff -Naur vim70.orig/src/Makefile vim70/src/Makefile
---- vim70.orig/src/Makefile	2006-05-07 06:25:27.000000000 -0700
-+++ vim70/src/Makefile	2006-06-21 23:50:50.000000000 -0700
-@@ -2177,6 +2177,7 @@
- 	cd $(SHADOWDIR)/xxd; ln -s ../../xxd/*.[ch] ../../xxd/Make* .
- 	if test -d $(RSRC_DIR); then \
- 		cd $(SHADOWDIR); \
-+		ln -s ../infplist.xml .; \
- 		ln -s ../$(RSRC_DIR) ../os_mac.rsr.hqx ../dehqx.py .; \
- 	fi
- 	mkdir $(SHADOWDIR)/testdir
-diff -Naur vim70.orig/src/mbyte.c vim70/src/mbyte.c
---- vim70.orig/src/mbyte.c	2006-04-30 04:51:01.000000000 -0700
-+++ vim70/src/mbyte.c	2006-06-21 23:50:50.000000000 -0700
-@@ -311,7 +311,11 @@
- 
- #define IDX_MACROMAN	57
-     {"macroman",	ENC_8BIT + ENC_MACROMAN, 0},	/* Mac OS */
--#define IDX_COUNT	58
-+#define IDX_DECMCS	58
-+    {"dec-mcs",		ENC_8BIT,		0},	/* DEC MCS */
-+#define IDX_HPROMAN8	59
-+    {"hp-roman8",	ENC_8BIT,		0},	/* HP Roman8 */
-+#define IDX_COUNT	60
- };
- 
- /*
-@@ -386,6 +390,7 @@
-     {"950",		IDX_BIG5},
- #endif
-     {"mac",		IDX_MACROMAN},
-+    {"mac-roman",	IDX_MACROMAN},
-     {NULL,		0}
- };
- 
-diff -Naur vim70.orig/src/message.c vim70/src/message.c
---- vim70.orig/src/message.c	2006-05-06 13:07:37.000000000 -0700
-+++ vim70/src/message.c	2006-06-21 23:50:50.000000000 -0700
-@@ -4175,15 +4175,16 @@
- 			str_arg_l = 0;
- 		    else
- 		    {
--			/* memchr on HP does not like n > 2^31  !!! */
--			char *q = memchr(str_arg, '\0',
-+			/* Don't put the #if inside memchr(), it can be a
-+			 * macro. */
- #if SIZEOF_INT <= 2
--				precision
-+			char *q = memchr(str_arg, '\0', precision);
- #else
--				precision <= (size_t)0x7fffffffL ? precision
--						       : (size_t)0x7fffffffL
-+			/* memchr on HP does not like n > 2^31  !!! */
-+			char *q = memchr(str_arg, '\0',
-+				  precision <= (size_t)0x7fffffffL ? precision
-+						       : (size_t)0x7fffffffL);
- #endif
--						       );
- 			str_arg_l = (q == NULL) ? precision : q - str_arg;
- 		    }
- 		    break;
-diff -Naur vim70.orig/src/ops.c vim70/src/ops.c
---- vim70.orig/src/ops.c	2006-04-30 08:13:44.000000000 -0700
-+++ vim70/src/ops.c	2006-06-21 23:52:03.000000000 -0700
-@@ -2413,6 +2413,7 @@
- 	else
- 	{
- 	    curwin->w_cursor = oap->end;
-+	    check_cursor_col();
- 
- 	    /* Works just like an 'i'nsert on the next character. */
- 	    if (!lineempty(curwin->w_cursor.lnum)
-diff -Naur vim70.orig/src/option.c vim70/src/option.c
---- vim70.orig/src/option.c	2006-05-03 10:32:28.000000000 -0700
-+++ vim70/src/option.c	2006-06-21 23:50:50.000000000 -0700
-@@ -2294,7 +2294,7 @@
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
- 			    },
--    {"spellsuggest", "sps", P_STRING|P_VI_DEF|P_EXPAND|P_SECURE,
-+    {"spellsuggest", "sps", P_STRING|P_VI_DEF|P_EXPAND|P_SECURE|P_COMMA,
- #ifdef FEAT_SPELL
- 			    (char_u *)&p_sps, PV_NONE,
- 			    {(char_u *)"best", (char_u *)0L}
-@@ -5227,13 +5227,13 @@
- 	    case PV_STL:	return &curwin->w_p_stl_flags;
- #endif
- #ifdef FEAT_EVAL
-+# ifdef FEAT_FOLDING
- 	    case PV_FDE:	return &curwin->w_p_fde_flags;
- 	    case PV_FDT:	return &curwin->w_p_fdt_flags;
-+# endif
- # ifdef FEAT_BEVAL
- 	    case PV_BEXPR:	return &curbuf->b_p_bexpr_flags;
- # endif
--#endif
--#if defined(FEAT_EVAL)
- # if defined(FEAT_CINDENT)
- 	    case PV_INDE:	return &curbuf->b_p_inde_flags;
- # endif
-diff -Naur vim70.orig/src/os_unix.c vim70/src/os_unix.c
---- vim70.orig/src/os_unix.c	2006-05-01 01:13:15.000000000 -0700
-+++ vim70/src/os_unix.c	2006-06-22 11:06:09.000000000 -0700
-@@ -4971,7 +4971,8 @@
- 		    if (((*file)[*num_file] = alloc(len + 2)) != NULL)
- 		    {
- 			STRCPY((*file)[*num_file], p);
--			if (!after_pathsep((*file)[*num_file] + len))
-+			if (!after_pathsep((*file)[*num_file],
-+						    (*file)[*num_file] + len))
- 			{
- 			    (*file)[*num_file][len] = psepc;
- 			    (*file)[*num_file][len + 1] = NUL;
-@@ -5757,8 +5758,13 @@
-     int		retval_int = 0;
-     int		success = FALSE;
- 
--    /* Get a handle to the DLL module. */
-+    /*
-+     * Get a handle to the DLL module.
-+     */
- # if defined(USE_DLOPEN)
-+    /* First clear any error, it's not cleared by the dlopen() call. */
-+    (void)dlerror();
-+
-     hinstLib = dlopen((char *)libname, RTLD_LAZY
- #  ifdef RTLD_LOCAL
- 	    | RTLD_LOCAL
-diff -Naur vim70.orig/src/quickfix.c vim70/src/quickfix.c
---- vim70.orig/src/quickfix.c	2006-05-03 00:47:42.000000000 -0700
-+++ vim70/src/quickfix.c	2006-06-21 23:54:05.000000000 -0700
-@@ -602,13 +602,19 @@
- 		else
- 		    type = 0;
- 		/*
--		 * Extract error message data from matched line
-+		 * Extract error message data from matched line.
-+		 * We check for an actual submatch, because "\[" and "\]" in
-+		 * the 'errorformat' may cause the wrong submatch to be used.
- 		 */
- 		if ((i = (int)fmt_ptr->addr[0]) > 0)		/* %f */
- 		{
--		    int c = *regmatch.endp[i];
-+		    int c;
-+
-+		    if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
-+			continue;
- 
- 		    /* Expand ~/file and $HOME/file to full path. */
-+		    c = *regmatch.endp[i];
- 		    *regmatch.endp[i] = NUL;
- 		    expand_env(regmatch.startp[i], namebuf, CMDBUFFSIZE);
- 		    *regmatch.endp[i] = c;
-@@ -618,35 +624,63 @@
- 			continue;
- 		}
- 		if ((i = (int)fmt_ptr->addr[1]) > 0)		/* %n */
-+		{
-+		    if (regmatch.startp[i] == NULL)
-+			continue;
- 		    enr = (int)atol((char *)regmatch.startp[i]);
-+		}
- 		if ((i = (int)fmt_ptr->addr[2]) > 0)		/* %l */
-+		{
-+		    if (regmatch.startp[i] == NULL)
-+			continue;
- 		    lnum = atol((char *)regmatch.startp[i]);
-+		}
- 		if ((i = (int)fmt_ptr->addr[3]) > 0)		/* %c */
-+		{
-+		    if (regmatch.startp[i] == NULL)
-+			continue;
- 		    col = (int)atol((char *)regmatch.startp[i]);
-+		}
- 		if ((i = (int)fmt_ptr->addr[4]) > 0)		/* %t */
-+		{
-+		    if (regmatch.startp[i] == NULL)
-+			continue;
- 		    type = *regmatch.startp[i];
-+		}
- 		if (fmt_ptr->flags == '+' && !multiscan)	/* %+ */
- 		    STRCPY(errmsg, IObuff);
- 		else if ((i = (int)fmt_ptr->addr[5]) > 0)	/* %m */
- 		{
-+		    if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
-+			continue;
- 		    len = (int)(regmatch.endp[i] - regmatch.startp[i]);
- 		    vim_strncpy(errmsg, regmatch.startp[i], len);
- 		}
- 		if ((i = (int)fmt_ptr->addr[6]) > 0)		/* %r */
-+		{
-+		    if (regmatch.startp[i] == NULL)
-+			continue;
- 		    tail = regmatch.startp[i];
-+		}
- 		if ((i = (int)fmt_ptr->addr[7]) > 0)		/* %p */
- 		{
-+		    if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
-+			continue;
- 		    col = (int)(regmatch.endp[i] - regmatch.startp[i] + 1);
- 		    if (*((char_u *)regmatch.startp[i]) != TAB)
- 			use_viscol = TRUE;
- 		}
- 		if ((i = (int)fmt_ptr->addr[8]) > 0)		/* %v */
- 		{
-+		    if (regmatch.startp[i] == NULL)
-+			continue;
- 		    col = (int)atol((char *)regmatch.startp[i]);
- 		    use_viscol = TRUE;
- 		}
- 		if ((i = (int)fmt_ptr->addr[9]) > 0)		/* %s */
- 		{
-+		    if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
-+			continue;
- 		    len = (int)(regmatch.endp[i] - regmatch.startp[i]);
- 		    if (len > CMDBUFFSIZE - 5)
- 			len = CMDBUFFSIZE - 5;
-diff -Naur vim70.orig/src/spell.c vim70/src/spell.c
---- vim70.orig/src/spell.c	2006-05-05 00:49:58.000000000 -0700
-+++ vim70/src/spell.c	2006-06-21 23:50:50.000000000 -0700
-@@ -2108,7 +2108,8 @@
- 	 * possible. */
- 	STRCPY(buf, line);
- 	if (lnum < wp->w_buffer->b_ml.ml_line_count)
--	    spell_cat_line(buf + STRLEN(buf), ml_get(lnum + 1), MAXWLEN);
-+	    spell_cat_line(buf + STRLEN(buf),
-+			  ml_get_buf(wp->w_buffer, lnum + 1, FALSE), MAXWLEN);
- 
- 	p = buf + skip;
- 	endp = buf + len;
-diff -Naur vim70.orig/src/version.c vim70/src/version.c
---- vim70.orig/src/version.c	2006-05-03 00:50:42.000000000 -0700
-+++ vim70/src/version.c	2006-06-22 11:06:13.000000000 -0700
-@@ -667,6 +667,58 @@
- static int included_patches[] =
- {   /* Add new patch number below this line */
- /**/
-+    28,
-+/**/
-+    26,
-+/**/
-+    25,
-+/**/
-+    24,
-+/**/
-+    23,
-+/**/
-+    22,
-+/**/
-+    21,
-+/**/
-+    20,
-+/**/
-+    19,
-+/**/
-+    18,
-+/**/
-+    17,
-+/**/
-+    16,
-+/**/
-+    15,
-+/**/
-+    14,
-+/**/
-+    13,
-+/**/
-+    12,
-+/**/
-+    11,
-+/**/
-+    10,
-+/**/
-+    9,
-+/**/
-+    8,
-+/**/
-+    7,
-+/**/
-+    6,
-+/**/
-+    4,
-+/**/
-+    3,
-+/**/
-+    2,
-+/**/
-+    1,
-+/**/
-     0
- };
- 
-diff -Naur vim70.orig/src/vim.h vim70/src/vim.h
---- vim70.orig/src/vim.h	2006-04-30 08:32:38.000000000 -0700
-+++ vim70/src/vim.h	2006-06-22 11:06:09.000000000 -0700
-@@ -1983,7 +1983,7 @@
- /* values for vim_handle_signal() that are not a signal */
- #define SIGNAL_BLOCK	-1
- #define SIGNAL_UNBLOCK  -2
--#if !defined(UNIX) && !defined(VMS)
-+#if !defined(UNIX) && !defined(VMS) && !defined(OS2)
- # define vim_handle_signal(x) 0
- #endif
- 
-
