diff --git a/7.3.639 b/7.3.639
new file mode 100644
index 0000000..359dc6d
--- /dev/null
+++ b/7.3.639
@@ -0,0 +1,846 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.639
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.639
+Problem:    It's not easy to build Vim on Windows with XPM support.
+Solution:   Include the required files, they are quite small.  Update the
+	    MSVC makefile to use them.  Binary files are in the next patch.
+	    (Sergey Khorev)
+Files:	    src/xpm/COPYRIGHT, src/xpm/README.txt, src/xpm/include/simx.h,
+	    src/xpm/include/xpm.h, src/Make_mvc.mak, src/bigvim.bat,
+	    src/bigvim64.bat, Filelist
+
+
+*** ../vim-7.3.638/src/xpm/COPYRIGHT	1970-01-01 01:00:00.000000000 +0100
+--- src/xpm/COPYRIGHT	1998-03-19 23:51:00.000000000 +0100
+***************
+*** 0 ****
+--- 1,31 ----
++ /*
++  * Copyright (C) 1989-95 GROUPE BULL
++  *
++  * Permission is hereby granted, free of charge, to any person obtaining a copy
++  * of this software and associated documentation files (the "Software"), to
++  * deal in the Software without restriction, including without limitation the
++  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
++  * sell copies of the Software, and to permit persons to whom the Software is
++  * furnished to do so, subject to the following conditions:
++  *
++  * The above copyright notice and this permission notice shall be included in
++  * all copies or substantial portions of the Software.
++  *
++  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++  * GROUPE BULL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
++  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
++  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++  *
++  * Except as contained in this notice, the name of GROUPE BULL shall not be
++  * used in advertising or otherwise to promote the sale, use or other dealings
++  * in this Software without prior written authorization from GROUPE BULL.
++  */
++ 
++ Arnaud LE HORS      BULL Research FRANCE -- Koala Project 
++                     (XPM - X PixMap format version 2 & 3)
++     Internet:       lehors@sophia.inria.fr
++ Surface Mail:       Arnaud LE HORS, INRIA - Sophia Antipolis, 
++                     2004, route des Lucioles, 06565 Valbonne Cedex -- FRANCE
++  Voice phone:       (33) 93.65.77.71, Fax: (33) 93 65 77 66, Telex: 97 00 50 F
+*** ../vim-7.3.638/src/xpm/README.txt	1970-01-01 01:00:00.000000000 +0100
+--- src/xpm/README.txt	2012-08-29 13:29:17.000000000 +0200
+***************
+*** 0 ****
+--- 1,23 ----
++ This is XPM library compiled for Windows which is intended for use with Vim
++ 'signs' feature.
++ 
++ Libraries in x86 directory were compiled with MSVC6 and MinGW. Proposed
++ commands to compile Vim are:
++ 
++ Any version of MSVC starting from version 6.0:
++ nmake -f Make_mvc.mak GUI=yes CSCOPE=yes NETBEANS=yes XPM=e:\hg\xpm\x86
++ 
++ MinGW:
++ mingw32-make -f Make_ming.mak GUI=yes CSCOPE=yes XPM=e:/hg/xpm/x86
++ 
++ Microsoft Visual C++ on x64 (tested with versions 2008 and 2010):
++ nmake -f Make_mvc.mak GUI=yes CSCOPE=yes XPM=E:\HG\xpm\x64
++ 
++ To test, open some file in Vim and execute commands below:
++ :exe 'sign define vimxpm icon='.$VIMRUNTIME.'\\vim32x32.xpm'
++ :exe 'sign place 1 line=1 name=vimxpm file='.expand('%:p')
++ 
++ 
++ See COPYRIGHT for XPM licence.
++ 
++ If you have questions please email sergey.khorev@gmail.com.
+*** ../vim-7.3.638/src/xpm/include/simx.h	1970-01-01 01:00:00.000000000 +0100
+--- src/xpm/include/simx.h	1998-03-19 23:51:00.000000000 +0100
+***************
+*** 0 ****
+--- 1,139 ----
++ /*
++  * Copyright (C) 1989-95 GROUPE BULL
++  *
++  * Permission is hereby granted, free of charge, to any person obtaining a copy
++  * of this software and associated documentation files (the "Software"), to
++  * deal in the Software without restriction, including without limitation the
++  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
++  * sell copies of the Software, and to permit persons to whom the Software is
++  * furnished to do so, subject to the following conditions:
++  *
++  * The above copyright notice and this permission notice shall be included in
++  * all copies or substantial portions of the Software.
++  *
++  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++  * GROUPE BULL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
++  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
++  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++  *
++  * Except as contained in this notice, the name of GROUPE BULL shall not be
++  * used in advertising or otherwise to promote the sale, use or other dealings
++  * in this Software without prior written authorization from GROUPE BULL.
++  */
++ 
++ /*****************************************************************************\
++ * simx.h: 0.1a                                                                *
++ *                                                                             *
++ * This emulates some Xlib functionality for MSW. It's not a general solution, *
++ * it is close related to XPM-lib. It is only intended to satisfy what is need *
++ * there. Thus allowing to read XPM files under MS windows.                    *
++ *                                                                             *
++ * Developed by HeDu 3/94 (hedu@cul-ipn.uni-kiel.de)                           *
++ \*****************************************************************************/
++ 
++ 
++ #ifndef _SIMX_H
++ #define _SIMX_H
++ 
++ #ifdef FOR_MSW
++ 
++ #include "windows.h"			/* MS windows GDI types */
++ 
++ /*
++  * minimal portability layer between ansi and KR C
++  */
++ /* this comes from xpm.h, and is here again, to avoid complicated
++     includes, since this is included from xpm.h */
++ /* these defines get undefed at the end of this file */
++ #if __STDC__ || defined(__cplusplus) || defined(c_plusplus)
++  /* ANSI || C++ */
++ #define FUNC(f, t, p) extern t f p
++ #define LFUNC(f, t, p) static t f p
++ #else /* k&R */
++ #define FUNC(f, t, p) extern t f()
++ #define LFUNC(f, t, p) static t f()
++ #endif
++ 
++ 
++ FUNC(boundCheckingMalloc, void *, (long s));
++ FUNC(boundCheckingCalloc, void *, (long num, long s));
++ FUNC(boundCheckingRealloc, void *, (void *p, long s));
++ 
++ /* define MSW types for X window types,
++    I don't know much about MSW, but the following defines do the job */
++ 
++ typedef HDC Display;			/* this should be similar */
++ typedef void *Screen;			/* not used */
++ typedef void *Visual;			/* not used yet, is for GRAY, COLOR,
++ 					 * MONO */
++ 
++ typedef void *Colormap;			/* should be COLORPALETTE, not done
++ 					 * yet */
++ 
++ typedef COLORREF Pixel;
++ 
++ #define PIXEL_ALREADY_TYPEDEFED		/* to let xpm.h know about it */
++ 
++ typedef struct {
++     Pixel pixel;
++     BYTE red, green, blue;
++ }      XColor;
++ 
++ typedef struct {
++     HBITMAP bitmap;
++     unsigned int width;
++     unsigned int height;
++     unsigned int depth;
++ }      XImage;
++ 
++ #if defined(__cplusplus) || defined(c_plusplus)
++ extern "C" {
++ #endif
++ /* some replacements for X... functions */
++ 
++ /* XDefaultXXX */
++     FUNC(XDefaultVisual, Visual *, (Display *display, Screen *screen));
++     FUNC(XDefaultScreen, Screen *, (Display *d));
++     FUNC(XDefaultColormap, Colormap *, (Display *display, Screen *screen));
++     FUNC(XDefaultDepth, int, (Display *d, Screen *s));
++ 
++ /* color related */
++     FUNC(XParseColor, int, (Display *, Colormap *, char *, XColor *));
++     FUNC(XAllocColor, int, (Display *, Colormap *, XColor *));
++     FUNC(XQueryColors, void, (Display *display, Colormap *colormap,
++ 			      XColor *xcolors, int ncolors));
++     FUNC(XFreeColors, int, (Display *d, Colormap cmap,
++ 			    unsigned long pixels[],
++ 			    int npixels, unsigned long planes));
++ /* XImage */
++     FUNC(XCreateImage, XImage *, (Display *, Visual *, int depth, int format,
++ 				  int x, int y, int width, int height,
++ 				  int pad, int foo));
++ 
++ /* free and destroy bitmap */
++     FUNC(XDestroyImage, void /* ? */ , (XImage *));
++ /* free only, bitmap remains */
++     FUNC(XImageFree, void, (XImage *));
++ #if defined(__cplusplus) || defined(c_plusplus)
++ } /* end of extern "C" */
++ #endif /* cplusplus */
++ 
++ #define ZPixmap 1			/* not really used */
++ #define XYBitmap 1			/* not really used */
++ 
++ #ifndef True
++ #define True 1
++ #define False 0
++ #endif
++ #ifndef Bool
++ typedef BOOL Bool;		/* take MSW bool */
++ #endif
++ /* make these local here, simx.c gets the same from xpm.h */
++ #undef LFUNC
++ #undef FUNC
++ 
++ #endif /* def FOR_MSW */
++ 
++ #endif /* _SIMX_H */
+*** ../vim-7.3.638/src/xpm/include/xpm.h	1970-01-01 01:00:00.000000000 +0100
+--- src/xpm/include/xpm.h	1998-03-19 23:51:00.000000000 +0100
+***************
+*** 0 ****
+--- 1,501 ----
++ /*
++  * Copyright (C) 1989-95 GROUPE BULL
++  *
++  * Permission is hereby granted, free of charge, to any person obtaining a copy
++  * of this software and associated documentation files (the "Software"), to
++  * deal in the Software without restriction, including without limitation the
++  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
++  * sell copies of the Software, and to permit persons to whom the Software is
++  * furnished to do so, subject to the following conditions:
++  *
++  * The above copyright notice and this permission notice shall be included in
++  * all copies or substantial portions of the Software.
++  *
++  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++  * GROUPE BULL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
++  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
++  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++  *
++  * Except as contained in this notice, the name of GROUPE BULL shall not be
++  * used in advertising or otherwise to promote the sale, use or other dealings
++  * in this Software without prior written authorization from GROUPE BULL.
++  */
++ 
++ /*****************************************************************************\
++ * xpm.h:                                                                      *
++ *                                                                             *
++ *  XPM library                                                                *
++ *  Include file                                                               *
++ *                                                                             *
++ *  Developed by Arnaud Le Hors                                                *
++ \*****************************************************************************/
++ 
++ /*
++  * The code related to FOR_MSW has been added by
++  * HeDu (hedu@cul-ipn.uni-kiel.de) 4/94
++  */
++ 
++ /*
++  * The code related to AMIGA has been added by
++  * Lorens Younes (d93-hyo@nada.kth.se) 4/96
++  */
++ 
++ #ifndef XPM_h
++ #define XPM_h
++ 
++ /*
++  * first some identification numbers:
++  * the version and revision numbers are determined with the following rule:
++  * SO Major number = LIB minor version number.
++  * SO Minor number = LIB sub-minor version number.
++  * e.g: Xpm version 3.2f
++  *      we forget the 3 which is the format number, 2 gives 2, and f gives 6.
++  *      thus we have XpmVersion = 2 and XpmRevision = 6
++  *      which gives  SOXPMLIBREV = 2.6
++  *
++  * Then the XpmIncludeVersion number is built from these numbers.
++  */
++ #define XpmFormat 3
++ #define XpmVersion 4
++ #define XpmRevision 11
++ #define XpmIncludeVersion ((XpmFormat * 100 + XpmVersion) * 100 + XpmRevision)
++ 
++ #ifndef XPM_NUMBERS
++ 
++ #ifdef FOR_MSW
++ # define SYSV			/* uses memcpy string.h etc. */
++ # include <malloc.h>
++ # include "simx.h"		/* defines some X stuff using MSW types */
++ #define NEED_STRCASECMP		/* at least for MSVC++ */
++ #else /* FOR_MSW */
++ # ifdef AMIGA
++ #  include "amigax.h"
++ # else /* not AMIGA */
++ #  include <X11/Xlib.h>
++ #  include <X11/Xutil.h>
++ # endif /* not AMIGA */
++ #endif /* FOR_MSW */
++ 
++ /* let's define Pixel if it is not done yet */
++ #if ! defined(_XtIntrinsic_h) && ! defined(PIXEL_ALREADY_TYPEDEFED)
++ typedef unsigned long Pixel;	/* Index into colormap */
++ # define PIXEL_ALREADY_TYPEDEFED
++ #endif
++ 
++ /* make sure we know whether function prototypes are needed or not */
++ #ifndef NeedFunctionPrototypes
++ # if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)
++ #  define NeedFunctionPrototypes 1
++ # else
++ #  define NeedFunctionPrototypes 0
++ # endif
++ #endif
++ 
++ 
++ /* Return ErrorStatus codes:
++  * null     if full success
++  * positive if partial success
++  * negative if failure
++  */
++ 
++ #define XpmColorError    1
++ #define XpmSuccess       0
++ #define XpmOpenFailed   -1
++ #define XpmFileInvalid  -2
++ #define XpmNoMemory     -3
++ #define XpmColorFailed  -4
++ 
++ typedef struct {
++     char *name;			/* Symbolic color name */
++     char *value;		/* Color value */
++     Pixel pixel;		/* Color pixel */
++ }      XpmColorSymbol;
++ 
++ typedef struct {
++     char *name;			/* name of the extension */
++     unsigned int nlines;	/* number of lines in this extension */
++     char **lines;		/* pointer to the extension array of strings */
++ }      XpmExtension;
++ 
++ typedef struct {
++     char *string;		/* characters string */
++     char *symbolic;		/* symbolic name */
++     char *m_color;		/* monochrom default */
++     char *g4_color;		/* 4 level grayscale default */
++     char *g_color;		/* other level grayscale default */
++     char *c_color;		/* color default */
++ }      XpmColor;
++ 
++ typedef struct {
++     unsigned int width;		/* image width */
++     unsigned int height;	/* image height */
++     unsigned int cpp;		/* number of characters per pixel */
++     unsigned int ncolors;	/* number of colors */
++     XpmColor *colorTable;	/* list of related colors */
++     unsigned int *data;		/* image data */
++ }      XpmImage;
++ 
++ typedef struct {
++     unsigned long valuemask;	/* Specifies which attributes are defined */
++     char *hints_cmt;		/* Comment of the hints section */
++     char *colors_cmt;		/* Comment of the colors section */
++     char *pixels_cmt;		/* Comment of the pixels section */
++     unsigned int x_hotspot;	/* Returns the x hotspot's coordinate */
++     unsigned int y_hotspot;	/* Returns the y hotspot's coordinate */
++     unsigned int nextensions;	/* number of extensions */
++     XpmExtension *extensions;	/* pointer to array of extensions */
++ }      XpmInfo;
++ 
++ typedef int (*XpmAllocColorFunc)(
++ #if NeedFunctionPrototypes
++     Display*			/* display */,
++     Colormap			/* colormap */,
++     char*			/* colorname */,
++     XColor*			/* xcolor */,
++     void*			/* closure */
++ #endif
++ );
++ 
++ typedef int (*XpmFreeColorsFunc)(
++ #if NeedFunctionPrototypes
++     Display*			/* display */,
++     Colormap			/* colormap */,
++     Pixel*			/* pixels */,
++     int				/* npixels */,
++     void*			/* closure */
++ #endif
++ );
++ 
++ typedef struct {
++     unsigned long valuemask;		/* Specifies which attributes are
++ 					   defined */
++ 
++     Visual *visual;			/* Specifies the visual to use */
++     Colormap colormap;			/* Specifies the colormap to use */
++     unsigned int depth;			/* Specifies the depth */
++     unsigned int width;			/* Returns the width of the created
++ 					   pixmap */
++     unsigned int height;		/* Returns the height of the created
++ 					   pixmap */
++     unsigned int x_hotspot;		/* Returns the x hotspot's
++ 					   coordinate */
++     unsigned int y_hotspot;		/* Returns the y hotspot's
++ 					   coordinate */
++     unsigned int cpp;			/* Specifies the number of char per
++ 					   pixel */
++     Pixel *pixels;			/* List of used color pixels */
++     unsigned int npixels;		/* Number of used pixels */
++     XpmColorSymbol *colorsymbols;	/* List of color symbols to override */
++     unsigned int numsymbols;		/* Number of symbols */
++     char *rgb_fname;			/* RGB text file name */
++     unsigned int nextensions;		/* Number of extensions */
++     XpmExtension *extensions;		/* List of extensions */
++ 
++     unsigned int ncolors;               /* Number of colors */
++     XpmColor *colorTable;               /* List of colors */
++ /* 3.2 backward compatibility code */
++     char *hints_cmt;                    /* Comment of the hints section */
++     char *colors_cmt;                   /* Comment of the colors section */
++     char *pixels_cmt;                   /* Comment of the pixels section */
++ /* end 3.2 bc */
++     unsigned int mask_pixel;            /* Color table index of transparent
++                                            color */
++ 
++     /* Color Allocation Directives */
++     Bool exactColors;			/* Only use exact colors for visual */
++     unsigned int closeness;		/* Allowable RGB deviation */
++     unsigned int red_closeness;		/* Allowable red deviation */
++     unsigned int green_closeness;	/* Allowable green deviation */
++     unsigned int blue_closeness;	/* Allowable blue deviation */
++     int color_key;			/* Use colors from this color set */
++ 
++     Pixel *alloc_pixels;		/* Returns the list of alloc'ed color
++ 					   pixels */
++     int nalloc_pixels;			/* Returns the number of alloc'ed
++ 					   color pixels */
++ 
++     Bool alloc_close_colors;    	/* Specify whether close colors should
++ 					   be allocated using XAllocColor
++ 					   or not */
++     int bitmap_format;			/* Specify the format of 1bit depth
++ 					   images: ZPixmap or XYBitmap */
++ 
++     /* Color functions */
++     XpmAllocColorFunc alloc_color;	/* Application color allocator */
++     XpmFreeColorsFunc free_colors;	/* Application color de-allocator */
++     void *color_closure;		/* Application private data to pass to
++ 					   alloc_color and free_colors */
++ 
++ }      XpmAttributes;
++ 
++ /* XpmAttributes value masks bits */
++ #define XpmVisual	   (1L<<0)
++ #define XpmColormap	   (1L<<1)
++ #define XpmDepth	   (1L<<2)
++ #define XpmSize		   (1L<<3)	/* width & height */
++ #define XpmHotspot	   (1L<<4)	/* x_hotspot & y_hotspot */
++ #define XpmCharsPerPixel   (1L<<5)
++ #define XpmColorSymbols	   (1L<<6)
++ #define XpmRgbFilename	   (1L<<7)
++ /* 3.2 backward compatibility code */
++ #define XpmInfos	   (1L<<8)
++ #define XpmReturnInfos	   XpmInfos
++ /* end 3.2 bc */
++ #define XpmReturnPixels	   (1L<<9)
++ #define XpmExtensions      (1L<<10)
++ #define XpmReturnExtensions XpmExtensions
++ 
++ #define XpmExactColors     (1L<<11)
++ #define XpmCloseness	   (1L<<12)
++ #define XpmRGBCloseness	   (1L<<13)
++ #define XpmColorKey	   (1L<<14)
++ 
++ #define XpmColorTable      (1L<<15)
++ #define XpmReturnColorTable XpmColorTable
++ 
++ #define XpmReturnAllocPixels (1L<<16)
++ #define XpmAllocCloseColors (1L<<17)
++ #define XpmBitmapFormat    (1L<<18)
++ 
++ #define XpmAllocColor      (1L<<19)
++ #define XpmFreeColors      (1L<<20)
++ #define XpmColorClosure    (1L<<21)
++ 
++ 
++ /* XpmInfo value masks bits */
++ #define XpmComments        XpmInfos
++ #define XpmReturnComments  XpmComments
++ 
++ /* XpmAttributes mask_pixel value when there is no mask */
++ #ifndef FOR_MSW
++ #define XpmUndefPixel 0x80000000
++ #else
++ /* int is only 16 bit for MSW */
++ #define XpmUndefPixel 0x8000
++ #endif
++ 
++ /*
++  * color keys for visual type, they must fit along with the number key of
++  * each related element in xpmColorKeys[] defined in XpmI.h
++  */
++ #define XPM_MONO	2
++ #define XPM_GREY4	3
++ #define XPM_GRAY4	3
++ #define XPM_GREY 	4
++ #define XPM_GRAY 	4
++ #define XPM_COLOR	5
++ 
++ 
++ /* macros for forward declarations of functions with prototypes */
++ #if NeedFunctionPrototypes
++ #define FUNC(f, t, p) extern t f p
++ #define LFUNC(f, t, p) static t f p
++ #else
++ #define FUNC(f, t, p) extern t f()
++ #define LFUNC(f, t, p) static t f()
++ #endif
++ 
++ 
++ /*
++  * functions declarations
++  */
++ 
++ #ifdef __cplusplus
++ extern "C" {
++ #endif
++ 
++ /* FOR_MSW, all ..Pixmap.. are excluded, only the ..XImage.. are used */
++ /* Same for Amiga! */
++ 
++ #if !defined(FOR_MSW) && !defined(AMIGA)
++     FUNC(XpmCreatePixmapFromData, int, (Display *display,
++ 					Drawable d,
++ 					char **data,
++ 					Pixmap *pixmap_return,
++ 					Pixmap *shapemask_return,
++ 					XpmAttributes *attributes));
++ 
++     FUNC(XpmCreateDataFromPixmap, int, (Display *display,
++ 					char ***data_return,
++ 					Pixmap pixmap,
++ 					Pixmap shapemask,
++ 					XpmAttributes *attributes));
++ 
++     FUNC(XpmReadFileToPixmap, int, (Display *display,
++ 				    Drawable d,
++ 				    char *filename,
++ 				    Pixmap *pixmap_return,
++ 				    Pixmap *shapemask_return,
++ 				    XpmAttributes *attributes));
++ 
++     FUNC(XpmWriteFileFromPixmap, int, (Display *display,
++ 				       char *filename,
++ 				       Pixmap pixmap,
++ 				       Pixmap shapemask,
++ 				       XpmAttributes *attributes));
++ #endif
++ 
++     FUNC(XpmCreateImageFromData, int, (Display *display,
++ 				       char **data,
++ 				       XImage **image_return,
++ 				       XImage **shapemask_return,
++ 				       XpmAttributes *attributes));
++ 
++     FUNC(XpmCreateDataFromImage, int, (Display *display,
++ 				       char ***data_return,
++ 				       XImage *image,
++ 				       XImage *shapeimage,
++ 				       XpmAttributes *attributes));
++ 
++     FUNC(XpmReadFileToImage, int, (Display *display,
++ 				   char *filename,
++ 				   XImage **image_return,
++ 				   XImage **shapeimage_return,
++ 				   XpmAttributes *attributes));
++ 
++     FUNC(XpmWriteFileFromImage, int, (Display *display,
++ 				      char *filename,
++ 				      XImage *image,
++ 				      XImage *shapeimage,
++ 				      XpmAttributes *attributes));
++ 
++     FUNC(XpmCreateImageFromBuffer, int, (Display *display,
++ 					 char *buffer,
++ 					 XImage **image_return,
++ 					 XImage **shapemask_return,
++ 					 XpmAttributes *attributes));
++ #if !defined(FOR_MSW) && !defined(AMIGA)
++     FUNC(XpmCreatePixmapFromBuffer, int, (Display *display,
++ 					  Drawable d,
++ 					  char *buffer,
++ 					  Pixmap *pixmap_return,
++ 					  Pixmap *shapemask_return,
++ 					  XpmAttributes *attributes));
++ 
++     FUNC(XpmCreateBufferFromImage, int, (Display *display,
++ 					 char **buffer_return,
++ 					 XImage *image,
++ 					 XImage *shapeimage,
++ 					 XpmAttributes *attributes));
++ 
++     FUNC(XpmCreateBufferFromPixmap, int, (Display *display,
++ 					  char **buffer_return,
++ 					  Pixmap pixmap,
++ 					  Pixmap shapemask,
++ 					  XpmAttributes *attributes));
++ #endif
++     FUNC(XpmReadFileToBuffer, int, (char *filename, char **buffer_return));
++     FUNC(XpmWriteFileFromBuffer, int, (char *filename, char *buffer));
++ 
++     FUNC(XpmReadFileToData, int, (char *filename, char ***data_return));
++     FUNC(XpmWriteFileFromData, int, (char *filename, char **data));
++ 
++     FUNC(XpmAttributesSize, int, ());
++     FUNC(XpmFreeAttributes, void, (XpmAttributes *attributes));
++     FUNC(XpmFreeExtensions, void, (XpmExtension *extensions,
++ 				   int nextensions));
++ 
++     FUNC(XpmFreeXpmImage, void, (XpmImage *image));
++     FUNC(XpmFreeXpmInfo, void, (XpmInfo *info));
++     FUNC(XpmGetErrorString, char *, (int errcode));
++     FUNC(XpmLibraryVersion, int, ());
++ 
++     /* XpmImage functions */
++     FUNC(XpmReadFileToXpmImage, int, (char *filename,
++ 				      XpmImage *image,
++ 				      XpmInfo *info));
++ 
++     FUNC(XpmWriteFileFromXpmImage, int, (char *filename,
++ 					 XpmImage *image,
++ 					 XpmInfo *info));
++ #if !defined(FOR_MSW) && !defined(AMIGA)
++     FUNC(XpmCreatePixmapFromXpmImage, int, (Display *display,
++ 					    Drawable d,
++ 					    XpmImage *image,
++ 					    Pixmap *pixmap_return,
++ 					    Pixmap *shapemask_return,
++ 					    XpmAttributes *attributes));
++ #endif
++     FUNC(XpmCreateImageFromXpmImage, int, (Display *display,
++ 					   XpmImage *image,
++ 					   XImage **image_return,
++ 					   XImage **shapeimage_return,
++ 					   XpmAttributes *attributes));
++ 
++     FUNC(XpmCreateXpmImageFromImage, int, (Display *display,
++ 					   XImage *image,
++ 					   XImage *shapeimage,
++ 					   XpmImage *xpmimage,
++ 					   XpmAttributes *attributes));
++ #if !defined(FOR_MSW) && !defined(AMIGA)
++     FUNC(XpmCreateXpmImageFromPixmap, int, (Display *display,
++ 					    Pixmap pixmap,
++ 					    Pixmap shapemask,
++ 					    XpmImage *xpmimage,
++ 					    XpmAttributes *attributes));
++ #endif
++     FUNC(XpmCreateDataFromXpmImage, int, (char ***data_return,
++ 					  XpmImage *image,
++ 					  XpmInfo *info));
++ 
++     FUNC(XpmCreateXpmImageFromData, int, (char **data,
++ 					  XpmImage *image,
++ 					  XpmInfo *info));
++ 
++     FUNC(XpmCreateXpmImageFromBuffer, int, (char *buffer,
++ 					    XpmImage *image,
++ 					    XpmInfo *info));
++ 
++     FUNC(XpmCreateBufferFromXpmImage, int, (char **buffer_return,
++ 					    XpmImage *image,
++ 					    XpmInfo *info));
++ 
++     FUNC(XpmGetParseError, int, (char *filename,
++ 				 int *linenum_return,
++ 				 int *charnum_return));
++ 
++     FUNC(XpmFree, void, (void *ptr));
++ 
++ #ifdef __cplusplus
++ } /* for C++ V2.0 */
++ #endif
++ 
++ 
++ /* backward compatibility */
++ 
++ /* for version 3.0c */
++ #define XpmPixmapColorError  XpmColorError
++ #define XpmPixmapSuccess     XpmSuccess
++ #define XpmPixmapOpenFailed  XpmOpenFailed
++ #define XpmPixmapFileInvalid XpmFileInvalid
++ #define XpmPixmapNoMemory    XpmNoMemory
++ #define XpmPixmapColorFailed XpmColorFailed
++ 
++ #define XpmReadPixmapFile(dpy, d, file, pix, mask, att) \
++     XpmReadFileToPixmap(dpy, d, file, pix, mask, att)
++ #define XpmWritePixmapFile(dpy, file, pix, mask, att) \
++     XpmWriteFileFromPixmap(dpy, file, pix, mask, att)
++ 
++ /* for version 3.0b */
++ #define PixmapColorError  XpmColorError
++ #define PixmapSuccess     XpmSuccess
++ #define PixmapOpenFailed  XpmOpenFailed
++ #define PixmapFileInvalid XpmFileInvalid
++ #define PixmapNoMemory    XpmNoMemory
++ #define PixmapColorFailed XpmColorFailed
++ 
++ #define ColorSymbol XpmColorSymbol
++ 
++ #define XReadPixmapFile(dpy, d, file, pix, mask, att) \
++     XpmReadFileToPixmap(dpy, d, file, pix, mask, att)
++ #define XWritePixmapFile(dpy, file, pix, mask, att) \
++     XpmWriteFileFromPixmap(dpy, file, pix, mask, att)
++ #define XCreatePixmapFromData(dpy, d, data, pix, mask, att) \
++     XpmCreatePixmapFromData(dpy, d, data, pix, mask, att)
++ #define XCreateDataFromPixmap(dpy, data, pix, mask, att) \
++     XpmCreateDataFromPixmap(dpy, data, pix, mask, att)
++ 
++ #endif /* XPM_NUMBERS */
++ #endif
+*** ../vim-7.3.638/src/Make_mvc.mak	2012-08-02 21:48:20.000000000 +0200
+--- src/Make_mvc.mak	2012-08-29 13:46:05.000000000 +0200
+***************
+*** 89,94 ****
+--- 89,96 ----
+  #       Netbeans Support: NETBEANS=[yes or no] (default is yes if GUI is yes)
+  #
+  #       XPM Image Support: XPM=[path to XPM directory]
++ #       Default is "xpm", using the files included in the distribution.
++ #       Use "no" to disable this feature.
+  #
+  #       Optimization: OPTIMIZE=[SPACE, SPEED, MAXSPEED] (default is MAXSPEED)
+  #
+***************
+*** 279,295 ****
+  NETBEANS_LIB	= WSock32.lib
+  !endif
+  
+! !ifdef XPM
+  # XPM - Include support for XPM signs
+! # You need to download or build  xpm.lib somehow.
+! # You can get the most recent version of libXpm-*.zip from
+! #   http://cgit.freedesktop.org/xorg/lib/libXpm
+! # from which you must build xpm.lib yourself
+! #   OR get and unpack: ftp://ftp.vim.org/pub/vim/pcextra/xpm.zip
+  XPM_OBJ   = $(OBJDIR)/xpm_w32.obj
+  XPM_DEFS  = -DFEAT_XPM_W32
+  XPM_LIB   = $(XPM)\lib\libXpm.lib
+! XPM_INC	  = -I $(XPM)\include
+  !endif
+  !endif
+  
+--- 281,301 ----
+  NETBEANS_LIB	= WSock32.lib
+  !endif
+  
+! !ifndef XPM
+! # XPM is not set, use the included xpm files, depending on the architecture.
+! !if ("$(CPU)" == "AMD64") || ("$(CPU)" == "IA64")
+! XPM = xpm\x64
+! !else
+! XPM = xpm\x86
+! !endif
+! !endif
+! !if "$(XPM)" != "no"
+  # XPM - Include support for XPM signs
+! # See the xpm directory for more information.
+  XPM_OBJ   = $(OBJDIR)/xpm_w32.obj
+  XPM_DEFS  = -DFEAT_XPM_W32
+  XPM_LIB   = $(XPM)\lib\libXpm.lib
+! XPM_INC	  = -I $(XPM)\include -I $(XPM)\..\include
+  !endif
+  !endif
+  
+*** ../vim-7.3.638/src/bigvim.bat	2010-08-15 21:57:29.000000000 +0200
+--- src/bigvim.bat	2012-08-29 13:46:18.000000000 +0200
+***************
+*** 1,3 ****
+  :: command to build big Vim with OLE, Perl, Python, Ruby and Tcl
+! nmake -f Make_mvc.mak GUI=yes OLE=yes PERL=E:\perl512 DYNAMIC_PERL=yes PERL_VER=512 PYTHON=e:\python27 DYNAMIC_PYTHON=yes PYTHON_VER=27 PYTHON3=e:\python31 DYNAMIC_PYTHON3=yes PYTHON3_VER=31 RUBY=e:\ruby191 DYNAMIC_RUBY=yes RUBY_VER=191 RUBY_VER_LONG=1.9.1 TCL=e:\tcl DYNAMIC_TCL=yes %1 IME=yes CSCOPE=yes XPM=e:\xpm
+  
+--- 1,5 ----
+  :: command to build big Vim with OLE, Perl, Python, Ruby and Tcl
+! SET VCDIR="C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\"
+! SET TOOLDIR=E:\
+! %VCDIR%nmake -f Make_mvc.mak GUI=yes OLE=yes PERL=E:\perl514 DYNAMIC_PERL=yes PERL_VER=514 PYTHON=%TOOLDIR%python27 DYNAMIC_PYTHON=yes PYTHON_VER=27 PYTHON3=%TOOLDIR%python32 DYNAMIC_PYTHON3=yes PYTHON3_VER=32 RUBY=%TOOLDIR%ruby192 DYNAMIC_RUBY=yes RUBY_VER=192 RUBY_VER_LONG=1.9.2 TCL=%TOOLDIR%tcl TCL_VER=85 TCL_VER_LONG=8.5 DYNAMIC_TCL=yes %1 IME=yes CSCOPE=yes
+  
+*** ../vim-7.3.638/src/bigvim64.bat	2012-08-29 14:16:38.000000000 +0200
+--- src/bigvim64.bat	2012-08-29 13:46:35.000000000 +0200
+***************
+*** 0 ****
+--- 1,6 ----
++ :: command to build big Vim 64 bit with OLE, Perl, Python, Ruby and Tcl
++ :: First run: %VCDIR%\vcvarsall.bat x86_amd64
++ SET VCDIR="C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\"
++ SET TOOLDIR=E:\
++ %VCDIR%\bin\nmake -f Make_mvc.mak CPU=AMD64 GUI=yes OLE=yes PERL=E:\perl514 DYNAMIC_PERL=yes PERL_VER=514 PYTHON=%TOOLDIR%python27 DYNAMIC_PYTHON=yes PYTHON_VER=27 PYTHON3=%TOOLDIR%python32 DYNAMIC_PYTHON3=yes PYTHON3_VER=32 RUBY=%TOOLDIR%ruby192 DYNAMIC_RUBY=yes RUBY_VER=192 RUBY_VER_LONG=1.9.2 TCL=%TOOLDIR%tcl TCL_VER=85 TCL_VER_LONG=8.5 DYNAMIC_TCL=yes %1 IME=yes CSCOPE=yes
++ 
+*** ../vim-7.3.638/Filelist	2012-07-16 17:27:57.000000000 +0200
+--- Filelist	2012-08-29 13:53:52.000000000 +0200
+***************
+*** 349,354 ****
+--- 349,360 ----
+  		src/vim*.ico \
+  		src/vim.tlb \
+  		src/vimtbar.lib \
++ 		src/xpm/COPYRIGHT \
++ 		src/xpm/README.txt \
++ 		src/xpm/include/*.h \
++ 		src/xpm/x64/lib/libXpm.lib \
++ 		src/xpm/x86/lib/libXpm.a \
++ 		src/xpm/x86/lib/libXpm.lib \
+  		src/vimtbar.dll \
+  		nsis/icons/*.bmp \
+  		nsis/icons/*.ico \
+*** ../vim-7.3.638/src/version.c	2012-08-29 14:17:51.000000000 +0200
+--- src/version.c	2012-08-29 14:14:19.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     639,
+  /**/
+
+-- 
+A successful man is one who makes more money than his wife can spend.
+A successful woman is one who can find such a man.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.640 b/7.3.640
new file mode 100644
index 0000000..984df64
Binary files /dev/null and b/7.3.640 differ
diff --git a/7.3.641 b/7.3.641
new file mode 100644
index 0000000..daacdb4
--- /dev/null
+++ b/7.3.641
@@ -0,0 +1,68 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.641
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.641
+Problem:    ":mkview" uses ":normal" instead of ":normal!" for folds. (Dan)
+Solution:   Add the bang. (Christian Brabandt)
+Files:	    src/fold.c
+
+
+*** ../vim-7.3.640/src/fold.c	2012-08-08 18:01:00.000000000 +0200
+--- src/fold.c	2012-08-29 15:17:39.000000000 +0200
+***************
+*** 3373,3379 ****
+  		/* open nested folds while this fold is open */
+  		if (fprintf(fd, "%ld", fp->fd_top + off) < 0
+  			|| put_eol(fd) == FAIL
+! 			|| put_line(fd, "normal zo") == FAIL)
+  		    return FAIL;
+  		if (put_foldopen_recurse(fd, wp, &fp->fd_nested,
+  							     off + fp->fd_top)
+--- 3373,3379 ----
+  		/* open nested folds while this fold is open */
+  		if (fprintf(fd, "%ld", fp->fd_top + off) < 0
+  			|| put_eol(fd) == FAIL
+! 			|| put_line(fd, "normal! zo") == FAIL)
+  		    return FAIL;
+  		if (put_foldopen_recurse(fd, wp, &fp->fd_nested,
+  							     off + fp->fd_top)
+***************
+*** 3417,3423 ****
+  {
+      if (fprintf(fd, "%ld", fp->fd_top + off) < 0
+  	    || put_eol(fd) == FAIL
+! 	    || fprintf(fd, "normal z%c",
+  			   fp->fd_flags == FD_CLOSED ? 'c' : 'o') < 0
+  	    || put_eol(fd) == FAIL)
+  	return FAIL;
+--- 3417,3423 ----
+  {
+      if (fprintf(fd, "%ld", fp->fd_top + off) < 0
+  	    || put_eol(fd) == FAIL
+! 	    || fprintf(fd, "normal! z%c",
+  			   fp->fd_flags == FD_CLOSED ? 'c' : 'o') < 0
+  	    || put_eol(fd) == FAIL)
+  	return FAIL;
+*** ../vim-7.3.640/src/version.c	2012-08-29 14:23:06.000000000 +0200
+--- src/version.c	2012-08-29 15:18:26.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     641,
+  /**/
+
+-- 
+You cannot propel yourself forward by patting yourself on the back.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.642 b/7.3.642
new file mode 100644
index 0000000..ddc4032
--- /dev/null
+++ b/7.3.642
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.642
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.642
+Problem:    Segfault with specific autocommands.  Was OK after 7.3.449 and
+	    before 7.3.545. (Richard Brown)
+Solution:   Pass TRUE for abort_if_last in the call to close_buffer().
+	    (Christian Brabandt)
+Files:	    src/window.c
+
+
+*** ../vim-7.3.641/src/window.c	2012-07-19 18:05:40.000000000 +0200
+--- src/window.c	2012-08-29 15:42:15.000000000 +0200
+***************
+*** 2269,2275 ****
+  #ifdef FEAT_AUTOCMD
+  	win->w_closing = TRUE;
+  #endif
+! 	close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0, FALSE);
+  #ifdef FEAT_AUTOCMD
+  	if (win_valid(win))
+  	    win->w_closing = FALSE;
+--- 2269,2275 ----
+  #ifdef FEAT_AUTOCMD
+  	win->w_closing = TRUE;
+  #endif
+! 	close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0, TRUE);
+  #ifdef FEAT_AUTOCMD
+  	if (win_valid(win))
+  	    win->w_closing = FALSE;
+*** ../vim-7.3.641/src/version.c	2012-08-29 15:22:14.000000000 +0200
+--- src/version.c	2012-08-29 15:49:52.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     642,
+  /**/
+
+-- 
+The psychic said, "God bless you."  I said, "I didn't sneeze."  She
+looked deep into my eyes and said, "You will, eventually."  And, damn
+if she wasn't right.  Two days later, I sneezed.  --Ellen Degeneres
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.643 b/7.3.643
new file mode 100644
index 0000000..c2f700c
--- /dev/null
+++ b/7.3.643
@@ -0,0 +1,73 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.643
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.643 (after 7.3.635)
+Problem:    MS-Windows: When starting gvim maximized 'lines' and 'columns' are
+	    wrong. (Christian Robinson)
+Solution:   Move the check for gui.starting from ui_get_shellsize() to
+	    check_shellsize().
+Files:	    src/ui.c, src/term.c
+
+
+*** ../vim-7.3.642/src/ui.c	2012-08-23 13:28:50.000000000 +0200
+--- src/ui.c	2012-08-29 16:20:04.000000000 +0200
+***************
+*** 298,306 ****
+      int	    retval;
+  
+  #ifdef FEAT_GUI
+-     if (gui.starting)
+- 	/* possibly a system call during startup, check later */
+- 	return OK;
+      if (gui.in_use)
+  	retval = gui_get_shellsize();
+      else
+--- 298,303 ----
+*** ../vim-7.3.642/src/term.c	2012-08-15 16:20:59.000000000 +0200
+--- src/term.c	2012-08-29 16:22:25.000000000 +0200
+***************
+*** 3006,3012 ****
+      int		old_Rows = Rows;
+      int		old_Columns = Columns;
+  
+!     if (!exiting)
+      {
+  	(void)ui_get_shellsize();
+  	check_shellsize();
+--- 3006,3018 ----
+      int		old_Rows = Rows;
+      int		old_Columns = Columns;
+  
+!     if (!exiting
+! #ifdef FEAT_GUI
+! 	    /* Do not get the size when executing a shell command during
+! 	     * startup. */
+! 	    && !gui.starting
+! #endif
+! 	    )
+      {
+  	(void)ui_get_shellsize();
+  	check_shellsize();
+*** ../vim-7.3.642/src/version.c	2012-08-29 15:50:22.000000000 +0200
+--- src/version.c	2012-08-29 16:25:42.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     643,
+  /**/
+
+-- 
+Eight Megabytes And Continually Swapping.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.644 b/7.3.644
new file mode 100644
index 0000000..6f2630c
--- /dev/null
+++ b/7.3.644
@@ -0,0 +1,72 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.644
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.644
+Problem:    Dead code for BeOS GUI.
+Solution:   Remove unused __BEOS__ stuff.
+Files:	    src/gui.c
+
+
+*** ../vim-7.3.643/src/gui.c	2012-07-10 16:49:08.000000000 +0200
+--- src/gui.c	2012-08-29 16:28:46.000000000 +0200
+***************
+*** 37,44 ****
+  static void gui_set_bg_color __ARGS((char_u *name));
+  static win_T *xy2win __ARGS((int x, int y));
+  
+! #if defined(UNIX) && !defined(__BEOS__) && !defined(MACOS_X) \
+! 	&& !defined(__APPLE__)
+  # define MAY_FORK
+  static void gui_do_fork __ARGS((void));
+  
+--- 37,43 ----
+  static void gui_set_bg_color __ARGS((char_u *name));
+  static win_T *xy2win __ARGS((int x, int y));
+  
+! #if defined(UNIX) && !defined(MACOS_X) && !defined(__APPLE__)
+  # define MAY_FORK
+  static void gui_do_fork __ARGS((void));
+  
+***************
+*** 784,794 ****
+  gui_exit(rc)
+      int		rc;
+  {
+- #ifndef __BEOS__
+      /* don't free the fonts, it leads to a BUS error
+       * richard@whitequeen.com Jul 99 */
+      free_highlight_fonts();
+- #endif
+      gui.in_use = FALSE;
+      gui_mch_exit(rc);
+  }
+--- 783,791 ----
+*** ../vim-7.3.643/src/version.c	2012-08-29 16:26:01.000000000 +0200
+--- src/version.c	2012-08-29 16:33:30.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     644,
+  /**/
+
+-- 
+E  M  A  C  S
+s  e  l  o  h
+c  t  t  n  i
+a  a     t  f
+p        r  t
+e        o
+         l
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.645 b/7.3.645
new file mode 100644
index 0000000..40d8ee0
--- /dev/null
+++ b/7.3.645
@@ -0,0 +1,118 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.645
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.645
+Problem:    No tests for patch 7.3.625 and 7.3.637.
+Solution:   Add more tests for the "gn" command and try/catch. (Christian
+	    Brabandt)
+Files:	    src/testdir/test53.in, src/testdir/test53.ok,
+	    src/testdir/test55.in, src/testdir/test55.ok
+
+
+*** ../vim-7.3.644/src/testdir/test53.in	2012-07-25 15:06:20.000000000 +0200
+--- src/testdir/test53.in	2012-08-29 16:37:44.000000000 +0200
+***************
+*** 34,40 ****
+  gnd
+  /[a]bcdx
+  :1
+! 2gnd
+  :/^start:/,/^end:/wq! test.out
+  ENDTEST
+  
+--- 34,46 ----
+  gnd
+  /[a]bcdx
+  :1
+! 2gnd/join
+! /$
+! 0gnd
+! /\>\zs
+! 0gnd/^
+! gnd$h/\zs
+! gnd
+  :/^start:/,/^end:/wq! test.out
+  ENDTEST
+  
+***************
+*** 57,60 ****
+--- 63,70 ----
+  one
+  two
+  abcdx | abcdx | abcdx
++ join 
++ lines
++ zero width pattern
++ delete first and last chars
+  end:
+*** ../vim-7.3.644/src/testdir/test53.ok	2012-07-25 15:06:20.000000000 +0200
+--- src/testdir/test53.ok	2012-08-29 16:37:48.000000000 +0200
+***************
+*** 21,24 ****
+--- 21,27 ----
+  SEARCH:
+  searchmatch
+  abcdx |  | abcdx
++ join lines
++ zerowidth pattern
++ elete first and last char
+  end:
+*** ../vim-7.3.644/src/testdir/test55.in	2012-05-18 12:06:58.000000000 +0200
+--- src/testdir/test55.in	2012-08-29 16:50:51.000000000 +0200
+***************
+*** 378,383 ****
+--- 378,393 ----
+  :unlet dict
+  :call garbagecollect(1)
+  :"
++ :" test for patch 7.3.637
++ :let a = 'No error caught'
++ :try|foldopen|catch|let a = matchstr(v:exception,'^[^ ]*')|endtry
++ o=a
:"
++ :lang C
++ :redir => a
++ :try|foobar|catch|let a = matchstr(v:exception,'^[^ ]*')|endtry
++ :redir END
++ o=a
:"
++ :"
+  :/^start:/,$wq! test.out
+  ENDTEST
+  
+*** ../vim-7.3.644/src/testdir/test55.ok	2012-05-18 12:06:58.000000000 +0200
+--- src/testdir/test55.ok	2012-08-29 16:51:15.000000000 +0200
+***************
+*** 115,117 ****
+--- 115,123 ----
+  {'a': {'b': 'B'}}
+  Vim(call):E737: a
+  {'a': {'b': 'B'}}
++ Vim(foldopen):E490:
++ 
++ 
++ Error detected while processing :
++ E492: Not an editor command: foobar|catch|let a = matchstr(v:exception,'^[^ ]*')|endtry
++ 
+*** ../vim-7.3.644/src/version.c	2012-08-29 16:34:23.000000000 +0200
+--- src/version.c	2012-08-29 16:37:20.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     645,
+  /**/
+
+-- 
+TALL KNIGHT OF NI: Ni!
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.646 b/7.3.646
new file mode 100644
index 0000000..3e507a7
--- /dev/null
+++ b/7.3.646
@@ -0,0 +1,69 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.646
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.646
+Problem:    When reloading a buffer the undo file becomes unusable unless ":w"
+	    is executed. (Dmitri Frank)
+Solution:   After reloading the buffer write the undo file. (Christian
+	    Brabandt)
+Files:	    src/fileio.c
+
+
+*** ../vim-7.3.645/src/fileio.c	2012-07-10 17:14:50.000000000 +0200
+--- src/fileio.c	2012-08-29 18:19:44.000000000 +0200
+***************
+*** 7060,7067 ****
+--- 7060,7082 ----
+      }
+  
+      if (reload)
++     {
+  	/* Reload the buffer. */
+  	buf_reload(buf, orig_mode);
++ #ifdef FEAT_PERSISTENT_UNDO
++ 	if (buf->b_p_udf && buf->b_ffname != NULL)
++ 	{
++ 	    char_u	    hash[UNDO_HASH_SIZE];
++ 	    buf_T	    *save_curbuf = curbuf;
++ 
++ 	    /* Any existing undo file is unusable, write it now. */
++ 	    curbuf = buf;
++ 	    u_compute_hash(hash);
++ 	    u_write_undo(NULL, FALSE, buf, hash);
++ 	    curbuf = save_curbuf;
++ 	}
++ #endif
++     }
+  
+  #ifdef FEAT_AUTOCMD
+      /* Trigger FileChangedShell when the file was changed in any way. */
+*** ../vim-7.3.645/src/version.c	2012-08-29 16:55:09.000000000 +0200
+--- src/version.c	2012-08-29 18:21:07.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     646,
+  /**/
+
+-- 
+   An extraordinary TALL KNIGHT in all black (possibly John with Mike on his
+   shoulders) walks out from the dark trees.  He is extremely fierce and
+   gruesome countenance.  He walks towards KING ARTHUR and PATSY, who are
+   wazzing like mad.  (Salopian slang, meaning very scared.  almost to the
+   point of wetting oneself, e.g. before an important football match or
+   prior to a postering.  Salopian slang meaning a beating by the school
+   praeposters.  Sorry about the Salopian slant to this stage direction - Ed.)
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.647 b/7.3.647
new file mode 100644
index 0000000..d1c524f
--- /dev/null
+++ b/7.3.647
@@ -0,0 +1,178 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.647
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.647
+Problem:    "gnd" doesn't work correctly in Visual mode.
+Solution:   Handle Visual mode differently in "gn". (Christian Brabandt)
+Files:	    src/search.c, src/testdir/test53.in, src/testdir/test53.ok
+
+
+*** ../vim-7.3.646/src/search.c	2012-08-23 15:53:00.000000000 +0200
+--- src/search.c	2012-09-05 12:11:58.000000000 +0200
+***************
+*** 4545,4551 ****
+      int		dir;
+      int		result;		/* result of various function calls */
+      char_u	old_p_ws = p_ws;
+-     int		visual_active = FALSE;
+      int		flags = 0;
+      pos_T	save_VIsual;
+      int		zerowidth = FALSE;
+--- 4545,4550 ----
+***************
+*** 4561,4571 ****
+      {
+  	orig_pos = curwin->w_cursor;
+  	save_VIsual = VIsual;
+- 	visual_active = TRUE;
+- 
+- 	/* just started visual selection, only one character */
+- 	if (equalpos(VIsual, curwin->w_cursor))
+- 	    visual_active = FALSE;
+  
+  	pos = curwin->w_cursor;
+  	start_pos = VIsual;
+--- 4560,4565 ----
+***************
+*** 4619,4625 ****
+  	    p_ws = old_p_ws;
+  	    return FAIL;
+  	}
+! 	else if (!i && !result && !visual_active)
+  	{
+  	    if (forward) /* try again from start of buffer */
+  	    {
+--- 4613,4619 ----
+  	    p_ws = old_p_ws;
+  	    return FAIL;
+  	}
+! 	else if (!i && !result)
+  	{
+  	    if (forward) /* try again from start of buffer */
+  	    {
+***************
+*** 4691,4697 ****
+      regmmatch_T	regmatch;
+      int		nmatched = 0;
+      int		result = -1;
+!     pos_T       pos;
+  
+      if (search_regcomp(pattern, RE_SEARCH, RE_SEARCH,
+  					      SEARCH_KEEP, &regmatch) == FAIL)
+--- 4685,4692 ----
+      regmmatch_T	regmatch;
+      int		nmatched = 0;
+      int		result = -1;
+!     pos_T	pos;
+!     int		save_called_emsg = called_emsg;
+  
+      if (search_regcomp(pattern, RE_SEARCH, RE_SEARCH,
+  					      SEARCH_KEEP, &regmatch) == FAIL)
+***************
+*** 4704,4718 ****
+      {
+  	/* Zero-width pattern should match somewhere, then we can check if
+  	 * start and end are in the same position. */
+  	nmatched = vim_regexec_multi(&regmatch, curwin, curbuf,
+  						  pos.lnum, (colnr_T)0, NULL);
+  
+  	if (!called_emsg)
+  	    result = (nmatched != 0
+! 		    && regmatch.startpos[0].lnum == regmatch.endpos[0].lnum
+! 		    && regmatch.startpos[0].col == regmatch.endpos[0].col);
+      }
+  
+      vim_free(regmatch.regprog);
+      return result;
+  }
+--- 4699,4715 ----
+      {
+  	/* Zero-width pattern should match somewhere, then we can check if
+  	 * start and end are in the same position. */
++ 	called_emsg = FALSE;
+  	nmatched = vim_regexec_multi(&regmatch, curwin, curbuf,
+  						  pos.lnum, (colnr_T)0, NULL);
+  
+  	if (!called_emsg)
+  	    result = (nmatched != 0
+! 		&& regmatch.startpos[0].lnum == regmatch.endpos[0].lnum
+! 		&& regmatch.startpos[0].col == regmatch.endpos[0].col);
+      }
+  
++     called_emsg |= save_called_emsg;
+      vim_free(regmatch.regprog);
+      return result;
+  }
+*** ../vim-7.3.646/src/testdir/test53.in	2012-08-29 16:55:09.000000000 +0200
+--- src/testdir/test53.in	2012-09-05 12:12:03.000000000 +0200
+***************
+*** 40,46 ****
+  /\>\zs
+  0gnd/^
+  gnd$h/\zs
+! gnd
+  :/^start:/,/^end:/wq! test.out
+  ENDTEST
+  
+--- 40,47 ----
+  /\>\zs
+  0gnd/^
+  gnd$h/\zs
+! gnd/[u]niquepattern/s
+! vlgnd
+  :/^start:/,/^end:/wq! test.out
+  ENDTEST
+  
+***************
+*** 67,70 ****
+--- 68,72 ----
+  lines
+  zero width pattern
+  delete first and last chars
++ uniquepattern uniquepattern
+  end:
+*** ../vim-7.3.646/src/testdir/test53.ok	2012-08-29 16:55:09.000000000 +0200
+--- src/testdir/test53.ok	2012-09-05 12:12:08.000000000 +0200
+***************
+*** 24,27 ****
+--- 24,28 ----
+  join lines
+  zerowidth pattern
+  elete first and last char
++  uniquepattern
+  end:
+*** ../vim-7.3.646/src/version.c	2012-08-29 18:50:50.000000000 +0200
+--- src/version.c	2012-09-05 12:13:37.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     647,
+  /**/
+
+-- 
+        **  Hello and Welcome to the Psychiatric Hotline **
+If you are obsessive-compulsive, please press 1 repeatedly.
+If you are co-dependent, please ask someone to press 2.
+If you have multiple personalities, please press 3, 4, 5 and 6.
+If you are paranoid-delusional, we know who you are and what you want
+       - just stay on the line so we can trace the call.
+If you are schizophrenic, listen carefully and a little voice will
+       tell you which number to press next.
+If you are manic-depressive, it doesn't matter which number you press
+       - no one will answer.
+If you suffer from panic attacks, push every button you can find.
+If you are sane, please hold on - we have the rest of humanity on the
+        other line and they desparately want to ask you a few questions.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.648 b/7.3.648
new file mode 100644
index 0000000..f51d99d
--- /dev/null
+++ b/7.3.648
@@ -0,0 +1,131 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.648
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.648
+Problem:    Crash when using a very long file name. (ZyX)
+Solution:   Properly check length of buffer space.
+Files:	    src/buffer.c
+
+
+*** ../vim-7.3.647/src/buffer.c	2012-07-16 17:31:48.000000000 +0200
+--- src/buffer.c	2012-09-05 13:17:38.000000000 +0200
+***************
+*** 3234,3245 ****
+  	{
+  	    /* format: "fname + (path) (1 of 2) - VIM" */
+  
+  	    if (curbuf->b_fname == NULL)
+! 		vim_strncpy(buf, (char_u *)_("[No Name]"), IOSIZE - 100);
+  	    else
+  	    {
+  		p = transstr(gettail(curbuf->b_fname));
+! 		vim_strncpy(buf, p, IOSIZE - 100);
+  		vim_free(p);
+  	    }
+  
+--- 3234,3248 ----
+  	{
+  	    /* format: "fname + (path) (1 of 2) - VIM" */
+  
++ #define SPACE_FOR_FNAME (IOSIZE - 100)
++ #define SPACE_FOR_DIR   (IOSIZE - 20)
++ #define SPACE_FOR_ARGNR (IOSIZE - 10)  /* at least room for " - VIM" */
+  	    if (curbuf->b_fname == NULL)
+! 		vim_strncpy(buf, (char_u *)_("[No Name]"), SPACE_FOR_FNAME);
+  	    else
+  	    {
+  		p = transstr(gettail(curbuf->b_fname));
+! 		vim_strncpy(buf, p, SPACE_FOR_FNAME);
+  		vim_free(p);
+  	    }
+  
+***************
+*** 3263,3269 ****
+  		buf[off++] = ' ';
+  		buf[off++] = '(';
+  		home_replace(curbuf, curbuf->b_ffname,
+! 					       buf + off, IOSIZE - off, TRUE);
+  #ifdef BACKSLASH_IN_FILENAME
+  		/* avoid "c:/name" to be reduced to "c" */
+  		if (isalpha(buf[off]) && buf[off + 1] == ':')
+--- 3266,3272 ----
+  		buf[off++] = ' ';
+  		buf[off++] = '(';
+  		home_replace(curbuf, curbuf->b_ffname,
+! 					buf + off, SPACE_FOR_DIR - off, TRUE);
+  #ifdef BACKSLASH_IN_FILENAME
+  		/* avoid "c:/name" to be reduced to "c" */
+  		if (isalpha(buf[off]) && buf[off + 1] == ':')
+***************
+*** 3274,3291 ****
+  		if (p == buf + off)
+  		    /* must be a help buffer */
+  		    vim_strncpy(buf + off, (char_u *)_("help"),
+! 						  (size_t)(IOSIZE - off - 1));
+  		else
+  		    *p = NUL;
+  
+! 		/* translate unprintable chars */
+! 		p = transstr(buf + off);
+! 		vim_strncpy(buf + off, p, (size_t)(IOSIZE - off - 1));
+! 		vim_free(p);
+  		STRCAT(buf, ")");
+  	    }
+  
+! 	    append_arg_number(curwin, buf, IOSIZE, FALSE);
+  
+  #if defined(FEAT_CLIENTSERVER)
+  	    if (serverName != NULL)
+--- 3277,3304 ----
+  		if (p == buf + off)
+  		    /* must be a help buffer */
+  		    vim_strncpy(buf + off, (char_u *)_("help"),
+! 					   (size_t)(SPACE_FOR_DIR - off - 1));
+  		else
+  		    *p = NUL;
+  
+! 		/* Translate unprintable chars and concatenate.  Keep some
+! 		 * room for the server name.  When there is no room (very long
+! 		 * file name) use (...). */
+! 		if (off < SPACE_FOR_DIR)
+! 		{
+! 		    p = transstr(buf + off);
+! 		    vim_strncpy(buf + off, p, (size_t)(SPACE_FOR_DIR - off));
+! 		    vim_free(p);
+! 		}
+! 		else
+! 		{
+! 		    vim_strncpy(buf + off, (char_u *)"...",
+! 					     (size_t)(SPACE_FOR_ARGNR - off));
+! 		}
+  		STRCAT(buf, ")");
+  	    }
+  
+! 	    append_arg_number(curwin, buf, SPACE_FOR_ARGNR, FALSE);
+  
+  #if defined(FEAT_CLIENTSERVER)
+  	    if (serverName != NULL)
+*** ../vim-7.3.647/src/version.c	2012-09-05 12:16:40.000000000 +0200
+--- src/version.c	2012-09-05 13:29:53.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     648,
+  /**/
+
+-- 
+Q: How does a UNIX Guru do Sex ?
+A: unzip;strip;touch;finger;mount;fsck;more;yes;umount;sleep
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.649 b/7.3.649
new file mode 100644
index 0000000..50c7ce8
--- /dev/null
+++ b/7.3.649
@@ -0,0 +1,68 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.649
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.649
+Problem:    When 'clipboard' is set to "unnamed" small deletes end up in the
+	    numbered registers. (Ingo Karkat)
+Solution:   Use the original register name to decide whether to put a delete
+	    in a numbered register. (Christian Brabandt)
+Files:	    src/ops.c
+
+
+*** ../vim-7.3.648/src/ops.c	2012-08-08 18:01:00.000000000 +0200
+--- src/ops.c	2012-09-05 14:13:32.000000000 +0200
+***************
+*** 1623,1628 ****
+--- 1623,1629 ----
+  #endif
+      linenr_T		old_lcount = curbuf->b_ml.ml_line_count;
+      int			did_yank = FALSE;
++     int			orig_regname = oap->regname;
+  
+      if (curbuf->b_ml.ml_flags & ML_EMPTY)	    /* nothing to do */
+  	return OK;
+***************
+*** 1715,1722 ****
+  	/*
+  	 * Put deleted text into register 1 and shift number registers if the
+  	 * delete contains a line break, or when a regname has been specified.
+  	 */
+! 	if (oap->regname != 0 || oap->motion_type == MLINE
+  				   || oap->line_count > 1 || oap->use_reg_one)
+  	{
+  	    y_current = &y_regs[9];
+--- 1716,1725 ----
+  	/*
+  	 * Put deleted text into register 1 and shift number registers if the
+  	 * delete contains a line break, or when a regname has been specified.
++ 	 * Use the register name from before adjust_clip_reg() may have
++ 	 * changed it.
+  	 */
+! 	if (orig_regname != 0 || oap->motion_type == MLINE
+  				   || oap->line_count > 1 || oap->use_reg_one)
+  	{
+  	    y_current = &y_regs[9];
+*** ../vim-7.3.648/src/version.c	2012-09-05 13:30:22.000000000 +0200
+--- src/version.c	2012-09-05 14:17:55.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     649,
+  /**/
+
+-- 
+'I generally avoid temptation unless I can't resist it."
+		-- Mae West
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.650 b/7.3.650
new file mode 100644
index 0000000..0937c12
--- /dev/null
+++ b/7.3.650
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.650
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.650
+Problem:    Completion after ":help \{-" gives an error message and messes up
+	    the command line.
+Solution:   Cancel the tag search if the pattern can't be compiled. (Yasuhiro
+	    Matsumoto)
+Files:	    src/tag.c
+
+
+*** ../vim-7.3.649/src/tag.c	2012-01-10 22:26:12.000000000 +0100
+--- src/tag.c	2012-09-05 14:56:52.000000000 +0200
+***************
+*** 1443,1448 ****
+--- 1443,1450 ----
+  	orgpat.len = p_tl;
+  
+      prepare_pats(&orgpat, has_re);
++     if (has_re && orgpat.regmatch.regprog == NULL)
++ 	goto findtag_end;
+  
+  #ifdef FEAT_TAG_BINS
+      /* This is only to avoid a compiler warning for using search_info
+*** ../vim-7.3.649/src/version.c	2012-09-05 14:18:42.000000000 +0200
+--- src/version.c	2012-09-05 15:01:07.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     650,
+  /**/
+
+-- 
+GUARD #1:  What, ridden on a horse?
+ARTHUR:    Yes!
+GUARD #1:  You're using coconuts!
+ARTHUR:    What?
+GUARD #1:  You've got two empty halves of coconut and you're bangin' 'em
+           together.
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.651 b/7.3.651
new file mode 100644
index 0000000..0a72424
--- /dev/null
+++ b/7.3.651
@@ -0,0 +1,99 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.651
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.651
+Problem:    Completion after ":help \{-" gives an error message.
+Solution:   Prepend a backslash.
+Files:      src/ex_cmds.c
+
+
+*** ../vim-7.3.650/src/ex_cmds.c	2012-08-08 16:50:40.000000000 +0200
+--- src/ex_cmds.c	2012-09-05 15:10:13.000000000 +0200
+***************
+*** 4851,4857 ****
+  #ifdef FEAT_EVAL
+  		if (do_count)
+  		{
+! 		    /* prevent accidently changing the buffer by a function */
+  		    save_ma = curbuf->b_p_ma;
+  		    curbuf->b_p_ma = FALSE;
+  		    sandbox++;
+--- 4851,4857 ----
+  #ifdef FEAT_EVAL
+  		if (do_count)
+  		{
+! 		    /* prevent accidentally changing the buffer by a function */
+  		    save_ma = curbuf->b_p_ma;
+  		    curbuf->b_p_ma = FALSE;
+  		    sandbox++;
+***************
+*** 5264,5270 ****
+   * is assumed to be 'p' if missing.
+   *
+   * This is implemented in two passes: first we scan the file for the pattern and
+!  * set a mark for each line that (not) matches. secondly we execute the command
+   * for each line that has a mark. This is required because after deleting
+   * lines we do not know where to search for the next match.
+   */
+--- 5264,5270 ----
+   * is assumed to be 'p' if missing.
+   *
+   * This is implemented in two passes: first we scan the file for the pattern and
+!  * set a mark for each line that (not) matches. Secondly we execute the command
+   * for each line that has a mark. This is required because after deleting
+   * lines we do not know where to search for the next match.
+   */
+***************
+*** 5896,5904 ****
+  	}
+  	else
+  	{
+! 	  /* replace "[:...:]" with "\[:...:]"; "[+...]" with "\[++...]" */
+! 	    if (arg[0] == '[' && (arg[1] == ':'
+! 					 || (arg[1] == '+' && arg[2] == '+')))
+  	      *d++ = '\\';
+  
+  	  for (s = arg; *s; ++s)
+--- 5896,5909 ----
+  	}
+  	else
+  	{
+! 	  /* Replace:
+! 	   * "[:...:]" with "\[:...:]"
+! 	   * "[++...]" with "\[++...]"
+! 	   * "\{" with "\\{"
+! 	   */
+! 	    if ((arg[0] == '[' && (arg[1] == ':'
+! 			 || (arg[1] == '+' && arg[2] == '+')))
+! 		    || (arg[0] == '\\' && arg[1] == '{'))
+  	      *d++ = '\\';
+  
+  	  for (s = arg; *s; ++s)
+*** ../vim-7.3.650/src/version.c	2012-09-05 15:03:27.000000000 +0200
+--- src/version.c	2012-09-05 15:12:51.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     651,
+  /**/
+
+-- 
+GUARD #1:  Where'd you get the coconut?
+ARTHUR:    We found them.
+GUARD #1:  Found them?  In Mercea?  The coconut's tropical!
+ARTHUR:    What do you mean?
+GUARD #1:  Well, this is a temperate zone.
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.652 b/7.3.652
new file mode 100644
index 0000000..e05a9da
--- /dev/null
+++ b/7.3.652
@@ -0,0 +1,72 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.652
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.652
+Problem:    Workaround for Python crash isn't perfect.
+Solution:   Change the type of the length argument. (Sean Estabrooks)
+Files:	    src/if_py_both.h
+
+
+*** ../vim-7.3.651/src/if_py_both.h	2012-08-08 16:05:03.000000000 +0200
+--- src/if_py_both.h	2012-09-05 17:15:31.000000000 +0200
+***************
+*** 74,91 ****
+      static PyObject *
+  OutputWrite(PyObject *self, PyObject *args)
+  {
+!     int len;
+      char *str = NULL;
+      int error = ((OutputObject *)(self))->error;
+  
+      if (!PyArg_ParseTuple(args, "et#", ENC_OPT, &str, &len))
+  	return NULL;
+  
+-     /* TODO: This works around a gcc optimizer problem and avoids Vim
+-      * from crashing.  Should find a real solution. */
+-     if (str == NULL)
+- 	return NULL;
+- 
+      Py_BEGIN_ALLOW_THREADS
+      Python_Lock_Vim();
+      writer((writefn)(error ? emsg : msg), (char_u *)str, len);
+--- 74,86 ----
+      static PyObject *
+  OutputWrite(PyObject *self, PyObject *args)
+  {
+!     Py_ssize_t len;
+      char *str = NULL;
+      int error = ((OutputObject *)(self))->error;
+  
+      if (!PyArg_ParseTuple(args, "et#", ENC_OPT, &str, &len))
+  	return NULL;
+  
+      Py_BEGIN_ALLOW_THREADS
+      Python_Lock_Vim();
+      writer((writefn)(error ? emsg : msg), (char_u *)str, len);
+*** ../vim-7.3.651/src/version.c	2012-09-05 15:15:01.000000000 +0200
+--- src/version.c	2012-09-05 17:27:46.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     652,
+  /**/
+
+-- 
+GUARD #2:  It could be carried by an African swallow!
+GUARD #1:  Oh, yeah, an African swallow maybe, but not a European swallow,
+           that's my point.
+GUARD #2:  Oh, yeah, I agree with that...
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.653 b/7.3.653
new file mode 100644
index 0000000..7a0691e
--- /dev/null
+++ b/7.3.653
@@ -0,0 +1,280 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.653
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.653
+Problem:    MingW needs build rule for included XPM files.  Object directory
+	    for 32 and 64 builds is the same, also for MSVC.
+Solution:   Add MingW build rule to use included XPM files.  Add the CPU or
+	    architecture to the object directory name. (Sergey Khorev)
+Files:	    src/Make_ming.mak, src/Make_mvc.mak, src/xpm/README.txt
+
+
+*** ../vim-7.3.652/src/Make_ming.mak	2012-08-02 21:21:43.000000000 +0200
+--- src/Make_ming.mak	2012-09-05 17:43:11.000000000 +0200
+***************
+*** 1,14 ****
+! # Makefile for VIM on Win32, using 'EGCS/mingw32 1.1.2'.
+  # Info at http://www.mingw.org
+! # Also requires 'GNU make 3.77', which you can get through a link
+! # to 'JanJaap's page from the above page.
+  # Get missing libraries from http://gnuwin32.sf.net.
+  #
+  # Tested on Win32 NT 4 and Win95.
+  #
+! # To make everything, just 'make -f Make_ming.mak'
+! # To make just e.g. gvim.exe, 'make -f Make_ming.mak gvim.exe'
+! # After a run, you can 'make -f Make_ming.mak clean' to clean up
+  #
+  # NOTE: Sometimes 'GNU Make' will stop after building vimrun.exe -- I think
+  # it's just run out of memory or something.  Run again, and it will continue
+--- 1,15 ----
+! # Makefile for VIM on Win32
+! #
+  # Info at http://www.mingw.org
+! # Alternative x86 and 64-builds: http://mingw-w64.sourceforge.net
+! # Also requires GNU make, which you can download from the same sites.
+  # Get missing libraries from http://gnuwin32.sf.net.
+  #
+  # Tested on Win32 NT 4 and Win95.
+  #
+! # To make everything, just 'make -f Make_ming.mak'.
+! # To make just e.g. gvim.exe, 'make -f Make_ming.mak gvim.exe'.
+! # After a run, you can 'make -f Make_ming.mak clean' to clean up.
+  #
+  # NOTE: Sometimes 'GNU Make' will stop after building vimrun.exe -- I think
+  # it's just run out of memory or something.  Run again, and it will continue
+***************
+*** 20,27 ****
+  # "make mpress" uses the MPRESS compressor for 32- and 64-bit EXEs:
+  #     http://www.matcode.com/mpress.htm
+  #
+! # Maintained by Ron Aaron <ronaharon@yahoo.com>
+! # updated 2003 Jan 20
+  
+  #>>>>> choose options:
+  # set to yes for a debug build
+--- 21,28 ----
+  # "make mpress" uses the MPRESS compressor for 32- and 64-bit EXEs:
+  #     http://www.matcode.com/mpress.htm
+  #
+! # Maintained by Ron Aaron <ronaharon@yahoo.com> et al.
+! # Updated 2012 Sep 5.
+  
+  #>>>>> choose options:
+  # set to yes for a debug build
+***************
+*** 31,62 ****
+  # set to yes to make gvim, no for vim
+  GUI=yes
+  # FEATURES=[TINY | SMALL  | NORMAL | BIG | HUGE]
+! # set to TINY to make minimal version (few features)
+  FEATURES=BIG
+! # set to one of i386, i486, i586, i686 as the minimum target processor
+  ARCH=i386
+! # set to yes to cross-compile from unix; no=native Windows
+  CROSS=no
+! # set to path to iconv.h and libiconv.a to enable using 'iconv.dll'
+  #ICONV="."
+  ICONV=yes
+  GETTEXT=yes
+! # set to yes to include multibyte support
+  MBYTE=yes
+! # set to yes to include IME support
+  IME=yes
+  DYNAMIC_IME=yes
+! # set to yes to enable writing a postscript file with :hardcopy
+  POSTSCRIPT=no
+! # set to yes to enable OLE support
+  OLE=no
+! # Set the default $(WINVER) to make it work with pre-Win2k
+  ifndef WINVER
+  WINVER = 0x0500
+  endif
+! # Set to yes to enable Cscope support
+  CSCOPE=yes
+! # Set to yes to enable Netbeans support
+  NETBEANS=$(GUI)
+  
+  
+--- 32,64 ----
+  # set to yes to make gvim, no for vim
+  GUI=yes
+  # FEATURES=[TINY | SMALL  | NORMAL | BIG | HUGE]
+! # Set to TINY to make minimal version (few features).
+  FEATURES=BIG
+! # Set to one of i386, i486, i586, i686 as the minimum target processor.
+! # For amd64/x64 architecture set ARCH=x86-64 .
+  ARCH=i386
+! # Set to yes to cross-compile from unix; no=native Windows.
+  CROSS=no
+! # Set to path to iconv.h and libiconv.a to enable using 'iconv.dll'.
+  #ICONV="."
+  ICONV=yes
+  GETTEXT=yes
+! # Set to yes to include multibyte support.
+  MBYTE=yes
+! # Set to yes to include IME support.
+  IME=yes
+  DYNAMIC_IME=yes
+! # Set to yes to enable writing a postscript file with :hardcopy.
+  POSTSCRIPT=no
+! # Set to yes to enable OLE support.
+  OLE=no
+! # Set the default $(WINVER) to make it work with pre-Win2k.
+  ifndef WINVER
+  WINVER = 0x0500
+  endif
+! # Set to yes to enable Cscope support.
+  CSCOPE=yes
+! # Set to yes to enable Netbeans support.
+  NETBEANS=$(GUI)
+  
+  
+***************
+*** 431,441 ****
+  endif
+  endif
+  
+- ifdef XPM
+  # Only allow XPM for a GUI build.
+  ifeq (yes, $(GUI))
+! CFLAGS += -DFEAT_XPM_W32 -I $(XPM)/include
+  endif
+  endif
+  
+  ifeq ($(DEBUG),yes)
+--- 433,464 ----
+  endif
+  endif
+  
+  # Only allow XPM for a GUI build.
+  ifeq (yes, $(GUI))
+! 
+! ifndef XPM
+! ifeq ($(ARCH),i386)
+! XPM = xpm/x86
+! endif
+! ifeq ($(ARCH),i486)
+! XPM = xpm/x86
+! endif
+! ifeq ($(ARCH),i586)
+! XPM = xpm/x86
+! endif
+! ifeq ($(ARCH),i686)
+! XPM = xpm/x86
+  endif
++ ifeq ($(ARCH),x86-64)
++ XPM = xpm/x64
++ endif
++ endif
++ ifdef XPM
++ ifneq ($(XPM),no)
++ CFLAGS += -DFEAT_XPM_W32 -I $(XPM)/include -I $(XPM)/../include
++ endif
++ endif
++ 
+  endif
+  
+  ifeq ($(DEBUG),yes)
+***************
+*** 565,574 ****
+  DEFINES += $(DEF_GUI)
+  OBJ += $(GUIOBJ)
+  LFLAGS += -mwindows
+! OUTDIR = gobj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)
+  else
+  TARGET := vim$(DEBUG_SUFFIX).exe
+! OUTDIR = obj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)
+  endif
+  
+  ifdef GETTEXT
+--- 588,597 ----
+  DEFINES += $(DEF_GUI)
+  OBJ += $(GUIOBJ)
+  LFLAGS += -mwindows
+! OUTDIR = gobj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)$(ARCH)
+  else
+  TARGET := vim$(DEBUG_SUFFIX).exe
+! OUTDIR = obj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)$(ARCH)
+  endif
+  
+  ifdef GETTEXT
+*** ../vim-7.3.652/src/Make_mvc.mak	2012-08-29 14:18:26.000000000 +0200
+--- src/Make_mvc.mak	2012-09-05 17:33:56.000000000 +0200
+***************
+*** 213,218 ****
+--- 213,219 ----
+  # We're on Windows 95
+  CPU = i386
+  !endif # !PROCESSOR_ARCHITECTURE
++ OBJDIR = $(OBJDIR)$(CPU)
+  
+  # Build a retail version by default
+  
+***************
+*** 283,292 ****
+  
+  !ifndef XPM
+  # XPM is not set, use the included xpm files, depending on the architecture.
+! !if ("$(CPU)" == "AMD64") || ("$(CPU)" == "IA64")
+  XPM = xpm\x64
+! !else
+  XPM = xpm\x86
+  !endif
+  !endif
+  !if "$(XPM)" != "no"
+--- 284,295 ----
+  
+  !ifndef XPM
+  # XPM is not set, use the included xpm files, depending on the architecture.
+! !if "$(CPU)" == "AMD64"
+  XPM = xpm\x64
+! !elseif "$(CPU)" == "i386"
+  XPM = xpm\x86
++ !else
++ XPM = no
+  !endif
+  !endif
+  !if "$(XPM)" != "no"
+*** ../vim-7.3.652/src/xpm/README.txt	2012-08-29 14:18:26.000000000 +0200
+--- src/xpm/README.txt	2012-09-05 17:35:34.000000000 +0200
+***************
+*** 10,15 ****
+--- 10,18 ----
+  MinGW:
+  mingw32-make -f Make_ming.mak GUI=yes CSCOPE=yes XPM=e:/hg/xpm/x86
+  
++ MinGW 64 for x64:
++ mingw32-make -f Make_ming.mak GUI=yes ARCH=x86-64 XPM=E:\HG\xpm\x64
++ 
+  Microsoft Visual C++ on x64 (tested with versions 2008 and 2010):
+  nmake -f Make_mvc.mak GUI=yes CSCOPE=yes XPM=E:\HG\xpm\x64
+  
+*** ../vim-7.3.652/src/version.c	2012-09-05 17:28:08.000000000 +0200
+--- src/version.c	2012-09-05 17:53:15.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     653,
+  /**/
+
+-- 
+GUARD #2:  Wait a minute -- supposing two swallows carried it together?
+GUARD #1:  No, they'd have to have it on a line.
+GUARD #2:  Well, simple!  They'd just use a standard creeper!
+GUARD #1:  What, held under the dorsal guiding feathers?
+GUARD #2:  Well, why not?
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.654 b/7.3.654
new file mode 100644
index 0000000..dca5aa7
--- /dev/null
+++ b/7.3.654
@@ -0,0 +1,150 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.654
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.654
+Problem:    When creating a Vim dictionary from Python objects an empty key
+	    might be used.
+Solution:   Do not use empty keys, throw an IndexError. (ZyX)
+Files:	    src/if_py_both.h
+
+
+*** ../vim-7.3.653/src/if_py_both.h	2012-09-05 17:28:08.000000000 +0200
+--- src/if_py_both.h	2012-09-05 18:35:18.000000000 +0200
+***************
+*** 607,612 ****
+--- 607,620 ----
+  
+  static PyTypeObject DictionaryType;
+  
++ #define DICTKEY_GET_NOTEMPTY(err) \
++     DICTKEY_GET(err) \
++     if (*key == NUL) \
++     { \
++ 	PyErr_SetString(PyExc_ValueError, _("empty keys are not allowed")); \
++ 	return err; \
++     }
++ 
+  typedef struct
+  {
+      PyObject_HEAD
+***************
+*** 659,665 ****
+  	if (valObject == NULL)
+  	    return -1;
+  
+! 	DICTKEY_GET(-1)
+  
+  	di = dictitem_alloc(key);
+  
+--- 667,673 ----
+  	if (valObject == NULL)
+  	    return -1;
+  
+! 	DICTKEY_GET_NOTEMPTY(-1)
+  
+  	di = dictitem_alloc(key);
+  
+***************
+*** 730,736 ****
+  	    return -1;
+  	}
+  
+! 	DICTKEY_GET(-1)
+  
+  	valObject = PyTuple_GetItem(litem, 1);
+  	if (valObject == NULL)
+--- 738,744 ----
+  	    return -1;
+  	}
+  
+! 	DICTKEY_GET_NOTEMPTY(-1)
+  
+  	valObject = PyTuple_GetItem(litem, 1);
+  	if (valObject == NULL)
+***************
+*** 784,799 ****
+  DictionaryItem(PyObject *self, PyObject *keyObject)
+  {
+      char_u	*key;
+!     dictitem_T	*val;
+      DICTKEY_DECL
+  
+!     DICTKEY_GET(NULL)
+  
+!     val = dict_find(((DictionaryObject *) (self))->dict, key, -1);
+  
+      DICTKEY_UNREF
+  
+!     return ConvertToPyObject(&val->di_tv);
+  }
+  
+      static PyInt
+--- 792,813 ----
+  DictionaryItem(PyObject *self, PyObject *keyObject)
+  {
+      char_u	*key;
+!     dictitem_T	*di;
+      DICTKEY_DECL
+  
+!     DICTKEY_GET_NOTEMPTY(NULL)
+! 
+!     di = dict_find(((DictionaryObject *) (self))->dict, key, -1);
+  
+!     if (di == NULL)
+!     {
+! 	PyErr_SetString(PyExc_IndexError, _("no such key in dictionary"));
+! 	return NULL;
+!     }
+  
+      DICTKEY_UNREF
+  
+!     return ConvertToPyObject(&di->di_tv);
+  }
+  
+      static PyInt
+***************
+*** 811,817 ****
+  	return -1;
+      }
+  
+!     DICTKEY_GET(-1)
+  
+      di = dict_find(d, key, -1);
+  
+--- 825,831 ----
+  	return -1;
+      }
+  
+!     DICTKEY_GET_NOTEMPTY(-1)
+  
+      di = dict_find(d, key, -1);
+  
+*** ../vim-7.3.653/src/version.c	2012-09-05 17:57:34.000000000 +0200
+--- src/version.c	2012-09-05 18:38:43.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     654,
+  /**/
+
+-- 
+MORTICIAN:    What?
+CUSTOMER:     Nothing -- here's your nine pence.
+DEAD PERSON:  I'm not dead!
+MORTICIAN:    Here -- he says he's not dead!
+CUSTOMER:     Yes, he is.
+DEAD PERSON:  I'm not!
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.655 b/7.3.655
new file mode 100644
index 0000000..fc656eb
Binary files /dev/null and b/7.3.655 differ
diff --git a/7.3.656 b/7.3.656
new file mode 100644
index 0000000..a9d768b
--- /dev/null
+++ b/7.3.656
@@ -0,0 +1,84 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.656
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.656
+Problem:    Internal error in :pyeval.
+Solution:   Handle failed object conversion. (ZyX)
+Files:	    src/if_python.c, src/if_python3.c
+
+
+*** ../vim-7.3.655/src/if_python.c	2012-06-30 13:34:29.000000000 +0200
+--- src/if_python.c	2012-09-05 18:52:50.000000000 +0200
+***************
+*** 1025,1032 ****
+  
+  static PySequenceMethods BufferAsSeq = {
+      (PyInquiry)		BufferLength,	    /* sq_length,    len(x)   */
+!     (binaryfunc)	0, /* BufferConcat, */	     /* sq_concat,    x+y      */
+!     (PyIntArgFunc)	0, /* BufferRepeat, */	     /* sq_repeat,    x*n      */
+      (PyIntArgFunc)	BufferItem,	    /* sq_item,      x[i]     */
+      (PyIntIntArgFunc)	BufferSlice,	    /* sq_slice,     x[i:j]   */
+      (PyIntObjArgProc)	BufferAssItem,	    /* sq_ass_item,  x[i]=v   */
+--- 1025,1032 ----
+  
+  static PySequenceMethods BufferAsSeq = {
+      (PyInquiry)		BufferLength,	    /* sq_length,    len(x)   */
+!     (binaryfunc)	0,		    /* BufferConcat, sq_concat, x+y */
+!     (PyIntArgFunc)	0,		    /* BufferRepeat, sq_repeat, x*n */
+      (PyIntArgFunc)	BufferItem,	    /* sq_item,      x[i]     */
+      (PyIntIntArgFunc)	BufferSlice,	    /* sq_slice,     x[i:j]   */
+      (PyIntObjArgProc)	BufferAssItem,	    /* sq_ass_item,  x[i]=v   */
+***************
+*** 1787,1792 ****
+--- 1787,1796 ----
+  	case VAR_DICT: ++rettv->vval.v_dict->dv_refcount; break;
+  	case VAR_LIST: ++rettv->vval.v_list->lv_refcount; break;
+  	case VAR_FUNC: func_ref(rettv->vval.v_string);    break;
++ 	case VAR_UNKNOWN:
++ 	    rettv->v_type = VAR_NUMBER;
++ 	    rettv->vval.v_number = 0;
++ 	    break;
+      }
+  }
+  
+*** ../vim-7.3.655/src/if_python3.c	2012-06-29 16:28:23.000000000 +0200
+--- src/if_python3.c	2012-09-05 18:52:50.000000000 +0200
+***************
+*** 1817,1822 ****
+--- 1817,1826 ----
+  	case VAR_DICT: ++rettv->vval.v_dict->dv_refcount; break;
+  	case VAR_LIST: ++rettv->vval.v_list->lv_refcount; break;
+  	case VAR_FUNC: func_ref(rettv->vval.v_string);    break;
++ 	case VAR_UNKNOWN:
++ 	    rettv->v_type = VAR_NUMBER;
++ 	    rettv->vval.v_number = 0;
++ 	    break;
+      }
+  }
+  
+*** ../vim-7.3.655/src/version.c	2012-09-05 18:48:22.000000000 +0200
+--- src/version.c	2012-09-05 18:53:20.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     656,
+  /**/
+
+-- 
+DEAD PERSON:  I'm getting better!
+CUSTOMER:     No, you're not -- you'll be stone dead in a moment.
+MORTICIAN:    Oh, I can't take him like that -- it's against regulations.
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.657 b/7.3.657
new file mode 100644
index 0000000..158acbd
--- /dev/null
+++ b/7.3.657
@@ -0,0 +1,195 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.657
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.657
+Problem:    Python bindings silently truncate string values containing NUL.
+Solution:   Fail when a string contains NUL. (ZyX)
+Files:      src/if_python.c, src/if_python3.c
+
+
+*** ../vim-7.3.656/src/if_python.c	2012-09-05 18:54:37.000000000 +0200
+--- src/if_python.c	2012-09-05 19:02:07.000000000 +0200
+***************
+*** 191,196 ****
+--- 191,197 ----
+  # define PyRun_SimpleString dll_PyRun_SimpleString
+  # define PyRun_String dll_PyRun_String
+  # define PyString_AsString dll_PyString_AsString
++ # define PyString_AsStringAndSize dll_PyString_AsStringAndSize
+  # define PyString_FromString dll_PyString_FromString
+  # define PyString_FromStringAndSize dll_PyString_FromStringAndSize
+  # define PyString_Size dll_PyString_Size
+***************
+*** 288,293 ****
+--- 289,295 ----
+  static int(*dll_PyRun_SimpleString)(char *);
+  static PyObject *(*dll_PyRun_String)(char *, int, PyObject *, PyObject *);
+  static char*(*dll_PyString_AsString)(PyObject *);
++ static int(*dll_PyString_AsStringAndSize)(PyObject *, char **, int *);
+  static PyObject*(*dll_PyString_FromString)(const char *);
+  static PyObject*(*dll_PyString_FromStringAndSize)(const char *, PyInt);
+  static PyInt(*dll_PyString_Size)(PyObject *);
+***************
+*** 406,411 ****
+--- 408,414 ----
+      {"PyRun_SimpleString", (PYTHON_PROC*)&dll_PyRun_SimpleString},
+      {"PyRun_String", (PYTHON_PROC*)&dll_PyRun_String},
+      {"PyString_AsString", (PYTHON_PROC*)&dll_PyString_AsString},
++     {"PyString_AsStringAndSize", (PYTHON_PROC*)&dll_PyString_AsStringAndSize},
+      {"PyString_FromString", (PYTHON_PROC*)&dll_PyString_FromString},
+      {"PyString_FromStringAndSize", (PYTHON_PROC*)&dll_PyString_FromStringAndSize},
+      {"PyString_Size", (PYTHON_PROC*)&dll_PyString_Size},
+***************
+*** 578,591 ****
+  static int initialised = 0;
+  #define PYINITIALISED initialised
+  
+- /* Add conversion from PyInt? */
+  #define DICTKEY_GET(err) \
+      if (!PyString_Check(keyObject)) \
+      { \
+  	PyErr_SetString(PyExc_TypeError, _("only string keys are allowed")); \
+  	return err; \
+      } \
+!     key = (char_u *) PyString_AsString(keyObject);
+  #define DICTKEY_UNREF
+  #define DICTKEY_DECL
+  
+--- 581,595 ----
+  static int initialised = 0;
+  #define PYINITIALISED initialised
+  
+  #define DICTKEY_GET(err) \
+      if (!PyString_Check(keyObject)) \
+      { \
+  	PyErr_SetString(PyExc_TypeError, _("only string keys are allowed")); \
+  	return err; \
+      } \
+!     if (PyString_AsStringAndSize(keyObject, (char **) &key, NULL) == -1) \
+! 	return err;
+! 
+  #define DICTKEY_UNREF
+  #define DICTKEY_DECL
+  
+*** ../vim-7.3.656/src/if_python3.c	2012-09-05 18:54:37.000000000 +0200
+--- src/if_python3.c	2012-09-05 19:02:07.000000000 +0200
+***************
+*** 172,177 ****
+--- 172,178 ----
+  # define PyUnicode_AsEncodedString py3_PyUnicode_AsEncodedString
+  # undef PyBytes_AsString
+  # define PyBytes_AsString py3_PyBytes_AsString
++ # define PyBytes_AsStringAndSize py3_PyBytes_AsStringAndSize
+  # undef PyBytes_FromString
+  # define PyBytes_FromString py3_PyBytes_FromString
+  # define PyFloat_FromDouble py3_PyFloat_FromDouble
+***************
+*** 273,278 ****
+--- 274,280 ----
+  static char* (*py3__PyUnicode_AsString)(PyObject *unicode);
+  static PyObject* (*py3_PyUnicode_AsEncodedString)(PyObject *unicode, const char* encoding, const char* errors);
+  static char* (*py3_PyBytes_AsString)(PyObject *bytes);
++ static int (*py3_PyBytes_AsStringAndSize)(PyObject *bytes, char **buffer, int *length);
+  static PyObject* (*py3_PyBytes_FromString)(char *str);
+  static PyObject* (*py3_PyFloat_FromDouble)(double num);
+  static double (*py3_PyFloat_AsDouble)(PyObject *);
+***************
+*** 379,384 ****
+--- 381,387 ----
+      {"PyImport_AppendInittab", (PYTHON_PROC*)&py3_PyImport_AppendInittab},
+      {"_PyUnicode_AsString", (PYTHON_PROC*)&py3__PyUnicode_AsString},
+      {"PyBytes_AsString", (PYTHON_PROC*)&py3_PyBytes_AsString},
++     {"PyBytes_AsStringAndSize", (PYTHON_PROC*)&py3_PyBytes_AsStringAndSize},
+      {"PyBytes_FromString", (PYTHON_PROC*)&py3_PyBytes_FromString},
+      {"PyFloat_FromDouble", (PYTHON_PROC*)&py3_PyFloat_FromDouble},
+      {"PyFloat_AsDouble", (PYTHON_PROC*)&py3_PyFloat_AsDouble},
+***************
+*** 544,560 ****
+  
+  #define PYINITIALISED py3initialised
+  
+! /* Add conversion from PyInt? */
+  #define DICTKEY_GET(err) \
+      if (PyBytes_Check(keyObject)) \
+! 	key = (char_u *) PyBytes_AsString(keyObject); \
+      else if (PyUnicode_Check(keyObject)) \
+      { \
+  	bytes = PyString_AsBytes(keyObject); \
+  	if (bytes == NULL) \
+  	    return err; \
+! 	key = (char_u *) PyBytes_AsString(bytes); \
+! 	if (key == NULL) \
+  	    return err; \
+      } \
+      else \
+--- 547,566 ----
+  
+  #define PYINITIALISED py3initialised
+  
+! #define DICTKEY_DECL PyObject *bytes = NULL;
+! 
+  #define DICTKEY_GET(err) \
+      if (PyBytes_Check(keyObject)) \
+!     { \
+! 	if (PyBytes_AsStringAndSize(keyObject, (char **) &key, NULL) == -1) \
+! 	    return err; \
+!     } \
+      else if (PyUnicode_Check(keyObject)) \
+      { \
+  	bytes = PyString_AsBytes(keyObject); \
+  	if (bytes == NULL) \
+  	    return err; \
+! 	if (PyBytes_AsStringAndSize(bytes, (char **) &key, NULL) == -1) \
+  	    return err; \
+      } \
+      else \
+***************
+*** 562,573 ****
+  	PyErr_SetString(PyExc_TypeError, _("only string keys are allowed")); \
+  	return err; \
+      }
+  #define DICTKEY_UNREF \
+      if (bytes != NULL) \
+  	Py_XDECREF(bytes);
+  
+- #define DICTKEY_DECL PyObject *bytes = NULL;
+- 
+  /*
+   * Include the code shared with if_python.c
+   */
+--- 568,578 ----
+  	PyErr_SetString(PyExc_TypeError, _("only string keys are allowed")); \
+  	return err; \
+      }
++ 
+  #define DICTKEY_UNREF \
+      if (bytes != NULL) \
+  	Py_XDECREF(bytes);
+  
+  /*
+   * Include the code shared with if_python.c
+   */
+*** ../vim-7.3.656/src/version.c	2012-09-05 18:54:37.000000000 +0200
+--- src/version.c	2012-09-05 19:03:03.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     657,
+  /**/
+
+-- 
+Have you heard about the new Barbie doll?  It's called Divorce
+Barbie.  It comes with all of Ken's stuff.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.658 b/7.3.658
new file mode 100644
index 0000000..eeec468
--- /dev/null
+++ b/7.3.658
@@ -0,0 +1,159 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.658
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.658
+Problem:    NUL bytes truncate strings when converted from Python.
+Solution:   Handle truncation as an error. (ZyX)
+Files:	    src/if_py_both.h, src/if_python3.c
+
+
+*** ../vim-7.3.657/src/if_py_both.h	2012-09-05 18:45:24.000000000 +0200
+--- src/if_py_both.h	2012-09-05 19:05:27.000000000 +0200
+***************
+*** 2530,2537 ****
+  #if PY_MAJOR_VERSION >= 3
+      else if (PyBytes_Check(obj))
+      {
+! 	char_u	*result = (char_u *) PyBytes_AsString(obj);
+  
+  	if (result == NULL)
+  	    return -1;
+  
+--- 2530,2539 ----
+  #if PY_MAJOR_VERSION >= 3
+      else if (PyBytes_Check(obj))
+      {
+! 	char_u	*result;
+  
++ 	if (PyString_AsStringAndSize(obj, (char **) &result, NULL) == -1)
++ 	    return -1;
+  	if (result == NULL)
+  	    return -1;
+  
+***************
+*** 2549,2555 ****
+  	if (bytes == NULL)
+  	    return -1;
+  
+! 	result = (char_u *) PyBytes_AsString(bytes);
+  	if (result == NULL)
+  	    return -1;
+  
+--- 2551,2558 ----
+  	if (bytes == NULL)
+  	    return -1;
+  
+! 	if(PyString_AsStringAndSize(bytes, (char **) &result, NULL) == -1)
+! 	    return -1;
+  	if (result == NULL)
+  	    return -1;
+  
+***************
+*** 2572,2578 ****
+  	if (bytes == NULL)
+  	    return -1;
+  
+! 	result=(char_u *) PyString_AsString(bytes);
+  	if (result == NULL)
+  	    return -1;
+  
+--- 2575,2582 ----
+  	if (bytes == NULL)
+  	    return -1;
+  
+! 	if(PyString_AsStringAndSize(bytes, (char **) &result, NULL) == -1)
+! 	    return -1;
+  	if (result == NULL)
+  	    return -1;
+  
+***************
+*** 2587,2594 ****
+      }
+      else if (PyString_Check(obj))
+      {
+! 	char_u	*result = (char_u *) PyString_AsString(obj);
+  
+  	if (result == NULL)
+  	    return -1;
+  
+--- 2591,2600 ----
+      }
+      else if (PyString_Check(obj))
+      {
+! 	char_u	*result;
+  
++ 	if(PyString_AsStringAndSize(obj, (char **) &result, NULL) == -1)
++ 	    return -1;
+  	if (result == NULL)
+  	    return -1;
+  
+*** ../vim-7.3.657/src/if_python3.c	2012-09-05 19:03:51.000000000 +0200
+--- src/if_python3.c	2012-09-05 19:05:27.000000000 +0200
+***************
+*** 85,90 ****
+--- 85,91 ----
+  #define PyString_AsString(obj) PyBytes_AsString(obj)
+  #define PyString_Size(obj) PyBytes_GET_SIZE(bytes)
+  #define PyString_FromString(repr) PyUnicode_FromString(repr)
++ #define PyString_AsStringAndSize(obj, buffer, len) PyBytes_AsStringAndSize(obj, buffer, len)
+  
+  #if defined(DYNAMIC_PYTHON3) || defined(PROTO)
+  
+***************
+*** 552,558 ****
+  #define DICTKEY_GET(err) \
+      if (PyBytes_Check(keyObject)) \
+      { \
+! 	if (PyBytes_AsStringAndSize(keyObject, (char **) &key, NULL) == -1) \
+  	    return err; \
+      } \
+      else if (PyUnicode_Check(keyObject)) \
+--- 553,559 ----
+  #define DICTKEY_GET(err) \
+      if (PyBytes_Check(keyObject)) \
+      { \
+! 	if (PyString_AsStringAndSize(keyObject, (char **) &key, NULL) == -1) \
+  	    return err; \
+      } \
+      else if (PyUnicode_Check(keyObject)) \
+***************
+*** 560,566 ****
+  	bytes = PyString_AsBytes(keyObject); \
+  	if (bytes == NULL) \
+  	    return err; \
+! 	if (PyBytes_AsStringAndSize(bytes, (char **) &key, NULL) == -1) \
+  	    return err; \
+      } \
+      else \
+--- 561,567 ----
+  	bytes = PyString_AsBytes(keyObject); \
+  	if (bytes == NULL) \
+  	    return err; \
+! 	if (PyString_AsStringAndSize(bytes, (char **) &key, NULL) == -1) \
+  	    return err; \
+      } \
+      else \
+*** ../vim-7.3.657/src/version.c	2012-09-05 19:03:51.000000000 +0200
+--- src/version.c	2012-09-05 19:07:40.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     658,
+  /**/
+
+-- 
+You know you use Vim too much when you have this alias in your
+~/.bashrc file: alias :e=/bin/vim             (Eljay Love-Jensen)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.659 b/7.3.659
new file mode 100644
index 0000000..2a30e67
--- /dev/null
+++ b/7.3.659
@@ -0,0 +1,295 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.659
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.659
+Problem:    Recent Python changes are not tested.
+Solution:   Add tests for Python bindings. (ZyX)
+Files:	    src/testdir/test86.in, src/testdir/test86.ok,
+	    src/testdir/test87.in, src/testdir/test87.ok
+
+
+*** ../vim-7.3.658/src/testdir/test86.in	2012-06-29 12:54:32.000000000 +0200
+--- src/testdir/test86.in	2012-09-05 19:11:36.000000000 +0200
+***************
+*** 176,203 ****
+  :else
+  :   $put ='[0.0, 0.0]'
+  :endif
+  :"
+  :" pyeval()
+  :let l=pyeval('range(3)')
+  :$put =string(l)
+  :let d=pyeval('{"a": "b", "c": 1, "d": ["e"]}')
+  :$put =sort(items(d))
+- :try
+- :   let undef=pyeval('undefined_name')
+- :catch
+- :   $put =v:exception[:13]
+- :endtry
+- :try
+- :   let vim=pyeval('vim')
+- :catch
+- :   $put =v:exception[:13]
+- :endtry
+  :if has('float')
+  :   let f=pyeval('0.0')
+  :   $put =string(f)
+  :else
+  :   $put ='0.0'
+  :endif
+  :endfun
+  :"
+  :call Test()
+--- 176,237 ----
+  :else
+  :   $put ='[0.0, 0.0]'
+  :endif
++ :let messages=[]
++ :py <<EOF
++ d=vim.bindeval('{}')
++ m=vim.bindeval('messages')
++ try:
++     d['abc']
++ except Exception as e:
++     m.extend([e.__class__.__name__])
++ 
++ try:
++     d['abc']="\0"
++ except Exception as e:
++     m.extend([e.__class__.__name__])
++ 
++ try:
++     d['abc']=vim
++ except Exception as e:
++     m.extend([e.__class__.__name__])
++ 
++ try:
++     d['']=1
++ except Exception as e:
++     m.extend([e.__class__.__name__])
++ 
++ try:
++     d['a\0b']=1
++ except Exception as e:
++     m.extend([e.__class__.__name__])
++ 
++ try:
++     d[b'a\0b']=1
++ except Exception as e:
++     m.extend([e.__class__.__name__])
++ EOF
++ :$put =messages
+  :"
+  :" pyeval()
+  :let l=pyeval('range(3)')
+  :$put =string(l)
+  :let d=pyeval('{"a": "b", "c": 1, "d": ["e"]}')
+  :$put =sort(items(d))
+  :if has('float')
+  :   let f=pyeval('0.0')
+  :   $put =string(f)
+  :else
+  :   $put ='0.0'
+  :endif
++ :" Invalid values:
++ :for e in ['"\0"', '{"\0": 1}', 'undefined_name', 'vim']
++ :   try
++ :      let v=pyeval(e)
++ :   catch
++ :      let toput=e.":\t".v:exception[:13]
++ :      $put =toput
++ :   endtry
++ :endfor
+  :endfun
+  :"
+  :call Test()
+*** ../vim-7.3.658/src/testdir/test86.ok	2012-06-29 12:54:32.000000000 +0200
+--- src/testdir/test86.ok	2012-09-05 19:11:36.000000000 +0200
+***************
+*** 38,47 ****
+  Vim(python):E725:
+  Vim(python):E117:
+  [0.0, 0.0]
+  [0, 1, 2]
+  ['a', 'b']
+  ['c', 1]
+  ['d', ['e']]
+- Vim(let):E858:
+- Vim(let):E859:
+  0.0
+--- 38,55 ----
+  Vim(python):E725:
+  Vim(python):E117:
+  [0.0, 0.0]
++ IndexError
++ TypeError
++ TypeError
++ ValueError
++ TypeError
++ TypeError
+  [0, 1, 2]
+  ['a', 'b']
+  ['c', 1]
+  ['d', ['e']]
+  0.0
++ "\0":	Vim(let):E859:
++ {"\0": 1}:	Vim(let):E859:
++ undefined_name:	Vim(let):E858:
++ vim:	Vim(let):E859:
+*** ../vim-7.3.658/src/testdir/test87.in	2012-06-29 12:54:32.000000000 +0200
+--- src/testdir/test87.in	2012-09-05 19:11:36.000000000 +0200
+***************
+*** 176,203 ****
+  :else
+  :   $put ='[0.0, 0.0]'
+  :endif
+  :"
+  :" py3eval()
+  :let l=py3eval('[0, 1, 2]')
+  :$put =string(l)
+  :let d=py3eval('{"a": "b", "c": 1, "d": ["e"]}')
+  :$put =sort(items(d))
+- :try
+- :   let undef=py3eval('undefined_name')
+- :catch
+- :   $put =v:exception[:13]
+- :endtry
+- :try
+- :   let vim=py3eval('vim')
+- :catch
+- :   $put =v:exception[:13]
+- :endtry
+  :if has('float')
+  :   let f=py3eval('0.0')
+  :   $put =string(f)
+  :else
+  :   $put ='0.0'
+  :endif
+  :endfun
+  :"
+  :call Test()
+--- 176,237 ----
+  :else
+  :   $put ='[0.0, 0.0]'
+  :endif
++ :let messages=[]
++ :py3 <<EOF
++ d=vim.bindeval('{}')
++ m=vim.bindeval('messages')
++ try:
++     d['abc']
++ except Exception as e:
++     m.extend([e.__class__.__name__])
++ 
++ try:
++     d['abc']="\0"
++ except Exception as e:
++     m.extend([e.__class__.__name__])
++ 
++ try:
++     d['abc']=vim
++ except Exception as e:
++     m.extend([e.__class__.__name__])
++ 
++ try:
++     d['']=1
++ except Exception as e:
++     m.extend([e.__class__.__name__])
++ 
++ try:
++     d['a\0b']=1
++ except Exception as e:
++     m.extend([e.__class__.__name__])
++ 
++ try:
++     d[b'a\0b']=1
++ except Exception as e:
++     m.extend([e.__class__.__name__])
++ EOF
++ :$put =messages
+  :"
+  :" py3eval()
+  :let l=py3eval('[0, 1, 2]')
+  :$put =string(l)
+  :let d=py3eval('{"a": "b", "c": 1, "d": ["e"]}')
+  :$put =sort(items(d))
+  :if has('float')
+  :   let f=py3eval('0.0')
+  :   $put =string(f)
+  :else
+  :   $put ='0.0'
+  :endif
++ :" Invalid values:
++ :for e in ['"\0"', '{"\0": 1}', 'undefined_name', 'vim']
++ :   try
++ :      let v=py3eval(e)
++ :   catch
++ :      let toput=e.":\t".v:exception[:13]
++ :      $put =toput
++ :   endtry
++ :endfor
+  :endfun
+  :"
+  :call Test()
+*** ../vim-7.3.658/src/testdir/test87.ok	2012-06-29 12:54:32.000000000 +0200
+--- src/testdir/test87.ok	2012-09-05 19:11:36.000000000 +0200
+***************
+*** 38,47 ****
+  Vim(py3):E725:
+  Vim(py3):E117:
+  [0.0, 0.0]
+  [0, 1, 2]
+  ['a', 'b']
+  ['c', 1]
+  ['d', ['e']]
+- Vim(let):E860:
+- Vim(let):E861:
+  0.0
+--- 38,55 ----
+  Vim(py3):E725:
+  Vim(py3):E117:
+  [0.0, 0.0]
++ IndexError
++ TypeError
++ TypeError
++ ValueError
++ TypeError
++ TypeError
+  [0, 1, 2]
+  ['a', 'b']
+  ['c', 1]
+  ['d', ['e']]
+  0.0
++ "\0":	Vim(let):E861:
++ {"\0": 1}:	Vim(let):E861:
++ undefined_name:	Vim(let):E860:
++ vim:	Vim(let):E861:
+*** ../vim-7.3.658/src/version.c	2012-09-05 19:09:06.000000000 +0200
+--- src/version.c	2012-09-05 19:16:52.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     659,
+  /**/
+
+-- 
+DEAD PERSON:  I don't want to go in the cart!
+CUSTOMER:     Oh, don't be such a baby.
+MORTICIAN:    I can't take him...
+DEAD PERSON:  I feel fine!
+CUSTOMER:     Oh, do us a favor...
+MORTICIAN:    I can't.
+                                  The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.660 b/7.3.660
new file mode 100644
index 0000000..9c54170
--- /dev/null
+++ b/7.3.660
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.660
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.660
+Problem:    ":help !" jumps to help for ":!".
+Solution:   Adjust check for tag header line. (Andy Wokula)
+Files:	    src/tag.c
+
+
+*** ../vim-7.3.659/src/tag.c	2012-09-05 15:03:27.000000000 +0200
+--- src/tag.c	2012-09-12 18:10:01.000000000 +0200
+***************
+*** 1797,1803 ****
+  	     */
+  	    if (state == TS_START)
+  	    {
+! 		if (STRNCMP(lbuf, "!_TAG_", 6) <= 0)
+  		{
+  		    /*
+  		     * Read header line.
+--- 1797,1803 ----
+  	     */
+  	    if (state == TS_START)
+  	    {
+! 		if (STRNCMP(lbuf, "!_TAG_", 6) == 0)
+  		{
+  		    /*
+  		     * Read header line.
+*** ../vim-7.3.659/src/version.c	2012-09-05 19:17:37.000000000 +0200
+--- src/version.c	2012-09-12 18:18:30.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     660,
+  /**/
+
+-- 
+Q: How does a UNIX Guru pick up a girl?
+A: look; grep; which; eval; nice; uname; talk; date;
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.661 b/7.3.661
new file mode 100644
index 0000000..3193e01
--- /dev/null
+++ b/7.3.661
@@ -0,0 +1,160 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.661
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.661 (after 7.3.652)
+Problem:    SEGV in Python code.
+Solution:   Initialize len to zero.  Use the right function depending on
+	    version. (Maxim Philippov)
+Files:	    src/if_py_both.h, src/if_python.c, src/if_python3.c
+
+
+*** ../vim-7.3.660/src/if_py_both.h	2012-09-05 19:09:06.000000000 +0200
+--- src/if_py_both.h	2012-09-12 19:50:07.000000000 +0200
+***************
+*** 74,80 ****
+      static PyObject *
+  OutputWrite(PyObject *self, PyObject *args)
+  {
+!     Py_ssize_t len;
+      char *str = NULL;
+      int error = ((OutputObject *)(self))->error;
+  
+--- 74,80 ----
+      static PyObject *
+  OutputWrite(PyObject *self, PyObject *args)
+  {
+!     Py_ssize_t len = 0;
+      char *str = NULL;
+      int error = ((OutputObject *)(self))->error;
+  
+*** ../vim-7.3.660/src/if_python.c	2012-09-05 19:03:51.000000000 +0200
+--- src/if_python.c	2012-09-12 19:52:10.000000000 +0200
+***************
+*** 44,51 ****
+  # undef _XOPEN_SOURCE	/* pyconfig.h defines it as well. */
+  #endif
+  
+- #define PY_SSIZE_T_CLEAN
+- 
+  #include <Python.h>
+  #if defined(MACOS) && !defined(MACOS_X_UNIX)
+  # include "macglue.h"
+--- 44,49 ----
+***************
+*** 54,59 ****
+--- 52,61 ----
+  #undef main /* Defined in python.h - aargh */
+  #undef HAVE_FCNTL_H /* Clash with os_win32.h */
+  
++ #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000
++ # define PY_SSIZE_T_CLEAN
++ #endif
++ 
+  static void init_structs(void);
+  
+  #define PyBytes_FromString PyString_FromString
+***************
+*** 358,365 ****
+--- 360,374 ----
+      PYTHON_PROC *ptr;
+  } python_funcname_table[] =
+  {
++ #ifndef PY_SSIZE_T_CLEAN
+      {"PyArg_Parse", (PYTHON_PROC*)&dll_PyArg_Parse},
+      {"PyArg_ParseTuple", (PYTHON_PROC*)&dll_PyArg_ParseTuple},
++     {"Py_BuildValue", (PYTHON_PROC*)&dll_Py_BuildValue},
++ #else
++     {"_PyArg_Parse_SizeT", (PYTHON_PROC*)&dll_PyArg_Parse},
++     {"_PyArg_ParseTuple_SizeT", (PYTHON_PROC*)&dll_PyArg_ParseTuple},
++     {"_Py_BuildValue_SizeT", (PYTHON_PROC*)&dll_Py_BuildValue},
++ #endif
+      {"PyMem_Free", (PYTHON_PROC*)&dll_PyMem_Free},
+      {"PyMem_Malloc", (PYTHON_PROC*)&dll_PyMem_Malloc},
+      {"PyDict_SetItemString", (PYTHON_PROC*)&dll_PyDict_SetItemString},
+***************
+*** 422,428 ****
+      {"PySys_SetArgv", (PYTHON_PROC*)&dll_PySys_SetArgv},
+      {"PyType_Type", (PYTHON_PROC*)&dll_PyType_Type},
+      {"PyType_Ready", (PYTHON_PROC*)&dll_PyType_Ready},
+-     {"Py_BuildValue", (PYTHON_PROC*)&dll_Py_BuildValue},
+      {"Py_FindMethod", (PYTHON_PROC*)&dll_Py_FindMethod},
+  # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000 \
+  	&& SIZEOF_SIZE_T != SIZEOF_INT
+--- 431,436 ----
+*** ../vim-7.3.660/src/if_python3.c	2012-09-05 19:09:06.000000000 +0200
+--- src/if_python3.c	2012-09-12 19:52:10.000000000 +0200
+***************
+*** 42,49 ****
+  # undef _DEBUG
+  #endif
+  
+- #define PY_SSIZE_T_CLEAN
+- 
+  #ifdef F_BLANK
+  # undef F_BLANK
+  #endif
+--- 42,47 ----
+***************
+*** 66,71 ****
+--- 64,73 ----
+  #undef main /* Defined in python.h - aargh */
+  #undef HAVE_FCNTL_H /* Clash with os_win32.h */
+  
++ #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000
++ # define PY_SSIZE_T_CLEAN
++ #endif
++ 
+  static void init_structs(void);
+  
+  /* The "surrogateescape" error handler is new in Python 3.1 */
+***************
+*** 328,334 ****
+--- 330,342 ----
+      {"PySys_SetArgv", (PYTHON_PROC*)&py3_PySys_SetArgv},
+      {"Py_SetPythonHome", (PYTHON_PROC*)&py3_Py_SetPythonHome},
+      {"Py_Initialize", (PYTHON_PROC*)&py3_Py_Initialize},
++ #ifndef PY_SSIZE_T_CLEAN
+      {"PyArg_ParseTuple", (PYTHON_PROC*)&py3_PyArg_ParseTuple},
++     {"Py_BuildValue", (PYTHON_PROC*)&py3_Py_BuildValue},
++ #else
++     {"_PyArg_ParseTuple_SizeT", (PYTHON_PROC*)&py3_PyArg_ParseTuple},
++     {"_Py_BuildValue_SizeT", (PYTHON_PROC*)&py3_Py_BuildValue},
++ #endif
+      {"PyMem_Free", (PYTHON_PROC*)&py3_PyMem_Free},
+      {"PyMem_Malloc", (PYTHON_PROC*)&py3_PyMem_Malloc},
+      {"PyList_New", (PYTHON_PROC*)&py3_PyList_New},
+***************
+*** 364,370 ****
+      {"PyObject_GetIter", (PYTHON_PROC*)&py3_PyObject_GetIter},
+      {"PyLong_FromLong", (PYTHON_PROC*)&py3_PyLong_FromLong},
+      {"PyDict_New", (PYTHON_PROC*)&py3_PyDict_New},
+-     {"Py_BuildValue", (PYTHON_PROC*)&py3_Py_BuildValue},
+      {"PyType_Ready", (PYTHON_PROC*)&py3_PyType_Ready},
+      {"PyDict_SetItemString", (PYTHON_PROC*)&py3_PyDict_SetItemString},
+      {"PyLong_AsLong", (PYTHON_PROC*)&py3_PyLong_AsLong},
+--- 372,377 ----
+*** ../vim-7.3.660/src/version.c	2012-09-12 18:19:39.000000000 +0200
+--- src/version.c	2012-09-12 19:53:52.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     661,
+  /**/
+
+-- 
+Courtroom Quote #19:
+Q:  Doctor, how many autopsies have you performed on dead people?
+A:  All my autopsies have been performed on dead people.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.662 b/7.3.662
new file mode 100644
index 0000000..609e0c5
--- /dev/null
+++ b/7.3.662
@@ -0,0 +1,81 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.662
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.662
+Problem:    Can't build Ruby interface with Ruby 1.9.3.
+Solution:   Add missing functions. (V. Ondruch)
+Files:	    src/if_ruby.c
+
+
+*** ../vim-7.3.661/src/if_ruby.c	2012-04-25 12:28:05.000000000 +0200
+--- src/if_ruby.c	2012-09-18 16:31:45.000000000 +0200
+***************
+*** 178,183 ****
+--- 178,186 ----
+  #define rb_hash_new			dll_rb_hash_new
+  #define rb_inspect			dll_rb_inspect
+  #define rb_int2inum			dll_rb_int2inum
++ #define rb_fix2int			dll_rb_fix2int
++ #define rb_num2int			dll_rb_num2int
++ #define rb_num2uint			dll_rb_num2uint
+  #define rb_lastline_get			dll_rb_lastline_get
+  #define rb_lastline_set			dll_rb_lastline_set
+  #define rb_load_protect			dll_rb_load_protect
+***************
+*** 268,274 ****
+  static VALUE (*dll_rb_hash_new) (void);
+  static VALUE (*dll_rb_inspect) (VALUE);
+  static VALUE (*dll_rb_int2inum) (long);
+! static VALUE (*dll_rb_int2inum) (long);
+  static VALUE (*dll_rb_lastline_get) (void);
+  static void (*dll_rb_lastline_set) (VALUE);
+  static void (*dll_rb_load_protect) (VALUE, int, int*);
+--- 271,279 ----
+  static VALUE (*dll_rb_hash_new) (void);
+  static VALUE (*dll_rb_inspect) (VALUE);
+  static VALUE (*dll_rb_int2inum) (long);
+! static long (*dll_rb_fix2int) (VALUE);
+! static long (*dll_rb_num2int) (VALUE);
+! static unsigned long (*dll_rb_num2uint) (VALUE);
+  static VALUE (*dll_rb_lastline_get) (void);
+  static void (*dll_rb_lastline_set) (VALUE);
+  static void (*dll_rb_load_protect) (VALUE, int, int*);
+***************
+*** 377,382 ****
+--- 382,390 ----
+      {"rb_hash_new", (RUBY_PROC*)&dll_rb_hash_new},
+      {"rb_inspect", (RUBY_PROC*)&dll_rb_inspect},
+      {"rb_int2inum", (RUBY_PROC*)&dll_rb_int2inum},
++     {"rb_fix2int", (RUBY_PROC*)&dll_rb_fix2int},
++     {"rb_num2int", (RUBY_PROC*)&dll_rb_num2int},
++     {"rb_num2uint", (RUBY_PROC*)&dll_rb_num2uint},
+      {"rb_lastline_get", (RUBY_PROC*)&dll_rb_lastline_get},
+      {"rb_lastline_set", (RUBY_PROC*)&dll_rb_lastline_set},
+      {"rb_load_protect", (RUBY_PROC*)&dll_rb_load_protect},
+*** ../vim-7.3.661/src/version.c	2012-09-12 20:21:38.000000000 +0200
+--- src/version.c	2012-09-18 16:35:53.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     662,
+  /**/
+
+-- 
+FATHER: We are here today to witness the union of two young people in the
+        joyful bond of the holy wedlock.  Unfortunately, one of them, my son
+        Herbert, has just fallen to his death.
+   [Murmurs from CROWD;  the BRIDE smiles with relief, coughs.]
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.663 b/7.3.663
new file mode 100644
index 0000000..a6154f4
--- /dev/null
+++ b/7.3.663
@@ -0,0 +1,54 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.663
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.663
+Problem:    End of color scheme name not clear in E185. (Aaron Lewis)
+Solution:   Put the name in single quotes.
+Files:	    src/ex_docmd.c
+
+
+*** ../vim-7.3.662/src/ex_docmd.c	2012-08-23 18:43:06.000000000 +0200
+--- src/ex_docmd.c	2012-09-14 20:49:29.000000000 +0200
+***************
+*** 6466,6472 ****
+  #endif
+      }
+      else if (load_colors(eap->arg) == FAIL)
+! 	EMSG2(_("E185: Cannot find color scheme %s"), eap->arg);
+  }
+  
+      static void
+--- 6466,6472 ----
+  #endif
+      }
+      else if (load_colors(eap->arg) == FAIL)
+! 	EMSG2(_("E185: Cannot find color scheme '%s'"), eap->arg);
+  }
+  
+      static void
+*** ../vim-7.3.662/src/version.c	2012-09-18 16:36:26.000000000 +0200
+--- src/version.c	2012-09-18 16:44:57.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     663,
+  /**/
+
+-- 
+Yesterday is history.
+Tomorrow is a mystery.
+Today is a gift.
+That's why it is called 'present'.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.664 b/7.3.664
new file mode 100644
index 0000000..b83c382
--- /dev/null
+++ b/7.3.664
@@ -0,0 +1,78 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.664
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.664
+Problem:    Buffer overflow in unescaping text. (Raymond Ko)
+Solution:   Limit check for multi-byte character to 4 bytes.
+Files:	    src/mbyte.c
+
+
+*** ../vim-7.3.663/src/mbyte.c	2012-06-01 17:46:52.000000000 +0200
+--- src/mbyte.c	2012-09-18 17:53:05.000000000 +0200
+***************
+*** 3793,3805 ****
+  mb_unescape(pp)
+      char_u **pp;
+  {
+!     static char_u	buf[MB_MAXBYTES + 1];
+!     int			n, m = 0;
+      char_u		*str = *pp;
+  
+      /* Must translate K_SPECIAL KS_SPECIAL KE_FILLER to K_SPECIAL and CSI
+!      * KS_EXTRA KE_CSI to CSI. */
+!     for (n = 0; str[n] != NUL && m <= MB_MAXBYTES; ++n)
+      {
+  	if (str[n] == K_SPECIAL
+  		&& str[n + 1] == KS_SPECIAL
+--- 3793,3807 ----
+  mb_unescape(pp)
+      char_u **pp;
+  {
+!     static char_u	buf[6];
+!     int			n;
+!     int			m = 0;
+      char_u		*str = *pp;
+  
+      /* Must translate K_SPECIAL KS_SPECIAL KE_FILLER to K_SPECIAL and CSI
+!      * KS_EXTRA KE_CSI to CSI.
+!      * Maximum length of a utf-8 character is 4 bytes. */
+!     for (n = 0; str[n] != NUL && m < 4; ++n)
+      {
+  	if (str[n] == K_SPECIAL
+  		&& str[n + 1] == KS_SPECIAL
+***************
+*** 3836,3841 ****
+--- 3838,3847 ----
+  	    *pp = str + n + 1;
+  	    return buf;
+  	}
++ 
++ 	/* Bail out quickly for ASCII. */
++ 	if (buf[0] < 128)
++ 	    break;
+      }
+      return NULL;
+  }
+*** ../vim-7.3.663/src/version.c	2012-09-18 16:47:00.000000000 +0200
+--- src/version.c	2012-09-18 18:01:14.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     664,
+  /**/
+
+-- 
+There are three kinds of people: Those who can count & those who can't.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.665 b/7.3.665
new file mode 100644
index 0000000..2f6c30e
--- /dev/null
+++ b/7.3.665
@@ -0,0 +1,80 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.665
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.665
+Problem:    MSVC 11 is not supported.
+Solution:   Recognize MSVC 11. (Raymond Ko)
+Files:	    src/Make_mvc.mak
+
+
+*** ../vim-7.3.664/src/Make_mvc.mak	2012-09-05 17:57:34.000000000 +0200
+--- src/Make_mvc.mak	2012-09-18 18:24:48.000000000 +0200
+***************
+*** 395,400 ****
+--- 395,403 ----
+  !if "$(_NMAKE_VER)" == "10.00.30319.01"
+  MSVCVER = 10.0
+  !endif
++ !if "$(_NMAKE_VER)" == "11.00.50727.1"
++ MSVCVER = 11.0
++ !endif
+  !endif
+  
+  # Abort bulding VIM if version of VC is unrecognised.
+***************
+*** 409,415 ****
+  !endif
+  
+  # Convert processor ID to MVC-compatible number
+! !if ("$(MSVCVER)" != "8.0") && ("$(MSVCVER)" != "9.0") && ("$(MSVCVER)" != "10.0")
+  !if "$(CPUNR)" == "i386"
+  CPUARG = /G3
+  !elseif "$(CPUNR)" == "i486"
+--- 412,418 ----
+  !endif
+  
+  # Convert processor ID to MVC-compatible number
+! !if ("$(MSVCVER)" != "8.0") && ("$(MSVCVER)" != "9.0") && ("$(MSVCVER)" != "10.0") && ("$(MSVCVER)" != "11.0")
+  !if "$(CPUNR)" == "i386"
+  CPUARG = /G3
+  !elseif "$(CPUNR)" == "i486"
+***************
+*** 443,449 ****
+  OPTFLAG = /Ox
+  !endif
+  
+! !if ("$(MSVCVER)" == "8.0") || ("$(MSVCVER)" == "9.0") || ("$(MSVCVER)" == "10.0")
+  # Use link time code generation if not worried about size
+  !if "$(OPTIMIZE)" != "SPACE"
+  OPTFLAG = $(OPTFLAG) /GL
+--- 446,452 ----
+  OPTFLAG = /Ox
+  !endif
+  
+! !if ("$(MSVCVER)" == "8.0") || ("$(MSVCVER)" == "9.0") || ("$(MSVCVER)" == "10.0") || ("$(MSVCVER)" == "11.0")
+  # Use link time code generation if not worried about size
+  !if "$(OPTIMIZE)" != "SPACE"
+  OPTFLAG = $(OPTFLAG) /GL
+*** ../vim-7.3.664/src/version.c	2012-09-18 18:03:33.000000000 +0200
+--- src/version.c	2012-09-18 18:26:16.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     665,
+  /**/
+
+-- 
+There are 10 kinds of people: Those who understand binary and those who don't.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.666 b/7.3.666
new file mode 100644
index 0000000..42900d1
--- /dev/null
+++ b/7.3.666
@@ -0,0 +1,95 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.6
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.666
+Problem:    With MSVC 11 Win32.mak is not found.
+Solution:   Add the SDK_INCLUDE_DIR variable. (Raymond Ko)
+Files:	    src/Make_mvc.mak
+
+
+*** ../vim-7.3.665/src/Make_mvc.mak	2012-09-18 18:27:07.000000000 +0200
+--- src/Make_mvc.mak	2012-09-18 21:58:09.000000000 +0200
+***************
+*** 1,7 ****
+  # Makefile for Vim on Win32 (Windows NT/2000/XP/2003 and Windows 95/98/Me)
+  # and Win64, using the Microsoft Visual C++ compilers. Known to work with
+  # VC5, VC6 (VS98), VC7.0 (VS2002), VC7.1 (VS2003), VC8 (VS2005),
+! # VC9 (VS2008), and VC10 (VS2010).
+  #
+  # To build using other Windows compilers, see INSTALLpc.txt
+  #
+--- 1,7 ----
+  # Makefile for Vim on Win32 (Windows NT/2000/XP/2003 and Windows 95/98/Me)
+  # and Win64, using the Microsoft Visual C++ compilers. Known to work with
+  # VC5, VC6 (VS98), VC7.0 (VS2002), VC7.1 (VS2003), VC8 (VS2005),
+! # VC9 (VS2008), VC10 (VS2010) and VC11 (VS2012)
+  #
+  # To build using other Windows compilers, see INSTALLpc.txt
+  #
+***************
+*** 15,20 ****
+--- 15,23 ----
+  # This will build the console version of Vim with no additional interfaces.
+  # To add features, define any of the following:
+  #
++ # 	For MSVC 11 you need to specify where the Win32.mak file is, e.g.:
++ # 	   SDK_INCLUDE_DIR="C:\Program Files\Microsoft SDKs\Windows\v7.1\Include"
++ #
+  #	!!!!  After changing features do "nmake clean" first  !!!!
+  #
+  #       Feature Set: FEATURES=[TINY, SMALL, NORMAL, BIG, HUGE] (default is BIG)
+***************
+*** 227,233 ****
+--- 230,241 ----
+  
+  # Get all sorts of useful, standard macros from the Platform SDK.
+  
++ !ifdef SDK_INCLUDE_DIR
++ !include $(SDK_INCLUDE_DIR)\Win32.mak
++ !else
+  !include <Win32.mak>
++ !endif
++ 
+  
+  # Flag to turn on Win64 compatibility warnings for VC7.x and VC8.
+  WP64CHECK = /Wp64
+***************
+*** 911,917 ****
+  
+  # Report link time code generation progress if used. 
+  !ifdef NODEBUG
+! !if ("$(MSVCVER)" == "8.0") || ("$(MSVCVER)" == "9.0") || ("$(MSVCVER)" == "10.0")
+  !if "$(OPTIMIZE)" != "SPACE"
+  LINKARGS1 = $(LINKARGS1) /LTCG:STATUS
+  !endif
+--- 919,925 ----
+  
+  # Report link time code generation progress if used. 
+  !ifdef NODEBUG
+! !if ("$(MSVCVER)" == "8.0") || ("$(MSVCVER)" == "9.0") || ("$(MSVCVER)" == "10.0") || ("$(MSVCVER)" == "11.0")
+  !if "$(OPTIMIZE)" != "SPACE"
+  LINKARGS1 = $(LINKARGS1) /LTCG:STATUS
+  !endif
+*** ../vim-7.3.665/src/version.c	2012-09-18 18:27:07.000000000 +0200
+--- src/version.c	2012-09-18 21:58:44.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     666,
+  /**/
+
+-- 
+Be nice to your kids...  they'll be the ones choosing your nursing home.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.667 b/7.3.667
new file mode 100644
index 0000000..3f9f024
--- /dev/null
+++ b/7.3.667
@@ -0,0 +1,86 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.667
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.667
+Problem:    Unused variables in Perl interface.
+Solution:   Adjust #ifdefs.
+Files:	    src/if_perl.xs
+
+
+*** ../vim-7.3.666/src/if_perl.xs	2012-08-08 13:17:26.000000000 +0200
+--- src/if_perl.xs	2012-09-21 12:39:29.000000000 +0200
+***************
+*** 315,320 ****
+--- 315,323 ----
+  static void (*Perl_sv_free2)(pTHX_ SV*);
+  static void (*Perl_sys_init)(int* argc, char*** argv);
+  static void (*Perl_sys_term)(void);
++ static void (*Perl_call_list)(pTHX_ I32, AV*);
++ # if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
++ # else
+  static SV** (*Perl_ISv_ptr)(register PerlInterpreter*);
+  static SV*** (*Perl_Istack_max_ptr)(register PerlInterpreter*);
+  static SV*** (*Perl_Istack_base_ptr)(register PerlInterpreter*);
+***************
+*** 326,341 ****
+  static I32** (*Perl_Imarkstack_max_ptr)(register PerlInterpreter*);
+  static SV*** (*Perl_Istack_sp_ptr)(register PerlInterpreter*);
+  static OP** (*Perl_Iop_ptr)(register PerlInterpreter*);
+- static void (*Perl_call_list)(pTHX_ I32, AV*);
+  static I32* (*Perl_Iscopestack_ix_ptr)(register PerlInterpreter*);
+  static AV** (*Perl_Iunitcheckav_ptr)(register PerlInterpreter*);
+  #endif
+  
+  static GV** (*Perl_Idefgv_ptr)(register PerlInterpreter*);
+  static GV** (*Perl_Ierrgv_ptr)(register PerlInterpreter*);
+  static SV* (*Perl_Isv_yes_ptr)(register PerlInterpreter*);
+- static void (*boot_DynaLoader)_((pTHX_ CV*));
+  static perl_key* (*Perl_Gthr_key_ptr)_((pTHX));
+  
+  /*
+   * Table of name to function pointer of perl.
+--- 329,347 ----
+  static I32** (*Perl_Imarkstack_max_ptr)(register PerlInterpreter*);
+  static SV*** (*Perl_Istack_sp_ptr)(register PerlInterpreter*);
+  static OP** (*Perl_Iop_ptr)(register PerlInterpreter*);
+  static I32* (*Perl_Iscopestack_ix_ptr)(register PerlInterpreter*);
+  static AV** (*Perl_Iunitcheckav_ptr)(register PerlInterpreter*);
++ # endif
+  #endif
+  
++ #if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
++ #else
+  static GV** (*Perl_Idefgv_ptr)(register PerlInterpreter*);
+  static GV** (*Perl_Ierrgv_ptr)(register PerlInterpreter*);
+  static SV* (*Perl_Isv_yes_ptr)(register PerlInterpreter*);
+  static perl_key* (*Perl_Gthr_key_ptr)_((pTHX));
++ #endif
++ static void (*boot_DynaLoader)_((pTHX_ CV*));
+  
+  /*
+   * Table of name to function pointer of perl.
+*** ../vim-7.3.666/src/version.c	2012-09-18 22:00:02.000000000 +0200
+--- src/version.c	2012-09-21 12:40:57.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     667,
+  /**/
+
+-- 
+Two cows are standing together in a field.  One asks the other:
+"So what do you think about this Mad Cow Disease?"
+The other replies: "That doesn't concern me. I'm a helicopter."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.668 b/7.3.668
new file mode 100644
index 0000000..4ddf206
--- /dev/null
+++ b/7.3.668
@@ -0,0 +1,84 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.668
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.668
+Problem:    Building with Perl loaded dynamically  still uses static library.
+Solution:   Adjust use of PL_thr_key. (Ken Takata)
+Files:	    src/if_perl.xs
+
+
+*** ../vim-7.3.667/src/if_perl.xs	2012-09-21 12:42:38.000000000 +0200
+--- src/if_perl.xs	2012-09-21 12:47:55.000000000 +0200
+***************
+*** 155,161 ****
+  # define Perl_set_context dll_Perl_set_context
+  # if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
+  # define Perl_sv_2bool_flags dll_Perl_sv_2bool_flags
+! # define Perl_xs_apiversion_bootcheck dll_Perl_xs_apiversion_bootcheck 
+  # else
+  # define Perl_sv_2bool dll_Perl_sv_2bool
+  # endif
+--- 155,161 ----
+  # define Perl_set_context dll_Perl_set_context
+  # if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
+  # define Perl_sv_2bool_flags dll_Perl_sv_2bool_flags
+! # define Perl_xs_apiversion_bootcheck dll_Perl_xs_apiversion_bootcheck
+  # else
+  # define Perl_sv_2bool dll_Perl_sv_2bool
+  # endif
+***************
+*** 225,230 ****
+--- 225,233 ----
+  # define Perl_call_list dll_Perl_call_list
+  # define Perl_Iscopestack_ix_ptr dll_Perl_Iscopestack_ix_ptr
+  # define Perl_Iunitcheckav_ptr dll_Perl_Iunitcheckav_ptr
++ # if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
++ #  define PL_thr_key *dll_PL_thr_key
++ # endif
+  
+  /*
+   * Declare HANDLE for perl.dll and function pointers.
+***************
+*** 335,340 ****
+--- 338,344 ----
+  #endif
+  
+  #if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
++ static perl_key* dll_PL_thr_key;
+  #else
+  static GV** (*Perl_Idefgv_ptr)(register PerlInterpreter*);
+  static GV** (*Perl_Ierrgv_ptr)(register PerlInterpreter*);
+***************
+*** 453,458 ****
+--- 457,463 ----
+  # endif
+  #endif
+  #if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
++     {"PL_thr_key", (PERL_PROC*)&dll_PL_thr_key},
+  #else
+      {"Perl_Idefgv_ptr", (PERL_PROC*)&Perl_Idefgv_ptr},
+      {"Perl_Ierrgv_ptr", (PERL_PROC*)&Perl_Ierrgv_ptr},
+*** ../vim-7.3.667/src/version.c	2012-09-21 12:42:38.000000000 +0200
+--- src/version.c	2012-09-21 12:49:06.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     668,
+  /**/
+
+-- 
+Michael: There is no such thing as a dump question.
+Bernard: Sure there is.  For example "what is a core dump?"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.669 b/7.3.669
new file mode 100644
index 0000000..7fb1940
--- /dev/null
+++ b/7.3.669
@@ -0,0 +1,128 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.669
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.669
+Problem:    When building with Cygwin loading Python dynamically fails.
+Solution:   Use DLLLIBRARY instead of INSTSONAME. (Ken Takata)
+Files:	    src/configure.in, src/auto/configure
+
+
+*** ../vim-7.3.668/src/configure.in	2012-08-15 14:04:50.000000000 +0200
+--- src/configure.in	2012-09-21 12:52:32.000000000 +0200
+***************
+*** 889,894 ****
+--- 889,895 ----
+  	@echo "python_LIBS='$(LIBS)'"
+  	@echo "python_SYSLIBS='$(SYSLIBS)'"
+  	@echo "python_LINKFORSHARED='$(LINKFORSHARED)'"
++ 	@echo "python_DLLLIBRARY='$(DLLLIBRARY)'"
+  	@echo "python_INSTSONAME='$(INSTSONAME)'"
+  eof
+  	    dnl -- delete the lines from make about Entering/Leaving directory
+***************
+*** 909,914 ****
+--- 910,918 ----
+  	    fi
+  	])
+  
++ 	if test "X$python_DLLLIBRARY" != "X"; then
++ 	  python_INSTSONAME="$python_DLLLIBRARY"
++ 	fi
+  	PYTHON_LIBS="${vi_cv_path_python_plibs}"
+  	if test "${vi_cv_path_python_pfx}" = "${vi_cv_path_python_epfx}"; then
+  	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME=\\\"${vi_cv_path_python_pfx}\\\""
+***************
+*** 1082,1087 ****
+--- 1086,1092 ----
+  	@echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
+  	@echo "python3_LIBS='$(LIBS)'"
+  	@echo "python3_SYSLIBS='$(SYSLIBS)'"
++ 	@echo "python3_DLLLIBRARY='$(DLLLIBRARY)'"
+  	@echo "python3_INSTSONAME='$(INSTSONAME)'"
+  eof
+            dnl -- delete the lines from make about Entering/Leaving directory
+***************
+*** 1094,1099 ****
+--- 1099,1107 ----
+            vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
+        ])
+  
++       if test "X$python3_DLLLIBRARY" != "X"; then
++ 	python3_INSTSONAME="$python3_DLLLIBRARY"
++       fi
+        PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
+        if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
+          PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+*** ../vim-7.3.668/src/auto/configure	2012-08-15 14:04:50.000000000 +0200
+--- src/auto/configure	2012-09-21 13:06:09.000000000 +0200
+***************
+*** 5330,5335 ****
+--- 5330,5336 ----
+  	@echo "python_LIBS='$(LIBS)'"
+  	@echo "python_SYSLIBS='$(SYSLIBS)'"
+  	@echo "python_LINKFORSHARED='$(LINKFORSHARED)'"
++ 	@echo "python_DLLLIBRARY='$(DLLLIBRARY)'"
+  	@echo "python_INSTSONAME='$(INSTSONAME)'"
+  eof
+  	    	    eval "`cd ${PYTHON_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+***************
+*** 5350,5355 ****
+--- 5351,5359 ----
+  fi
+  
+  
++ 	if test "X$python_DLLLIBRARY" != "X"; then
++ 	  python_INSTSONAME="$python_DLLLIBRARY"
++ 	fi
+  	PYTHON_LIBS="${vi_cv_path_python_plibs}"
+  	if test "${vi_cv_path_python_pfx}" = "${vi_cv_path_python_epfx}"; then
+  	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME=\\\"${vi_cv_path_python_pfx}\\\""
+***************
+*** 5633,5638 ****
+--- 5637,5643 ----
+  	@echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
+  	@echo "python3_LIBS='$(LIBS)'"
+  	@echo "python3_SYSLIBS='$(SYSLIBS)'"
++ 	@echo "python3_DLLLIBRARY='$(DLLLIBRARY)'"
+  	@echo "python3_INSTSONAME='$(INSTSONAME)'"
+  eof
+                      eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+***************
+*** 5645,5650 ****
+--- 5650,5658 ----
+  fi
+  
+  
++       if test "X$python3_DLLLIBRARY" != "X"; then
++ 	python3_INSTSONAME="$python3_DLLLIBRARY"
++       fi
+        PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
+        if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
+          PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+*** ../vim-7.3.668/src/version.c	2012-09-21 12:50:44.000000000 +0200
+--- src/version.c	2012-09-21 12:54:42.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     669,
+  /**/
+
+-- 
+TALL KNIGHT: We are now no longer the Knights Who Say Ni!
+ONE KNIGHT:  Ni!
+OTHERS:      Sh!
+ONE KNIGHT:  (whispers) Sorry.
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.670 b/7.3.670
new file mode 100644
index 0000000..91b4caa
--- /dev/null
+++ b/7.3.670
@@ -0,0 +1,88 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.670
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.670
+Problem:    Python: memory leaks when there are exceptions.
+Solution:   Add DICTKEY_UNREF in the right places. (ZyX)
+Files:	    src/if_py_both.h
+
+
+*** ../vim-7.3.669/src/if_py_both.h	2012-09-12 20:21:38.000000000 +0200
+--- src/if_py_both.h	2012-09-21 13:32:13.000000000 +0200
+***************
+*** 799,812 ****
+  
+      di = dict_find(((DictionaryObject *) (self))->dict, key, -1);
+  
+      if (di == NULL)
+      {
+  	PyErr_SetString(PyExc_IndexError, _("no such key in dictionary"));
+  	return NULL;
+      }
+  
+-     DICTKEY_UNREF
+- 
+      return ConvertToPyObject(&di->di_tv);
+  }
+  
+--- 799,812 ----
+  
+      di = dict_find(((DictionaryObject *) (self))->dict, key, -1);
+  
++     DICTKEY_UNREF
++ 
+      if (di == NULL)
+      {
+  	PyErr_SetString(PyExc_IndexError, _("no such key in dictionary"));
+  	return NULL;
+      }
+  
+      return ConvertToPyObject(&di->di_tv);
+  }
+  
+***************
+*** 835,840 ****
+--- 835,841 ----
+  
+  	if (di == NULL)
+  	{
++ 	    DICTKEY_UNREF
+  	    PyErr_SetString(PyExc_IndexError, _("no such key in dictionary"));
+  	    return -1;
+  	}
+***************
+*** 859,864 ****
+--- 860,866 ----
+  
+  	if (dict_add(d, di) == FAIL)
+  	{
++ 	    DICTKEY_UNREF
+  	    vim_free(di);
+  	    PyErr_SetVim(_("failed to add key to dictionary"));
+  	    return -1;
+*** ../vim-7.3.669/src/version.c	2012-09-21 13:26:44.000000000 +0200
+--- src/version.c	2012-09-21 13:42:43.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     670,
+  /**/
+
+-- 
+TALL KNIGHT:   Firstly.  You must get us another shrubbery!
+OTHER KNIGHTS: More shrubberies!  More shrubberies for the ex-Knights of Ni!
+ARTHUR:        Not another shrubbery -
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.671 b/7.3.671
new file mode 100644
index 0000000..c47e6f3
--- /dev/null
+++ b/7.3.671
@@ -0,0 +1,311 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.671
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.671
+Problem:    More Python code can be shared between Python 2 and 3.
+Solution:   Move code to if_py_both.h. (ZyX)
+Files:	    src/if_py_both.h, src/if_python.c, src/if_python3.c
+
+
+*** ../vim-7.3.670/src/if_py_both.h	2012-09-21 13:43:09.000000000 +0200
+--- src/if_py_both.h	2012-09-21 13:45:02.000000000 +0200
+***************
+*** 71,76 ****
+--- 71,101 ----
+  /* Output buffer management
+   */
+  
++     static int
++ OutputSetattr(PyObject *self, char *name, PyObject *val)
++ {
++     if (val == NULL)
++     {
++ 	PyErr_SetString(PyExc_AttributeError, _("can't delete OutputObject attributes"));
++ 	return -1;
++     }
++ 
++     if (strcmp(name, "softspace") == 0)
++     {
++ 	if (!PyInt_Check(val))
++ 	{
++ 	    PyErr_SetString(PyExc_TypeError, _("softspace must be an integer"));
++ 	    return -1;
++ 	}
++ 
++ 	((OutputObject *)(self))->softspace = PyInt_AsLong(val);
++ 	return 0;
++     }
++ 
++     PyErr_SetString(PyExc_AttributeError, _("invalid attribute"));
++     return -1;
++ }
++ 
+      static PyObject *
+  OutputWrite(PyObject *self, PyObject *args)
+  {
+*** ../vim-7.3.670/src/if_python.c	2012-09-12 20:21:38.000000000 +0200
+--- src/if_python.c	2012-09-21 13:45:02.000000000 +0200
+***************
+*** 951,981 ****
+      return Py_FindMethod(OutputMethods, self, name);
+  }
+  
+-     static int
+- OutputSetattr(PyObject *self, char *name, PyObject *val)
+- {
+-     if (val == NULL)
+-     {
+- 	PyErr_SetString(PyExc_AttributeError, _("can't delete OutputObject attributes"));
+- 	return -1;
+-     }
+- 
+-     if (strcmp(name, "softspace") == 0)
+-     {
+- 	if (!PyInt_Check(val))
+- 	{
+- 	    PyErr_SetString(PyExc_TypeError, _("softspace must be an integer"));
+- 	    return -1;
+- 	}
+- 
+- 	((OutputObject *)(self))->softspace = PyInt_AsLong(val);
+- 	return 0;
+-     }
+- 
+-     PyErr_SetString(PyExc_AttributeError, _("invalid attribute"));
+-     return -1;
+- }
+- 
+  /***************/
+  
+      static int
+--- 951,956 ----
+*** ../vim-7.3.670/src/if_python3.c	2012-09-12 20:21:38.000000000 +0200
+--- src/if_python3.c	2012-09-21 13:45:02.000000000 +0200
+***************
+*** 88,93 ****
+--- 88,96 ----
+  #define PyString_Size(obj) PyBytes_GET_SIZE(bytes)
+  #define PyString_FromString(repr) PyUnicode_FromString(repr)
+  #define PyString_AsStringAndSize(obj, buffer, len) PyBytes_AsStringAndSize(obj, buffer, len)
++ #define PyInt_Check(obj) PyLong_Check(obj)
++ #define PyInt_FromLong(i) PyLong_FromLong(i)
++ #define PyInt_AsLong(obj) PyLong_AsLong(obj)
+  
+  #if defined(DYNAMIC_PYTHON3) || defined(PROTO)
+  
+***************
+*** 586,591 ****
+--- 589,599 ----
+   */
+  #include "if_py_both.h"
+  
++ #define GET_ATTR_STRING(name, nameobj) \
++     char	*name = ""; \
++     if(PyUnicode_Check(nameobj)) \
++         name = _PyUnicode_AsString(nameobj)
++ 
+  #define PY3OBJ_DELETED(obj) (obj->ob_base.ob_refcnt<=0)
+  
+      static void
+***************
+*** 923,931 ****
+      static PyObject *
+  OutputGetattro(PyObject *self, PyObject *nameobj)
+  {
+!     char *name = "";
+!     if (PyUnicode_Check(nameobj))
+! 	name = _PyUnicode_AsString(nameobj);
+  
+      if (strcmp(name, "softspace") == 0)
+  	return PyLong_FromLong(((OutputObject *)(self))->softspace);
+--- 931,937 ----
+      static PyObject *
+  OutputGetattro(PyObject *self, PyObject *nameobj)
+  {
+!     GET_ATTR_STRING(name, nameobj);
+  
+      if (strcmp(name, "softspace") == 0)
+  	return PyLong_FromLong(((OutputObject *)(self))->softspace);
+***************
+*** 936,965 ****
+      static int
+  OutputSetattro(PyObject *self, PyObject *nameobj, PyObject *val)
+  {
+!     char *name = "";
+!     if (PyUnicode_Check(nameobj))
+! 	name = _PyUnicode_AsString(nameobj);
+! 
+!     if (val == NULL)
+!     {
+! 	PyErr_SetString(PyExc_AttributeError, _("can't delete OutputObject attributes"));
+! 	return -1;
+!     }
+  
+!     if (strcmp(name, "softspace") == 0)
+!     {
+! 	if (!PyLong_Check(val))
+! 	{
+! 	    PyErr_SetString(PyExc_TypeError, _("softspace must be an integer"));
+! 	    return -1;
+! 	}
+! 
+! 	((OutputObject *)(self))->softspace = PyLong_AsLong(val);
+! 	return 0;
+!     }
+! 
+!     PyErr_SetString(PyExc_AttributeError, _("invalid attribute"));
+!     return -1;
+  }
+  
+  /***************/
+--- 942,950 ----
+      static int
+  OutputSetattro(PyObject *self, PyObject *nameobj, PyObject *val)
+  {
+!     GET_ATTR_STRING(name, nameobj);
+  
+!     return OutputSetattr(self, name, val);
+  }
+  
+  /***************/
+***************
+*** 1091,1099 ****
+  {
+      BufferObject *this = (BufferObject *)(self);
+  
+!     char *name = "";
+!     if (PyUnicode_Check(nameobj))
+! 	name = _PyUnicode_AsString(nameobj);
+  
+      if (CheckBuffer(this))
+  	return NULL;
+--- 1076,1082 ----
+  {
+      BufferObject *this = (BufferObject *)(self);
+  
+!     GET_ATTR_STRING(name, nameobj);
+  
+      if (CheckBuffer(this))
+  	return NULL;
+***************
+*** 1257,1265 ****
+      static PyObject *
+  RangeGetattro(PyObject *self, PyObject *nameobj)
+  {
+!     char *name = "";
+!     if (PyUnicode_Check(nameobj))
+! 	name = _PyUnicode_AsString(nameobj);
+  
+      if (strcmp(name, "start") == 0)
+  	return Py_BuildValue("n", ((RangeObject *)(self))->start - 1);
+--- 1240,1246 ----
+      static PyObject *
+  RangeGetattro(PyObject *self, PyObject *nameobj)
+  {
+!     GET_ATTR_STRING(name, nameobj);
+  
+      if (strcmp(name, "start") == 0)
+  	return Py_BuildValue("n", ((RangeObject *)(self))->start - 1);
+***************
+*** 1430,1439 ****
+  {
+      WindowObject *this = (WindowObject *)(self);
+  
+!     char *name = "";
+!     if (PyUnicode_Check(nameobj))
+! 	name = _PyUnicode_AsString(nameobj);
+! 
+  
+      if (CheckWindow(this))
+  	return NULL;
+--- 1411,1417 ----
+  {
+      WindowObject *this = (WindowObject *)(self);
+  
+!     GET_ATTR_STRING(name, nameobj);
+  
+      if (CheckWindow(this))
+  	return NULL;
+***************
+*** 1461,1470 ****
+      static int
+  WindowSetattro(PyObject *self, PyObject *nameobj, PyObject *val)
+  {
+!     char *name = "";
+! 
+!     if (PyUnicode_Check(nameobj))
+! 	name = _PyUnicode_AsString(nameobj);
+  
+      return WindowSetattr(self, name, val);
+  }
+--- 1439,1445 ----
+      static int
+  WindowSetattro(PyObject *self, PyObject *nameobj, PyObject *val)
+  {
+!     GET_ATTR_STRING(name, nameobj);
+  
+      return WindowSetattr(self, name, val);
+  }
+***************
+*** 1508,1516 ****
+      static PyObject *
+  CurrentGetattro(PyObject *self UNUSED, PyObject *nameobj)
+  {
+!     char *name = "";
+!     if (PyUnicode_Check(nameobj))
+! 	name = _PyUnicode_AsString(nameobj);
+  
+      if (strcmp(name, "buffer") == 0)
+  	return (PyObject *)BufferNew(curbuf);
+--- 1483,1489 ----
+      static PyObject *
+  CurrentGetattro(PyObject *self UNUSED, PyObject *nameobj)
+  {
+!     GET_ATTR_STRING(name, nameobj);
+  
+      if (strcmp(name, "buffer") == 0)
+  	return (PyObject *)BufferNew(curbuf);
+***************
+*** 1681,1689 ****
+  FunctionGetattro(PyObject *self, PyObject *nameobj)
+  {
+      FunctionObject	*this = (FunctionObject *)(self);
+!     char	*name = "";
+!     if (PyUnicode_Check(nameobj))
+! 	name = _PyUnicode_AsString(nameobj);
+  
+      if (strcmp(name, "name") == 0)
+  	return PyUnicode_FromString((char *)(this->name));
+--- 1654,1661 ----
+  FunctionGetattro(PyObject *self, PyObject *nameobj)
+  {
+      FunctionObject	*this = (FunctionObject *)(self);
+! 
+!     GET_ATTR_STRING(name, nameobj);
+  
+      if (strcmp(name, "name") == 0)
+  	return PyUnicode_FromString((char *)(this->name));
+*** ../vim-7.3.670/src/version.c	2012-09-21 13:43:09.000000000 +0200
+--- src/version.c	2012-09-21 13:45:28.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     671,
+  /**/
+
+-- 
+The war between Emacs and Vi is over.  Vi has won with 3 to 1.
+			http://www.ssc.com/lg/issue30/raymond.html
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.672 b/7.3.672
new file mode 100644
index 0000000..b43b0f1
--- /dev/null
+++ b/7.3.672
@@ -0,0 +1,699 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.672
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.672
+Problem:    Not possible to lock/unlock lists in Python interface.
+Solution:   Add .locked and .scope attributes. (ZyX)
+Files:	    runtime/doc/if_pyth.txt, src/if_py_both.h, src/if_python.c,
+	    src/if_python3.c, src/testdir/test86.in, src/testdir/test86.ok,
+	    src/testdir/test87.in, src/testdir/test87.ok
+
+
+*** ../vim-7.3.671/runtime/doc/if_pyth.txt	2012-06-29 12:54:32.000000000 +0200
+--- runtime/doc/if_pyth.txt	2012-09-21 13:49:14.000000000 +0200
+***************
+*** 27,33 ****
+  
+  					*:python* *:py* *E205* *E263* *E264*
+  :[range]py[thon] {stmt}
+! 			Execute Python statement {stmt}.
+  
+  :[range]py[thon] << {endmarker}
+  {script}
+--- 27,35 ----
+  
+  					*:python* *:py* *E205* *E263* *E264*
+  :[range]py[thon] {stmt}
+! 			Execute Python statement {stmt}.  A simple check if
+! 			the `:python` command is working: >
+! 				:python print "Hello"
+  
+  :[range]py[thon] << {endmarker}
+  {script}
+***************
+*** 157,162 ****
+--- 159,184 ----
+  	   vimlist or vimdictionary python type that are connected to original 
+  	   list or dictionary. Thus modifications to these objects imply 
+  	   modifications of the original.
++ 
++ 	   Additionally, vimlist and vimdictionary type have read-write 
++ 	   `.locked` attribute that returns
++ 	     Value           Meaning ~
++ 	     zero            Variable is not locked
++ 	     vim.VAR_LOCKED  Variable is locked, but can be unlocked
++ 	     vim.VAR_FIXED   Variable is locked and can’t be unlocked
++ 	   integer constants. If variable is not fixed, you can do 
++ 	   `var.locked=True` to lock it and `var.locked=False` to unlock. 
++ 	   There is no recursive locking like |:lockvar|! does. There is also 
++ 	   no way to lock a specific key or check whether it is locked (in any 
++ 	   case these locks are ignored by anything except |:let|: |extend()| 
++ 	   does not care, neither does python interface).
++ 
++ 	   Vimdictionary type also supports `.scope` attribute which is one of
++ 	     Value              Meaning ~
++ 	     zero               Dictionary is not a scope one
++ 	     vim.VAR_DEF_SCOPE  Function-local or global scope dictionary
++ 	     vim.VAR_SCOPE      Other scope dictionary
++ 
+  	2. if expression evaluates to a function reference, then it returns 
+  	   callable vimfunction object. Use self keyword argument to assign 
+  	   |self| object for dictionary functions.
+***************
+*** 362,369 ****
+  8. Python 3						*python3*
+  
+  							*:py3* *:python3*
+! The |:py3| and |:python3| commands work similar to |:python|.
+! 							*:py3file*
+  The |:py3file| command works similar to |:pyfile|.
+  
+  
+--- 384,393 ----
+  8. Python 3						*python3*
+  
+  							*:py3* *:python3*
+! The |:py3| and |:python3| commands work similar to |:python|.  A simple check
+! if the `:py3` command is wrong: >
+! 	:py3 print("Hello")
+! <							*:py3file*
+  The |:py3file| command works similar to |:pyfile|.
+  
+  
+*** ../vim-7.3.671/src/if_py_both.h	2012-09-21 13:45:57.000000000 +0200
+--- src/if_py_both.h	2012-09-21 13:49:14.000000000 +0200
+***************
+*** 808,813 ****
+--- 808,851 ----
+  }
+  
+      static PyInt
++ DictionarySetattr(DictionaryObject *self, char *name, PyObject *val)
++ {
++     if (val == NULL)
++     {
++ 	PyErr_SetString(PyExc_AttributeError, _("Cannot delete DictionaryObject attributes"));
++ 	return -1;
++     }
++ 
++     if (strcmp(name, "locked") == 0)
++     {
++ 	if (self->dict->dv_lock == VAR_FIXED)
++ 	{
++ 	    PyErr_SetString(PyExc_TypeError, _("Cannot modify fixed dictionary"));
++ 	    return -1;
++ 	}
++ 	else
++ 	{
++ 	    if (!PyBool_Check(val))
++ 	    {
++ 		PyErr_SetString(PyExc_TypeError, _("Only boolean objects are allowed"));
++ 		return -1;
++ 	    }
++ 
++ 	    if (val == Py_True)
++ 		self->dict->dv_lock = VAR_LOCKED;
++ 	    else
++ 		self->dict->dv_lock = 0;
++ 	}
++ 	return 0;
++     }
++     else
++     {
++ 	PyErr_SetString(PyExc_AttributeError, _("Cannot set this attribute"));
++ 	return -1;
++     }
++ }
++ 
++     static PyInt
+  DictionaryLength(PyObject *self)
+  {
+      return ((PyInt) ((((DictionaryObject *)(self))->dict->dv_hashtab.ht_used)));
+***************
+*** 1271,1276 ****
+--- 1309,1352 ----
+      return self;
+  }
+  
++     static int
++ ListSetattr(ListObject *self, char *name, PyObject *val)
++ {
++     if (val == NULL)
++     {
++ 	PyErr_SetString(PyExc_AttributeError, _("Cannot delete DictionaryObject attributes"));
++ 	return -1;
++     }
++ 
++     if (strcmp(name, "locked") == 0)
++     {
++ 	if (self->list->lv_lock == VAR_FIXED)
++ 	{
++ 	    PyErr_SetString(PyExc_TypeError, _("Cannot modify fixed list"));
++ 	    return -1;
++ 	}
++ 	else
++ 	{
++ 	    if (!PyBool_Check(val))
++ 	    {
++ 		PyErr_SetString(PyExc_TypeError, _("Only boolean objects are allowed"));
++ 		return -1;
++ 	    }
++ 
++ 	    if (val == Py_True)
++ 		self->list->lv_lock = VAR_LOCKED;
++ 	    else
++ 		self->list->lv_lock = 0;
++ 	}
++ 	return 0;
++     }
++     else
++     {
++ 	PyErr_SetString(PyExc_AttributeError, _("Cannot set this attribute"));
++ 	return -1;
++     }
++ }
++ 
+  static struct PyMethodDef ListMethods[] = {
+      {"extend", (PyCFunction)ListConcatInPlace, METH_O, ""},
+      { NULL,	    NULL,		0,	    NULL }
+*** ../vim-7.3.671/src/if_python.c	2012-09-21 13:45:57.000000000 +0200
+--- src/if_python.c	2012-09-21 13:49:14.000000000 +0200
+***************
+*** 163,168 ****
+--- 163,169 ----
+  # define PyInt_FromLong dll_PyInt_FromLong
+  # define PyLong_AsLong dll_PyLong_AsLong
+  # define PyLong_FromLong dll_PyLong_FromLong
++ # define PyBool_Type (*dll_PyBool_Type)
+  # define PyInt_Type (*dll_PyInt_Type)
+  # define PyLong_Type (*dll_PyLong_Type)
+  # define PyList_GetItem dll_PyList_GetItem
+***************
+*** 221,226 ****
+--- 222,229 ----
+  #  define _PyObject_NextNotImplemented (*dll__PyObject_NextNotImplemented)
+  # endif
+  # define _Py_NoneStruct (*dll__Py_NoneStruct)
++ # define _Py_ZeroStruct (*dll__Py_ZeroStruct)
++ # define _Py_TrueStruct (*dll__Py_TrueStruct)
+  # define PyObject_Init dll__PyObject_Init
+  # define PyObject_GetIter dll_PyObject_GetIter
+  # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000
+***************
+*** 263,268 ****
+--- 266,272 ----
+  static PyObject*(*dll_PyInt_FromLong)(long);
+  static long(*dll_PyLong_AsLong)(PyObject *);
+  static PyObject*(*dll_PyLong_FromLong)(long);
++ static PyTypeObject* dll_PyBool_Type;
+  static PyTypeObject* dll_PyInt_Type;
+  static PyTypeObject* dll_PyLong_Type;
+  static PyObject*(*dll_PyList_GetItem)(PyObject *, PyInt);
+***************
+*** 320,325 ****
+--- 324,331 ----
+  static iternextfunc dll__PyObject_NextNotImplemented;
+  # endif
+  static PyObject* dll__Py_NoneStruct;
++ static PyObject* _Py_ZeroStruct;
++ static PyObject* dll__Py_TrueStruct;
+  # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000
+  static int (*dll_PyType_IsSubtype)(PyTypeObject *, PyTypeObject *);
+  # endif
+***************
+*** 389,394 ****
+--- 395,401 ----
+      {"PyInt_FromLong", (PYTHON_PROC*)&dll_PyInt_FromLong},
+      {"PyLong_AsLong", (PYTHON_PROC*)&dll_PyLong_AsLong},
+      {"PyLong_FromLong", (PYTHON_PROC*)&dll_PyLong_FromLong},
++     {"PyBool_Type", (PYTHON_PROC*)&dll_PyBool_Type},
+      {"PyInt_Type", (PYTHON_PROC*)&dll_PyInt_Type},
+      {"PyLong_Type", (PYTHON_PROC*)&dll_PyLong_Type},
+      {"PyList_GetItem", (PYTHON_PROC*)&dll_PyList_GetItem},
+***************
+*** 449,454 ****
+--- 456,463 ----
+      {"_PyObject_NextNotImplemented", (PYTHON_PROC*)&dll__PyObject_NextNotImplemented},
+  # endif
+      {"_Py_NoneStruct", (PYTHON_PROC*)&dll__Py_NoneStruct},
++     {"_Py_ZeroStruct", (PYTHON_PROC*)&dll__Py_ZeroStruct},
++     {"_Py_TrueStruct", (PYTHON_PROC*)&dll__Py_TrueStruct},
+  # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000
+      {"PyType_IsSubtype", (PYTHON_PROC*)&dll_PyType_IsSubtype},
+  # endif
+***************
+*** 1563,1568 ****
+--- 1572,1581 ----
+      PyDict_SetItemString(dict, "buffers", (PyObject *)(void *)&TheBufferList);
+      PyDict_SetItemString(dict, "current", (PyObject *)(void *)&TheCurrent);
+      PyDict_SetItemString(dict, "windows", (PyObject *)(void *)&TheWindowList);
++     PyDict_SetItemString(dict, "VAR_LOCKED",    PyInt_FromLong(VAR_LOCKED));
++     PyDict_SetItemString(dict, "VAR_FIXED",     PyInt_FromLong(VAR_FIXED));
++     PyDict_SetItemString(dict, "VAR_SCOPE",     PyInt_FromLong(VAR_SCOPE));
++     PyDict_SetItemString(dict, "VAR_DEF_SCOPE", PyInt_FromLong(VAR_DEF_SCOPE));
+  
+      if (PyErr_Occurred())
+  	return -1;
+***************
+*** 1629,1635 ****
+      (destructor)  DictionaryDestructor,
+      (printfunc)   0,
+      (getattrfunc) DictionaryGetattr,
+!     (setattrfunc) 0,
+      (cmpfunc)     0,
+      (reprfunc)    0,
+  
+--- 1642,1648 ----
+      (destructor)  DictionaryDestructor,
+      (printfunc)   0,
+      (getattrfunc) DictionaryGetattr,
+!     (setattrfunc) DictionarySetattr,
+      (cmpfunc)     0,
+      (reprfunc)    0,
+  
+***************
+*** 1656,1661 ****
+--- 1669,1681 ----
+      static PyObject *
+  DictionaryGetattr(PyObject *self, char *name)
+  {
++     DictionaryObject	*this = ((DictionaryObject *) (self));
++ 
++     if (strcmp(name, "locked") == 0)
++ 	return PyInt_FromLong(this->dict->dv_lock);
++     else if (strcmp(name, "scope") == 0)
++ 	return PyInt_FromLong(this->dict->dv_scope);
++ 
+      return Py_FindMethod(DictionaryMethods, self, name);
+  }
+  
+***************
+*** 1687,1693 ****
+      (destructor)  ListDestructor,
+      (printfunc)   0,
+      (getattrfunc) ListGetattr,
+!     (setattrfunc) 0,
+      (cmpfunc)     0,
+      (reprfunc)    0,
+  
+--- 1707,1713 ----
+      (destructor)  ListDestructor,
+      (printfunc)   0,
+      (getattrfunc) ListGetattr,
+!     (setattrfunc) ListSetattr,
+      (cmpfunc)     0,
+      (reprfunc)    0,
+  
+***************
+*** 1714,1719 ****
+--- 1734,1742 ----
+      static PyObject *
+  ListGetattr(PyObject *self, char *name)
+  {
++     if (strcmp(name, "locked") == 0)
++ 	return PyInt_FromLong(((ListObject *)(self))->list->lv_lock);
++ 
+      return Py_FindMethod(ListMethods, self, name);
+  }
+  
+*** ../vim-7.3.671/src/if_python3.c	2012-09-21 13:45:57.000000000 +0200
+--- src/if_python3.c	2012-09-21 13:49:14.000000000 +0200
+***************
+*** 161,167 ****
+  # define PyRun_String py3_PyRun_String
+  # define PySys_SetObject py3_PySys_SetObject
+  # define PySys_SetArgv py3_PySys_SetArgv
+- # define PyType_Type (*py3_PyType_Type)
+  # define PyType_Ready py3_PyType_Ready
+  #undef Py_BuildValue
+  # define Py_BuildValue py3_Py_BuildValue
+--- 161,166 ----
+***************
+*** 170,175 ****
+--- 169,176 ----
+  # define Py_Finalize py3_Py_Finalize
+  # define Py_IsInitialized py3_Py_IsInitialized
+  # define _Py_NoneStruct (*py3__Py_NoneStruct)
++ # define _Py_FalseStruct (*py3__Py_FalseStruct)
++ # define _Py_TrueStruct (*py3__Py_TrueStruct)
+  # define _PyObject_NextNotImplemented (*py3__PyObject_NextNotImplemented)
+  # define PyModule_AddObject py3_PyModule_AddObject
+  # define PyImport_AppendInittab py3_PyImport_AppendInittab
+***************
+*** 184,191 ****
+--- 185,194 ----
+  # define PyFloat_FromDouble py3_PyFloat_FromDouble
+  # define PyFloat_AsDouble py3_PyFloat_AsDouble
+  # define PyObject_GenericGetAttr py3_PyObject_GenericGetAttr
++ # define PyType_Type (*py3_PyType_Type)
+  # define PySlice_Type (*py3_PySlice_Type)
+  # define PyFloat_Type (*py3_PyFloat_Type)
++ # define PyBool_Type (*py3_PyBool_Type)
+  # define PyErr_NewException py3_PyErr_NewException
+  # ifdef Py_DEBUG
+  #  define _Py_NegativeRefcount py3__Py_NegativeRefcount
+***************
+*** 245,251 ****
+  static PyObject* (*py3_PyImport_ImportModule)(const char *);
+  static PyObject* (*py3_PyImport_AddModule)(const char *);
+  static int (*py3_PyErr_BadArgument)(void);
+- static PyTypeObject* py3_PyType_Type;
+  static PyObject* (*py3_PyErr_Occurred)(void);
+  static PyObject* (*py3_PyModule_GetDict)(PyObject *);
+  static int (*py3_PyList_SetItem)(PyObject *, Py_ssize_t, PyObject *);
+--- 248,253 ----
+***************
+*** 275,280 ****
+--- 277,284 ----
+  static PyObject*(*py3__PyObject_Init)(PyObject *, PyTypeObject *);
+  static iternextfunc py3__PyObject_NextNotImplemented;
+  static PyObject* py3__Py_NoneStruct;
++ static PyObject* py3__Py_FalseStruct;
++ static PyObject* py3__Py_TrueStruct;
+  static int (*py3_PyModule_AddObject)(PyObject *m, const char *name, PyObject *o);
+  static int (*py3_PyImport_AppendInittab)(const char *name, PyObject* (*initfunc)(void));
+  static char* (*py3__PyUnicode_AsString)(PyObject *unicode);
+***************
+*** 288,295 ****
+--- 292,301 ----
+  static PyObject* (*py3_PyModule_Create2)(struct PyModuleDef* module, int module_api_version);
+  static PyObject* (*py3_PyType_GenericAlloc)(PyTypeObject *type, Py_ssize_t nitems);
+  static PyObject* (*py3_PyType_GenericNew)(PyTypeObject *type, PyObject *args, PyObject *kwds);
++ static PyTypeObject* py3_PyType_Type;
+  static PyTypeObject* py3_PySlice_Type;
+  static PyTypeObject* py3_PyFloat_Type;
++ static PyTypeObject* py3_PyBool_Type;
+  static PyObject* (*py3_PyErr_NewException)(char *name, PyObject *base, PyObject *dict);
+  static PyObject* (*py3_PyCapsule_New)(void *, char *, PyCapsule_Destructor);
+  static void* (*py3_PyCapsule_GetPointer)(PyObject *, char *);
+***************
+*** 363,369 ****
+      {"PyImport_ImportModule", (PYTHON_PROC*)&py3_PyImport_ImportModule},
+      {"PyImport_AddModule", (PYTHON_PROC*)&py3_PyImport_AddModule},
+      {"PyErr_BadArgument", (PYTHON_PROC*)&py3_PyErr_BadArgument},
+-     {"PyType_Type", (PYTHON_PROC*)&py3_PyType_Type},
+      {"PyErr_Occurred", (PYTHON_PROC*)&py3_PyErr_Occurred},
+      {"PyModule_GetDict", (PYTHON_PROC*)&py3_PyModule_GetDict},
+      {"PyList_SetItem", (PYTHON_PROC*)&py3_PyList_SetItem},
+--- 369,374 ----
+***************
+*** 386,391 ****
+--- 391,398 ----
+      {"Py_IsInitialized", (PYTHON_PROC*)&py3_Py_IsInitialized},
+      {"_PyObject_NextNotImplemented", (PYTHON_PROC*)&py3__PyObject_NextNotImplemented},
+      {"_Py_NoneStruct", (PYTHON_PROC*)&py3__Py_NoneStruct},
++     {"_Py_FalseStruct", (PYTHON_PROC*)&py3__Py_FalseStruct},
++     {"_Py_TrueStruct", (PYTHON_PROC*)&py3__Py_TrueStruct},
+      {"PyErr_Clear", (PYTHON_PROC*)&py3_PyErr_Clear},
+      {"PyObject_Init", (PYTHON_PROC*)&py3__PyObject_Init},
+      {"PyModule_AddObject", (PYTHON_PROC*)&py3_PyModule_AddObject},
+***************
+*** 400,407 ****
+--- 407,416 ----
+      {"PyModule_Create2", (PYTHON_PROC*)&py3_PyModule_Create2},
+      {"PyType_GenericAlloc", (PYTHON_PROC*)&py3_PyType_GenericAlloc},
+      {"PyType_GenericNew", (PYTHON_PROC*)&py3_PyType_GenericNew},
++     {"PyType_Type", (PYTHON_PROC*)&py3_PyType_Type},
+      {"PySlice_Type", (PYTHON_PROC*)&py3_PySlice_Type},
+      {"PyFloat_Type", (PYTHON_PROC*)&py3_PyFloat_Type},
++     {"PyBool_Type", (PYTHON_PROC*)&py3_PyBool_Type},
+      {"PyErr_NewException", (PYTHON_PROC*)&py3_PyErr_NewException},
+  # ifdef Py_DEBUG
+      {"_Py_NegativeRefcount", (PYTHON_PROC*)&py3__Py_NegativeRefcount},
+***************
+*** 1534,1539 ****
+--- 1543,1570 ----
+      /* mp_ass_subscript */ (objobjargproc) DictionaryAssItem,
+  };
+  
++     static PyObject *
++ DictionaryGetattro(PyObject *self, PyObject *nameobj)
++ {
++     DictionaryObject	*this = ((DictionaryObject *) (self));
++ 
++     GET_ATTR_STRING(name, nameobj);
++ 
++     if (strcmp(name, "locked") == 0)
++ 	return PyLong_FromLong(this->dict->dv_lock);
++     else if (strcmp(name, "scope") == 0)
++ 	return PyLong_FromLong(this->dict->dv_scope);
++ 
++     return PyObject_GenericGetAttr(self, nameobj);
++ }
++ 
++     static int
++ DictionarySetattro(PyObject *self, PyObject *nameobj, PyObject *val)
++ {
++     GET_ATTR_STRING(name, nameobj);
++     return DictionarySetattr((DictionaryObject *) self, name, val);
++ }
++ 
+  static PyTypeObject DictionaryType;
+  
+      static void
+***************
+*** 1625,1630 ****
+--- 1656,1679 ----
+      }
+  }
+  
++     static PyObject *
++ ListGetattro(PyObject *self, PyObject *nameobj)
++ {
++     GET_ATTR_STRING(name, nameobj);
++ 
++     if (strcmp(name, "locked") == 0)
++ 	return PyLong_FromLong(((ListObject *) (self))->list->lv_lock);
++ 
++     return PyObject_GenericGetAttr(self, nameobj);
++ }
++ 
++     static int
++ ListSetattro(PyObject *self, PyObject *nameobj, PyObject *val)
++ {
++     GET_ATTR_STRING(name, nameobj);
++     return ListSetattr((ListObject *) self, name, val);
++ }
++ 
+      static void
+  ListDestructor(PyObject *self)
+  {
+***************
+*** 1713,1718 ****
+--- 1762,1768 ----
+  PyMODINIT_FUNC Py3Init_vim(void)
+  {
+      PyObject *mod;
++     PyObject *tmp;
+      /* The special value is removed from sys.path in Python3_Init(). */
+      static wchar_t *(argv[2]) = {L"/must>not&exist/foo", NULL};
+  
+***************
+*** 1744,1749 ****
+--- 1794,1809 ----
+      Py_INCREF((PyObject *)(void *)&TheWindowList);
+      PyModule_AddObject(mod, "windows", (PyObject *)(void *)&TheWindowList);
+  
++ #define ADD_INT_CONSTANT(name, value) \
++     tmp = PyLong_FromLong(value); \
++     Py_INCREF(tmp); \
++     PyModule_AddObject(mod, name, tmp)
++ 
++     ADD_INT_CONSTANT("VAR_LOCKED",     VAR_LOCKED);
++     ADD_INT_CONSTANT("VAR_FIXED",      VAR_FIXED);
++     ADD_INT_CONSTANT("VAR_SCOPE",      VAR_SCOPE);
++     ADD_INT_CONSTANT("VAR_DEF_SCOPE",  VAR_DEF_SCOPE);
++ 
+      if (PyErr_Occurred())
+  	return NULL;
+  
+***************
+*** 1899,1904 ****
+--- 1959,1966 ----
+      vim_memset(&DictionaryType, 0, sizeof(DictionaryType));
+      DictionaryType.tp_name = "vim.dictionary";
+      DictionaryType.tp_basicsize = sizeof(DictionaryObject);
++     DictionaryType.tp_getattro = DictionaryGetattro;
++     DictionaryType.tp_setattro = DictionarySetattro;
+      DictionaryType.tp_dealloc = DictionaryDestructor;
+      DictionaryType.tp_as_mapping = &DictionaryAsMapping;
+      DictionaryType.tp_flags = Py_TPFLAGS_DEFAULT;
+***************
+*** 1909,1914 ****
+--- 1971,1978 ----
+      ListType.tp_name = "vim.list";
+      ListType.tp_dealloc = ListDestructor;
+      ListType.tp_basicsize = sizeof(ListObject);
++     ListType.tp_getattro = ListGetattro;
++     ListType.tp_setattro = ListSetattro;
+      ListType.tp_as_sequence = &ListAsSeq;
+      ListType.tp_as_mapping = &ListAsMapping;
+      ListType.tp_flags = Py_TPFLAGS_DEFAULT;
+*** ../vim-7.3.671/src/testdir/test86.in	2012-09-05 19:17:37.000000000 +0200
+--- src/testdir/test86.in	2012-09-21 13:49:14.000000000 +0200
+***************
+*** 211,216 ****
+--- 211,251 ----
+      m.extend([e.__class__.__name__])
+  EOF
+  :$put =messages
++ :unlet messages
++ :" locked and scope attributes
++ :let d={} | let dl={} | lockvar dl
++ :for s in split("d dl v: g:")
++ :    let name=tr(s, ':', 's')
++ :    execute 'py '.name.'=vim.bindeval("'.s.'")'
++ :    let toput=s.' : '.join(map(['locked', 'scope'], 'v:val.":".pyeval(name.".".v:val)'), ';')
++ :    $put =toput
++ :endfor
++ :silent! let d.abc=1
++ :silent! let dl.abc=1
++ :py d.locked=True
++ :py dl.locked=False
++ :silent! let d.def=1
++ :silent! let dl.def=1
++ :put ='d:'.string(d)
++ :put ='dl:'.string(dl)
++ :unlet d dl
++ :
++ :let l=[] | let ll=[] | lockvar ll
++ :for s in split("l ll")
++ :    let name=tr(s, ':', 's')
++ :    execute 'py '.name.'=vim.bindeval("'.s.'")'
++ :    let toput=s.' : locked:'.pyeval(name.'.locked')
++ :    $put =toput
++ :endfor
++ :silent! call extend(l, [0])
++ :silent! call extend(ll, [0])
++ :py l.locked=True
++ :py ll.locked=False
++ :silent! call extend(l, [1])
++ :silent! call extend(ll, [1])
++ :put ='l:'.string(l)
++ :put ='ll:'.string(ll)
++ :unlet l ll
+  :"
+  :" pyeval()
+  :let l=pyeval('range(3)')
+***************
+*** 240,245 ****
+--- 275,281 ----
+  :call garbagecollect(1)
+  :"
+  :/^start:/,$wq! test.out
++ :call getchar()
+  ENDTEST
+  
+  start:
+*** ../vim-7.3.671/src/testdir/test86.ok	2012-09-05 19:17:37.000000000 +0200
+--- src/testdir/test86.ok	2012-09-21 13:49:14.000000000 +0200
+***************
+*** 44,49 ****
+--- 44,59 ----
+  ValueError
+  TypeError
+  TypeError
++ d : locked:0;scope:0
++ dl : locked:1;scope:0
++ v: : locked:2;scope:1
++ g: : locked:0;scope:2
++ d:{'abc': 1}
++ dl:{'def': 1}
++ l : locked:0
++ ll : locked:1
++ l:[0]
++ ll:[1]
+  [0, 1, 2]
+  ['a', 'b']
+  ['c', 1]
+*** ../vim-7.3.671/src/testdir/test87.in	2012-09-05 19:17:37.000000000 +0200
+--- src/testdir/test87.in	2012-09-21 13:49:14.000000000 +0200
+***************
+*** 211,216 ****
+--- 211,251 ----
+      m.extend([e.__class__.__name__])
+  EOF
+  :$put =messages
++ :unlet messages
++ :" locked and scope attributes
++ :let d={} | let dl={} | lockvar dl
++ :for s in split("d dl v: g:")
++ :    let name=tr(s, ':', 's')
++ :    execute 'py3 '.name.'=vim.bindeval("'.s.'")'
++ :    let toput=s.' : '.join(map(['locked', 'scope'], 'v:val.":".py3eval(name.".".v:val)'), ';')
++ :    $put =toput
++ :endfor
++ :silent! let d.abc=1
++ :silent! let dl.abc=1
++ :py3 d.locked=True
++ :py3 dl.locked=False
++ :silent! let d.def=1
++ :silent! let dl.def=1
++ :put ='d:'.string(d)
++ :put ='dl:'.string(dl)
++ :unlet d dl
++ :
++ :let l=[] | let ll=[] | lockvar ll
++ :for s in split("l ll")
++ :    let name=tr(s, ':', 's')
++ :    execute 'py3 '.name.'=vim.bindeval("'.s.'")'
++ :    let toput=s.' : locked:'.py3eval(name.'.locked')
++ :    $put =toput
++ :endfor
++ :silent! call extend(l, [0])
++ :silent! call extend(ll, [0])
++ :py3 l.locked=True
++ :py3 ll.locked=False
++ :silent! call extend(l, [1])
++ :silent! call extend(ll, [1])
++ :put ='l:'.string(l)
++ :put ='ll:'.string(ll)
++ :unlet l ll
+  :"
+  :" py3eval()
+  :let l=py3eval('[0, 1, 2]')
+*** ../vim-7.3.671/src/testdir/test87.ok	2012-09-05 19:17:37.000000000 +0200
+--- src/testdir/test87.ok	2012-09-21 13:49:14.000000000 +0200
+***************
+*** 44,49 ****
+--- 44,59 ----
+  ValueError
+  TypeError
+  TypeError
++ d : locked:0;scope:0
++ dl : locked:1;scope:0
++ v: : locked:2;scope:1
++ g: : locked:0;scope:2
++ d:{'abc': 1}
++ dl:{'def': 1}
++ l : locked:0
++ ll : locked:1
++ l:[0]
++ ll:[1]
+  [0, 1, 2]
+  ['a', 'b']
+  ['c', 1]
+*** ../vim-7.3.671/src/version.c	2012-09-21 13:45:57.000000000 +0200
+--- src/version.c	2012-09-21 13:48:18.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     672,
+  /**/
+
+-- 
+Vi beats Emacs to death, and then again!
+			http://linuxtoday.com/stories/5764.html
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.673 b/7.3.673
new file mode 100644
index 0000000..8ab41a3
--- /dev/null
+++ b/7.3.673
@@ -0,0 +1,64 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.673
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.673
+Problem:    Using "gN" while 'selection' is "exclusive" misses one character.
+	    (Ben Fritz)
+Solution:   Check the direction when compensating for exclusive selection.
+	    (Christian Brabandt)
+Files:	    src/search.c
+
+
+*** ../vim-7.3.672/src/search.c	2012-09-05 12:16:39.000000000 +0200
+--- src/search.c	2012-10-03 13:28:49.000000000 +0200
+***************
+*** 4650,4657 ****
+      if (VIsual_active)
+      {
+  	redraw_curbuf_later(INVERTED);	/* update the inversion */
+! 	if (*p_sel == 'e' && ltoreq(VIsual, curwin->w_cursor))
+! 	    inc_cursor();
+      }
+  
+  #ifdef FEAT_FOLDING
+--- 4650,4664 ----
+      if (VIsual_active)
+      {
+  	redraw_curbuf_later(INVERTED);	/* update the inversion */
+! 	if (*p_sel == 'e')
+! 	{
+! 	    /* Correction for exclusive selection depends on the direction. */
+! 	    if (forward && ltoreq(VIsual, curwin->w_cursor))
+! 		inc_cursor();
+! 	    else if (!forward && ltoreq(curwin->w_cursor, VIsual))
+! 		inc(&VIsual);
+! 	}
+! 
+      }
+  
+  #ifdef FEAT_FOLDING
+*** ../vim-7.3.672/src/version.c	2012-09-21 14:00:05.000000000 +0200
+--- src/version.c	2012-10-03 13:31:45.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     673,
+  /**/
+
+-- 
+You can be stopped by the police for biking over 65 miles per hour.
+You are not allowed to walk across a street on your hands.
+		[real standing laws in Connecticut, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.674 b/7.3.674
new file mode 100644
index 0000000..ea3dc8d
--- /dev/null
+++ b/7.3.674
@@ -0,0 +1,286 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.674
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.674
+Problem:    Can't compile with Lua/dyn on Cygwin.
+Solution:   Adjust configure to use the right library name. (Ken Takata)
+Files:	    src/configure.in, src/auto/configure
+
+
+*** ../vim-7.3.673/src/configure.in	2012-09-21 13:26:44.000000000 +0200
+--- src/configure.in	2012-10-03 14:39:42.000000000 +0200
+***************
+*** 455,485 ****
+  
+    LUA_INC=
+    if test "X$vi_cv_path_lua_pfx" != "X"; then
+      AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include)
+      if test -f $vi_cv_path_lua_pfx/include/lua.h; then
+        AC_MSG_RESULT(yes)
+      else
+        AC_MSG_RESULT(no)
+!       dnl -- try to find Lua executable
+!       AC_PATH_PROG(vi_cv_path_lua, lua)
+!       if test "X$vi_cv_path_lua" != "X"; then
+!         dnl -- find Lua version
+!         AC_CACHE_CHECK(Lua version, vi_cv_version_lua,
+!         [ vi_cv_version_lua=`${vi_cv_path_lua} -e "print(_VERSION)" | sed 's/.* //'` ])
+!         AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua)
+!         if test -f $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h; then
+!           AC_MSG_RESULT(yes)
+!           LUA_INC=/lua$vi_cv_version_lua
+!         else
+!           AC_MSG_RESULT(no)
+!           vi_cv_path_lua_pfx=
+!         fi
+        fi
+      fi
+    fi
+  
+    if test "X$vi_cv_path_lua_pfx" != "X"; then
+!     if test "X$vi_cv_version_lua" != "X"; then
+        dnl Test alternate location using version
+        LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua$vi_cv_version_lua"
+      else
+--- 455,485 ----
+  
+    LUA_INC=
+    if test "X$vi_cv_path_lua_pfx" != "X"; then
++     dnl -- try to find Lua executable
++     AC_PATH_PROG(vi_cv_path_lua, lua)
++     if test "X$vi_cv_path_lua" != "X"; then
++       dnl -- find Lua version
++       AC_CACHE_CHECK(Lua version, vi_cv_version_lua,
++       [ vi_cv_version_lua=`${vi_cv_path_lua} -e "print(_VERSION)" | sed 's/.* //'` ])
++     fi
+      AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include)
+      if test -f $vi_cv_path_lua_pfx/include/lua.h; then
+        AC_MSG_RESULT(yes)
+      else
+        AC_MSG_RESULT(no)
+!       AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua)
+!       if test -f $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h; then
+!         AC_MSG_RESULT(yes)
+!         LUA_INC=/lua$vi_cv_version_lua
+!       else
+!         AC_MSG_RESULT(no)
+!         vi_cv_path_lua_pfx=
+        fi
+      fi
+    fi
+  
+    if test "X$vi_cv_path_lua_pfx" != "X"; then
+!     if test "X$LUA_INC" != "X"; then
+        dnl Test alternate location using version
+        LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua$vi_cv_version_lua"
+      else
+***************
+*** 491,507 ****
+      LUA_PRO="if_lua.pro"
+      AC_DEFINE(FEAT_LUA)
+      if test "$enable_luainterp" = "dynamic"; then
+!       dnl Determine the SONAME for the current version, but fallback to
+!       dnl liblua${vi_cv_version_lua}.so if no SONAME-versioned file is found.
+!       for i in 0 1 2 3 4 5 6 7 8 9; do
+! 	if test -f "${vi_cv_path_lua_pfx}/lib/liblua${vi_cv_version_lua}.so.$i"; then
+! 	  LUA_SONAME=".$i"
+! 	  break
+! 	fi
+!       done
+        AC_DEFINE(DYNAMIC_LUA)
+        LUA_LIBS=""
+!       LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"liblua${vi_cv_version_lua}.so$LUA_SONAME\\\" $LUA_CFLAGS"
+      fi
+    fi
+    if test "$fail_if_missing" = "yes" -a -z "$LUA_SRC"; then
+--- 491,512 ----
+      LUA_PRO="if_lua.pro"
+      AC_DEFINE(FEAT_LUA)
+      if test "$enable_luainterp" = "dynamic"; then
+!       if test -f "${vi_cv_path_lua_pfx}/bin/cyglua-${vi_cv_version_lua}.dll"; then
+! 	vi_cv_dll_name_lua="cyglua-${vi_cv_version_lua}.dll"
+!       else
+! 	dnl Determine the SONAME for the current version, but fallback to
+! 	dnl liblua${vi_cv_version_lua}.so if no SONAME-versioned file is found.
+! 	for i in 0 1 2 3 4 5 6 7 8 9; do
+! 	  if test -f "${vi_cv_path_lua_pfx}/lib/liblua${vi_cv_version_lua}.so.$i"; then
+! 	    LUA_SONAME=".$i"
+! 	    break
+! 	  fi
+! 	done
+! 	vi_cv_dll_name_lua="liblua${vi_cv_version_lua}.so$LUA_SONAME"
+!       fi
+        AC_DEFINE(DYNAMIC_LUA)
+        LUA_LIBS=""
+!       LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"${vi_cv_dll_name_lua}\\\" $LUA_CFLAGS"
+      fi
+    fi
+    if test "$fail_if_missing" = "yes" -a -z "$LUA_SRC"; then
+*** ../vim-7.3.673/src/auto/configure	2012-09-21 13:26:44.000000000 +0200
+--- src/auto/configure	2012-10-03 14:42:13.000000000 +0200
+***************
+*** 4648,4662 ****
+  
+    LUA_INC=
+    if test "X$vi_cv_path_lua_pfx" != "X"; then
+!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking if lua.h can be found in $vi_cv_path_lua_pfx/include" >&5
+! $as_echo_n "checking if lua.h can be found in $vi_cv_path_lua_pfx/include... " >&6; }
+!     if test -f $vi_cv_path_lua_pfx/include/lua.h; then
+!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+! $as_echo "yes" >&6; }
+!     else
+!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+! $as_echo "no" >&6; }
+!             # Extract the first word of "lua", so it can be a program name with args.
+  set dummy lua; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+--- 4648,4654 ----
+  
+    LUA_INC=
+    if test "X$vi_cv_path_lua_pfx" != "X"; then
+!         # Extract the first word of "lua", so it can be a program name with args.
+  set dummy lua; ac_word=$2
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+  $as_echo_n "checking for $ac_word... " >&6; }
+***************
+*** 4696,4703 ****
+  fi
+  
+  
+!       if test "X$vi_cv_path_lua" != "X"; then
+!                 { $as_echo "$as_me:${as_lineno-$LINENO}: checking Lua version" >&5
+  $as_echo_n "checking Lua version... " >&6; }
+  if test "${vi_cv_version_lua+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+--- 4688,4695 ----
+  fi
+  
+  
+!     if test "X$vi_cv_path_lua" != "X"; then
+!             { $as_echo "$as_me:${as_lineno-$LINENO}: checking Lua version" >&5
+  $as_echo_n "checking Lua version... " >&6; }
+  if test "${vi_cv_version_lua+set}" = set; then :
+    $as_echo_n "(cached) " >&6
+***************
+*** 4706,4728 ****
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_version_lua" >&5
+  $as_echo "$vi_cv_version_lua" >&6; }
+!         { $as_echo "$as_me:${as_lineno-$LINENO}: checking if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua" >&5
+  $as_echo_n "checking if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua... " >&6; }
+!         if test -f $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h; then
+!           { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+  $as_echo "yes" >&6; }
+!           LUA_INC=/lua$vi_cv_version_lua
+!         else
+!           { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+  $as_echo "no" >&6; }
+!           vi_cv_path_lua_pfx=
+!         fi
+        fi
+      fi
+    fi
+  
+    if test "X$vi_cv_path_lua_pfx" != "X"; then
+!     if test "X$vi_cv_version_lua" != "X"; then
+              LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua$vi_cv_version_lua"
+      else
+        LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua"
+--- 4698,4728 ----
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_version_lua" >&5
+  $as_echo "$vi_cv_version_lua" >&6; }
+!     fi
+!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking if lua.h can be found in $vi_cv_path_lua_pfx/include" >&5
+! $as_echo_n "checking if lua.h can be found in $vi_cv_path_lua_pfx/include... " >&6; }
+!     if test -f $vi_cv_path_lua_pfx/include/lua.h; then
+!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+! $as_echo "yes" >&6; }
+!     else
+!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+! $as_echo "no" >&6; }
+!       { $as_echo "$as_me:${as_lineno-$LINENO}: checking if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua" >&5
+  $as_echo_n "checking if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua... " >&6; }
+!       if test -f $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h; then
+!         { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+  $as_echo "yes" >&6; }
+!         LUA_INC=/lua$vi_cv_version_lua
+!       else
+!         { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+  $as_echo "no" >&6; }
+!         vi_cv_path_lua_pfx=
+        fi
+      fi
+    fi
+  
+    if test "X$vi_cv_path_lua_pfx" != "X"; then
+!     if test "X$LUA_INC" != "X"; then
+              LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua$vi_cv_version_lua"
+      else
+        LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua"
+***************
+*** 4734,4749 ****
+      $as_echo "#define FEAT_LUA 1" >>confdefs.h
+  
+      if test "$enable_luainterp" = "dynamic"; then
+!                   for i in 0 1 2 3 4 5 6 7 8 9; do
+! 	if test -f "${vi_cv_path_lua_pfx}/lib/liblua${vi_cv_version_lua}.so.$i"; then
+! 	  LUA_SONAME=".$i"
+! 	  break
+! 	fi
+!       done
+        $as_echo "#define DYNAMIC_LUA 1" >>confdefs.h
+  
+        LUA_LIBS=""
+!       LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"liblua${vi_cv_version_lua}.so$LUA_SONAME\\\" $LUA_CFLAGS"
+      fi
+    fi
+    if test "$fail_if_missing" = "yes" -a -z "$LUA_SRC"; then
+--- 4734,4754 ----
+      $as_echo "#define FEAT_LUA 1" >>confdefs.h
+  
+      if test "$enable_luainterp" = "dynamic"; then
+!       if test -f "${vi_cv_path_lua_pfx}/bin/cyglua-${vi_cv_version_lua}.dll"; then
+! 	vi_cv_dll_name_lua="cyglua-${vi_cv_version_lua}.dll"
+!       else
+! 			for i in 0 1 2 3 4 5 6 7 8 9; do
+! 	  if test -f "${vi_cv_path_lua_pfx}/lib/liblua${vi_cv_version_lua}.so.$i"; then
+! 	    LUA_SONAME=".$i"
+! 	    break
+! 	  fi
+! 	done
+! 	vi_cv_dll_name_lua="liblua${vi_cv_version_lua}.so$LUA_SONAME"
+!       fi
+        $as_echo "#define DYNAMIC_LUA 1" >>confdefs.h
+  
+        LUA_LIBS=""
+!       LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"${vi_cv_dll_name_lua}\\\" $LUA_CFLAGS"
+      fi
+    fi
+    if test "$fail_if_missing" = "yes" -a -z "$LUA_SRC"; then
+*** ../vim-7.3.673/src/version.c	2012-10-03 13:35:45.000000000 +0200
+--- src/version.c	2012-10-03 14:44:56.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     674,
+  /**/
+
+-- 
+The Law, in its majestic equality, forbids the rich, as well as the
+poor, to sleep under the bridges, to beg in the streets, and to steal
+bread.                       -- Anatole France
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.675 b/7.3.675
new file mode 100644
index 0000000..7106917
--- /dev/null
+++ b/7.3.675
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.675
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.675
+Problem:    Using uninitialized memory with very long file name.
+Solution:   Put NUL after text when it is truncated. (ZyX)
+Files:	    src/buffer.c
+
+
+*** ../vim-7.3.674/src/buffer.c	2012-09-05 13:30:22.000000000 +0200
+--- src/buffer.c	2012-10-03 16:25:12.000000000 +0200
+***************
+*** 3058,3064 ****
+  
+      *p++ = '"';
+      if (buf_spname(curbuf) != NULL)
+! 	STRCPY(p, buf_spname(curbuf));
+      else
+      {
+  	if (!fullname && curbuf->b_fname != NULL)
+--- 3058,3064 ----
+  
+      *p++ = '"';
+      if (buf_spname(curbuf) != NULL)
+! 	vim_strncpy(p, buf_spname(curbuf), IOSIZE - (p - buffer) - 1);
+      else
+      {
+  	if (!fullname && curbuf->b_fname != NULL)
+*** ../vim-7.3.674/src/version.c	2012-10-03 14:48:03.000000000 +0200
+--- src/version.c	2012-10-03 16:29:28.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     675,
+  /**/
+
+-- 
+It is illegal to rob a bank and then shoot at the bank teller with a water
+pistol.
+		[real standing law in Louisana, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.676 b/7.3.676
new file mode 100644
index 0000000..40d6f3d
--- /dev/null
+++ b/7.3.676
@@ -0,0 +1,77 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.676
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.676
+Problem:    Ruby compilation on Windows 32 bit doesn't work.
+Solution:   Only use some functions for 64 bit. (Ken Takata)
+Files:	    src/if_ruby.c
+
+
+*** ../vim-7.3.675/src/if_ruby.c	2012-09-18 16:36:26.000000000 +0200
+--- src/if_ruby.c	2012-10-03 17:55:58.000000000 +0200
+***************
+*** 178,186 ****
+--- 178,188 ----
+  #define rb_hash_new			dll_rb_hash_new
+  #define rb_inspect			dll_rb_inspect
+  #define rb_int2inum			dll_rb_int2inum
++ #if SIZEOF_INT < SIZEOF_LONG /* 64 bits only */
+  #define rb_fix2int			dll_rb_fix2int
+  #define rb_num2int			dll_rb_num2int
+  #define rb_num2uint			dll_rb_num2uint
++ #endif
+  #define rb_lastline_get			dll_rb_lastline_get
+  #define rb_lastline_set			dll_rb_lastline_set
+  #define rb_load_protect			dll_rb_load_protect
+***************
+*** 271,279 ****
+--- 273,283 ----
+  static VALUE (*dll_rb_hash_new) (void);
+  static VALUE (*dll_rb_inspect) (VALUE);
+  static VALUE (*dll_rb_int2inum) (long);
++ #if SIZEOF_INT < SIZEOF_LONG /* 64 bits only */
+  static long (*dll_rb_fix2int) (VALUE);
+  static long (*dll_rb_num2int) (VALUE);
+  static unsigned long (*dll_rb_num2uint) (VALUE);
++ #endif
+  static VALUE (*dll_rb_lastline_get) (void);
+  static void (*dll_rb_lastline_set) (VALUE);
+  static void (*dll_rb_load_protect) (VALUE, int, int*);
+***************
+*** 382,390 ****
+--- 386,396 ----
+      {"rb_hash_new", (RUBY_PROC*)&dll_rb_hash_new},
+      {"rb_inspect", (RUBY_PROC*)&dll_rb_inspect},
+      {"rb_int2inum", (RUBY_PROC*)&dll_rb_int2inum},
++ #if SIZEOF_INT < SIZEOF_LONG /* 64 bits only */
+      {"rb_fix2int", (RUBY_PROC*)&dll_rb_fix2int},
+      {"rb_num2int", (RUBY_PROC*)&dll_rb_num2int},
+      {"rb_num2uint", (RUBY_PROC*)&dll_rb_num2uint},
++ #endif
+      {"rb_lastline_get", (RUBY_PROC*)&dll_rb_lastline_get},
+      {"rb_lastline_set", (RUBY_PROC*)&dll_rb_lastline_set},
+      {"rb_load_protect", (RUBY_PROC*)&dll_rb_load_protect},
+*** ../vim-7.3.675/src/version.c	2012-10-03 17:12:43.000000000 +0200
+--- src/version.c	2012-10-03 17:52:11.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     676,
+  /**/
+
+-- 
+Why don't cannibals eat clowns?
+Because they taste funny.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.677 b/7.3.677
new file mode 100644
index 0000000..bf6e91f
--- /dev/null
+++ b/7.3.677
@@ -0,0 +1,268 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.677
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.677
+Problem:    buf_spname() is used inconsistently.
+Solution:   Make the return type a char_u pointer.  Check the size of the
+	    returned string.
+Files:	    src/buffer.c, src/proto/buffer.pro, src/ex_cmds2.c,
+	    src/ex_docmd.c, src/memline.c, src/screen.c
+
+
+*** ../vim-7.3.676/src/buffer.c	2012-10-03 17:12:43.000000000 +0200
+--- src/buffer.c	2012-10-03 18:14:34.000000000 +0200
+***************
+*** 2635,2641 ****
+  	    continue;
+  	msg_putchar('\n');
+  	if (buf_spname(buf) != NULL)
+! 	    STRCPY(NameBuff, buf_spname(buf));
+  	else
+  	    home_replace(buf, buf->b_fname, NameBuff, MAXPATHL, TRUE);
+  
+--- 2635,2641 ----
+  	    continue;
+  	msg_putchar('\n');
+  	if (buf_spname(buf) != NULL)
+! 	    vim_strncpy(NameBuff, buf_spname(buf), MAXPATHL - 1);
+  	else
+  	    home_replace(buf, buf->b_fname, NameBuff, MAXPATHL, TRUE);
+  
+***************
+*** 3350,3356 ****
+  	else
+  	{
+  	    if (buf_spname(curbuf) != NULL)
+! 		i_name = (char_u *)buf_spname(curbuf);
+  	    else		    /* use file name only in icon */
+  		i_name = gettail(curbuf->b_ffname);
+  	    *i_str = NUL;
+--- 3350,3356 ----
+  	else
+  	{
+  	    if (buf_spname(curbuf) != NULL)
+! 		i_name = buf_spname(curbuf);
+  	    else		    /* use file name only in icon */
+  		i_name = gettail(curbuf->b_ffname);
+  	    *i_str = NUL;
+***************
+*** 3766,3772 ****
+  	case STL_FILENAME:
+  	    fillable = FALSE;	/* don't change ' ' to fillchar */
+  	    if (buf_spname(wp->w_buffer) != NULL)
+! 		STRCPY(NameBuff, buf_spname(wp->w_buffer));
+  	    else
+  	    {
+  		t = (opt == STL_FULLPATH) ? wp->w_buffer->b_ffname
+--- 3766,3772 ----
+  	case STL_FILENAME:
+  	    fillable = FALSE;	/* don't change ' ' to fillchar */
+  	    if (buf_spname(wp->w_buffer) != NULL)
+! 		vim_strncpy(NameBuff, buf_spname(wp->w_buffer), MAXPATHL - 1);
+  	    else
+  	    {
+  		t = (opt == STL_FULLPATH) ? wp->w_buffer->b_ffname
+***************
+*** 5244,5250 ****
+   * Return special buffer name.
+   * Returns NULL when the buffer has a normal file name.
+   */
+!     char *
+  buf_spname(buf)
+      buf_T	*buf;
+  {
+--- 5244,5250 ----
+   * Return special buffer name.
+   * Returns NULL when the buffer has a normal file name.
+   */
+!     char_u *
+  buf_spname(buf)
+      buf_T	*buf;
+  {
+***************
+*** 5263,5271 ****
+  		goto win_found;
+  win_found:
+  	if (win != NULL && win->w_llist_ref != NULL)
+! 	    return _(msg_loclist);
+  	else
+! 	    return _(msg_qflist);
+      }
+  #endif
+  #ifdef FEAT_QUICKFIX
+--- 5263,5271 ----
+  		goto win_found;
+  win_found:
+  	if (win != NULL && win->w_llist_ref != NULL)
+! 	    return (char_u *)_(msg_loclist);
+  	else
+! 	    return (char_u *)_(msg_qflist);
+      }
+  #endif
+  #ifdef FEAT_QUICKFIX
+***************
+*** 5274,5285 ****
+      if (bt_nofile(buf))
+      {
+  	if (buf->b_sfname != NULL)
+! 	    return (char *)buf->b_sfname;
+! 	return _("[Scratch]");
+      }
+  #endif
+      if (buf->b_fname == NULL)
+! 	return _("[No Name]");
+      return NULL;
+  }
+  
+--- 5274,5285 ----
+      if (bt_nofile(buf))
+      {
+  	if (buf->b_sfname != NULL)
+! 	    return buf->b_sfname;
+! 	return (char_u *)_("[Scratch]");
+      }
+  #endif
+      if (buf->b_fname == NULL)
+! 	return (char_u *)_("[No Name]");
+      return NULL;
+  }
+  
+*** ../vim-7.3.676/src/proto/buffer.pro	2012-07-10 15:18:18.000000000 +0200
+--- src/proto/buffer.pro	2012-10-03 18:17:58.000000000 +0200
+***************
+*** 51,57 ****
+  void do_modelines __ARGS((int flags));
+  int read_viminfo_bufferlist __ARGS((vir_T *virp, int writing));
+  void write_viminfo_bufferlist __ARGS((FILE *fp));
+! char *buf_spname __ARGS((buf_T *buf));
+  void buf_addsign __ARGS((buf_T *buf, int id, linenr_T lnum, int typenr));
+  linenr_T buf_change_sign_type __ARGS((buf_T *buf, int markId, int typenr));
+  int buf_getsigntype __ARGS((buf_T *buf, linenr_T lnum, int type));
+--- 51,57 ----
+  void do_modelines __ARGS((int flags));
+  int read_viminfo_bufferlist __ARGS((vir_T *virp, int writing));
+  void write_viminfo_bufferlist __ARGS((FILE *fp));
+! char_u *buf_spname __ARGS((buf_T *buf));
+  void buf_addsign __ARGS((buf_T *buf, int id, linenr_T lnum, int typenr));
+  linenr_T buf_change_sign_type __ARGS((buf_T *buf, int markId, int typenr));
+  int buf_getsigntype __ARGS((buf_T *buf, linenr_T lnum, int type));
+*** ../vim-7.3.676/src/ex_cmds2.c	2012-06-29 12:57:03.000000000 +0200
+--- src/ex_cmds2.c	2012-10-03 18:15:26.000000000 +0200
+***************
+*** 1688,1695 ****
+  	    msg_didout = FALSE;
+  	}
+  	if (EMSG2(_("E162: No write since last change for buffer \"%s\""),
+! 		    buf_spname(buf) != NULL ? (char_u *)buf_spname(buf) :
+! 		    buf->b_fname))
+  	{
+  	    save = no_wait_return;
+  	    no_wait_return = FALSE;
+--- 1688,1694 ----
+  	    msg_didout = FALSE;
+  	}
+  	if (EMSG2(_("E162: No write since last change for buffer \"%s\""),
+! 		    buf_spname(buf) != NULL ? buf_spname(buf) : buf->b_fname))
+  	{
+  	    save = no_wait_return;
+  	    no_wait_return = FALSE;
+*** ../vim-7.3.676/src/ex_docmd.c	2012-09-18 16:47:00.000000000 +0200
+--- src/ex_docmd.c	2012-10-03 18:15:47.000000000 +0200
+***************
+*** 7602,7608 ****
+  	    msg_putchar(bufIsChanged(wp->w_buffer) ? '+' : ' ');
+  	    msg_putchar(' ');
+  	    if (buf_spname(wp->w_buffer) != NULL)
+! 		STRCPY(IObuff, buf_spname(wp->w_buffer));
+  	    else
+  		home_replace(wp->w_buffer, wp->w_buffer->b_fname,
+  							IObuff, IOSIZE, TRUE);
+--- 7602,7608 ----
+  	    msg_putchar(bufIsChanged(wp->w_buffer) ? '+' : ' ');
+  	    msg_putchar(' ');
+  	    if (buf_spname(wp->w_buffer) != NULL)
+! 		vim_strncpy(IObuff, buf_spname(wp->w_buffer), IOSIZE - 1);
+  	    else
+  		home_replace(wp->w_buffer, wp->w_buffer->b_fname,
+  							IObuff, IOSIZE, TRUE);
+*** ../vim-7.3.676/src/memline.c	2011-10-26 11:44:15.000000000 +0200
+--- src/memline.c	2012-10-03 18:18:23.000000000 +0200
+***************
+*** 780,788 ****
+  	need_wait_return = TRUE;	/* call wait_return later */
+  	++no_wait_return;
+  	(void)EMSG2(_("E303: Unable to open swap file for \"%s\", recovery impossible"),
+! 		    buf_spname(buf) != NULL
+! 			? (char_u *)buf_spname(buf)
+! 			: buf->b_fname);
+  	--no_wait_return;
+      }
+  
+--- 780,786 ----
+  	need_wait_return = TRUE;	/* call wait_return later */
+  	++no_wait_return;
+  	(void)EMSG2(_("E303: Unable to open swap file for \"%s\", recovery impossible"),
+! 		    buf_spname(buf) != NULL ? buf_spname(buf) : buf->b_fname);
+  	--no_wait_return;
+      }
+  
+***************
+*** 1315,1321 ****
+      smsg((char_u *)_("Using swap file \"%s\""), NameBuff);
+  
+      if (buf_spname(curbuf) != NULL)
+! 	STRCPY(NameBuff, buf_spname(curbuf));
+      else
+  	home_replace(NULL, curbuf->b_ffname, NameBuff, MAXPATHL, TRUE);
+      smsg((char_u *)_("Original file \"%s\""), NameBuff);
+--- 1313,1319 ----
+      smsg((char_u *)_("Using swap file \"%s\""), NameBuff);
+  
+      if (buf_spname(curbuf) != NULL)
+! 	vim_strncpy(NameBuff, buf_spname(curbuf), MAXPATHL - 1);
+      else
+  	home_replace(NULL, curbuf->b_ffname, NameBuff, MAXPATHL, TRUE);
+      smsg((char_u *)_("Original file \"%s\""), NameBuff);
+*** ../vim-7.3.676/src/screen.c	2012-08-23 18:55:50.000000000 +0200
+--- src/screen.c	2012-10-03 18:17:25.000000000 +0200
+***************
+*** 9876,9882 ****
+      buf_T	*buf;
+  {
+      if (buf_spname(buf) != NULL)
+! 	STRCPY(NameBuff, buf_spname(buf));
+      else
+  	home_replace(buf, buf->b_fname, NameBuff, MAXPATHL, TRUE);
+      trans_characters(NameBuff, MAXPATHL);
+--- 9876,9882 ----
+      buf_T	*buf;
+  {
+      if (buf_spname(buf) != NULL)
+! 	vim_strncpy(NameBuff, buf_spname(buf), MAXPATHL - 1);
+      else
+  	home_replace(buf, buf->b_fname, NameBuff, MAXPATHL, TRUE);
+      trans_characters(NameBuff, MAXPATHL);
+*** ../vim-7.3.676/src/version.c	2012-10-03 18:06:55.000000000 +0200
+--- src/version.c	2012-10-03 18:22:18.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     677,
+  /**/
+
+-- 
+bashian roulette:
+$ ((RANDOM%6)) || rm -rf ~
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.678 b/7.3.678
new file mode 100644
index 0000000..5f20da0
--- /dev/null
+++ b/7.3.678
@@ -0,0 +1,72 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.678
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.678
+Problem:    Ruby .so name may not be correct.
+Solution:   Use the LIBRUBY_SO entry from the config. (Vit Ondruch)
+Files:	    src/configure.in, src/auto/configure
+
+
+*** ../vim-7.3.677/src/configure.in	2012-10-03 14:48:03.000000000 +0200
+--- src/configure.in	2012-10-03 18:38:24.000000000 +0200
+***************
+*** 1487,1493 ****
+  	RUBY_PRO="if_ruby.pro"
+  	AC_DEFINE(FEAT_RUBY)
+  	if test "$enable_rubyinterp" = "dynamic"; then
+! 	  libruby=`$vi_cv_path_ruby -r rbconfig -e 'printf "lib%s.%s\n", Config::CONFIG[["RUBY_SO_NAME"]], Config::CONFIG[["DLEXT"]]'`
+  	  AC_DEFINE(DYNAMIC_RUBY)
+  	  RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby\\\" -DDYNAMIC_RUBY_VER=$rubyversion $RUBY_CFLAGS"
+  	  RUBY_LIBS=
+--- 1487,1493 ----
+  	RUBY_PRO="if_ruby.pro"
+  	AC_DEFINE(FEAT_RUBY)
+  	if test "$enable_rubyinterp" = "dynamic"; then
+! 	  libruby=`$vi_cv_path_ruby -r rbconfig -e 'puts Config::CONFIG[["LIBRUBY_SO"]]'`
+  	  AC_DEFINE(DYNAMIC_RUBY)
+  	  RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby\\\" -DDYNAMIC_RUBY_VER=$rubyversion $RUBY_CFLAGS"
+  	  RUBY_LIBS=
+*** ../vim-7.3.677/src/auto/configure	2012-10-03 14:48:03.000000000 +0200
+--- src/auto/configure	2012-10-03 18:40:48.000000000 +0200
+***************
+*** 6376,6382 ****
+  	$as_echo "#define FEAT_RUBY 1" >>confdefs.h
+  
+  	if test "$enable_rubyinterp" = "dynamic"; then
+! 	  libruby=`$vi_cv_path_ruby -r rbconfig -e 'printf "lib%s.%s\n", Config::CONFIG["RUBY_SO_NAME"], Config::CONFIG["DLEXT"]'`
+  	  $as_echo "#define DYNAMIC_RUBY 1" >>confdefs.h
+  
+  	  RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby\\\" -DDYNAMIC_RUBY_VER=$rubyversion $RUBY_CFLAGS"
+--- 6376,6382 ----
+  	$as_echo "#define FEAT_RUBY 1" >>confdefs.h
+  
+  	if test "$enable_rubyinterp" = "dynamic"; then
+! 	  libruby=`$vi_cv_path_ruby -r rbconfig -e 'puts Config::CONFIG["LIBRUBY_SO"]'`
+  	  $as_echo "#define DYNAMIC_RUBY 1" >>confdefs.h
+  
+  	  RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby\\\" -DDYNAMIC_RUBY_VER=$rubyversion $RUBY_CFLAGS"
+*** ../vim-7.3.677/src/version.c	2012-10-03 18:24:55.000000000 +0200
+--- src/version.c	2012-10-03 18:49:09.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     678,
+  /**/
+
+-- 
+Snoring is prohibited unless all bedroom windows are closed and securely
+locked.
+		[real standing law in Massachusetts, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.679 b/7.3.679
new file mode 100644
index 0000000..f95bf5e
--- /dev/null
+++ b/7.3.679
@@ -0,0 +1,230 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.679
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.679
+Problem:    Ruby detection uses Config, newer Ruby versions use RbConfig.
+Solution:   Detect the need to use RbConfig. (Vit Ondruch)
+Files:	    src/configure.in, src/auto/configure
+
+
+*** ../vim-7.3.678/src/configure.in	2012-10-03 18:49:55.000000000 +0200
+--- src/configure.in	2012-10-03 18:50:48.000000000 +0200
+***************
+*** 1442,1465 ****
+      AC_MSG_CHECKING(Ruby version)
+      if $vi_cv_path_ruby -e '(VERSION rescue RUBY_VERSION) >= "1.6.0" or exit 1' >/dev/null 2>/dev/null; then
+        AC_MSG_RESULT(OK)
+        AC_MSG_CHECKING(Ruby header files)
+!       rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e 'print Config::CONFIG[["rubyhdrdir"]] || Config::CONFIG[["archdir"]] || $hdrdir' 2>/dev/null`
+        if test "X$rubyhdrdir" != "X"; then
+  	AC_MSG_RESULT($rubyhdrdir)
+  	RUBY_CFLAGS="-I$rubyhdrdir"
+!         rubyarch=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["arch"]]'`
+          if test -d "$rubyhdrdir/$rubyarch"; then
+            RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyhdrdir/$rubyarch"
+          fi
+!         rubyversion=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["ruby_version"]].gsub(/\./, "")[[0,2]]'`
+          RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion"
+! 	rubylibs=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["LIBS"]]'`
+  	if test "X$rubylibs" != "X"; then
+  	  RUBY_LIBS="$rubylibs"
+  	fi
+! 	librubyarg=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["LIBRUBYARG"]])'`
+! 	librubya=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["LIBRUBY_A"]])'`
+!   rubylibdir=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["libdir"]])'`
+  	if test -f "$rubylibdir/$librubya"; then
+  	  librubyarg="$librubyarg"
+      RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
+--- 1442,1471 ----
+      AC_MSG_CHECKING(Ruby version)
+      if $vi_cv_path_ruby -e '(VERSION rescue RUBY_VERSION) >= "1.6.0" or exit 1' >/dev/null 2>/dev/null; then
+        AC_MSG_RESULT(OK)
++       AC_MSG_CHECKING(Ruby rbconfig)
++       ruby_rbconfig="RbConfig"
++       if ! $vi_cv_path_ruby -r rbconfig -e 'RbConfig' >/dev/null 2>/dev/null; then
++ 	ruby_rbconfig="Config"
++       fi
++       AC_MSG_RESULT($ruby_rbconfig)
+        AC_MSG_CHECKING(Ruby header files)
+!       rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e "print $ruby_rbconfig::CONFIG[['rubyhdrdir']] || $ruby_rbconfig::CONFIG[['archdir']] || \\$hdrdir" 2>/dev/null`
+        if test "X$rubyhdrdir" != "X"; then
+  	AC_MSG_RESULT($rubyhdrdir)
+  	RUBY_CFLAGS="-I$rubyhdrdir"
+!         rubyarch=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['arch']]"`
+          if test -d "$rubyhdrdir/$rubyarch"; then
+            RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyhdrdir/$rubyarch"
+          fi
+!         rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['ruby_version']].gsub(/\./, '')[[0,2]]"`
+          RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion"
+! 	rubylibs=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LIBS']]"`
+  	if test "X$rubylibs" != "X"; then
+  	  RUBY_LIBS="$rubylibs"
+  	fi
+! 	librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBYARG']])"`
+! 	librubya=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBY_A']])"`
+!   rubylibdir=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['libdir']])"`
+  	if test -f "$rubylibdir/$librubya"; then
+  	  librubyarg="$librubyarg"
+      RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
+***************
+*** 1472,1478 ****
+  	if test "X$librubyarg" != "X"; then
+  	  RUBY_LIBS="$librubyarg $RUBY_LIBS"
+  	fi
+! 	rubyldflags=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["LDFLAGS"]]'`
+  	if test "X$rubyldflags" != "X"; then
+  	  dnl Ruby on Mac OS X 10.5 adds "-arch" flags but these should only
+  	  dnl be included if requested by passing --with-mac-arch to
+--- 1478,1484 ----
+  	if test "X$librubyarg" != "X"; then
+  	  RUBY_LIBS="$librubyarg $RUBY_LIBS"
+  	fi
+! 	rubyldflags=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LDFLAGS']]"`
+  	if test "X$rubyldflags" != "X"; then
+  	  dnl Ruby on Mac OS X 10.5 adds "-arch" flags but these should only
+  	  dnl be included if requested by passing --with-mac-arch to
+***************
+*** 1487,1493 ****
+  	RUBY_PRO="if_ruby.pro"
+  	AC_DEFINE(FEAT_RUBY)
+  	if test "$enable_rubyinterp" = "dynamic"; then
+! 	  libruby=`$vi_cv_path_ruby -r rbconfig -e 'puts Config::CONFIG[["LIBRUBY_SO"]]'`
+  	  AC_DEFINE(DYNAMIC_RUBY)
+  	  RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby\\\" -DDYNAMIC_RUBY_VER=$rubyversion $RUBY_CFLAGS"
+  	  RUBY_LIBS=
+--- 1493,1499 ----
+  	RUBY_PRO="if_ruby.pro"
+  	AC_DEFINE(FEAT_RUBY)
+  	if test "$enable_rubyinterp" = "dynamic"; then
+! 	  libruby=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_SO']]"`
+  	  AC_DEFINE(DYNAMIC_RUBY)
+  	  RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby\\\" -DDYNAMIC_RUBY_VER=$rubyversion $RUBY_CFLAGS"
+  	  RUBY_LIBS=
+*** ../vim-7.3.678/src/auto/configure	2012-10-03 18:49:55.000000000 +0200
+--- src/auto/configure	2012-10-03 18:51:38.000000000 +0200
+***************
+*** 6332,6357 ****
+      if $vi_cv_path_ruby -e '(VERSION rescue RUBY_VERSION) >= "1.6.0" or exit 1' >/dev/null 2>/dev/null; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: OK" >&5
+  $as_echo "OK" >&6; }
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking Ruby header files" >&5
+  $as_echo_n "checking Ruby header files... " >&6; }
+!       rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e 'print Config::CONFIG["rubyhdrdir"] || Config::CONFIG["archdir"] || $hdrdir' 2>/dev/null`
+        if test "X$rubyhdrdir" != "X"; then
+  	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rubyhdrdir" >&5
+  $as_echo "$rubyhdrdir" >&6; }
+  	RUBY_CFLAGS="-I$rubyhdrdir"
+!         rubyarch=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["arch"]'`
+          if test -d "$rubyhdrdir/$rubyarch"; then
+            RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyhdrdir/$rubyarch"
+          fi
+!         rubyversion=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["ruby_version"].gsub(/\./, "")[0,2]'`
+          RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion"
+! 	rubylibs=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["LIBS"]'`
+  	if test "X$rubylibs" != "X"; then
+  	  RUBY_LIBS="$rubylibs"
+  	fi
+! 	librubyarg=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG["LIBRUBYARG"])'`
+! 	librubya=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG["LIBRUBY_A"])'`
+!   rubylibdir=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG["libdir"])'`
+  	if test -f "$rubylibdir/$librubya"; then
+  	  librubyarg="$librubyarg"
+      RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
+--- 6332,6365 ----
+      if $vi_cv_path_ruby -e '(VERSION rescue RUBY_VERSION) >= "1.6.0" or exit 1' >/dev/null 2>/dev/null; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: OK" >&5
+  $as_echo "OK" >&6; }
++       { $as_echo "$as_me:${as_lineno-$LINENO}: checking Ruby rbconfig" >&5
++ $as_echo_n "checking Ruby rbconfig... " >&6; }
++       ruby_rbconfig="RbConfig"
++       if ! $vi_cv_path_ruby -r rbconfig -e 'RbConfig' >/dev/null 2>/dev/null; then
++ 	ruby_rbconfig="Config"
++       fi
++       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ruby_rbconfig" >&5
++ $as_echo "$ruby_rbconfig" >&6; }
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking Ruby header files" >&5
+  $as_echo_n "checking Ruby header files... " >&6; }
+!       rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e "print $ruby_rbconfig::CONFIG['rubyhdrdir'] || $ruby_rbconfig::CONFIG['archdir'] || \\$hdrdir" 2>/dev/null`
+        if test "X$rubyhdrdir" != "X"; then
+  	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rubyhdrdir" >&5
+  $as_echo "$rubyhdrdir" >&6; }
+  	RUBY_CFLAGS="-I$rubyhdrdir"
+!         rubyarch=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG['arch']"`
+          if test -d "$rubyhdrdir/$rubyarch"; then
+            RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyhdrdir/$rubyarch"
+          fi
+!         rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG['ruby_version'].gsub(/\./, '')[0,2]"`
+          RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion"
+! 	rubylibs=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG['LIBS']"`
+  	if test "X$rubylibs" != "X"; then
+  	  RUBY_LIBS="$rubylibs"
+  	fi
+! 	librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG['LIBRUBYARG'])"`
+! 	librubya=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG['LIBRUBY_A'])"`
+!   rubylibdir=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG['libdir'])"`
+  	if test -f "$rubylibdir/$librubya"; then
+  	  librubyarg="$librubyarg"
+      RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
+***************
+*** 6363,6369 ****
+  	if test "X$librubyarg" != "X"; then
+  	  RUBY_LIBS="$librubyarg $RUBY_LIBS"
+  	fi
+! 	rubyldflags=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["LDFLAGS"]'`
+  	if test "X$rubyldflags" != "X"; then
+  	  	  	  	  rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
+  	  if test "X$rubyldflags" != "X"; then
+--- 6371,6377 ----
+  	if test "X$librubyarg" != "X"; then
+  	  RUBY_LIBS="$librubyarg $RUBY_LIBS"
+  	fi
+! 	rubyldflags=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG['LDFLAGS']"`
+  	if test "X$rubyldflags" != "X"; then
+  	  	  	  	  rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
+  	  if test "X$rubyldflags" != "X"; then
+***************
+*** 6376,6382 ****
+  	$as_echo "#define FEAT_RUBY 1" >>confdefs.h
+  
+  	if test "$enable_rubyinterp" = "dynamic"; then
+! 	  libruby=`$vi_cv_path_ruby -r rbconfig -e 'puts Config::CONFIG["LIBRUBY_SO"]'`
+  	  $as_echo "#define DYNAMIC_RUBY 1" >>confdefs.h
+  
+  	  RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby\\\" -DDYNAMIC_RUBY_VER=$rubyversion $RUBY_CFLAGS"
+--- 6384,6390 ----
+  	$as_echo "#define FEAT_RUBY 1" >>confdefs.h
+  
+  	if test "$enable_rubyinterp" = "dynamic"; then
+! 	  libruby=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG['LIBRUBY_SO']"`
+  	  $as_echo "#define DYNAMIC_RUBY 1" >>confdefs.h
+  
+  	  RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby\\\" -DDYNAMIC_RUBY_VER=$rubyversion $RUBY_CFLAGS"
+*** ../vim-7.3.678/src/version.c	2012-10-03 18:49:55.000000000 +0200
+--- src/version.c	2012-10-03 21:08:31.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     679,
+  /**/
+
+-- 
+Close your shells, or I'll kill -9 you
+Tomorrow I'll quota you
+Remember the disks'll always be full
+And then while I'm away
+I'll write ~ everyday
+And I'll send-pr all my buggings to you.
+    [ CVS log "Beatles style" for FreeBSD ports/INDEX, Satoshi Asami ]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.680 b/7.3.680
new file mode 100644
index 0000000..537eb58
--- /dev/null
+++ b/7.3.680
@@ -0,0 +1,70 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.680
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.680
+Problem:    Some files missing in the list of distributed files.
+Solution:   Add lines for new files.
+Files:	    Filelist
+
+
+*** ../vim-7.3.679/Filelist	2012-08-29 14:18:26.000000000 +0200
+--- Filelist	2012-09-21 14:53:59.000000000 +0200
+***************
+*** 261,266 ****
+--- 261,267 ----
+  		src/Make_mvc.mak \
+  		src/Make_w16.mak \
+  		src/bigvim.bat \
++ 		src/bigvim64.bat \
+  		src/msvcsetup.bat \
+  		src/msvc2008.bat \
+  		src/msvc2010.bat \
+***************
+*** 352,357 ****
+--- 353,359 ----
+  		src/xpm/COPYRIGHT \
+  		src/xpm/README.txt \
+  		src/xpm/include/*.h \
++ 		src/xpm/x64/lib/libXpm.a \
+  		src/xpm/x64/lib/libXpm.lib \
+  		src/xpm/x86/lib/libXpm.a \
+  		src/xpm/x86/lib/libXpm.lib \
+***************
+*** 692,697 ****
+--- 694,700 ----
+  		runtime/tutor/tutor.utf-8 \
+  		runtime/tutor/tutor.?? \
+  		runtime/tutor/tutor.??.* \
++ 		runtime/tutor/tutor.??_??.* \
+  		runtime/tutor/tutor.bar \
+  		runtime/tutor/tutor.bar.* \
+  		runtime/spell/README.txt \
+*** ../vim-7.3.679/src/version.c	2012-10-03 21:09:33.000000000 +0200
+--- src/version.c	2012-10-03 21:32:38.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     680,
+  /**/
+
+-- 
+So when I saw the post to comp.editors, I rushed over to the FTP site to
+grab it.  So I yank apart the tarball, light x candles, where x= the
+vim version multiplied by the md5sum of the source divided by the MAC of
+my NIC (8A3FA78155A8A1D346C3C4A), put on black robes, dim the lights,
+wave a dead chicken over the hard drive, and summon the power of GNU GCC
+with the magic words "make config ; make!".
+		[Jason Spence, compiling Vim 5.0]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.681 b/7.3.681
new file mode 100644
index 0000000..7794ce0
--- /dev/null
+++ b/7.3.681
@@ -0,0 +1,64 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.681
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.681 (after 7.3.680)
+Problem:    List of distributed files picks up backup files.
+Solution:   Make tutor patterns more specific.
+Files:      Filelist
+
+
+*** ../vim-7.3.680/Filelist	2012-10-03 21:33:37.000000000 +0200
+--- Filelist	2012-10-03 21:44:29.000000000 +0200
+***************
+*** 693,702 ****
+  		runtime/tutor/Makefile \
+  		runtime/tutor/tutor.utf-8 \
+  		runtime/tutor/tutor.?? \
+! 		runtime/tutor/tutor.??.* \
+! 		runtime/tutor/tutor.??_??.* \
+  		runtime/tutor/tutor.bar \
+! 		runtime/tutor/tutor.bar.* \
+  		runtime/spell/README.txt \
+  		runtime/spell/??/*.diff \
+  		runtime/spell/??/main.aap \
+--- 693,709 ----
+  		runtime/tutor/Makefile \
+  		runtime/tutor/tutor.utf-8 \
+  		runtime/tutor/tutor.?? \
+! 		runtime/tutor/tutor.??.utf-8 \
+! 		runtime/tutor/tutor.??.euc \
+! 		runtime/tutor/tutor.??.sjis \
+! 		runtime/tutor/tutor.??.iso9 \
+! 		runtime/tutor/tutor.??.big5 \
+! 		runtime/tutor/tutor.??.cp1250 \
+! 		runtime/tutor/tutor.??.cp1251 \
+! 		runtime/tutor/tutor.??.cp737 \
+! 		runtime/tutor/tutor.??_??.utf-8 \
+  		runtime/tutor/tutor.bar \
+! 		runtime/tutor/tutor.bar.utf-8 \
+  		runtime/spell/README.txt \
+  		runtime/spell/??/*.diff \
+  		runtime/spell/??/main.aap \
+*** ../vim-7.3.680/src/version.c	2012-10-03 21:33:37.000000000 +0200
+--- src/version.c	2012-10-03 21:48:04.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     681,
+  /**/
+
+-- 
+Zen Microsystems: we're the om in .commmmmmmmm
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.3.682 b/7.3.682
new file mode 100644
index 0000000..a8e133e
--- /dev/null
+++ b/7.3.682
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.682
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.682 (after 7.3.677)
+Problem:    Compiler complains about incompatible types.
+Solution:   Remove type casts. (hint by Danek Duvall)
+Files:	    src/edit.c 
+
+
+*** ../vim-7.3.681/src/edit.c	2012-08-08 18:01:00.000000000 +0200
+--- src/edit.c	2012-10-04 22:33:22.000000000 +0200
+***************
+*** 4194,4201 ****
+  			ins_buf->b_fname == NULL
+  			    ? buf_spname(ins_buf)
+  			    : ins_buf->b_sfname == NULL
+! 				? (char *)ins_buf->b_fname
+! 				: (char *)ins_buf->b_sfname);
+  		(void)msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R));
+  	    }
+  	    else if (*e_cpt == NUL)
+--- 4194,4201 ----
+  			ins_buf->b_fname == NULL
+  			    ? buf_spname(ins_buf)
+  			    : ins_buf->b_sfname == NULL
+! 				? ins_buf->b_fname
+! 				: ins_buf->b_sfname);
+  		(void)msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R));
+  	    }
+  	    else if (*e_cpt == NUL)
+*** ../vim-7.3.681/src/version.c	2012-10-03 21:48:38.000000000 +0200
+--- src/version.c	2012-10-04 22:36:15.000000000 +0200
+***************
+*** 721,722 ****
+--- 721,724 ----
+  {   /* Add new patch number below this line */
++ /**/
++     682,
+  /**/
+
+-- 
+Dogs must have a permit signed by the mayor in order to congregate in groups
+of three or more on private property.
+		[real standing law in Oklahoma, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/README.patches b/README.patches
index dfe8b80..cb9e52e 100644
--- a/README.patches
+++ b/README.patches
@@ -669,3 +669,47 @@ Individual patches for Vim 7.3:
   4539  7.3.636  (after 7.3.625) "gn" fails for some zero-width matches
   3117  7.3.637  cannot catch error caused by a foldopen when there is no fold
   1783  7.3.638  unecessary redraw of the previous character
+ 31440  7.3.639  it's not easy to build Vim on Windows with XPM support
+455297  7.3.640  binary files for 7.3.639
+  2219  7.3.641  ":mkview" uses ":normal" instead of ":normal!" for folds
+  1810  7.3.642  segfault with specific autocommands
+  2060  7.3.643  MS-Windows: 'lines' is wrong when starting up maximized
+  1925  7.3.644  dead code for BeOS GUI
+  2910  7.3.645  no tests for patch 7.3.625 and 7.3.637
+  2353  7.3.646  undo file unusable after reloading a buffer
+  5213  7.3.647  "gnd" doesn't work correctly in Visual mode
+  3831  7.3.648  crash when using a very long file name
+  2256  7.3.649  with 'clipboard' set to "unnamed" small deletes go to "1
+  1679  7.3.650  Completing ":help \{-" gives error and messes up command line
+  3120  7.3.651  Completing ":help \{-" gives error message
+  2304  7.3.652  workaround for Python crash isn't perfect
+  7986  7.3.653  lacking XPM support for MingW, 32 and 64 objects mixed up
+  3301  7.3.654  creating Vim dictionary from Python an empty key might be used
+ 88812  7.3.655  64 bit MingW xpm .a file is missing
+  3106  7.3.656  internal error in :pyeval
+  6680  7.3.657  Python bindings silently truncate string values containing NUL
+  4244  7.3.658  NUL bytes truncate strings when converted from Python
+  6242  7.3.659  recent Python changes are not tested
+  1448  7.3.660  ":help !" jumps to help for ":!"
+  5339  7.3.661  (after 7.3.652) SEGV in Python code
+  3126  7.3.662  can't build Ruby interface with Ruby 1.9.3
+  1498  7.3.663  end of color scheme name not clear in E185
+  2171  7.3.664  buffer overflow in unescaping multi-byte characters
+  2414  7.3.665  MSVC 11 is not supported
+  3195  7.3.666  Win32.mak can't be found
+  3213  7.3.667  unused variables in Perl interface
+  2763  7.3.668  loading Perl dynamically still uses static library
+  4757  7.3.669  when building with Cygwin loading Python dynamically fails
+  2318  7.3.670  tiny memory leak when throwing exception in Python
+  8213  7.3.671  more Python code can be shared between Python 2 and 3
+ 22436  7.3.672  not possible to lock/unlock lists in Python interface
+  1967  7.3.673  "gN" while 'selection' is "exclusive" misses one character
+ 10873  7.3.674  can't compile with Lua/dyn on Cygwin
+  1597  7.3.675  accessing uninitialized memory with a very long file name
+  2721  7.3.676  Ruby compilation on Windows 32 bit doesn't work
+  8428  7.3.677  buf_spname() is used inconsistently
+  2887  7.3.678  Ruby .so name may not be correct
+ 11455  7.3.679  Ruby detection uses Config, newer Ruby versions use RbConfig
+  2190  7.3.680  some files missing in the list of distributed files
+  2014  7.3.681  list of distributed files picks up backup files
+  1791  7.3.682  (after 7.3.677) compiler complains about incompatible types
diff --git a/vim.spec b/vim.spec
index 527c445..927813f 100644
--- a/vim.spec
+++ b/vim.spec
@@ -18,13 +18,13 @@
 #used for pre-releases:
 %define beta %{nil}
 %define vimdir vim73%{?beta}
-%define patchlevel 638
+%define patchlevel 682
 
 Summary: The VIM editor
 URL:     http://www.vim.org/
 Name: vim
 Version: %{baseversion}.%{beta}%{patchlevel}
-Release: 2%{?dist}
+Release: 1%{?dist}
 License: Vim
 Group: Applications/Editors
 Source0: ftp://ftp.vim.org/pub/vim/unix/vim-%{baseversion}%{?beta}%{?CVSDATE}.tar.bz2
@@ -694,6 +694,50 @@ Patch635: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.635
 Patch636: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.636
 Patch637: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.637
 Patch638: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.638
+Patch639: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.639
+Patch640: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.640
+Patch641: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.641
+Patch642: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.642
+Patch643: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.643
+Patch644: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.644
+Patch645: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.645
+Patch646: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.646
+Patch647: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.647
+Patch648: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.648
+Patch649: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.649
+Patch650: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.650
+Patch651: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.651
+Patch652: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.652
+Patch653: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.653
+Patch654: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.654
+Patch655: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.655
+Patch656: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.656
+Patch657: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.657
+Patch658: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.658
+Patch659: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.659
+Patch660: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.660
+Patch661: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.661
+Patch662: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.662
+Patch663: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.663
+Patch664: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.664
+Patch665: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.665
+Patch666: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.666
+Patch667: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.667
+Patch668: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.668
+Patch669: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.669
+Patch670: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.670
+Patch671: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.671
+Patch672: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.672
+Patch673: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.673
+Patch674: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.674
+Patch675: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.675
+Patch676: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.676
+Patch677: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.677
+Patch678: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.678
+Patch679: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.679
+Patch680: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.680
+Patch681: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.681
+Patch682: ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.682
 
 Patch3000: vim-7.3-syntax.patch
 Patch3002: vim-7.1-nowarnings.patch
@@ -1478,6 +1522,50 @@ perl -pi -e "s,bin/nawk,bin/awk,g" runtime/tools/mve.awk
 %patch636 -p0
 %patch637 -p0
 %patch638 -p0
+%patch639 -p0
+%patch640 -p0
+%patch641 -p0
+%patch642 -p0
+%patch643 -p0
+%patch644 -p0
+%patch645 -p0
+%patch646 -p0
+%patch647 -p0
+%patch648 -p0
+%patch649 -p0
+%patch650 -p0
+%patch651 -p0
+%patch652 -p0
+%patch653 -p0
+%patch654 -p0
+%patch655 -p0
+%patch656 -p0
+%patch657 -p0
+%patch658 -p0
+%patch659 -p0
+%patch660 -p0
+%patch661 -p0
+%patch662 -p0
+%patch663 -p0
+%patch664 -p0
+%patch665 -p0
+%patch666 -p0
+%patch667 -p0
+%patch668 -p0
+%patch669 -p0
+%patch670 -p0
+%patch671 -p0
+%patch672 -p0
+%patch673 -p0
+%patch674 -p0
+%patch675 -p0
+%patch676 -p0
+%patch677 -p0
+%patch678 -p0
+%patch679 -p0
+%patch680 -p0
+%patch681 -p0
+%patch682 -p0
 
 
 # install spell files
@@ -1508,7 +1596,9 @@ mv -f Makefile.tmp Makefile
 export CFLAGS="$RPM_OPT_FLAGS -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2"
 export CXXFLAGS="$RPM_OPT_FLAGS -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2"
 
-%configure --with-features=huge --enable-pythoninterp --enable-perlinterp \
+%configure --with-features=huge \
+  --enable-pythoninterp=dynamic \
+  --enable-perlinterp \
   --disable-tclinterp --with-x=yes \
   --enable-xim --enable-multibyte \
   --with-tlib=ncurses \
@@ -1526,7 +1616,7 @@ export CXXFLAGS="$RPM_OPT_FLAGS -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_
   --disable-selinux \
 %endif
 %if "%{withruby}" == "1"
-  --enable-rubyinterp \
+  --enable-rubyinterp=dynamic \
 %else
   --disable-rubyinterp \
 %endif
@@ -1535,8 +1625,11 @@ make VIMRCLOC=/etc VIMRUNTIMEDIR=/usr/share/vim/%{vimdir} %{?_smp_mflags}
 cp vim gvim
 make clean
 
-%configure --prefix=%{_prefix} --with-features=huge --enable-pythoninterp \
- --enable-perlinterp --disable-tclinterp --with-x=no \
+%configure --prefix=%{_prefix} --with-features=huge \
+ --enable-pythoninterp=dynamic \
+ --enable-perlinterp \
+ --disable-tclinterp \
+ --with-x=no \
  --enable-gui=no --exec-prefix=%{_prefix} --enable-multibyte \
  --enable-cscope --with-modified-by="<bugzilla@redhat.com>" \
  --with-tlib=ncurses \
@@ -1552,7 +1645,7 @@ make clean
   --disable-selinux \
 %endif
 %if "%{withruby}" == "1"
-  --enable-rubyinterp \
+  --enable-rubyinterp=dynamic \
 %else
   --disable-rubyinterp \
 %endif
@@ -1935,6 +2028,10 @@ rm -rf $RPM_BUILD_ROOT
 %{_datadir}/icons/hicolor/*/apps/*
 
 %changelog
+* Fri Oct 05 2012 Karsten Hopp <karsten@redhat.com> 7.3.682-1
+- patchlevel 682
+- use --enable-rubyinterp=dynamic and --enable-pythoninterp=dynamic
+
 * Tue Aug 28 2012 Karsten Hopp <karsten@redhat.com> 7.3.638-2
 - fix some man page typos (#668894, #675480)
 - own usr/share/vim/vimfiles/doc/tags (#845564)