diff --git a/7.1.231 b/7.1.231
new file mode 100644
index 0000000..e9c7885
--- /dev/null
+++ b/7.1.231
@@ -0,0 +1,291 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.231
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.1.231
+Problem:    When shifting lines the change is acted upon multiple times.
+Solution:   Don't have shift_line() call changed_bytes.
+Files:	    src/edit.c, src/ops.c, src/proto/edit.pro, src/proto/ops.pro
+
+
+*** ../vim-7.1.230/src/edit.c	Mon Jan 14 20:11:37 2008
+--- src/edit.c	Mon Jan 14 20:06:43 2008
+***************
+*** 1662,1672 ****
+   * if round is TRUE, round the indent to 'shiftwidth' (only with _INC and _Dec).
+   */
+      void
+! change_indent(type, amount, round, replaced)
+      int		type;
+      int		amount;
+      int		round;
+      int		replaced;	/* replaced character, put on replace stack */
+  {
+      int		vcol;
+      int		last_vcol;
+--- 1662,1673 ----
+   * if round is TRUE, round the indent to 'shiftwidth' (only with _INC and _Dec).
+   */
+      void
+! change_indent(type, amount, round, replaced, call_changed_bytes)
+      int		type;
+      int		amount;
+      int		round;
+      int		replaced;	/* replaced character, put on replace stack */
++     int		call_changed_bytes;	/* call changed_bytes() */
+  {
+      int		vcol;
+      int		last_vcol;
+***************
+*** 1723,1729 ****
+       * Set the new indent.  The cursor will be put on the first non-blank.
+       */
+      if (type == INDENT_SET)
+! 	(void)set_indent(amount, SIN_CHANGED);
+      else
+      {
+  #ifdef FEAT_VREPLACE
+--- 1724,1730 ----
+       * Set the new indent.  The cursor will be put on the first non-blank.
+       */
+      if (type == INDENT_SET)
+! 	(void)set_indent(amount, call_changed_bytes ? SIN_CHANGED : 0);
+      else
+      {
+  #ifdef FEAT_VREPLACE
+***************
+*** 1733,1739 ****
+  	if (State & VREPLACE_FLAG)
+  	    State = INSERT;
+  #endif
+! 	shift_line(type == INDENT_DEC, round, 1);
+  #ifdef FEAT_VREPLACE
+  	State = save_State;
+  #endif
+--- 1734,1740 ----
+  	if (State & VREPLACE_FLAG)
+  	    State = INSERT;
+  #endif
+! 	shift_line(type == INDENT_DEC, round, 1, call_changed_bytes);
+  #ifdef FEAT_VREPLACE
+  	State = save_State;
+  #endif
+***************
+*** 5921,5927 ****
+  	    {
+  #ifdef FEAT_VREPLACE
+  		if (State & VREPLACE_FLAG)
+! 		    change_indent(INDENT_SET, second_indent, FALSE, NUL);
+  		else
+  #endif
+  		    (void)set_indent(second_indent, SIN_CHANGED);
+--- 5922,5928 ----
+  	    {
+  #ifdef FEAT_VREPLACE
+  		if (State & VREPLACE_FLAG)
+! 		    change_indent(INDENT_SET, second_indent, FALSE, NUL, TRUE);
+  		else
+  #endif
+  		    (void)set_indent(second_indent, SIN_CHANGED);
+***************
+*** 7227,7233 ****
+  fixthisline(get_the_indent)
+      int (*get_the_indent) __ARGS((void));
+  {
+!     change_indent(INDENT_SET, get_the_indent(), FALSE, 0);
+      if (linewhite(curwin->w_cursor.lnum))
+  	did_ai = TRUE;	    /* delete the indent if the line stays empty */
+  }
+--- 7228,7234 ----
+  fixthisline(get_the_indent)
+      int (*get_the_indent) __ARGS((void));
+  {
+!     change_indent(INDENT_SET, get_the_indent(), FALSE, 0, TRUE);
+      if (linewhite(curwin->w_cursor.lnum))
+  	did_ai = TRUE;	    /* delete the indent if the line stays empty */
+  }
+***************
+*** 8170,8179 ****
+  	    replace_pop_ins();
+  	if (lastc == '^')
+  	    old_indent = get_indent();	/* remember curr. indent */
+! 	change_indent(INDENT_SET, 0, TRUE, 0);
+      }
+      else
+! 	change_indent(c == Ctrl_D ? INDENT_DEC : INDENT_INC, 0, TRUE, 0);
+  
+      if (did_ai && *skipwhite(ml_get_curline()) != NUL)
+  	did_ai = FALSE;
+--- 8171,8180 ----
+  	    replace_pop_ins();
+  	if (lastc == '^')
+  	    old_indent = get_indent();	/* remember curr. indent */
+! 	change_indent(INDENT_SET, 0, TRUE, 0, TRUE);
+      }
+      else
+! 	change_indent(c == Ctrl_D ? INDENT_DEC : INDENT_INC, 0, TRUE, 0, TRUE);
+  
+      if (did_ai && *skipwhite(ml_get_curline()) != NUL)
+  	did_ai = FALSE;
+***************
+*** 9633,9639 ****
+  	    curwin->w_cursor = old_pos;
+  #ifdef FEAT_VREPLACE
+  	    if (State & VREPLACE_FLAG)
+! 		change_indent(INDENT_SET, i, FALSE, NUL);
+  	    else
+  #endif
+  		(void)set_indent(i, SIN_CHANGED);
+--- 9634,9640 ----
+  	    curwin->w_cursor = old_pos;
+  #ifdef FEAT_VREPLACE
+  	    if (State & VREPLACE_FLAG)
+! 		change_indent(INDENT_SET, i, FALSE, NUL, TRUE);
+  	    else
+  #endif
+  		(void)set_indent(i, SIN_CHANGED);
+***************
+*** 9662,9668 ****
+  		curwin->w_cursor = old_pos;
+  	    }
+  	    if (temp)
+! 		shift_line(TRUE, FALSE, 1);
+  	}
+      }
+  
+--- 9663,9669 ----
+  		curwin->w_cursor = old_pos;
+  	    }
+  	    if (temp)
+! 		shift_line(TRUE, FALSE, 1, TRUE);
+  	}
+      }
+  
+*** ../vim-7.1.230/src/ops.c	Thu Jan  3 16:31:17 2008
+--- src/ops.c	Sun Jan 13 21:52:18 2008
+***************
+*** 258,264 ****
+  	    if (first_char != '#' || !preprocs_left())
+  #endif
+  	{
+! 	    shift_line(oap->op_type == OP_LSHIFT, p_sr, amount);
+  	}
+  	++curwin->w_cursor.lnum;
+      }
+--- 258,264 ----
+  	    if (first_char != '#' || !preprocs_left())
+  #endif
+  	{
+! 	    shift_line(oap->op_type == OP_LSHIFT, p_sr, amount, FALSE);
+  	}
+  	++curwin->w_cursor.lnum;
+      }
+***************
+*** 321,330 ****
+   * leaves cursor on first blank in the line
+   */
+      void
+! shift_line(left, round, amount)
+      int	left;
+      int	round;
+      int	amount;
+  {
+      int		count;
+      int		i, j;
+--- 321,331 ----
+   * leaves cursor on first blank in the line
+   */
+      void
+! shift_line(left, round, amount, call_changed_bytes)
+      int	left;
+      int	round;
+      int	amount;
++     int call_changed_bytes;	/* call changed_bytes() */
+  {
+      int		count;
+      int		i, j;
+***************
+*** 363,372 ****
+      /* Set new indent */
+  #ifdef FEAT_VREPLACE
+      if (State & VREPLACE_FLAG)
+! 	change_indent(INDENT_SET, count, FALSE, NUL);
+      else
+  #endif
+! 	(void)set_indent(count, SIN_CHANGED);
+  }
+  
+  #if defined(FEAT_VISUALEXTRA) || defined(PROTO)
+--- 364,373 ----
+      /* Set new indent */
+  #ifdef FEAT_VREPLACE
+      if (State & VREPLACE_FLAG)
+! 	change_indent(INDENT_SET, count, FALSE, NUL, call_changed_bytes);
+      else
+  #endif
+! 	(void)set_indent(count, call_changed_bytes ? SIN_CHANGED : 0);
+  }
+  
+  #if defined(FEAT_VISUALEXTRA) || defined(PROTO)
+*** ../vim-7.1.230/src/proto/edit.pro	Wed Jan  2 17:48:24 2008
+--- src/proto/edit.pro	Sun Jan 13 21:52:27 2008
+***************
+*** 3,9 ****
+  void edit_putchar __ARGS((int c, int highlight));
+  void edit_unputchar __ARGS((void));
+  void display_dollar __ARGS((colnr_T col));
+! void change_indent __ARGS((int type, int amount, int round, int replaced));
+  void truncate_spaces __ARGS((char_u *line));
+  void backspace_until_column __ARGS((int col));
+  int vim_is_ctrl_x_key __ARGS((int c));
+--- 3,9 ----
+  void edit_putchar __ARGS((int c, int highlight));
+  void edit_unputchar __ARGS((void));
+  void display_dollar __ARGS((colnr_T col));
+! void change_indent __ARGS((int type, int amount, int round, int replaced, int call_changed_bytes));
+  void truncate_spaces __ARGS((char_u *line));
+  void backspace_until_column __ARGS((int col));
+  int vim_is_ctrl_x_key __ARGS((int c));
+*** ../vim-7.1.230/src/proto/ops.pro	Sun May  6 13:56:32 2007
+--- src/proto/ops.pro	Sun Jan 13 21:52:30 2008
+***************
+*** 4,10 ****
+  int get_op_char __ARGS((int optype));
+  int get_extra_op_char __ARGS((int optype));
+  void op_shift __ARGS((oparg_T *oap, int curs_top, int amount));
+! void shift_line __ARGS((int left, int round, int amount));
+  void op_reindent __ARGS((oparg_T *oap, int (*how)(void)));
+  int get_expr_register __ARGS((void));
+  void set_expr_line __ARGS((char_u *new_line));
+--- 4,10 ----
+  int get_op_char __ARGS((int optype));
+  int get_extra_op_char __ARGS((int optype));
+  void op_shift __ARGS((oparg_T *oap, int curs_top, int amount));
+! void shift_line __ARGS((int left, int round, int amount, int call_changed_bytes));
+  void op_reindent __ARGS((oparg_T *oap, int (*how)(void)));
+  int get_expr_register __ARGS((void));
+  void set_expr_line __ARGS((char_u *new_line));
+*** ../vim-7.1.230/src/version.c	Tue Jan 15 22:16:36 2008
+--- src/version.c	Wed Jan 16 19:58:25 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     231,
+  /**/
+
+-- 
+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/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.1.232 b/7.1.232
new file mode 100644
index 0000000..092d6fa
--- /dev/null
+++ b/7.1.232
@@ -0,0 +1,70 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.232
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.1.232 (after 7.1.207 and 7.1.211)
+Problem:    Compiler warnings with MSVC.
+Solution:   Add type casts. (Mike Williams)
+Files:	    src/ex_cmds2.c, src/netbeans.c
+
+
+*** ../vim-7.1.231/src/ex_cmds2.c	Tue Jan 15 22:16:36 2008
+--- src/ex_cmds2.c	Tue Jan 15 20:41:28 2008
+***************
+*** 916,922 ****
+  
+  	QueryPerformanceCounter(tm);
+  	QueryPerformanceFrequency(&fr);
+! 	tm->QuadPart +=  (double)msec / 1000.0 * (double)fr.QuadPart;
+  # else
+  	long	    usec;
+  
+--- 916,922 ----
+  
+  	QueryPerformanceCounter(tm);
+  	QueryPerformanceFrequency(&fr);
+! 	tm->QuadPart += (LONGLONG)((double)msec / 1000.0 * (double)fr.QuadPart);
+  # else
+  	long	    usec;
+  
+*** ../vim-7.1.231/src/netbeans.c	Sat Jan  5 18:06:33 2008
+--- src/netbeans.c	Mon Jan 14 21:11:02 2008
+***************
+*** 1217,1223 ****
+  
+      oldtext = ml_get(lnum);
+      oldlen = STRLEN(oldtext);
+!     if (first >= oldlen || oldlen == 0)  /* just in case */
+  	return;
+      if (lastbyte >= oldlen)
+  	lastbyte = oldlen - 1;
+--- 1217,1223 ----
+  
+      oldtext = ml_get(lnum);
+      oldlen = STRLEN(oldtext);
+!     if (first >= (colnr_T)oldlen || oldlen == 0)  /* just in case */
+  	return;
+      if (lastbyte >= oldlen)
+  	lastbyte = oldlen - 1;
+*** ../vim-7.1.231/src/version.c	Wed Jan 16 20:01:14 2008
+--- src/version.c	Fri Jan 18 11:38:39 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     232,
+  /**/
+
+-- 
+Why is "abbreviation" such a long word?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.1.233 b/7.1.233
new file mode 100644
index 0000000..b2f07e3
--- /dev/null
+++ b/7.1.233
@@ -0,0 +1,109 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.233
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.1.233
+Problem:    Crash when doing Insert mode completion for a user defined
+	    command.  (Yegappan Lakshmanan)
+Solution:   Don't use the non-existing command line.
+Files:	    src/ex_getln.c
+
+
+*** ../vim-7.1.232/src/ex_getln.c	Fri Jan  4 15:16:57 2008
+--- src/ex_getln.c	Fri Jan 18 13:07:11 2008
+***************
+*** 4655,4661 ****
+  static void * call_user_expand_func __ARGS((void *(*user_expand_func) __ARGS((char_u *, int, char_u **, int)), expand_T	*xp, int *num_file, char_u ***file));
+  
+  /*
+!  * call "user_expand_func()" to invoke a user defined VimL function and return
+   * the result (either a string or a List).
+   */
+      static void *
+--- 4655,4661 ----
+  static void * call_user_expand_func __ARGS((void *(*user_expand_func) __ARGS((char_u *, int, char_u **, int)), expand_T	*xp, int *num_file, char_u ***file));
+  
+  /*
+!  * Call "user_expand_func()" to invoke a user defined VimL function and return
+   * the result (either a string or a List).
+   */
+      static void *
+***************
+*** 4677,4687 ****
+      *num_file = 0;
+      *file = NULL;
+  
+!     keep = ccline.cmdbuff[ccline.cmdlen];
+!     ccline.cmdbuff[ccline.cmdlen] = 0;
+!     sprintf((char *)num, "%d", ccline.cmdpos);
+      args[0] = xp->xp_pattern;
+-     args[1] = ccline.cmdbuff;
+      args[2] = num;
+  
+      /* Save the cmdline, we don't know what the function may do. */
+--- 4677,4698 ----
+      *num_file = 0;
+      *file = NULL;
+  
+!     if (ccline.cmdbuff == NULL)
+!     {
+! 	/* Completion from Insert mode, pass fake arguments. */
+! 	keep = 0;
+! 	sprintf((char *)num, "%d", STRLEN(xp->xp_pattern));
+! 	args[1] = xp->xp_pattern;
+!     }
+!     else
+!     {
+! 	/* Completion on the command line, pass real arguments. */
+! 	keep = ccline.cmdbuff[ccline.cmdlen];
+! 	ccline.cmdbuff[ccline.cmdlen] = 0;
+! 	sprintf((char *)num, "%d", ccline.cmdpos);
+! 	args[1] = ccline.cmdbuff;
+!     }
+      args[0] = xp->xp_pattern;
+      args[2] = num;
+  
+      /* Save the cmdline, we don't know what the function may do. */
+***************
+*** 4694,4701 ****
+  
+      ccline = save_ccline;
+      current_SID = save_current_SID;
+! 
+!     ccline.cmdbuff[ccline.cmdlen] = keep;
+  
+      return ret;
+  }
+--- 4705,4712 ----
+  
+      ccline = save_ccline;
+      current_SID = save_current_SID;
+!     if (ccline.cmdbuff != NULL)
+! 	ccline.cmdbuff[ccline.cmdlen] = keep;
+  
+      return ret;
+  }
+*** ../vim-7.1.232/src/version.c	Fri Jan 18 11:40:02 2008
+--- src/version.c	Fri Jan 18 13:01:05 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     233,
+  /**/
+
+-- 
+"I love deadlines.  I especially like the whooshing sound they
+make as they go flying by."
+                         -- Douglas Adams
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/README.patches b/README.patches
index a9bc70f..01e8158 100644
--- a/README.patches
+++ b/README.patches
@@ -261,3 +261,6 @@ Individual patches for Vim 7.1:
   1678  7.1.228  with 'foldmethod' "indent" fold can't be closed after "3>>"
   1758  7.1.229  a fold is closed when backspacing in Insert mode
   2052  7.1.230  memory leak when executing SourceCmd autocommands
+  8648  7.1.231  when shifting lines the change is acted upon multiple times
+  2002  7.1.232  (after 7.1.207 and 7.1.211) compiler warnings with MSVC
+  3249  7.1.233  crash with Insert mode completion for a user defined command
diff --git a/vim.spec b/vim.spec
index d015a07..9b78e6b 100644
--- a/vim.spec
+++ b/vim.spec
@@ -17,13 +17,13 @@
 #used for pre-releases:
 %define beta %{nil}
 %define vimdir vim71%{?beta}
-%define patchlevel 230
+%define patchlevel 233
 
 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
@@ -283,6 +283,9 @@ Patch227: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.227
 Patch228: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.228
 Patch229: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.229
 Patch230: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.230
+Patch231: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.231
+Patch232: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.232
+Patch233: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.233
 
 Patch3000: vim-7.0-syntax.patch
 Patch3002: vim-7.1-nowarnings.patch
@@ -647,6 +650,9 @@ perl -pi -e "s,bin/nawk,bin/awk,g" runtime/tools/mve.awk
 %patch228 -p0
 %patch229 -p0
 %patch230 -p0
+%patch231 -p0
+%patch232 -p0
+%patch233 -p0
 
 
 # install spell files
@@ -1034,6 +1040,10 @@ rm -rf $RPM_BUILD_ROOT
 %{_datadir}/icons/hicolor/*/apps/*
 
 %changelog
+* Fri Jan 18 2008 Karsten Hopp <karsten@redhat.com> 7.1.233-1
+- patchlevel 233
+- fix ada patch
+
 * Wed Jan 16 2008 Karsten Hopp <karsten@redhat.com> 7.1.230-2
 - add newer ada runtime files to fix bugzilla #246378