ac6eba3
To: vim-dev@vim.org
ac6eba3
Subject: Patch 7.0.171 (extra)
ac6eba3
Fcc: outbox
ac6eba3
From: Bram Moolenaar <Bram@moolenaar.net>
ac6eba3
Mime-Version: 1.0
ac6eba3
Content-Type: text/plain; charset=ISO-8859-1
ac6eba3
Content-Transfer-Encoding: 8bit
ac6eba3
------------
ac6eba3
ac6eba3
Patch 7.0.171 (extra)
ac6eba3
Problem:    VMS: A file name with multiple paths is written in the wrong file.
ac6eba3
Solution:   Get the actually used file name. (Zoltan Arpadffy)
ac6eba3
	    Also add info to the :version command about compilation.
ac6eba3
Files:	    src/Make_vms.mms, src/buffer.c, src/os_unix.c, src/version.c
ac6eba3
ac6eba3
ac6eba3
*** ../vim-7.0.170/src/Make_vms.mms	Sun Apr 30 20:46:53 2006
ac6eba3
--- src/Make_vms.mms	Mon Sep  4 20:54:51 2006
ac6eba3
***************
ac6eba3
*** 2,8 ****
ac6eba3
  # Makefile for Vim on OpenVMS
ac6eba3
  #
ac6eba3
  # Maintainer:   Zoltan Arpadffy <arpadffy@polarhome.com>
ac6eba3
! # Last change:  2006 Apr 30
ac6eba3
  #
ac6eba3
  # This has script been tested on VMS 6.2 to 8.2 on DEC Alpha, VAX and IA64
ac6eba3
  # with MMS and MMK
ac6eba3
--- 2,8 ----
ac6eba3
  # Makefile for Vim on OpenVMS
ac6eba3
  #
ac6eba3
  # Maintainer:   Zoltan Arpadffy <arpadffy@polarhome.com>
ac6eba3
! # Last change:  2006 Sep 04
ac6eba3
  #
ac6eba3
  # This has script been tested on VMS 6.2 to 8.2 on DEC Alpha, VAX and IA64
ac6eba3
  # with MMS and MMK
ac6eba3
***************
ac6eba3
*** 13,19 ****
ac6eba3
  #
ac6eba3
  # Edit the lines in the Configuration section below for fine tuning.
ac6eba3
  #
ac6eba3
! # To build:    mms/descrip=Make_vms.mms
ac6eba3
  # To clean up: mms/descrip=Make_vms.mms clean
ac6eba3
  #
ac6eba3
  # Hints and detailed description could be found in INSTALLVMS.TXT file.
ac6eba3
--- 13,19 ----
ac6eba3
  #
ac6eba3
  # Edit the lines in the Configuration section below for fine tuning.
ac6eba3
  #
ac6eba3
! # To build:    mms/descrip=Make_vms.mms /ignore=warning
ac6eba3
  # To clean up: mms/descrip=Make_vms.mms clean
ac6eba3
  #
ac6eba3
  # Hints and detailed description could be found in INSTALLVMS.TXT file.
ac6eba3
***************
ac6eba3
*** 21,30 ****
ac6eba3
  ######################################################################
ac6eba3
  # Configuration section.
ac6eba3
  ######################################################################
ac6eba3
- # Platform selection
ac6eba3
- # Define this if you will use the VAX platform to build.
ac6eba3
- # VAX = YES
ac6eba3
- 
ac6eba3
  # VMS version
ac6eba3
  # Uncomment if you use VMS version 6.2 or older
ac6eba3
  # OLD_VMS = YES
ac6eba3
--- 21,26 ----
ac6eba3
***************
ac6eba3
*** 49,54 ****
ac6eba3
--- 45,51 ----
ac6eba3
  
ac6eba3
  # GUI with GTK
ac6eba3
  # If you have GTK installed you might want to enable this option.
ac6eba3
+ # NOTE: you will need to properly define GTK_DIR below
ac6eba3
  # GTK = YES
ac6eba3
  
ac6eba3
  # GUI/Motif with XPM
ac6eba3
***************
ac6eba3
*** 97,103 ****
ac6eba3
  
ac6eba3
  # Compiler setup
ac6eba3
  
ac6eba3
! .IFDEF VAX
ac6eba3
  .IFDEF DECC	     # VAX with DECC
ac6eba3
  CC_DEF  = cc # /decc # some system requires this switch
ac6eba3
  		     # but when it is not required /ver might fail
ac6eba3
--- 94,100 ----
ac6eba3
  
ac6eba3
  # Compiler setup
ac6eba3
  
ac6eba3
! .IFDEF MMSVAX
ac6eba3
  .IFDEF DECC	     # VAX with DECC
ac6eba3
  CC_DEF  = cc # /decc # some system requires this switch
ac6eba3
  		     # but when it is not required /ver might fail
ac6eba3
***************
ac6eba3
*** 165,172 ****
ac6eba3
  # NOTE: you need to set up your GTK_DIR (GTK root directory), because it is
ac6eba3
  # unique on every system - logicals are not accepted
ac6eba3
  # please note: directory should end with . in order to /trans=conc work
ac6eba3
! # Example: GTK_DIR  = $1$DGA104:[USERS.ZAY.WORK.GTK1210.]
ac6eba3
! GTK_DIR  = DKA0:[GTK1210.]
ac6eba3
  DEFS     = "HAVE_CONFIG_H","FEAT_GUI_GTK"
ac6eba3
  LIBS     = ,OS_VMS_GTK.OPT/OPT
ac6eba3
  GUI_FLAG = /name=(as_is,short)/float=ieee/ieee=denorm
ac6eba3
--- 162,169 ----
ac6eba3
  # NOTE: you need to set up your GTK_DIR (GTK root directory), because it is
ac6eba3
  # unique on every system - logicals are not accepted
ac6eba3
  # please note: directory should end with . in order to /trans=conc work
ac6eba3
! # This value for GTK_DIR is an example.
ac6eba3
! GTK_DIR  = $1$DGA104:[USERS.ZAY.WORK.GTK1210.]
ac6eba3
  DEFS     = "HAVE_CONFIG_H","FEAT_GUI_GTK"
ac6eba3
  LIBS     = ,OS_VMS_GTK.OPT/OPT
ac6eba3
  GUI_FLAG = /name=(as_is,short)/float=ieee/ieee=denorm
ac6eba3
***************
ac6eba3
*** 274,280 ****
ac6eba3
  # Please, do not change anything below without programming experience.
ac6eba3
  ######################################################################
ac6eba3
  
ac6eba3
- 
ac6eba3
  MODEL_DEF = "FEAT_$(MODEL)",
ac6eba3
  
ac6eba3
  # These go into pathdef.c
ac6eba3
--- 271,276 ----
ac6eba3
***************
ac6eba3
*** 360,366 ****
ac6eba3
  	-@ write pd "char_u *all_lflags = (char_u *)""$(LD_DEF)$(LDFLAGS) /exe=$(TARGET) *.OBJ $(ALL_LIBS)"";"
ac6eba3
  	-@ write pd "char_u *compiler_version = (char_u *) ""''CC_VER'"";"
ac6eba3
  	-@ write pd "char_u *compiled_user = (char_u *) "$(VIMUSER)";"
ac6eba3
! 	-@ write pd "char_u *compiled_sys = (char_u *) "$(VIMHOST)";"
ac6eba3
  	-@ close pd
ac6eba3
  
ac6eba3
  if_perl.c : if_perl.xs
ac6eba3
--- 356,363 ----
ac6eba3
  	-@ write pd "char_u *all_lflags = (char_u *)""$(LD_DEF)$(LDFLAGS) /exe=$(TARGET) *.OBJ $(ALL_LIBS)"";"
ac6eba3
  	-@ write pd "char_u *compiler_version = (char_u *) ""''CC_VER'"";"
ac6eba3
  	-@ write pd "char_u *compiled_user = (char_u *) "$(VIMUSER)";"
ac6eba3
! 	-@ write pd "char_u *compiled_sys  = (char_u *) "$(VIMHOST)";"
ac6eba3
! 	-@ write pd "char_u *compiled_arch = (char_u *) ""$(MMSARCH_NAME)"";"
ac6eba3
  	-@ close pd
ac6eba3
  
ac6eba3
  if_perl.c : if_perl.xs
ac6eba3
*** ../vim-7.0.170/src/buffer.c	Tue Nov  7 22:41:37 2006
ac6eba3
--- src/buffer.c	Tue Nov  7 21:08:02 2006
ac6eba3
***************
ac6eba3
*** 4145,4155 ****
ac6eba3
      /*
ac6eba3
       * Force expanding the path always for Unix, because symbolic links may
ac6eba3
       * mess up the full path name, even though it starts with a '/'.
ac6eba3
       * Also expand when there is ".." in the file name, try to remove it,
ac6eba3
       * because "c:/src/../README" is equal to "c:/README".
ac6eba3
       * For MS-Windows also expand names like "longna~1" to "longname".
ac6eba3
       */
ac6eba3
! #ifdef UNIX
ac6eba3
      return FullName_save(fname, TRUE);
ac6eba3
  #else
ac6eba3
      if (!vim_isAbsName(fname) || strstr((char *)fname, "..") != NULL
ac6eba3
--- 4145,4157 ----
ac6eba3
      /*
ac6eba3
       * Force expanding the path always for Unix, because symbolic links may
ac6eba3
       * mess up the full path name, even though it starts with a '/'.
ac6eba3
+      * Also expand always for VMS, it may have alternate paths that need to be
ac6eba3
+      * resolved.
ac6eba3
       * Also expand when there is ".." in the file name, try to remove it,
ac6eba3
       * because "c:/src/../README" is equal to "c:/README".
ac6eba3
       * For MS-Windows also expand names like "longna~1" to "longname".
ac6eba3
       */
ac6eba3
! #if defined(UNIX) || defined(VMS)
ac6eba3
      return FullName_save(fname, TRUE);
ac6eba3
  #else
ac6eba3
      if (!vim_isAbsName(fname) || strstr((char *)fname, "..") != NULL
ac6eba3
*** ../vim-7.0.170/src/os_unix.c	Tue Aug 29 17:28:56 2006
ac6eba3
--- src/os_unix.c	Tue Nov 28 17:38:54 2006
ac6eba3
***************
ac6eba3
*** 2202,2208 ****
ac6eba3
  #endif
ac6eba3
  
ac6eba3
  /*
ac6eba3
!  * Get absolute file name into buffer 'buf' of length 'len' bytes.
ac6eba3
   *
ac6eba3
   * return FAIL for failure, OK for success
ac6eba3
   */
ac6eba3
--- 2202,2208 ----
ac6eba3
  #endif
ac6eba3
  
ac6eba3
  /*
ac6eba3
!  * Get absolute file name into "buf[len]".
ac6eba3
   *
ac6eba3
   * return FAIL for failure, OK for success
ac6eba3
   */
ac6eba3
***************
ac6eba3
*** 2212,2233 ****
ac6eba3
      int		len;
ac6eba3
      int		force;		/* also expand when already absolute path */
ac6eba3
  {
ac6eba3
      int		l;
ac6eba3
! #ifdef OS2
ac6eba3
      int		only_drive;	/* file name is only a drive letter */
ac6eba3
! #endif
ac6eba3
! #ifdef HAVE_FCHDIR
ac6eba3
      int		fd = -1;
ac6eba3
      static int	dont_fchdir = FALSE;	/* TRUE when fchdir() doesn't work */
ac6eba3
! #endif
ac6eba3
      char_u	olddir[MAXPATHL];
ac6eba3
      char_u	*p;
ac6eba3
      int		retval = OK;
ac6eba3
  
ac6eba3
- #ifdef VMS
ac6eba3
-     fname = vms_fixfilename(fname);
ac6eba3
- #endif
ac6eba3
- 
ac6eba3
      /* expand it if forced or not an absolute path */
ac6eba3
      if (force || !mch_isFullName(fname))
ac6eba3
      {
ac6eba3
--- 2212,2261 ----
ac6eba3
      int		len;
ac6eba3
      int		force;		/* also expand when already absolute path */
ac6eba3
  {
ac6eba3
+ #ifdef VMS
ac6eba3
+     /*
ac6eba3
+      * VMS does this in a completely different way.
ac6eba3
+      *
ac6eba3
+      * By default a file found in a complex path is written to the first
ac6eba3
+      * directory in the path and not to the original directory.  This
ac6eba3
+      * behaviour should be avoided for the existing files and we need to find
ac6eba3
+      * the exact path of the edited file.
ac6eba3
+      */
ac6eba3
+     if (force || !mch_isFullName(fname))
ac6eba3
+     {
ac6eba3
+ 	char_u	*fixed_fname = vms_fixfilename(fname);
ac6eba3
+ 	int	fd = mch_open((char *)fixed_fname, O_RDONLY | O_EXTRA, 0);
ac6eba3
+ 
ac6eba3
+ 	if (fd > 0)
ac6eba3
+ 	{
ac6eba3
+ 	    char nbuf[MAXNAMLEN];
ac6eba3
+ 
ac6eba3
+ 	    /* File exists, use getname() to get the real name. */
ac6eba3
+ 	    if (getname(fd, nbuf))
ac6eba3
+ 		vim_strncpy(fixed_fname, (char_u *)nbuf, (size_t)(len - 1));
ac6eba3
+ 	    close(fd);
ac6eba3
+ 	}
ac6eba3
+ 
ac6eba3
+ 	if (STRLEN(fixed_fname) >= len)
ac6eba3
+ 	    return FAIL;
ac6eba3
+ 
ac6eba3
+ 	STRCPY(buf, fixed_fname);
ac6eba3
+     }
ac6eba3
+ 
ac6eba3
+ #else /* not VMS */
ac6eba3
+ 
ac6eba3
      int		l;
ac6eba3
! # ifdef OS2
ac6eba3
      int		only_drive;	/* file name is only a drive letter */
ac6eba3
! # endif
ac6eba3
! # ifdef HAVE_FCHDIR
ac6eba3
      int		fd = -1;
ac6eba3
      static int	dont_fchdir = FALSE;	/* TRUE when fchdir() doesn't work */
ac6eba3
! # endif
ac6eba3
      char_u	olddir[MAXPATHL];
ac6eba3
      char_u	*p;
ac6eba3
      int		retval = OK;
ac6eba3
  
ac6eba3
      /* expand it if forced or not an absolute path */
ac6eba3
      if (force || !mch_isFullName(fname))
ac6eba3
      {
ac6eba3
***************
ac6eba3
*** 2236,2251 ****
ac6eba3
  	 * and then do the getwd() (and get back to where we were).
ac6eba3
  	 * This will get the correct path name with "../" things.
ac6eba3
  	 */
ac6eba3
! #ifdef OS2
ac6eba3
  	only_drive = 0;
ac6eba3
  	if (((p = vim_strrchr(fname, '/')) != NULL)
ac6eba3
  		|| ((p = vim_strrchr(fname, '\\')) != NULL)
ac6eba3
  		|| (((p = vim_strchr(fname,  ':')) != NULL) && ++only_drive))
ac6eba3
! #else
ac6eba3
  	if ((p = vim_strrchr(fname, '/')) != NULL)
ac6eba3
! #endif
ac6eba3
  	{
ac6eba3
! #ifdef HAVE_FCHDIR
ac6eba3
  	    /*
ac6eba3
  	     * Use fchdir() if possible, it's said to be faster and more
ac6eba3
  	     * reliable.  But on SunOS 4 it might not work.  Check this by
ac6eba3
--- 2264,2279 ----
ac6eba3
  	 * and then do the getwd() (and get back to where we were).
ac6eba3
  	 * This will get the correct path name with "../" things.
ac6eba3
  	 */
ac6eba3
! # ifdef OS2
ac6eba3
  	only_drive = 0;
ac6eba3
  	if (((p = vim_strrchr(fname, '/')) != NULL)
ac6eba3
  		|| ((p = vim_strrchr(fname, '\\')) != NULL)
ac6eba3
  		|| (((p = vim_strchr(fname,  ':')) != NULL) && ++only_drive))
ac6eba3
! # else
ac6eba3
  	if ((p = vim_strrchr(fname, '/')) != NULL)
ac6eba3
! # endif
ac6eba3
  	{
ac6eba3
! # ifdef HAVE_FCHDIR
ac6eba3
  	    /*
ac6eba3
  	     * Use fchdir() if possible, it's said to be faster and more
ac6eba3
  	     * reliable.  But on SunOS 4 it might not work.  Check this by
ac6eba3
***************
ac6eba3
*** 2261,2274 ****
ac6eba3
  		    dont_fchdir = TRUE;	    /* don't try again */
ac6eba3
  		}
ac6eba3
  	    }
ac6eba3
! #endif
ac6eba3
  
ac6eba3
  	    /* Only change directory when we are sure we can return to where
ac6eba3
  	     * we are now.  After doing "su" chdir(".") might not work. */
ac6eba3
  	    if (
ac6eba3
! #ifdef HAVE_FCHDIR
ac6eba3
  		fd < 0 &&
ac6eba3
! #endif
ac6eba3
  			(mch_dirname(olddir, MAXPATHL) == FAIL
ac6eba3
  					   || mch_chdir((char *)olddir) != 0))
ac6eba3
  	    {
ac6eba3
--- 2289,2302 ----
ac6eba3
  		    dont_fchdir = TRUE;	    /* don't try again */
ac6eba3
  		}
ac6eba3
  	    }
ac6eba3
! # endif
ac6eba3
  
ac6eba3
  	    /* Only change directory when we are sure we can return to where
ac6eba3
  	     * we are now.  After doing "su" chdir(".") might not work. */
ac6eba3
  	    if (
ac6eba3
! # ifdef HAVE_FCHDIR
ac6eba3
  		fd < 0 &&
ac6eba3
! # endif
ac6eba3
  			(mch_dirname(olddir, MAXPATHL) == FAIL
ac6eba3
  					   || mch_chdir((char *)olddir) != 0))
ac6eba3
  	    {
ac6eba3
***************
ac6eba3
*** 2277,2283 ****
ac6eba3
  	    }
ac6eba3
  	    else
ac6eba3
  	    {
ac6eba3
! #ifdef OS2
ac6eba3
  		/*
ac6eba3
  		 * compensate for case where ':' from "D:" was the only
ac6eba3
  		 * path separator detected in the file name; the _next_
ac6eba3
--- 2305,2311 ----
ac6eba3
  	    }
ac6eba3
  	    else
ac6eba3
  	    {
ac6eba3
! # ifdef OS2
ac6eba3
  		/*
ac6eba3
  		 * compensate for case where ':' from "D:" was the only
ac6eba3
  		 * path separator detected in the file name; the _next_
ac6eba3
***************
ac6eba3
*** 2285,2291 ****
ac6eba3
  		 */
ac6eba3
  		if (only_drive)
ac6eba3
  		    p++;
ac6eba3
! #endif
ac6eba3
  		/* The directory is copied into buf[], to be able to remove
ac6eba3
  		 * the file name without changing it (could be a string in
ac6eba3
  		 * read-only memory) */
ac6eba3
--- 2313,2319 ----
ac6eba3
  		 */
ac6eba3
  		if (only_drive)
ac6eba3
  		    p++;
ac6eba3
! # endif
ac6eba3
  		/* The directory is copied into buf[], to be able to remove
ac6eba3
  		 * the file name without changing it (could be a string in
ac6eba3
  		 * read-only memory) */
ac6eba3
***************
ac6eba3
*** 2300,2313 ****
ac6eba3
  			fname = p + 1;
ac6eba3
  		    *buf = NUL;
ac6eba3
  		}
ac6eba3
! #ifdef OS2
ac6eba3
  		if (only_drive)
ac6eba3
  		{
ac6eba3
  		    p--;
ac6eba3
  		    if (retval != FAIL)
ac6eba3
  			fname--;
ac6eba3
  		}
ac6eba3
! #endif
ac6eba3
  	    }
ac6eba3
  	}
ac6eba3
  	if (mch_dirname(buf, len) == FAIL)
ac6eba3
--- 2328,2341 ----
ac6eba3
  			fname = p + 1;
ac6eba3
  		    *buf = NUL;
ac6eba3
  		}
ac6eba3
! # ifdef OS2
ac6eba3
  		if (only_drive)
ac6eba3
  		{
ac6eba3
  		    p--;
ac6eba3
  		    if (retval != FAIL)
ac6eba3
  			fname--;
ac6eba3
  		}
ac6eba3
! # endif
ac6eba3
  	    }
ac6eba3
  	}
ac6eba3
  	if (mch_dirname(buf, len) == FAIL)
ac6eba3
***************
ac6eba3
*** 2317,2330 ****
ac6eba3
  	}
ac6eba3
  	if (p != NULL)
ac6eba3
  	{
ac6eba3
! #ifdef HAVE_FCHDIR
ac6eba3
  	    if (fd >= 0)
ac6eba3
  	    {
ac6eba3
  		l = fchdir(fd);
ac6eba3
  		close(fd);
ac6eba3
  	    }
ac6eba3
  	    else
ac6eba3
! #endif
ac6eba3
  		l = mch_chdir((char *)olddir);
ac6eba3
  	    if (l != 0)
ac6eba3
  		EMSG(_(e_prev_dir));
ac6eba3
--- 2345,2358 ----
ac6eba3
  	}
ac6eba3
  	if (p != NULL)
ac6eba3
  	{
ac6eba3
! # ifdef HAVE_FCHDIR
ac6eba3
  	    if (fd >= 0)
ac6eba3
  	    {
ac6eba3
  		l = fchdir(fd);
ac6eba3
  		close(fd);
ac6eba3
  	    }
ac6eba3
  	    else
ac6eba3
! # endif
ac6eba3
  		l = mch_chdir((char *)olddir);
ac6eba3
  	    if (l != 0)
ac6eba3
  		EMSG(_(e_prev_dir));
ac6eba3
***************
ac6eba3
*** 2333,2347 ****
ac6eba3
  	l = STRLEN(buf);
ac6eba3
  	if (l >= len)
ac6eba3
  	    retval = FAIL;
ac6eba3
- #ifndef VMS
ac6eba3
  	else
ac6eba3
  	{
ac6eba3
  	    if (l > 0 && buf[l - 1] != '/' && *fname != NUL
ac6eba3
  						   && STRCMP(fname, ".") != 0)
ac6eba3
  		STRCAT(buf, "/");
ac6eba3
  	}
ac6eba3
- #endif
ac6eba3
      }
ac6eba3
      /* Catch file names which are too long. */
ac6eba3
      if (retval == FAIL || STRLEN(buf) + STRLEN(fname) >= len)
ac6eba3
  	return FAIL;
ac6eba3
--- 2361,2374 ----
ac6eba3
  	l = STRLEN(buf);
ac6eba3
  	if (l >= len)
ac6eba3
  	    retval = FAIL;
ac6eba3
  	else
ac6eba3
  	{
ac6eba3
  	    if (l > 0 && buf[l - 1] != '/' && *fname != NUL
ac6eba3
  						   && STRCMP(fname, ".") != 0)
ac6eba3
  		STRCAT(buf, "/");
ac6eba3
  	}
ac6eba3
      }
ac6eba3
+ 
ac6eba3
      /* Catch file names which are too long. */
ac6eba3
      if (retval == FAIL || STRLEN(buf) + STRLEN(fname) >= len)
ac6eba3
  	return FAIL;
ac6eba3
***************
ac6eba3
*** 2349,2354 ****
ac6eba3
--- 2376,2383 ----
ac6eba3
      /* Do not append ".", "/dir/." is equal to "/dir". */
ac6eba3
      if (STRCMP(fname, ".") != 0)
ac6eba3
  	STRCAT(buf, fname);
ac6eba3
+ 
ac6eba3
+ #endif /* VMS */
ac6eba3
  
ac6eba3
      return OK;
ac6eba3
  }
ac6eba3
*** ../vim-7.0.170/src/version.c	Tue Nov 28 17:18:03 2006
ac6eba3
--- src/version.c	Tue Nov 28 17:35:05 2006
ac6eba3
***************
ac6eba3
*** 1113,1118 ****
ac6eba3
--- 1115,1128 ----
ac6eba3
  #endif
ac6eba3
  #ifdef VMS
ac6eba3
      MSG_PUTS("\nOpenVMS version");
ac6eba3
+ # ifdef HAVE_PATHDEF
ac6eba3
+     if (*compiled_arch != NUL)
ac6eba3
+     {
ac6eba3
+ 	MSG_PUTS(" - ");
ac6eba3
+ 	MSG_PUTS(compiled_arch);
ac6eba3
+     }
ac6eba3
+ # endif
ac6eba3
+ 
ac6eba3
  #endif
ac6eba3
  
ac6eba3
      /* Print the list of patch numbers if there is at least one. */
ac6eba3
*** ../vim-7.0.170/src/version.c	Tue Nov 28 17:18:03 2006
ac6eba3
--- src/version.c	Tue Nov 28 17:35:05 2006
ac6eba3
***************
ac6eba3
*** 668,669 ****
ac6eba3
--- 668,671 ----
ac6eba3
  {   /* Add new patch number below this line */
ac6eba3
+ /**/
ac6eba3
+     171,
ac6eba3
  /**/
ac6eba3
ac6eba3
-- 
ac6eba3
GUARD #1:  What, ridden on a horse?
ac6eba3
ARTHUR:    Yes!
ac6eba3
GUARD #1:  You're using coconuts!
ac6eba3
ARTHUR:    What?
ac6eba3
GUARD #1:  You've got two empty halves of coconut and you're bangin' 'em
ac6eba3
           together.
ac6eba3
                                  The Quest for the Holy Grail (Monty Python)
ac6eba3
ac6eba3
 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
ac6eba3
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
ac6eba3
\\\        download, build and distribute -- http://www.A-A-P.org        ///
ac6eba3
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///