Karsten Hopp c81e3f
To: vim_dev@googlegroups.com
Karsten Hopp c81e3f
Subject: Patch 7.3.451
Karsten Hopp c81e3f
Fcc: outbox
Karsten Hopp c81e3f
From: Bram Moolenaar <Bram@moolenaar.net>
Karsten Hopp c81e3f
Mime-Version: 1.0
Karsten Hopp c81e3f
Content-Type: text/plain; charset=UTF-8
Karsten Hopp c81e3f
Content-Transfer-Encoding: 8bit
Karsten Hopp c81e3f
------------
Karsten Hopp c81e3f
Karsten Hopp c81e3f
Patch 7.3.451
Karsten Hopp c81e3f
Problem:    Tcl doesn't work on 64 bit MS-Windows.
Karsten Hopp c81e3f
Solution:   Make it work. (Dave Bodenstab)
Karsten Hopp c81e3f
Files:	    src/Make_mvc.mak, src/if_tcl.c
Karsten Hopp c81e3f
Karsten Hopp c81e3f
Karsten Hopp c81e3f
*** ../vim-7.3.450/src/Make_mvc.mak	2012-02-12 01:55:50.000000000 +0100
Karsten Hopp c81e3f
--- src/Make_mvc.mak	2012-02-22 15:43:01.000000000 +0100
Karsten Hopp c81e3f
***************
Karsten Hopp c81e3f
*** 616,622 ****
Karsten Hopp c81e3f
  		-DDYNAMIC_TCL_VER=\"$(TCL_VER_LONG)\"
Karsten Hopp c81e3f
  TCL_OBJ	= $(OUTDIR)\if_tcl.obj
Karsten Hopp c81e3f
  TCL_INC	= /I "$(TCL)\Include" /I "$(TCL)"
Karsten Hopp c81e3f
! TCL_LIB = $(TCL)\lib\tclstub$(TCL_VER).lib
Karsten Hopp c81e3f
  !else
Karsten Hopp c81e3f
  CFLAGS  = $(CFLAGS) -DFEAT_TCL
Karsten Hopp c81e3f
  TCL_OBJ	= $(OUTDIR)\if_tcl.obj
Karsten Hopp c81e3f
--- 616,622 ----
Karsten Hopp c81e3f
  		-DDYNAMIC_TCL_VER=\"$(TCL_VER_LONG)\"
Karsten Hopp c81e3f
  TCL_OBJ	= $(OUTDIR)\if_tcl.obj
Karsten Hopp c81e3f
  TCL_INC	= /I "$(TCL)\Include" /I "$(TCL)"
Karsten Hopp c81e3f
! TCL_LIB = "$(TCL)\lib\tclstub$(TCL_VER).lib"
Karsten Hopp c81e3f
  !else
Karsten Hopp c81e3f
  CFLAGS  = $(CFLAGS) -DFEAT_TCL
Karsten Hopp c81e3f
  TCL_OBJ	= $(OUTDIR)\if_tcl.obj
Karsten Hopp c81e3f
*** ../vim-7.3.450/src/if_tcl.c	2011-07-27 14:15:41.000000000 +0200
Karsten Hopp c81e3f
--- src/if_tcl.c	2012-02-22 15:47:00.000000000 +0100
Karsten Hopp c81e3f
***************
Karsten Hopp c81e3f
*** 79,90 ****
Karsten Hopp c81e3f
  typedef struct
Karsten Hopp c81e3f
  {
Karsten Hopp c81e3f
      Tcl_Interp *interp;
Karsten Hopp c81e3f
      int range_start, range_end;
Karsten Hopp c81e3f
      int lbase;
Karsten Hopp c81e3f
      char *curbuf, *curwin;
Karsten Hopp c81e3f
  } tcl_info;
Karsten Hopp c81e3f
  
Karsten Hopp c81e3f
! static tcl_info tclinfo = { NULL, 0, 0, 0, NULL, NULL };
Karsten Hopp c81e3f
  
Karsten Hopp c81e3f
  #define VAR_RANGE1	"::vim::range(start)"
Karsten Hopp c81e3f
  #define VAR_RANGE2	"::vim::range(begin)"
Karsten Hopp c81e3f
--- 79,91 ----
Karsten Hopp c81e3f
  typedef struct
Karsten Hopp c81e3f
  {
Karsten Hopp c81e3f
      Tcl_Interp *interp;
Karsten Hopp c81e3f
+     int exitvalue;
Karsten Hopp c81e3f
      int range_start, range_end;
Karsten Hopp c81e3f
      int lbase;
Karsten Hopp c81e3f
      char *curbuf, *curwin;
Karsten Hopp c81e3f
  } tcl_info;
Karsten Hopp c81e3f
  
Karsten Hopp c81e3f
! static tcl_info tclinfo = { NULL, 0, 0, 0, 0, NULL, NULL };
Karsten Hopp c81e3f
  
Karsten Hopp c81e3f
  #define VAR_RANGE1	"::vim::range(start)"
Karsten Hopp c81e3f
  #define VAR_RANGE2	"::vim::range(begin)"
Karsten Hopp c81e3f
***************
Karsten Hopp c81e3f
*** 279,294 ****
Karsten Hopp c81e3f
   ****************************************************************************/
Karsten Hopp c81e3f
  
Karsten Hopp c81e3f
  /*
Karsten Hopp c81e3f
!  * Replace standard "exit" and "catch" commands.
Karsten Hopp c81e3f
   *
Karsten Hopp c81e3f
!  * This is a design flaw in Tcl -  the standard "exit" command just calls
Karsten Hopp c81e3f
!  * exit() and kills the application.  It should return TCL_EXIT to the
Karsten Hopp c81e3f
!  * app, which then decides if it wants to terminate or not.  In our case,
Karsten Hopp c81e3f
!  * we just delete the Tcl interpreter (and create a new one with the next
Karsten Hopp c81e3f
!  * :tcl command).
Karsten Hopp c81e3f
   */
Karsten Hopp c81e3f
- #define TCL_EXIT	5
Karsten Hopp c81e3f
- 
Karsten Hopp c81e3f
      static int
Karsten Hopp c81e3f
  exitcmd(dummy, interp, objc, objv)
Karsten Hopp c81e3f
      ClientData dummy UNUSED;
Karsten Hopp c81e3f
--- 280,298 ----
Karsten Hopp c81e3f
   ****************************************************************************/
Karsten Hopp c81e3f
  
Karsten Hopp c81e3f
  /*
Karsten Hopp c81e3f
!  * Replace standard "exit" command.
Karsten Hopp c81e3f
   *
Karsten Hopp c81e3f
!  * Delete the Tcl interpreter; a new one will be created with the next
Karsten Hopp c81e3f
!  * :tcl command). The exit code is saved (and retrieved in tclexit()).
Karsten Hopp c81e3f
!  * Since Tcl's exit is never expected to return and this replacement
Karsten Hopp c81e3f
!  * does, then (except for a trivial case) additional Tcl commands will
Karsten Hopp c81e3f
!  * be run. Since the interpreter is now marked as deleted, an error
Karsten Hopp c81e3f
!  * will be returned -- typically "attempt to call eval in deleted
Karsten Hopp c81e3f
!  * interpreter". Hopefully, at this point, checks for TCL_ERROR take
Karsten Hopp c81e3f
!  * place and control percolates back up to Vim -- but with this new error
Karsten Hopp c81e3f
!  * string in the interpreter's result value. Therefore it would be
Karsten Hopp c81e3f
!  * useless for this routine to return the exit code via Tcl_SetResult().
Karsten Hopp c81e3f
   */
Karsten Hopp c81e3f
      static int
Karsten Hopp c81e3f
  exitcmd(dummy, interp, objc, objv)
Karsten Hopp c81e3f
      ClientData dummy UNUSED;
Karsten Hopp c81e3f
***************
Karsten Hopp c81e3f
*** 305,351 ****
Karsten Hopp c81e3f
  		break;
Karsten Hopp c81e3f
  	    /* FALLTHROUGH */
Karsten Hopp c81e3f
  	case 1:
Karsten Hopp c81e3f
! 	    Tcl_SetObjResult(interp, Tcl_NewIntObj(value));
Karsten Hopp c81e3f
! 	    return TCL_EXIT;
Karsten Hopp c81e3f
! 	default:
Karsten Hopp c81e3f
! 	    Tcl_WrongNumArgs(interp, 1, objv, "?returnCode?");
Karsten Hopp c81e3f
!     }
Karsten Hopp c81e3f
!     return TCL_ERROR;
Karsten Hopp c81e3f
! }
Karsten Hopp c81e3f
  
Karsten Hopp c81e3f
!     static int
Karsten Hopp c81e3f
! catchcmd(dummy, interp, objc, objv)
Karsten Hopp c81e3f
!     ClientData	dummy UNUSED;
Karsten Hopp c81e3f
!     Tcl_Interp	*interp;
Karsten Hopp c81e3f
!     int		objc;
Karsten Hopp c81e3f
!     Tcl_Obj	*CONST objv[];
Karsten Hopp c81e3f
! {
Karsten Hopp c81e3f
!     char    *varname = NULL;
Karsten Hopp c81e3f
!     int	    result;
Karsten Hopp c81e3f
! 
Karsten Hopp c81e3f
!     switch (objc)
Karsten Hopp c81e3f
!     {
Karsten Hopp c81e3f
! 	case 3:
Karsten Hopp c81e3f
! 	    varname = Tcl_GetStringFromObj(objv[2], NULL);
Karsten Hopp c81e3f
! 	    /* fallthrough */
Karsten Hopp c81e3f
! 	case 2:
Karsten Hopp c81e3f
! 	    Tcl_ResetResult(interp);
Karsten Hopp c81e3f
! 	    Tcl_AllowExceptions(interp);
Karsten Hopp c81e3f
! 	    result = Tcl_EvalObj(interp, objv[1]);
Karsten Hopp c81e3f
! 	    if (result == TCL_EXIT)
Karsten Hopp c81e3f
! 		return result;
Karsten Hopp c81e3f
! 	    if (varname)
Karsten Hopp c81e3f
! 	    {
Karsten Hopp c81e3f
! 		if (Tcl_SetVar(interp, varname, Tcl_GetStringResult(interp), 0) == NULL)
Karsten Hopp c81e3f
! 		{
Karsten Hopp c81e3f
! 		    Tcl_SetResult(interp, "couldn't save command result in variable", TCL_STATIC);
Karsten Hopp c81e3f
! 		    return TCL_ERROR;
Karsten Hopp c81e3f
! 		}
Karsten Hopp c81e3f
! 	    }
Karsten Hopp c81e3f
! 	    Tcl_SetObjResult(interp, Tcl_NewIntObj(result));
Karsten Hopp c81e3f
! 	    return TCL_OK;
Karsten Hopp c81e3f
  	default:
Karsten Hopp c81e3f
! 	    Tcl_WrongNumArgs(interp, 1, objv, "command ?varName?");
Karsten Hopp c81e3f
      }
Karsten Hopp c81e3f
      return TCL_ERROR;
Karsten Hopp c81e3f
  }
Karsten Hopp c81e3f
--- 309,320 ----
Karsten Hopp c81e3f
  		break;
Karsten Hopp c81e3f
  	    /* FALLTHROUGH */
Karsten Hopp c81e3f
  	case 1:
Karsten Hopp c81e3f
! 	    tclinfo.exitvalue = value;
Karsten Hopp c81e3f
  
Karsten Hopp c81e3f
! 	    Tcl_DeleteInterp(interp);
Karsten Hopp c81e3f
! 	    break;
Karsten Hopp c81e3f
  	default:
Karsten Hopp c81e3f
! 	    Tcl_WrongNumArgs(interp, 1, objv, "?returnCode?");
Karsten Hopp c81e3f
      }
Karsten Hopp c81e3f
      return TCL_ERROR;
Karsten Hopp c81e3f
  }
Karsten Hopp c81e3f
***************
Karsten Hopp c81e3f
*** 372,377 ****
Karsten Hopp c81e3f
--- 341,347 ----
Karsten Hopp c81e3f
  /*
Karsten Hopp c81e3f
   *  "::vim::buffer list" - create a list of buffer commands.
Karsten Hopp c81e3f
   *  "::vim::buffer {N}" - create buffer command for buffer N.
Karsten Hopp c81e3f
+  *  "::vim::buffer exists {N}" - test if buffer N exists.
Karsten Hopp c81e3f
   *  "::vim::buffer new" - create a new buffer (not implemented)
Karsten Hopp c81e3f
   */
Karsten Hopp c81e3f
      static int
Karsten Hopp c81e3f
***************
Karsten Hopp c81e3f
*** 1663,1669 ****
Karsten Hopp c81e3f
  static Tcl_ChannelType channel_type =
Karsten Hopp c81e3f
  {
Karsten Hopp c81e3f
      "vimmessage",	/* typeName */
Karsten Hopp c81e3f
!     NULL,		/* version */
Karsten Hopp c81e3f
      channel_close,	/* closeProc */
Karsten Hopp c81e3f
      channel_input,	/* inputProc */
Karsten Hopp c81e3f
      channel_output,	/* outputProc */
Karsten Hopp c81e3f
--- 1633,1639 ----
Karsten Hopp c81e3f
  static Tcl_ChannelType channel_type =
Karsten Hopp c81e3f
  {
Karsten Hopp c81e3f
      "vimmessage",	/* typeName */
Karsten Hopp c81e3f
!     TCL_CHANNEL_VERSION_2, /* version */
Karsten Hopp c81e3f
      channel_close,	/* closeProc */
Karsten Hopp c81e3f
      channel_input,	/* inputProc */
Karsten Hopp c81e3f
      channel_output,	/* outputProc */
Karsten Hopp c81e3f
***************
Karsten Hopp c81e3f
*** 1678,1683 ****
Karsten Hopp c81e3f
--- 1648,1655 ----
Karsten Hopp c81e3f
      NULL,		/* flushProc */
Karsten Hopp c81e3f
      NULL,		/* handlerProc */
Karsten Hopp c81e3f
  #endif
Karsten Hopp c81e3f
+ /* The following should not be necessary since TCL_CHANNEL_VERSION_2 was
Karsten Hopp c81e3f
+  * set above */
Karsten Hopp c81e3f
  #ifdef TCL_CHANNEL_VERSION_3
Karsten Hopp c81e3f
      NULL,		/* wideSeekProc */
Karsten Hopp c81e3f
  #endif
Karsten Hopp c81e3f
***************
Karsten Hopp c81e3f
*** 1741,1747 ****
Karsten Hopp c81e3f
  	Tcl_Interp *interp;
Karsten Hopp c81e3f
  	static Tcl_Channel ch1, ch2;
Karsten Hopp c81e3f
  
Karsten Hopp c81e3f
! 	/* replace stdout and stderr */
Karsten Hopp c81e3f
  	ch1 = Tcl_CreateChannel(&channel_type, "vimout", VIMOUT, TCL_WRITABLE);
Karsten Hopp c81e3f
  	ch2 = Tcl_CreateChannel(&channel_type, "vimerr", VIMERR, TCL_WRITABLE);
Karsten Hopp c81e3f
  	Tcl_SetStdChannel(ch1, TCL_STDOUT);
Karsten Hopp c81e3f
--- 1713,1721 ----
Karsten Hopp c81e3f
  	Tcl_Interp *interp;
Karsten Hopp c81e3f
  	static Tcl_Channel ch1, ch2;
Karsten Hopp c81e3f
  
Karsten Hopp c81e3f
! 	/* Create replacement channels for stdout and stderr; this has to be
Karsten Hopp c81e3f
! 	 * done each time an interpreter is created since the channels are closed
Karsten Hopp c81e3f
! 	 * when the interpreter is deleted */
Karsten Hopp c81e3f
  	ch1 = Tcl_CreateChannel(&channel_type, "vimout", VIMOUT, TCL_WRITABLE);
Karsten Hopp c81e3f
  	ch2 = Tcl_CreateChannel(&channel_type, "vimerr", VIMERR, TCL_WRITABLE);
Karsten Hopp c81e3f
  	Tcl_SetStdChannel(ch1, TCL_STDOUT);
Karsten Hopp c81e3f
***************
Karsten Hopp c81e3f
*** 1761,1775 ****
Karsten Hopp c81e3f
  #endif
Karsten Hopp c81e3f
  
Karsten Hopp c81e3f
  	Tcl_SetChannelOption(interp, ch1, "-buffering", "line");
Karsten Hopp c81e3f
  	Tcl_SetChannelOption(interp, ch2, "-buffering", "line");
Karsten Hopp c81e3f
  
Karsten Hopp c81e3f
! 	/* replace some standard Tcl commands */
Karsten Hopp c81e3f
  	Tcl_DeleteCommand(interp, "exit");
Karsten Hopp c81e3f
  	Tcl_CreateObjCommand(interp, "exit", exitcmd,
Karsten Hopp c81e3f
  	    (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
Karsten Hopp c81e3f
- 	Tcl_DeleteCommand(interp, "catch");
Karsten Hopp c81e3f
- 	Tcl_CreateObjCommand(interp, "catch", catchcmd,
Karsten Hopp c81e3f
- 	    (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
Karsten Hopp c81e3f
  
Karsten Hopp c81e3f
  	/* new commands, in ::vim namespace */
Karsten Hopp c81e3f
  	Tcl_CreateObjCommand(interp, "::vim::buffer", buffercmd,
Karsten Hopp c81e3f
--- 1735,1752 ----
Karsten Hopp c81e3f
  #endif
Karsten Hopp c81e3f
  
Karsten Hopp c81e3f
  	Tcl_SetChannelOption(interp, ch1, "-buffering", "line");
Karsten Hopp c81e3f
+ #ifdef WIN3264
Karsten Hopp c81e3f
+ 	Tcl_SetChannelOption(interp, ch1, "-translation", "lf");
Karsten Hopp c81e3f
+ #endif
Karsten Hopp c81e3f
  	Tcl_SetChannelOption(interp, ch2, "-buffering", "line");
Karsten Hopp c81e3f
+ #ifdef WIN3264
Karsten Hopp c81e3f
+ 	Tcl_SetChannelOption(interp, ch2, "-translation", "lf");
Karsten Hopp c81e3f
+ #endif
Karsten Hopp c81e3f
  
Karsten Hopp c81e3f
! 	/* replace standard Tcl exit command */
Karsten Hopp c81e3f
  	Tcl_DeleteCommand(interp, "exit");
Karsten Hopp c81e3f
  	Tcl_CreateObjCommand(interp, "exit", exitcmd,
Karsten Hopp c81e3f
  	    (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
Karsten Hopp c81e3f
  
Karsten Hopp c81e3f
  	/* new commands, in ::vim namespace */
Karsten Hopp c81e3f
  	Tcl_CreateObjCommand(interp, "::vim::buffer", buffercmd,
Karsten Hopp c81e3f
***************
Karsten Hopp c81e3f
*** 1821,1826 ****
Karsten Hopp c81e3f
--- 1798,1805 ----
Karsten Hopp c81e3f
  	tclinfo.range_end = row2tcl(eap->line2);
Karsten Hopp c81e3f
  	tclupdatevars();
Karsten Hopp c81e3f
      }
Karsten Hopp c81e3f
+ 
Karsten Hopp c81e3f
+     tclinfo.exitvalue = 0;
Karsten Hopp c81e3f
      return OK;
Karsten Hopp c81e3f
  }
Karsten Hopp c81e3f
  
Karsten Hopp c81e3f
***************
Karsten Hopp c81e3f
*** 1884,1913 ****
Karsten Hopp c81e3f
  {
Karsten Hopp c81e3f
      int newerr = OK;
Karsten Hopp c81e3f
  
Karsten Hopp c81e3f
!     if (error == TCL_EXIT)
Karsten Hopp c81e3f
      {
Karsten Hopp c81e3f
- 	int retval;
Karsten Hopp c81e3f
  	char buf[50];
Karsten Hopp c81e3f
- 	Tcl_Obj *robj;
Karsten Hopp c81e3f
  
Karsten Hopp c81e3f
! 	robj = Tcl_GetObjResult(tclinfo.interp);
Karsten Hopp c81e3f
! 	if (Tcl_GetIntFromObj(tclinfo.interp, robj, &retval) != TCL_OK)
Karsten Hopp c81e3f
  	{
Karsten Hopp c81e3f
! 	    EMSG(_("E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"));
Karsten Hopp c81e3f
! 	    newerr = FAIL;
Karsten Hopp c81e3f
  	}
Karsten Hopp c81e3f
  	else
Karsten Hopp c81e3f
! 	{
Karsten Hopp c81e3f
! 	    sprintf(buf, _("E572: exit code %d"), retval);
Karsten Hopp c81e3f
! 	    tclerrmsg(buf);
Karsten Hopp c81e3f
! 	    if (retval == 0)
Karsten Hopp c81e3f
! 	    {
Karsten Hopp c81e3f
! 		did_emsg = 0;
Karsten Hopp c81e3f
! 		newerr = OK;
Karsten Hopp c81e3f
! 	    }
Karsten Hopp c81e3f
! 	    else
Karsten Hopp c81e3f
! 		newerr = FAIL;
Karsten Hopp c81e3f
! 	}
Karsten Hopp c81e3f
  
Karsten Hopp c81e3f
  	tcldelthisinterp();
Karsten Hopp c81e3f
      }
Karsten Hopp c81e3f
--- 1863,1885 ----
Karsten Hopp c81e3f
  {
Karsten Hopp c81e3f
      int newerr = OK;
Karsten Hopp c81e3f
  
Karsten Hopp c81e3f
!     if (Tcl_InterpDeleted(tclinfo.interp)     /* True if we intercepted Tcl's exit command */
Karsten Hopp c81e3f
! #if (TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION >= 5) || TCL_MAJOR_VERSION > 8
Karsten Hopp c81e3f
! 	|| Tcl_LimitExceeded(tclinfo.interp)  /* True if the interpreter cannot continue */
Karsten Hopp c81e3f
! #endif
Karsten Hopp c81e3f
! 	)
Karsten Hopp c81e3f
      {
Karsten Hopp c81e3f
  	char buf[50];
Karsten Hopp c81e3f
  
Karsten Hopp c81e3f
! 	sprintf(buf, _("E572: exit code %d"), tclinfo.exitvalue);
Karsten Hopp c81e3f
! 	tclerrmsg(buf);
Karsten Hopp c81e3f
! 	if (tclinfo.exitvalue == 0)
Karsten Hopp c81e3f
  	{
Karsten Hopp c81e3f
! 	    did_emsg = 0;
Karsten Hopp c81e3f
! 	    newerr = OK;
Karsten Hopp c81e3f
  	}
Karsten Hopp c81e3f
  	else
Karsten Hopp c81e3f
! 	    newerr = FAIL;
Karsten Hopp c81e3f
  
Karsten Hopp c81e3f
  	tcldelthisinterp();
Karsten Hopp c81e3f
      }
Karsten Hopp c81e3f
***************
Karsten Hopp c81e3f
*** 2021,2027 ****
Karsten Hopp c81e3f
  	Tcl_SetVar(tclinfo.interp, var_line, line, 0);
Karsten Hopp c81e3f
  	Tcl_AllowExceptions(tclinfo.interp);
Karsten Hopp c81e3f
  	err = Tcl_Eval(tclinfo.interp, script);
Karsten Hopp c81e3f
! 	if (err != TCL_OK)
Karsten Hopp c81e3f
  	    break;
Karsten Hopp c81e3f
  	line = (char *)Tcl_GetVar(tclinfo.interp, var_line, 0);
Karsten Hopp c81e3f
  	if (line)
Karsten Hopp c81e3f
--- 1993,2004 ----
Karsten Hopp c81e3f
  	Tcl_SetVar(tclinfo.interp, var_line, line, 0);
Karsten Hopp c81e3f
  	Tcl_AllowExceptions(tclinfo.interp);
Karsten Hopp c81e3f
  	err = Tcl_Eval(tclinfo.interp, script);
Karsten Hopp c81e3f
! 	if (err != TCL_OK
Karsten Hopp c81e3f
! 	    || Tcl_InterpDeleted(tclinfo.interp)
Karsten Hopp c81e3f
! #if (TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION >= 5) || TCL_MAJOR_VERSION > 8
Karsten Hopp c81e3f
! 	    || Tcl_LimitExceeded(tclinfo.interp)
Karsten Hopp c81e3f
! #endif
Karsten Hopp c81e3f
! 	   )
Karsten Hopp c81e3f
  	    break;
Karsten Hopp c81e3f
  	line = (char *)Tcl_GetVar(tclinfo.interp, var_line, 0);
Karsten Hopp c81e3f
  	if (line)
Karsten Hopp c81e3f
*** ../vim-7.3.450/src/version.c	2012-02-22 15:34:05.000000000 +0100
Karsten Hopp c81e3f
--- src/version.c	2012-02-22 16:00:49.000000000 +0100
Karsten Hopp c81e3f
***************
Karsten Hopp c81e3f
*** 716,717 ****
Karsten Hopp c81e3f
--- 716,719 ----
Karsten Hopp c81e3f
  {   /* Add new patch number below this line */
Karsten Hopp c81e3f
+ /**/
Karsten Hopp c81e3f
+     451,
Karsten Hopp c81e3f
  /**/
Karsten Hopp c81e3f
Karsten Hopp c81e3f
-- 
Karsten Hopp c81e3f
Where do you want to crash today?
Karsten Hopp c81e3f
Karsten Hopp c81e3f
 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
Karsten Hopp c81e3f
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
Karsten Hopp c81e3f
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
Karsten Hopp c81e3f
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///