]> git.pld-linux.org Git - packages/vim.git/commitdiff
- new auto/ac/vim-6_2_532-0_1
authorAdam Gołębiowski <adamg@pld-linux.org>
Sun, 9 May 2004 15:44:37 +0000 (15:44 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    6.2.501 -> 1.1
    6.2.502 -> 1.1
    6.2.503 -> 1.1
    6.2.504 -> 1.1
    6.2.505 -> 1.1
    6.2.506 -> 1.1
    6.2.507 -> 1.1
    6.2.508 -> 1.1
    6.2.509 -> 1.1
    6.2.510 -> 1.1
    6.2.511 -> 1.1
    6.2.512 -> 1.1
    6.2.513 -> 1.1
    6.2.514 -> 1.1
    6.2.515 -> 1.1
    6.2.516 -> 1.1
    6.2.517 -> 1.1
    6.2.518 -> 1.1
    6.2.519 -> 1.1
    6.2.520 -> 1.1
    6.2.521 -> 1.1
    6.2.522 -> 1.1
    6.2.523 -> 1.1
    6.2.524 -> 1.1
    6.2.525 -> 1.1
    6.2.526 -> 1.1
    6.2.527 -> 1.1
    6.2.528 -> 1.1
    6.2.529 -> 1.1
    6.2.530 -> 1.1
    6.2.531 -> 1.1
    6.2.532 -> 1.1

32 files changed:
6.2.501 [new file with mode: 0644]
6.2.502 [new file with mode: 0644]
6.2.503 [new file with mode: 0644]
6.2.504 [new file with mode: 0644]
6.2.505 [new file with mode: 0644]
6.2.506 [new file with mode: 0644]
6.2.507 [new file with mode: 0644]
6.2.508 [new file with mode: 0644]
6.2.509 [new file with mode: 0644]
6.2.510 [new file with mode: 0644]
6.2.511 [new file with mode: 0644]
6.2.512 [new file with mode: 0644]
6.2.513 [new file with mode: 0644]
6.2.514 [new file with mode: 0644]
6.2.515 [new file with mode: 0644]
6.2.516 [new file with mode: 0644]
6.2.517 [new file with mode: 0644]
6.2.518 [new file with mode: 0644]
6.2.519 [new file with mode: 0644]
6.2.520 [new file with mode: 0644]
6.2.521 [new file with mode: 0644]
6.2.522 [new file with mode: 0644]
6.2.523 [new file with mode: 0644]
6.2.524 [new file with mode: 0644]
6.2.525 [new file with mode: 0644]
6.2.526 [new file with mode: 0644]
6.2.527 [new file with mode: 0644]
6.2.528 [new file with mode: 0644]
6.2.529 [new file with mode: 0644]
6.2.530 [new file with mode: 0644]
6.2.531 [new file with mode: 0644]
6.2.532 [new file with mode: 0644]

diff --git a/6.2.501 b/6.2.501
new file mode 100644 (file)
index 0000000..d6a4fe9
--- /dev/null
+++ b/6.2.501
@@ -0,0 +1,286 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.501
+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 6.2.501
+Problem:    Vim does not compile with MorphOS.
+Solution:   Add a Makefile and a few changes to make Vim work with MorphOS.
+           (Ali Akcaagac)
+Files:     runtime/doc/os_amiga.txt, src/INSTALLami.txt,
+           src/Make_morphos.mak, src/memfile.c, src/term.c
+
+
+*** ../vim-6.2.500/runtime/doc/os_amiga.txt    Sun Jun  1 12:20:34 2003
+--- runtime/doc/os_amiga.txt   Sun Apr 25 16:44:21 2004
+***************
+*** 1,4 ****
+! *os_amiga.txt*  For Vim version 6.2.  Last change: 2001 Sep 03
+  
+  
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+--- 1,4 ----
+! *os_amiga.txt*  For Vim version 6.2.  Last change: 2004 Apr 25
+  
+  
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+***************
+*** 6,11 ****
+--- 6,12 ----
+  
+                                                       *Amiga*
+  This file contains the particularities for the Amiga version of Vim.
++ There is also a section specifically for |MorphOS| below.
+  
+  Installation on the Amiga:
+  - Assign "VIM:" to the directory where the Vim "doc" directory is.  Vim will
+***************
+*** 74,78 ****
+--- 75,139 ----
+  Commands that accept a single file name allow for embedded spaces in the file
+  name. However, when using commands that accept several file names, embedded
+  spaces need to be escaped with a backslash.
++ 
++ ------------------------------------------------------------------------------
++ Vim for MorphOS                                                      *MorphOS*
++ 
++ [this section mostly by Ali Akcaagac]
++ 
++ For the latest info about the MorphOS version:
++      http://www.akcaagac.com/index_vim.html
++ 
++ 
++ Problems ~
++ 
++ There are a couple of problems which are not MorphOS related but more Vim and
++ UN*X related. When starting up Vim in ram: it complains with a nag requester
++ from MorphOS please simply ignore it. Another problem is when running Vim as
++ is some plugins will cause a few problems which you can ignore as well.
++ Hopefully someone will be fixing it over the time.
++ 
++ To pass all these problems for now you can either run:
++ 
++      vim <file to be edited>
++ 
++ or if you want to run Vim plain and enjoy the motion of Helpfiles etc. it then
++ would be better to enter:
++ 
++      vim --noplugins <of course you can add a file>
++ 
++ 
++ Installation ~
++ 
++ 1) Please copy the binary 'VIM' file to c:
++ 2) Get the Vim runtime package from:
++ 
++      ftp://ftp.vim.org/pub/vim/amiga/vim62rt.tgz
++ 
++    and unpack it in your 'Apps' directory of the MorphOS installation. For me
++    this would create following directory hierarchy:
++ 
++      MorphOS:Apps/Vim/Vim62/...
++ 
++ 3) Add the following lines to your s:shell-startup (Important!).
++ 
++      ;Begin VIM
++      Set VIM=MorphOS:Apps/Vim/Vim62
++      Assign HOME: ""
++      ;End VIM
++ 
++ 4) Copy the '.vimrc' file to s:
++ 
++ 5) There is also a file named 'color-sequence' included in this archive. This
++    will set the MorphOS Shell to show ANSI colors. Please copy the file to s:
++    and change the s:shell-startup to:
++ 
++      ;Begin VIM
++      Set VIM=MorphOS:Apps/Vim/Vim62
++      Assign HOME: ""
++      Execute S:Color-Sequence
++      Cls
++      ;End VIM
++ 
+  
+   vim:tw=78:ts=8:ft=help:norl:
+*** ../vim-6.2.500/src/INSTALLami.txt  Wed Jul 19 12:53:38 2000
+--- src/INSTALLami.txt Sun Apr 25 16:46:09 2004
+***************
+*** 26,28 ****
+--- 26,34 ----
+  
+  You will have to set the "VIM" environment variable to the location of the
+  documentation files.
++ 
++ 
++ MorphOS
++ 
++ Use the Make_morphos.mak Makefile:
++      make -f Make_morphos.mak
+*** ../vim-6.2.500/src/Make_morphos.mak        Sun Apr 25 16:57:38 2004
+--- src/Make_morphos.mak       Sun Apr 25 16:48:43 2004
+***************
+*** 0 ****
+--- 1,54 ----
++ #
++ # Makefile for VIM, using MorphOS SDK (gcc 2.95.3)
++ #
++ 
++ # Uncomment the following two lines and comment the two after in
++ # case you want to play with GVIM MorphOS. But it's still known
++ # to not work at all. So meanwhile it's better to stick with VIM.
++ 
++ # GVIM =     -DFEAT_GUI_AMIGA
++ # GVIMSRC =  gui_amiga.c gui.c
++ 
++ GVIM =
++ GVIMSRC =
++ 
++ CFLAGS =     -c                                              \
++              -pipe                                           \
++              -O2                                             \
++              -Wall                                           \
++              -DNO_ARP                                        \
++              -DUSE_TMPNAM                                    \
++              ${GVIM}                                         \
++              -noixemul                                       \
++              -Iproto
++ 
++ PRG =                Vim
++ LIBS =               -noixemul -s
++ CC =         gcc
++ LD =         gcc
++ 
++ .c.o:
++      ${CC} ${CFLAGS} $< -o $@
++ 
++ SRC =                buffer.c        charset.c       diff.c          \
++              digraph.c       edit.c          eval.c          \
++              ex_cmds.c       ex_cmds2.c      ex_docmd.c      \
++              ex_eval.c       ex_getln.c      fileio.c        \
++              fold.c          getchar.c       main.c          \
++              mark.c          memfile.c       memline.c       \
++              menu.c          message.c       misc1.c         \
++              misc2.c         move.c          mbyte.c         \
++              normal.c        ops.c           option.c        \
++              os_amiga.c      quickfix.c      regexp.c        \
++              screen.c        search.c        syntax.c        \
++              tag.c           term.c          ui.c            \
++              undo.c          window.c        version.c       \
++              ${GVIMSRC}
++ 
++ OBJ =        $(SRC:.c=.o)
++ 
++ $(PRG): $(OBJ)
++      ${LD} -o $(PRG) $(OBJ) $(LIBS)
++ 
++ clean:
++      rm -fv *.o $(PRG)
+*** ../vim-6.2.500/src/memfile.c       Tue Apr  6 21:31:48 2004
+--- src/memfile.c      Sun Apr 25 16:53:51 2004
+***************
+*** 517,522 ****
+--- 517,533 ----
+       mf_ins_free(mfp, hp);   /* put *hp in the free list */
+  }
+  
++ #if defined(__MORPHOS__)
++ /* function is missing in MorphOS libnix version */
++ extern unsigned long *__stdfiledes;
++ 
++     static unsigned long
++ fdtofh(int filedescriptor)
++ {
++     return __stdfiledes[filedescriptor];
++ }
++ #endif
++ 
+  /*
+   * Sync the memory file *mfp to disk.
+   * Flags:
+***************
+*** 660,673 ****
+               Flush(fp->ufbfh);
+       }
+  # else
+! #  if defined(_DCC) || defined(__GNUC__)
+       {
+! #   ifdef __GNUC__
+           /* Have function (in libnix at least),
+            * but ain't got no prototype anywhere. */
+!          unsigned long fdtofh(int filedescriptor);
+  #   endif
+- 
+           BPTR fh = (BPTR)fdtofh(mfp->mf_fd);
+  
+           if (fh != 0)
+--- 671,683 ----
+               Flush(fp->ufbfh);
+       }
+  # else
+! #  if defined(_DCC) || defined(__GNUC__) || defined(__MORPHOS__)
+       {
+! #   if defined(__GNUC__) && !defined(__MORPHOS__)
+           /* Have function (in libnix at least),
+            * but ain't got no prototype anywhere. */
+!          extern unsigned long fdtofh(int filedescriptor);
+  #   endif
+           BPTR fh = (BPTR)fdtofh(mfp->mf_fd);
+  
+           if (fh != 0)
+*** ../vim-6.2.500/src/term.c  Mon Apr 19 20:26:43 2004
+--- src/term.c Sun Apr 25 16:48:43 2004
+***************
+*** 296,301 ****
+--- 296,312 ----
+      {(int)KS_UE,     "\033[0m"},
+      {(int)KS_CZH,    "\033[3m"},
+      {(int)KS_CZR,    "\033[0m"},
++ #if defined(__MORPHOS__)
++     {(int)KS_CCO,    "8"},           /* allow 8 colors */
++ #  ifdef TERMINFO
++     {(int)KS_CAB,    "\033[4%p1%dm"},/* set background color */
++     {(int)KS_CAF,    "\033[3%p1%dm"},/* set foreground color */
++ #  else
++     {(int)KS_CAB,    "\033[4%dm"},   /* set background color */
++     {(int)KS_CAF,    "\033[3%dm"},   /* set foreground color */
++ #  endif
++     {(int)KS_OP,     "\033[m"},      /* reset colors */
++ #endif
+      {(int)KS_MS,     "y"},
+      {(int)KS_UT,     "y"},           /* guessed */
+      {(int)KS_LE,     "\b"},
+***************
+*** 304,309 ****
+--- 315,323 ----
+  #  else
+      {(int)KS_CM,     "\033[%i%d;%dH"},
+  #  endif
++ #if defined(__MORPHOS__)
++     {(int)KS_SR,     "\033M"},
++ #endif
+  #  ifdef TERMINFO
+      {(int)KS_CRI,    "\033[%p1%dC"},
+  #  else
+*** ../vim-6.2.500/src/version.c       Sun Apr 25 16:29:55 2004
+--- src/version.c      Sun Apr 25 16:56:39 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+  {   /* Add new patch number below this line */
++ /**/
++     501,
+  /**/
+
+-- 
+If they don't keep on exercising their lips, he thought, their brains
+start working.
+               -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.502 b/6.2.502
new file mode 100644 (file)
index 0000000..bb462bf
--- /dev/null
+++ b/6.2.502
@@ -0,0 +1,96 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.502
+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 6.2.502
+Problem:    Building fails for generating message files.
+Solution:   Add dummy message files.
+Files:     src/po/ca.po, src/po/ru.po, src/po/sv.po
+
+
+*** ../vim-6.2.501/src/po/ca.po        Mon Apr 26 12:28:17 2004
+--- src/po/ca.po       Mon Apr 26 12:03:21 2004
+***************
+*** 0 ****
+--- 1,16 ----
++ # Dummy Catalan messages for vim.
++ # Get the real one from: ftp://ftp.vim.org/pub/vim/messages/ca.po
++ #
++ msgid ""
++ msgstr ""
++ "Project-Id-Version: vim 6.2\n"
++ "POT-Creation-Date: 2003-11-01 20:10+0100\n"
++ "PO-Revision-Date: 2004-01-19 13:57+0100\n"
++ "Last-Translator: Bram Moolenaar <bram@vim.org>\n"
++ "Language-Team: Catalan <ca@dodds.net>\n"
++ "MIME-Version: 1.0\n"
++ "Content-Type: text/plain; charset=iso-8859-1\n"
++ "Content-Transfer-Encoding: 8bit\n"
++ 
++ msgid "This is a dummy translation file"
++ msgstr "Dis be a dummy translashun stash"
+*** ../vim-6.2.501/src/po/ru.po        Mon Apr 26 12:28:17 2004
+--- src/po/ru.po       Mon Apr 26 12:01:14 2004
+***************
+*** 0 ****
+--- 1,16 ----
++ # Dummy Russian translation for Vim
++ # Get the real one from: ftp://ftp.vim.org/pub/vim/messages/ru.po
++ # 
++ msgid ""
++ msgstr ""
++ "Project-Id-Version: Vim 6.2\n"
++ "POT-Creation-Date: 2004-04-18 06:22+0400\n"
++ "PO-Revision-Date: 2004-04-20 20:20+0400\n"
++ "Last-Translator: Bram Moolenaar <bram@vim.org>\n"
++ "Language-Team: vassily ragosin <vrr@users.sourceforge.net>\n"
++ "MIME-Version: 1.0\n"
++ "Content-Type: text/plain; charset=koi8-r\n"
++ "Content-Transfer-Encoding: 8bit\n"
++ 
++ msgid "This is a dummy translation file"
++ msgstr "Like, ya know, this is a dummy translation file"
+*** ../vim-6.2.501/src/po/sv.po        Mon Apr 26 12:28:17 2004
+--- src/po/sv.po       Mon Apr 26 11:59:50 2004
+***************
+*** 0 ****
+--- 1,16 ----
++ # Dummy Swedish translation for Vim.
++ # Get the real one from: ftp://ftp.vim.org/pub/vim/messages/sv.po
++ #
++ msgid ""
++ msgstr ""
++ "Project-Id-Version: Vim 6.2\n"
++ "POT-Creation-Date: 2004-01-30 11:57+0100\n"
++ "PO-Revision-Date: 2004-04-23 21:56+0200\n"
++ "Last-Translator: Bram Moolenaar <bram@vim.org>\n"
++ "Language-Team: Swedish Chef <http://bumr.net/>\n"
++ "MIME-Version: 1.0\n"
++ "Content-Type: text/plain; charset=ISO-8859-1\n"
++ "Content-Transfer-Encoding: 8bit\n"
++ 
++ msgid "This is a dummy translation file"
++ msgstr "Thees is a doommy trunsleshun feele"
+*** ../vim-6.2.501/src/version.c       Sun Apr 25 16:58:57 2004
+--- src/version.c      Mon Apr 26 12:19:11 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+  {   /* Add new patch number below this line */
++ /**/
++     502,
+  /**/
+
+-- 
+How To Keep A Healthy Level Of Insanity:
+12. Sing along at the opera.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.503 b/6.2.503
new file mode 100644 (file)
index 0000000..4c18ee0
--- /dev/null
+++ b/6.2.503
@@ -0,0 +1,114 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.503
+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 6.2.503
+Problem:    Mac: Can't compile MacRoman conversions without the GUI.
+Solution:   Also link with the Carbon framework for the terminal version, for
+           the MacRoman conversion functions. (Eckehard Berns)
+           Remove -ltermcap from the GUI link command, it is not needed.
+Files:     src/auto/configure, src/Makefile, src/configure.in
+
+
+*** ../vim-6.2.502/src/auto/configure  Sun Apr 25 13:41:07 2004
+--- src/auto/configure Sun Apr 25 13:22:47 2004
+***************
+*** 8248,8253 ****
+--- 8252,8271 ----
+      PERL_LIBS="$PERL_LIBS -ldl"
+    fi
+  fi
++ 
++ if test "x$MACOSX" = "xyes" && test "x$CARBON" = "xyes" \
++      && test "x$GUITYPE" != "xCARBONGUI"; then
++   echo $ac_n "checking whether we need -framework Carbon""... $ac_c" 1>&6
++ echo "configure:8260: checking whether we need -framework Carbon" >&5
++     if test "x$enable_multibyte" = "xyes" || test "x$features" == "xbig" \
++      || test "x$features" = "xhuge"; then
++     LIBS="$LIBS -framework Carbon"
++     echo "$ac_t""yes" 1>&6
++   else
++     echo "$ac_t""no" 1>&6
++   fi
++ fi
++ 
+  
+  trap '' 1 2 15
+  cat > confcache <<\EOF
+*** ../vim-6.2.502/src/Makefile        Thu Mar 25 19:29:55 2004
+--- src/Makefile       Sun Apr 25 13:23:42 2004
+***************
+*** 1142,1153 ****
+  CARBONGUI_SRC        = gui.c gui_mac.c
+  CARBONGUI_OBJ        = objects/gui.o objects/gui_mac.o objects/pty.o
+  CARBONGUI_DEFS       = -DFEAT_GUI_MAC -arch ppc -fno-common -fpascal-strings \
+!                   -Wall -Wno-unknown-pragmas \
+!                   -mdynamic-no-pic -pipe
+  CARBONGUI_IPATH      = -I. -Iproto
+  CARBONGUI_LIBS_DIR =
+  CARBONGUI_LIBS1      = -framework Carbon
+! CARBONGUI_LIBS2      = -ltermcap
+  CARBONGUI_INSTALL = install_macosx
+  CARBONGUI_TARGETS =
+  CARBONGUI_MAN_TARGETS =
+--- 1158,1169 ----
+  CARBONGUI_SRC        = gui.c gui_mac.c
+  CARBONGUI_OBJ        = objects/gui.o objects/gui_mac.o objects/pty.o
+  CARBONGUI_DEFS       = -DFEAT_GUI_MAC -arch ppc -fno-common -fpascal-strings \
+!                -Wall -Wno-unknown-pragmas \
+!                -mdynamic-no-pic -pipe
+  CARBONGUI_IPATH      = -I. -Iproto
+  CARBONGUI_LIBS_DIR =
+  CARBONGUI_LIBS1      = -framework Carbon
+! CARBONGUI_LIBS2      =
+  CARBONGUI_INSTALL = install_macosx
+  CARBONGUI_TARGETS =
+  CARBONGUI_MAN_TARGETS =
+*** ../vim-6.2.502/src/configure.in    Sun Apr 25 13:41:07 2004
+--- src/configure.in   Sun Apr 25 13:22:43 2004
+***************
+*** 2639,2644 ****
+--- 2639,2658 ----
+      PERL_LIBS="$PERL_LIBS -ldl"
+    fi
+  fi
++ 
++ if test "x$MACOSX" = "xyes" && test "x$CARBON" = "xyes" \
++      && test "x$GUITYPE" != "xCARBONGUI"; then
++   AC_MSG_CHECKING(whether we need -framework Carbon)
++   dnl check for MACOSX without Carbon GUI, but with FEAT_MBYTE
++   if test "x$enable_multibyte" = "xyes" || test "x$features" == "xbig" \
++      || test "x$features" = "xhuge"; then
++     LIBS="$LIBS -framework Carbon"
++     AC_MSG_RESULT(yes)
++   else
++     AC_MSG_RESULT(no)
++   fi
++ fi
++ 
+  
+  dnl write output files
+  AC_OUTPUT(auto/config.mk:config.mk.in)
+*** ../vim-6.2.502/src/version.c       Mon Apr 26 12:28:44 2004
+--- src/version.c      Mon Apr 26 12:31:49 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+  {   /* Add new patch number below this line */
++ /**/
++     503,
+  /**/
+
+-- 
+How To Keep A Healthy Level Of Insanity:
+13. Go to a poetry recital and ask why the poems don't rhyme.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.504 b/6.2.504
new file mode 100644 (file)
index 0000000..1947797
--- /dev/null
+++ b/6.2.504
@@ -0,0 +1,2711 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.504
+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 6.2.504
+Problem:    Various problems with 'cindent', among which that a
+           list of variable declarations is not indented properly.
+Solution:   Fix the wrong indenting.  Improve indenting of C++ methods.
+           Add the 'i', 'b' and 'W' options to 'cinoptions'. (mostly by
+           Helmut Stiegler)
+           Improve indenting of preprocessor-continuation lines.
+Files:     runtime/doc/indent.txt, src/misc1.c, src/testdir/test3.in,
+           src/testdir/test3.ok
+
+
+*** ../vim-6.2.503/runtime/doc/indent.txt      Sun Jun  1 12:20:33 2003
+--- runtime/doc/indent.txt     Sun Apr 25 11:57:22 2004
+***************
+*** 1,4 ****
+! *indent.txt*    For Vim version 6.2.  Last change: 2003 May 04
+  
+  
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+--- 1,4 ----
+! *indent.txt*    For Vim version 6.2.  Last change: 2004 Apr 25
+  
+  
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+***************
+*** 228,234 ****
+                      a = a + 1;                 b = b + 1;
+  <
+       lN    If N != 0 Vim will align with a case label instead of the
+!            statement after it.
+  
+               cino=                       cino=l1 >
+                   switch (a) {              switch (a) {
+--- 228,234 ----
+                      a = a + 1;                 b = b + 1;
+  <
+       lN    If N != 0 Vim will align with a case label instead of the
+!            statement after it in the same line.
+  
+               cino=                       cino=l1 >
+                   switch (a) {              switch (a) {
+***************
+*** 236,241 ****
+--- 236,256 ----
+                                   break;            break;
+                               }                 }
+  <
++      bN    If N != 0 Vim will align a final "break" with the case label,
++            so that case..break looks like a sort of block. (default: 0).
++ 
++              cino=               cino=b1 >
++                switch (x)          switch(x)
++                {                   {
++                    case 1:             case 1:
++                        a = b;              a = b;
++                        break;          break;
++ 
++                    default:            default:
++                        a = 0;              a = 0;
++                        break;          break;
++                }                   }
++ <
+       gN    Place C++ scope declarations N characters from the indent of the
+             block they are in.  (default 'shiftwidth').  A scope declaration
+             can be "public:", "protected:" or "private:".
+***************
+*** 271,276 ****
+--- 286,304 ----
+                     int             int                        int
+                 func()              func()              func()
+  <
++      iN    Indent C++ base class declarations and contructor
++            initializations, if they start in a new line (otherwise they
++            are aligned at the right side of the ':').
++            (default 'shiftwidth').
++ 
++              cino=                     cino=i0 >
++                class MyClass :           class MyClass :
++                    public BaseClass      public BaseClass
++                {}                        {}
++                MyClass::MyClass() :      MyClass::MyClass() :
++                    BaseClass(3)          BaseClass(3)
++                {}                        {}
++ <
+       +N    Indent a continuation line (a line that spills onto the next) N
+             additional characters.  (default 'shiftwidth').
+  
+***************
+*** 347,352 ****
+--- 375,394 ----
+                        && (   c2              && (   c2
+                               || c3))             || c3))
+                     foo;                      foo;
++ <
++      WN    When in unclosed parentheses and N is non-zero and either
++            using "(0" or "u0", respectively and the unclosed parentheses is
++            the last non-white character in its line and it is not the
++            closing parentheses, indent the following line N characters
++            relative to the outer context (i.e. start of the line or the
++            next unclosed parentheses). (default: 0).
++ 
++              cino=(0                    cino=(0,W4 >
++                a_long_line(              a_long_line(
++                            argument,         argument,
++                            argument);        argument);
++                a_short_line(argument,    a_short_line(argument,
++                             argument);                argument);
+  <
+       mN    When N is non-zero, line up a line starting with a closing
+             parentheses with the first character of the line with the
+*** ../vim-6.2.503/src/misc1.c Mon Apr 19 20:26:43 2004
+--- src/misc1.c        Mon Apr 26 18:58:23 2004
+***************
+*** 4351,4370 ****
+  static char_u        *after_label __ARGS((char_u *l));
+  static int   get_indent_nolabel __ARGS((linenr_T lnum));
+  static int   skip_label __ARGS((linenr_T, char_u **pp, int ind_maxcomment));
+  static int   cin_ispreproc __ARGS((char_u *));
+  static int   cin_iscomment __ARGS((char_u *));
+  static int   cin_islinecomment __ARGS((char_u *));
+! static int   cin_isterminated __ARGS((char_u *, int));
+! static int   cin_isfuncdecl __ARGS((char_u *));
+  static int   cin_isif __ARGS((char_u *));
+  static int   cin_iselse __ARGS((char_u *));
+  static int   cin_isdo __ARGS((char_u *));
+  static int   cin_iswhileofdo __ARGS((char_u *, linenr_T, int));
+! static int   cin_ends_in __ARGS((char_u *, char_u *));
+  static int   cin_skip2pos __ARGS((pos_T *trypos));
+  static pos_T *find_start_brace __ARGS((int));
+  static pos_T *find_match_paren __ARGS((int, int));
+! static int   find_last_paren __ARGS((char_u *l));
+  static int   find_match __ARGS((int lookfor, linenr_T ourscope, int ind_maxparen, int ind_maxcomment));
+  
+  /*
+--- 4351,4377 ----
+  static char_u        *after_label __ARGS((char_u *l));
+  static int   get_indent_nolabel __ARGS((linenr_T lnum));
+  static int   skip_label __ARGS((linenr_T, char_u **pp, int ind_maxcomment));
++ static int   cin_first_id_amount __ARGS((void));
++ static int   cin_get_equal_amount __ARGS((linenr_T lnum));
+  static int   cin_ispreproc __ARGS((char_u *));
++ static int   cin_ispreproc_cont __ARGS((char_u **pp, linenr_T *lnump));
+  static int   cin_iscomment __ARGS((char_u *));
+  static int   cin_islinecomment __ARGS((char_u *));
+! static int   cin_isterminated __ARGS((char_u *, int, int));
+! static int   cin_isinit __ARGS((void));
+! static int   cin_isfuncdecl __ARGS((char_u **, linenr_T));
+  static int   cin_isif __ARGS((char_u *));
+  static int   cin_iselse __ARGS((char_u *));
+  static int   cin_isdo __ARGS((char_u *));
+  static int   cin_iswhileofdo __ARGS((char_u *, linenr_T, int));
+! static int   cin_isbreak __ARGS((char_u *));
+! static int   cin_is_cpp_baseclass __ARGS((char_u *line, colnr_T *col));
+! static int   cin_ends_in __ARGS((char_u *, char_u *, char_u *));
+  static int   cin_skip2pos __ARGS((pos_T *trypos));
+  static pos_T *find_start_brace __ARGS((int));
+  static pos_T *find_match_paren __ARGS((int, int));
+! static int   corr_ind_maxparen __ARGS((int ind_maxparen, pos_T *startpos));
+! static int   find_last_paren __ARGS((char_u *l, int start, int end));
+  static int   find_match __ARGS((int lookfor, linenr_T ourscope, int ind_maxparen, int ind_maxcomment));
+  
+  /*
+***************
+*** 4503,4509 ****
+               continue;
+  
+           curwin->w_cursor = cursor_save;
+!          if (cin_isterminated(line, TRUE)
+                   || cin_isscopedecl(line)
+                   || cin_iscase(line)
+                   || (cin_islabel_skip(&line) && cin_nocode(line)))
+--- 4510,4516 ----
+               continue;
+  
+           curwin->w_cursor = cursor_save;
+!          if (cin_isterminated(line, TRUE, FALSE)
+                   || cin_isscopedecl(line)
+                   || cin_iscase(line)
+                   || (cin_islabel_skip(&line) && cin_nocode(line)))
+***************
+*** 4517,4522 ****
+--- 4524,4550 ----
+  }
+  
+  /*
++  * Recognize structure initialization and enumerations.
++  * Q&D-Implementation:
++  * check for "=" at end or "enum" at beginning of line.
++  */
++     int
++ cin_isinit(void)
++ {
++     char_u   *s;
++ 
++     s = cin_skipcomment(ml_get_curline());
++ 
++     if (STRNCMP(s, "enum", 4) == 0 && !vim_isIDc(s[4]))
++      return TRUE;
++ 
++     if (cin_ends_in(s, (char_u *)"=", (char_u *)"{"))
++      return TRUE;
++ 
++     return FALSE;
++ }
++ 
++ /*
+   * Recognize a switch label: "case .*:" or "default:".
+   */
+       int
+***************
+*** 4677,4682 ****
+--- 4705,4808 ----
+  }
+  
+  /*
++  * Return the indent of the first variable name after a type in a declaration.
++  *  int          a,                  indent of "a"
++  *  static struct foo    b,  indent of "b"
++  *  enum bla    c,           indent of "c"
++  * Returns zero when it doesn't look like a declaration.
++  */
++     static int
++ cin_first_id_amount()
++ {
++     char_u   *line, *p, *s;
++     int              len;
++     pos_T    fp;
++     colnr_T  col;
++ 
++     line = ml_get_curline();
++     p = skipwhite(line);
++     len = skiptowhite(p) - p;
++     if (len == 6 && STRNCMP(p, "static", 6) == 0)
++     {
++      p = skipwhite(p + 6);
++      len = skiptowhite(p) - p;
++     }
++     if (len == 6 && STRNCMP(p, "struct", 6) == 0)
++      p = skipwhite(p + 6);
++     else if (len == 4 && STRNCMP(p, "enum", 4) == 0)
++      p = skipwhite(p + 4);
++     else if ((len == 8 && STRNCMP(p, "unsigned", 8) == 0)
++          || (len == 6 && STRNCMP(p, "signed", 6) == 0))
++     {
++      s = skipwhite(p + len);
++      if ((STRNCMP(s, "int", 3) == 0 && vim_iswhite(s[3]))
++              || (STRNCMP(s, "long", 4) == 0 && vim_iswhite(s[4]))
++              || (STRNCMP(s, "short", 5) == 0 && vim_iswhite(s[5]))
++              || (STRNCMP(s, "char", 4) == 0 && vim_iswhite(s[4])))
++          p = s;
++     }
++     for (len = 0; vim_isIDc(p[len]); ++len)
++      ;
++     if (len == 0 || !vim_iswhite(p[len]) || cin_nocode(p))
++      return 0;
++ 
++     p = skipwhite(p + len);
++     fp.lnum = curwin->w_cursor.lnum;
++     fp.col = (colnr_T)(p - line);
++     getvcol(curwin, &fp, &col, NULL, NULL);
++     return (int)col;
++ }
++ 
++ /*
++  * Return the indent of the first non-blank after an equal sign.
++  *       char *foo = "here";
++  * Return zero if no (useful) equal sign found.
++  * Return -1 if the line above "lnum" ends in a backslash.
++  *      foo = "asdf\
++  *          asdf\
++  *          here";
++  */
++     static int
++ cin_get_equal_amount(lnum)
++     linenr_T lnum;
++ {
++     char_u   *line;
++     char_u   *s;
++     colnr_T  col;
++     pos_T    fp;
++ 
++     if (lnum > 1)
++     {
++      line = ml_get(lnum - 1);
++      if (*line != NUL && line[STRLEN(line) - 1] == '\\')
++          return -1;
++     }
++ 
++     line = s = ml_get(lnum);
++     while (*s != NUL && vim_strchr((char_u *)"=;{}\"'", *s) == NULL)
++     {
++      if (cin_iscomment(s))   /* ignore comments */
++          s = cin_skipcomment(s);
++      else
++          ++s;
++     }
++     if (*s != '=')
++      return 0;
++ 
++     s = skipwhite(s + 1);
++     if (cin_nocode(s))
++      return 0;
++ 
++     if (*s == '"')   /* nice alignment for continued strings */
++      ++s;
++ 
++     fp.lnum = lnum;
++     fp.col = (colnr_T)(s - line);
++     getvcol(curwin, &fp, &col, NULL, NULL);
++     return (int)col;
++ }
++ 
++ /*
+   * Recognize a preprocessor statement: Any line that starts with '#'.
+   */
+      static int
+***************
+*** 4690,4695 ****
+--- 4816,4855 ----
+  }
+  
+  /*
++  * Return TRUE if line "*pp" at "*lnump" is a preprocessor statement or a
++  * continuation line of a preprocessor statement.  Decrease "*lnump" to the
++  * start and return the line in "*pp".
++  */
++     static int
++ cin_ispreproc_cont(pp, lnump)
++     char_u   **pp;
++     linenr_T *lnump;
++ {
++     char_u   *line = *pp;
++     linenr_T lnum = *lnump;
++     int              retval = FALSE;
++ 
++     while (1)
++     {
++      if (cin_ispreproc(line))
++      {
++          retval = TRUE;
++          *lnump = lnum;
++          break;
++      }
++      if (lnum == 1)
++          break;
++      line = ml_get(--lnum);
++      if (*line == NUL || line[STRLEN(line) - 1] != '\\')
++          break;
++     }
++ 
++     if (lnum != *lnump)
++      *pp = ml_get(*lnump);
++     return retval;
++ }
++ 
++ /*
+   * Recognize the start of a C or C++ comment.
+   */
+      static int
+***************
+*** 4712,4752 ****
+  /*
+   * Recognize a line that starts with '{' or '}', or ends with ';', '{' or '}'.
+   * Don't consider "} else" a terminated line.
+!  * Also consider a line terminated if it ends in ','.  This is not 100%
+!  * correct, but this mostly means we are in initializations and then it's OK.
+   */
+      static int
+! cin_isterminated(s, incl_open)
+      char_u   *s;
+      int              incl_open;      /* include '{' at the end as terminator */
+  {
+      s = cin_skipcomment(s);
+  
+      if (*s == '{' || (*s == '}' && !cin_iselse(s)))
+!      return TRUE;
+  
+      while (*s)
+      {
+       /* skip over comments, "" strings and 'c'haracters */
+       s = skip_string(cin_skipcomment(s));
+!      if ((*s == ';' || (incl_open && *s == '{') || *s == '}' || *s == ',')
+!                                                   && cin_nocode(s + 1))
+!          return TRUE;
+       if (*s)
+           s++;
+      }
+!     return FALSE;
+  }
+  
+  /*
+   * Recognize the basic picture of a function declaration -- it needs to
+   * have an open paren somewhere and a close paren at the end of the line and
+   * no semicolons anywhere.
+   */
+      static int
+! cin_isfuncdecl(s)
+!     char_u *s;
+  {
+      while (*s && *s != '(' && *s != ';' && *s != '\'' && *s != '"')
+      {
+       if (cin_iscomment(s))   /* ignore comments */
+--- 4872,4931 ----
+  /*
+   * Recognize a line that starts with '{' or '}', or ends with ';', '{' or '}'.
+   * Don't consider "} else" a terminated line.
+!  * Return the character terminating the line (ending char's have precedence if
+!  * both apply in order to determine initializations).
+   */
+      static int
+! cin_isterminated(s, incl_open, incl_comma)
+      char_u   *s;
+      int              incl_open;      /* include '{' at the end as terminator */
++     int              incl_comma;     /* recognize a trailing comma */
+  {
++     char_u found_start = 0;
++ 
+      s = cin_skipcomment(s);
+  
+      if (*s == '{' || (*s == '}' && !cin_iselse(s)))
+!      found_start = *s;
+  
+      while (*s)
+      {
+       /* skip over comments, "" strings and 'c'haracters */
+       s = skip_string(cin_skipcomment(s));
+!      if ((*s == ';' || (incl_open && *s == '{') || *s == '}'
+!                                               || (incl_comma && *s == ','))
+!              && cin_nocode(s + 1))
+!          return *s;
+! 
+       if (*s)
+           s++;
+      }
+!     return found_start;
+  }
+  
+  /*
+   * Recognize the basic picture of a function declaration -- it needs to
+   * have an open paren somewhere and a close paren at the end of the line and
+   * no semicolons anywhere.
++  * When a line ends in a comma we continue looking in the next line.
++  * "sp" points to a string with the line.  When looking at other lines it must
++  * be restored to the line.  When it's NULL fetch lines here.
++  * "lnum" is where we start looking.
+   */
+      static int
+! cin_isfuncdecl(sp, first_lnum)
+!     char_u   **sp;
+!     linenr_T first_lnum;
+  {
++     char_u   *s;
++     linenr_T lnum = first_lnum;
++     int              retval = FALSE;
++ 
++     if (sp == NULL)
++      s = ml_get(lnum);
++     else
++      s = *sp;
++ 
+      while (*s && *s != '(' && *s != ';' && *s != '\'' && *s != '"')
+      {
+       if (cin_iscomment(s))   /* ignore comments */
+***************
+*** 4760,4772 ****
+      while (*s && *s != ';' && *s != '\'' && *s != '"')
+      {
+       if (*s == ')' && cin_nocode(s + 1))
+!          return TRUE;
+!      if (cin_iscomment(s))   /* ignore comments */
+           s = cin_skipcomment(s);
+       else
+           ++s;
+      }
+!     return FALSE;
+  }
+  
+      static int
+--- 4939,4975 ----
+      while (*s && *s != ';' && *s != '\'' && *s != '"')
+      {
+       if (*s == ')' && cin_nocode(s + 1))
+!      {
+!          /* ')' at the end: may have found a match
+!           * Check for he previous line not to end in a backslash:
+!           *       #if defined(x) && \
+!           *           defined(y)
+!           */
+!          lnum = first_lnum - 1;
+!          s = ml_get(lnum);
+!          if (*s == NUL || s[STRLEN(s) - 1] != '\\')
+!              retval = TRUE;
+!          goto done;
+!      }
+!      if (*s == ',' && cin_nocode(s + 1))
+!      {
+!          /* ',' at the end: continue looking in the next line */
+!          if (lnum >= curbuf->b_ml.ml_line_count)
+!              break;
+! 
+!          s = ml_get(++lnum);
+!      }
+!      else if (cin_iscomment(s))      /* ignore comments */
+           s = cin_skipcomment(s);
+       else
+           ++s;
+      }
+! 
+! done:
+!     if (lnum != first_lnum && sp != NULL)
+!      *sp = ml_get(first_lnum);
+! 
+!     return retval;
+  }
+  
+      static int
+***************
+*** 4829,4842 ****
+      return retval;
+  }
+  
+  /*
+   * Return TRUE if string "s" ends with the string "find", possibly followed by
+   * white space and comments.  Skip strings and comments.
+   */
+      static int
+! cin_ends_in(s, find)
+      char_u   *s;
+      char_u   *find;
+  {
+      char_u   *p = s;
+      char_u   *r;
+--- 5032,5150 ----
+      return retval;
+  }
+  
++     static int
++ cin_isbreak(p)
++     char_u  *p;
++ {
++     return (STRNCMP(p, "break", 5) == 0 && !vim_isIDc(p[5]));
++ }
++ 
++ /* Find the position of a C++ base-class declaration or
++  * constructor-initialization. eg:
++  *
++  * class MyClass :
++  *   baseClass               <-- here
++  * class MyClass : public baseClass,
++  *   anotherBaseClass        <-- here (should probably lineup ??)
++  * MyClass::MyClass(...) :
++  *   baseClass(...)          <-- here (constructor-initialization)
++  */
++     static int
++ cin_is_cpp_baseclass(line, col)
++     char_u   *line;
++     colnr_T  *col;
++ {
++     char_u   *s;
++     int              class_or_struct, lookfor_ctor_init, cpp_base_class;
++ 
++     *col = 0;
++ 
++     s = cin_skipcomment(line);
++     if (*s == NUL)
++      return FALSE;
++ 
++     cpp_base_class = lookfor_ctor_init = class_or_struct = FALSE;
++ 
++     while(*s != NUL)
++     {
++      if (s[0] == ':')
++      {
++          if (s[1] == ':')
++          {
++              /* skip double colon. It can't be a constructor
++               * initialization any more */
++              lookfor_ctor_init = FALSE;
++              s = cin_skipcomment(s + 2);
++          }
++          else if (lookfor_ctor_init || class_or_struct)
++          {
++              /* we have something found, that looks like the start of
++               * cpp-base-class-declaration or contructor-initialization */
++              cpp_base_class = TRUE;
++              lookfor_ctor_init = class_or_struct = FALSE;
++              *col = 0;
++              s = cin_skipcomment(s + 1);
++          }
++          else
++              s = cin_skipcomment(s + 1);
++      }
++      else if ((STRNCMP(s, "class", 5) == 0 && !vim_isIDc(s[5]))
++              || (STRNCMP(s, "struct", 6) == 0 && !vim_isIDc(s[6])))
++      {
++          class_or_struct = TRUE;
++          lookfor_ctor_init = FALSE;
++ 
++          if (*s == 'c')
++              s = cin_skipcomment(s + 5);
++          else
++              s = cin_skipcomment(s + 6);
++      }
++      else
++      {
++          if (s[0] == '{' || s[0] == '}' || s[0] == ';')
++          {
++              cpp_base_class = lookfor_ctor_init = class_or_struct = FALSE;
++          }
++          else if (s[0] == ')')
++          {
++              /* Constructor-initialization is assumed if we come across
++               * something like "):" */
++              class_or_struct = FALSE;
++              lookfor_ctor_init = TRUE;
++          }
++          else if (!vim_isIDc(s[0]))
++          {
++              /* if it is not an identifier, we are wrong */
++              class_or_struct = FALSE;
++              lookfor_ctor_init = FALSE;
++          }
++          else if (*col == 0)
++          {
++              /* it can't be a constructor-initialization any more */
++              lookfor_ctor_init = FALSE;
++ 
++              /* the first statement starts here: lineup with this one... */
++              if (cpp_base_class && *col == 0)
++                  *col = (colnr_T)(s - line);
++          }
++ 
++          s = cin_skipcomment(s + 1);
++      }
++     }
++ 
++     return cpp_base_class;
++ }
++ 
+  /*
+   * Return TRUE if string "s" ends with the string "find", possibly followed by
+   * white space and comments.  Skip strings and comments.
++  * Ignore "ignore" after "find" if it's not NULL.
+   */
+      static int
+! cin_ends_in(s, find, ignore)
+      char_u   *s;
+      char_u   *find;
++     char_u   *ignore;
+  {
+      char_u   *p = s;
+      char_u   *r;
+***************
+*** 4848,4854 ****
+       if (STRNCMP(p, find, len) == 0)
+       {
+           r = skipwhite(p + len);
+!          if (*r == NUL || cin_iscomment(r))
+               return TRUE;
+       }
+       if (*p != NUL)
+--- 5156,5164 ----
+       if (STRNCMP(p, find, len) == 0)
+       {
+           r = skipwhite(p + len);
+!          if (ignore != NULL && STRNCMP(r, ignore, STRLEN(ignore)) == 0)
+!              r = skipwhite(r + STRLEN(ignore));
+!          if (cin_nocode(r))
+               return TRUE;
+       }
+       if (*p != NUL)
+***************
+*** 4951,4974 ****
+  }
+  
+  /*
+!  * Set w_cursor.col to the column number of the last ')' in line "l".
+   */
+      static int
+! find_last_paren(l)
+!     char_u *l;
+  {
+!     int          i;
+!     int          retval = FALSE;
+  
+      curwin->w_cursor.col = 0;                    /* default is start of line */
+  
+      for (i = 0; l[i]; i++)
+      {
+       i = (int)(skip_string(l + i) - l);    /* ignore parens in quotes */
+!      if (l[i] == ')')
+       {
+!          curwin->w_cursor.col = i;
+!          retval = TRUE;
+       }
+      }
+      return retval;
+--- 5261,5313 ----
+  }
+  
+  /*
+!  * Return ind_maxparen corrected for the difference in line number between the
+!  * cursor position and "startpos".  This makes sure that searching for a
+!  * matching paren above the cursor line doesn't find a match because of
+!  * looking a few lines further.
+   */
+      static int
+! corr_ind_maxparen(ind_maxparen, startpos)
+!     int              ind_maxparen;
+!     pos_T    *startpos;
+  {
+!     long     n = (long)startpos->lnum - (long)curwin->w_cursor.lnum;
+! 
+!     if (n > 0 && n < ind_maxparen / 2)
+!      return ind_maxparen - (int)n;
+!     return ind_maxparen;
+! }
+! 
+! /*
+!  * Set w_cursor.col to the column number of the last unmatched ')' or '{' in
+!  * line "l".
+!  */
+!     static int
+! find_last_paren(l, start, end)
+!     char_u   *l;
+!     int              start, end;
+! {
+!     int              i;
+!     int              retval = FALSE;
+!     int              open_count = 0;
+  
+      curwin->w_cursor.col = 0;                    /* default is start of line */
+  
+      for (i = 0; l[i]; i++)
+      {
++      i = (int)(cin_skipcomment(l + i) - l); /* ignore parens in comments */
+       i = (int)(skip_string(l + i) - l);    /* ignore parens in quotes */
+!      if (l[i] == start)
+!          ++open_count;
+!      else if (l[i] == end)
+       {
+!          if (open_count > 0)
+!              --open_count;
+!          else
+!          {
+!              curwin->w_cursor.col = i;
+!              retval = TRUE;
+!          }
+       }
+      }
+      return retval;
+***************
+*** 5030,5035 ****
+--- 5369,5379 ----
+      int ind_case_code = curbuf->b_p_sw;
+  
+      /*
++      * lineup break at end of case in switch() with case label
++      */
++     int ind_case_break = 0;
++ 
++     /*
+       * spaces from the class declaration indent a scope declaration label
+       * should be located
+       */
+***************
+*** 5051,5056 ****
+--- 5395,5406 ----
+      int ind_func_type = curbuf->b_p_sw;
+  
+      /*
++      * amount a cpp base class declaration or constructor initialization
++      * should be indented
++      */
++     int ind_cpp_baseclass = curbuf->b_p_sw;
++ 
++     /*
+       * additional spaces beyond the prevailing indent a continuation line
+       * should be located
+       */
+***************
+*** 5074,5079 ****
+--- 5424,5436 ----
+      int ind_unclosed_noignore = 0;
+  
+      /*
++      * If the opening paren is the last nonwhite character on the line, and
++      * ind_unclosed_wrapped is nonzero, use this indent relative to the outer
++      * context (for very long lines).
++      */
++     int ind_unclosed_wrapped = 0;
++ 
++     /*
+       * suppress ignoring white space when lining up with the character after
+       * an unclosed parentheses.
+       */
+***************
+*** 5139,5145 ****
+--- 5496,5504 ----
+      linenr_T ourscope;
+      char_u   *l;
+      char_u   *look;
++     char_u   terminated;
+      int              lookfor;
++ #define LOOKFOR_INITIAL              0
+  #define LOOKFOR_IF           1
+  #define LOOKFOR_DO           2
+  #define LOOKFOR_CASE         3
+***************
+*** 5147,5152 ****
+--- 5506,5515 ----
+  #define LOOKFOR_TERM         5
+  #define LOOKFOR_UNTERM               6
+  #define LOOKFOR_SCOPEDECL    7
++ #define LOOKFOR_NOBREAK              8
++ #define LOOKFOR_CPP_BASECLASS        9
++ #define LOOKFOR_ENUM_OR_INIT 10
++ 
+      int              whilelevel;
+      linenr_T lnum;
+      char_u   *options;
+***************
+*** 5154,5159 ****
+--- 5517,5524 ----
+      int              divider;
+      int              n;
+      int              iscase;
++     int              lookfor_break;
++     int              cont_amount = 0;    /* amount for continuation line */
+  
+      for (options = curbuf->b_p_cino; *options; )
+      {
+***************
+*** 5201,5215 ****
+--- 5566,5583 ----
+           case '^': ind_open_left_imag = n; break;
+           case ':': ind_case = n; break;
+           case '=': ind_case_code = n; break;
++          case 'b': ind_case_break = n; break;
+           case 'p': ind_param = n; break;
+           case 't': ind_func_type = n; break;
+           case '/': ind_comment = n; break;
+           case 'c': ind_in_comment = n; break;
+           case 'C': ind_in_comment2 = n; break;
++          case 'i': ind_cpp_baseclass = n; break;
+           case '+': ind_continuation = n; break;
+           case '(': ind_unclosed = n; break;
+           case 'u': ind_unclosed2 = n; break;
+           case 'U': ind_unclosed_noignore = n; break;
++          case 'W': ind_unclosed_wrapped = n; break;
+           case 'w': ind_unclosed_whiteok = n; break;
+           case 'm': ind_matching_paren = n; break;
+           case ')': ind_maxparen = n; break;
+***************
+*** 5454,5487 ****
+        * a previous non-empty line that matches the same paren.
+        */
+       amount = -1;
+       our_paren_pos = *trypos;
+!      if (theline[0] != ')')
+       {
+!          for (lnum = cur_curpos.lnum - 1; lnum > our_paren_pos.lnum; --lnum)
+!          {
+!              l = skipwhite(ml_get(lnum));
+!              if (cin_nocode(l))          /* skip comment lines */
+!                  continue;
+!              if (cin_ispreproc(l))       /* ignore #defines, #if, etc. */
+!                  continue;
+!              curwin->w_cursor.lnum = lnum;
+  
+!              /* Skip a comment. XXX */
+!              if ((trypos = find_start_comment(ind_maxcomment)) != NULL)
+!              {
+!                  lnum = trypos->lnum + 1;
+!                  continue;
+!              }
+  
+!              /* XXX */
+!              if ((trypos = find_match_paren(ind_maxparen,
+!                                                 ind_maxcomment)) != NULL &&
+!                                       trypos->lnum == our_paren_pos.lnum &&
+!                                           trypos->col == our_paren_pos.col)
+!              {
+                   amount = get_indent_lnum(lnum);     /* XXX */
+!                  break;
+!              }
+           }
+       }
+  
+--- 5822,5861 ----
+        * a previous non-empty line that matches the same paren.
+        */
+       amount = -1;
++      cur_amount = MAXCOL;
+       our_paren_pos = *trypos;
+!      for (lnum = cur_curpos.lnum - 1; lnum > our_paren_pos.lnum; --lnum)
+       {
+!          l = skipwhite(ml_get(lnum));
+!          if (cin_nocode(l))          /* skip comment lines */
+!              continue;
+!          if (cin_ispreproc_cont(&l, &lnum))  /* ignore #defines, #if, etc. */
+!              continue;
+!          curwin->w_cursor.lnum = lnum;
+  
+!          /* Skip a comment. XXX */
+!          if ((trypos = find_start_comment(ind_maxcomment)) != NULL)
+!          {
+!              lnum = trypos->lnum + 1;
+!              continue;
+!          }
+  
+!          /* XXX */
+!          if ((trypos = find_match_paren(
+!                          corr_ind_maxparen(ind_maxparen, &cur_curpos),
+!                                                    ind_maxcomment)) != NULL
+!                  && trypos->lnum == our_paren_pos.lnum
+!                  && trypos->col == our_paren_pos.col)
+!          {
+                   amount = get_indent_lnum(lnum);     /* XXX */
+! 
+!                  if (theline[0] == ')')
+!                  {
+!                      if (our_paren_pos.lnum != lnum && cur_amount > amount)
+!                          cur_amount = amount;
+!                      amount = -1;
+!                  }
+!              break;
+           }
+       }
+  
+***************
+*** 5493,5514 ****
+       if (amount == -1)
+       {
+           amount = skip_label(our_paren_pos.lnum, &look, ind_maxcomment);
+-          cur_amount = MAXCOL;
+           if (theline[0] == ')' || ind_unclosed == 0
+                      || (!ind_unclosed_noignore && *skipwhite(look) == '('))
+           {
+               /*
+                * If we're looking at a close paren, line up right there;
+                * otherwise, line up with the next (non-white) character.
+                */
+               if (theline[0] != ')')
+               {
+!                  if (ind_unclosed_whiteok)
+                       our_paren_pos.col++;
+                   else
+                   {
+                       col = our_paren_pos.col + 1;
+-                      l = ml_get(our_paren_pos.lnum);
+                       while (vim_iswhite(l[col]))
+                           col++;
+                       if (l[col] != NUL)      /* In case of trailing space */
+--- 5867,5917 ----
+       if (amount == -1)
+       {
+           amount = skip_label(our_paren_pos.lnum, &look, ind_maxcomment);
+           if (theline[0] == ')' || ind_unclosed == 0
+                      || (!ind_unclosed_noignore && *skipwhite(look) == '('))
+           {
+               /*
+                * If we're looking at a close paren, line up right there;
+                * otherwise, line up with the next (non-white) character.
++               * When ind_unclosed_wrapped is set and the matching paren is
++               * the last nonwhite character of the line, use either the
++               * indent of the current line or the indentation of the next
++               * outer paren and add ind_unclosed_wrapped (for very long
++               * lines).
+                */
+               if (theline[0] != ')')
+               {
+!                  cur_amount = MAXCOL;
+!                  l = ml_get(our_paren_pos.lnum);
+!                  if (ind_unclosed_wrapped
+!                                     && cin_ends_in(l, (char_u *)"(", NULL))
+!                  {
+!                      /* look for opening unmatched paren, indent one level
+!                       * for each additional level */
+!                      n = 1;
+!                      for (col = 0; col < our_paren_pos.col; ++col)
+!                      {
+!                          switch (l[col])
+!                          {
+!                              case '(':
+!                              case '{': ++n;
+!                                        break;
+! 
+!                              case ')':
+!                              case '}': if (n > 1)
+!                                            --n;
+!                                        break;
+!                          }
+!                      }
+! 
+!                      our_paren_pos.col = 0;
+!                      amount += n * ind_unclosed_wrapped;
+!                  }
+!                  else if (ind_unclosed_whiteok)
+                       our_paren_pos.col++;
+                   else
+                   {
+                       col = our_paren_pos.col + 1;
+                       while (vim_iswhite(l[col]))
+                           col++;
+                       if (l[col] != NUL)      /* In case of trailing space */
+***************
+*** 5522,5529 ****
+                * Find how indented the paren is, or the character after it
+                * if we did the above "if".
+                */
+!              getvcol(curwin, &our_paren_pos, &col, NULL, NULL);
+!              cur_amount = col;
+           }
+  
+           if (theline[0] == ')' && ind_matching_paren)
+--- 5925,5936 ----
+                * Find how indented the paren is, or the character after it
+                * if we did the above "if".
+                */
+!              if (our_paren_pos.col > 0)
+!              {
+!                  getvcol(curwin, &our_paren_pos, &col, NULL, NULL);
+!                  if (cur_amount > (int)col)
+!                      cur_amount = col;
+!              }
+           }
+  
+           if (theline[0] == ')' && ind_matching_paren)
+***************
+*** 5532,5538 ****
+           }
+           else if (ind_unclosed == 0 || (!ind_unclosed_noignore
+                                                 && *skipwhite(look) == '('))
+!              amount = cur_amount;
+           else
+           {
+               /* add ind_unclosed2 for each '(' before our matching one */
+--- 5939,5948 ----
+           }
+           else if (ind_unclosed == 0 || (!ind_unclosed_noignore
+                                                 && *skipwhite(look) == '('))
+!          {
+!              if (cur_amount != MAXCOL)
+!                  amount = cur_amount;
+!          }
+           else
+           {
+               /* add ind_unclosed2 for each '(' before our matching one */
+***************
+*** 5622,5629 ****
+            * matching it will take us back to the start of the line.
+            */
+           lnum = ourscope;
+!          if (find_last_paren(start) &&
+!                  (trypos = find_match_paren(ind_maxparen,
+                                                    ind_maxcomment)) != NULL)
+               lnum = trypos->lnum;
+  
+--- 6032,6039 ----
+            * matching it will take us back to the start of the line.
+            */
+           lnum = ourscope;
+!          if (find_last_paren(start, '(', ')')
+!                  && (trypos = find_match_paren(ind_maxparen,
+                                                    ind_maxcomment)) != NULL)
+               lnum = trypos->lnum;
+  
+***************
+*** 5662,5674 ****
+            * If we're looking at a "while", try to find a "do"
+            * to match it with.
+            */
+!          lookfor = 0;
+           if (cin_iselse(theline))
+               lookfor = LOOKFOR_IF;
+           else if (cin_iswhileofdo(theline, cur_curpos.lnum, ind_maxparen))
+                                                                   /* XXX */
+               lookfor = LOOKFOR_DO;
+!          if (lookfor)
+           {
+               curwin->w_cursor.lnum = cur_curpos.lnum;
+               if (find_match(lookfor, ourscope, ind_maxparen,
+--- 6072,6084 ----
+            * If we're looking at a "while", try to find a "do"
+            * to match it with.
+            */
+!          lookfor = LOOKFOR_INITIAL;
+           if (cin_iselse(theline))
+               lookfor = LOOKFOR_IF;
+           else if (cin_iswhileofdo(theline, cur_curpos.lnum, ind_maxparen))
+                                                                   /* XXX */
+               lookfor = LOOKFOR_DO;
+!          if (lookfor != LOOKFOR_INITIAL)
+           {
+               curwin->w_cursor.lnum = cur_curpos.lnum;
+               if (find_match(lookfor, ourscope, ind_maxparen,
+***************
+*** 5709,5714 ****
+--- 6119,6126 ----
+               }
+           }
+  
++          lookfor_break = FALSE;
++ 
+           if (cin_iscase(theline))    /* it's a switch() label */
+           {
+               lookfor = LOOKFOR_CASE; /* find a previous switch() label */
+***************
+*** 5721,5727 ****
+           }
+           else
+           {
+!              lookfor = LOOKFOR_ANY;
+               amount += ind_level;    /* ind_level from start of block */
+           }
+           scope_amount = amount;
+--- 6133,6142 ----
+           }
+           else
+           {
+!              if (ind_case_break && cin_isbreak(theline))     /* break; ... */
+!                  lookfor_break = TRUE;
+! 
+!              lookfor = LOOKFOR_INITIAL;
+               amount += ind_level;    /* ind_level from start of block */
+           }
+           scope_amount = amount;
+***************
+*** 5747,5755 ****
+                */
+               if (curwin->w_cursor.lnum <= ourscope)
+               {
+!                  if (lookfor == LOOKFOR_UNTERM)
+!                      amount += ind_continuation;
+!                  else if (lookfor != LOOKFOR_TERM)
+                   {
+                       amount = scope_amount;
+                       if (theline[0] == '{')
+--- 6162,6282 ----
+                */
+               if (curwin->w_cursor.lnum <= ourscope)
+               {
+!                  /* we reached end of scope:
+!                   * if looking for a enum or structure initialization
+!                   * go further back:
+!                   * if it is an initializer (enum xxx or xxx =), then
+!                   * don't add ind_continuation, otherwise it is a variable
+!                   * declaration:
+!                   * int x,
+!                   *     here; <-- add ind_continuation
+!                   */
+!                  if (lookfor == LOOKFOR_ENUM_OR_INIT)
+!                  {
+!                      if (curwin->w_cursor.lnum == 0
+!                              || curwin->w_cursor.lnum
+!                                                  < ourscope - ind_maxparen)
+!                      {
+!                          /* nothing found (abuse ind_maxparen as limit)
+!                           * assume terminated line (i.e. a variable
+!                           * initialization) */
+!                          if (cont_amount > 0)
+!                              amount = cont_amount;
+!                          else
+!                              amount += ind_continuation;
+!                          break;
+!                      }
+! 
+!                      l = ml_get_curline();
+! 
+!                      /*
+!                       * If we're in a comment now, skip to the start of the
+!                       * comment.
+!                       */
+!                      trypos = find_start_comment(ind_maxcomment);
+!                      if (trypos != NULL)
+!                      {
+!                          curwin->w_cursor.lnum = trypos->lnum + 1;
+!                          continue;
+!                      }
+! 
+!                      /*
+!                       * Skip preprocessor directives and blank lines.
+!                       */
+!                      if (cin_ispreproc_cont(&l, &curwin->w_cursor.lnum))
+!                          continue;
+! 
+!                      if (cin_nocode(l))
+!                          continue;
+! 
+!                      /*
+!                       * If we are at top level and the line looks like a
+!                       * function declaration, we are done
+!                       * (it's a variable declaration).
+!                       */
+!                      if (start_brace != BRACE_IN_COL0
+!                              || !cin_isfuncdecl(&l, curwin->w_cursor.lnum))
+!                      {
+!                          terminated = cin_isterminated(l, FALSE, TRUE);
+! 
+!                          /* if the line is terminated with another ','
+!                           * it is a continued variable initialization.
+!                           * don't add extra indent.
+!                           * TODO: does not work, if  a function
+!                           * declaration is split over multiple lines:
+!                           * cin_isfuncdecl returns FALSE then.
+!                           */
+!                          if (terminated == ',')
+!                              break;
+! 
+!                          /* if it es a enum declaration or an assignment,
+!                           * we are done.
+!                           */
+!                          if (terminated != ';' && cin_isinit())
+!                              break;
+! 
+!                          /* nothing useful found */
+!                          if (terminated == 0 || terminated == '{')
+!                              continue;
+!                      }
+! 
+!                      /* Skip parens and braces. Position the cursor over
+!                       * the rightmost paren, so that matching it will take
+!                       * us back to the start of the line.
+!                       */                                     /* XXX */
+!                      trypos = NULL;
+!                      if (find_last_paren(l, '(', ')'))
+!                          trypos = find_match_paren(ind_maxparen,
+!                                                            ind_maxcomment);
+! 
+!                      if (trypos == NULL && find_last_paren(l, '{', '}'))
+!                          trypos = find_start_brace(ind_maxcomment);
+! 
+!                      if (trypos != NULL)
+!                      {
+!                          curwin->w_cursor.lnum = trypos->lnum + 1;
+!                          continue;
+!                      }
+! 
+!                      /* it's a variable declaration, add indentation
+!                       * like in
+!                       * int a,
+!                       *    b;
+!                       */
+!                      if (cont_amount > 0)
+!                          amount = cont_amount;
+!                      else
+!                          amount += ind_continuation;
+!                  }
+!                  else if (lookfor == LOOKFOR_UNTERM)
+!                  {
+!                      if (cont_amount > 0)
+!                          amount = cont_amount;
+!                      else
+!                          amount += ind_continuation;
+!                  }
+!                  else if (lookfor != LOOKFOR_TERM
+!                                        && lookfor != LOOKFOR_CPP_BASECLASS)
+                   {
+                       amount = scope_amount;
+                       if (theline[0] == '{')
+***************
+*** 5776,5781 ****
+--- 6303,6313 ----
+               iscase = cin_iscase(l);
+               if (iscase || cin_isscopedecl(l))
+               {
++                  /* we are only looking for cpp base class
++                   * declaration/initialization any longer */
++                  if (lookfor == LOOKFOR_CPP_BASECLASS)
++                      break;
++ 
+                   /* When looking for a "do" we are not interested in
+                    * labels. */
+                   if (whilelevel > 0)
+***************
+*** 5786,5794 ****
+                    *      c = 99 +        <- this indent plus continuation
+                    *->           here;
+                    */
+!                  if (lookfor == LOOKFOR_UNTERM)
+                   {
+!                      amount += ind_continuation;
+                       break;
+                   }
+  
+--- 6318,6330 ----
+                    *      c = 99 +        <- this indent plus continuation
+                    *->           here;
+                    */
+!                  if (lookfor == LOOKFOR_UNTERM
+!                                         || lookfor == LOOKFOR_ENUM_OR_INIT)
+                   {
+!                      if (cont_amount > 0)
+!                          amount = cont_amount;
+!                      else
+!                          amount += ind_continuation;
+                       break;
+                   }
+  
+***************
+*** 5798,5803 ****
+--- 6334,6340 ----
+                    *  case yy:
+                    */
+                   if (       (iscase && lookfor == LOOKFOR_CASE)
++                          || (iscase && lookfor_break)
+                           || (!iscase && lookfor == LOOKFOR_SCOPEDECL))
+                   {
+                       /*
+***************
+*** 5829,5835 ****
+                   {
+                       if (n)
+                           amount = n;
+!                      break;
+                   }
+  
+                   /*
+--- 6366,6374 ----
+                   {
+                       if (n)
+                           amount = n;
+! 
+!                      if (!lookfor_break)
+!                          break;
+                   }
+  
+                   /*
+***************
+*** 5858,5873 ****
+                    */
+                   scope_amount = get_indent() + (iscase    /* XXX */
+                                       ? ind_case_code : ind_scopedecl_code);
+!                  lookfor = LOOKFOR_ANY;
+                   continue;
+               }
+  
+               /*
+                * Looking for a switch() label or C++ scope declaration,
+!               * ignore other lines.
+                */
+               if (lookfor == LOOKFOR_CASE || lookfor == LOOKFOR_SCOPEDECL)
+                   continue;
+  
+               /*
+                * Ignore jump labels with nothing after them.
+--- 6397,6417 ----
+                    */
+                   scope_amount = get_indent() + (iscase    /* XXX */
+                                       ? ind_case_code : ind_scopedecl_code);
+!                  lookfor = ind_case_break ? LOOKFOR_NOBREAK : LOOKFOR_ANY;
+                   continue;
+               }
+  
+               /*
+                * Looking for a switch() label or C++ scope declaration,
+!               * ignore other lines, skip {}-blocks.
+                */
+               if (lookfor == LOOKFOR_CASE || lookfor == LOOKFOR_SCOPEDECL)
++              {
++                  if (find_last_paren(l, '{', '}') && (trypos =
++                                  find_start_brace(ind_maxcomment)) != NULL)
++                      curwin->w_cursor.lnum = trypos->lnum + 1;
+                   continue;
++              }
+  
+               /*
+                * Ignore jump labels with nothing after them.
+***************
+*** 5886,5898 ****
+                * unlocked it)
+                */
+               l = ml_get_curline();
+!              if (cin_ispreproc(l) || cin_nocode(l))
+                   continue;
+  
+               /*
+                * What happens next depends on the line being terminated.
+                */
+!              if (!cin_isterminated(l, FALSE))
+               {
+                   /*
+                    * if we're in the middle of a paren thing,
+--- 6430,6496 ----
+                * unlocked it)
+                */
+               l = ml_get_curline();
+!              if (cin_ispreproc_cont(&l, &curwin->w_cursor.lnum)
+!                                                           || cin_nocode(l))
+                   continue;
+  
+               /*
++               * Are we at the start of a cpp base class declaration or
++               * constructor initialization?
++               */                                                 /* XXX */
++              if (lookfor != LOOKFOR_TERM && ind_cpp_baseclass
++                                           && cin_is_cpp_baseclass(l, &col))
++              {
++                  if (lookfor == LOOKFOR_UNTERM)
++                  {
++                      if (cont_amount > 0)
++                          amount = cont_amount;
++                      else
++                          amount += ind_continuation;
++                  }
++                  else if (col == 0 || theline[0] == '{')
++                  {
++                      amount = get_indent();
++                      if (find_last_paren(l, '(', ')')
++                              && (trypos = find_match_paren(ind_maxparen,
++                                      ind_maxcomment)) != NULL)
++                          amount = get_indent_lnum(trypos->lnum); /* XXX */
++                      if (theline[0] != '{')
++                          amount += ind_cpp_baseclass;
++                  }
++                  else
++                  {
++                      curwin->w_cursor.col = col;
++                      getvcol(curwin, &curwin->w_cursor, &col, NULL, NULL);
++                      amount = (int)col;
++                  }
++                  break;
++              }
++              else if (lookfor == LOOKFOR_CPP_BASECLASS)
++              {
++                  /* only look, whether there is a cpp base class
++                   * declaration or initialization before the opening brace. */
++                  if (cin_isterminated(l, TRUE, FALSE))
++                      break;
++                  else
++                      continue;
++              }
++ 
++              /*
+                * What happens next depends on the line being terminated.
++               * If terminated with a ',' only consider it terminating if
++               * there is anoter unterminated statement behind, eg:
++               *   123,
++               *   sizeof
++               *        here
++               * Otherwise check whether it is a enumeration or structure
++               * initialisation (not indented) or a variable declaration
++               * (indented).
+                */
+!              terminated = cin_isterminated(l, FALSE, TRUE);
+! 
+!              if (terminated == 0 || (lookfor != LOOKFOR_UNTERM
+!                                                      && terminated == ','))
+               {
+                   /*
+                    * if we're in the middle of a paren thing,
+***************
+*** 5905,5913 ****
+                    * position the cursor over the rightmost paren, so that
+                    * matching it will take us back to the start of the line.
+                    */
+!                  (void)find_last_paren(l);
+!                  if ((trypos = find_match_paren(ind_maxparen,
+!                                                   ind_maxcomment)) != NULL)
+                   {
+                       /*
+                        * Check if we are on a case label now.  This is
+--- 6503,6521 ----
+                    * position the cursor over the rightmost paren, so that
+                    * matching it will take us back to the start of the line.
+                    */
+!                  (void)find_last_paren(l, '(', ')');
+!                  trypos = find_match_paren(
+!                               corr_ind_maxparen(ind_maxparen, &cur_curpos),
+!                                                            ind_maxcomment);
+! 
+!                  /*
+!                   * If we are looking for ',', we also look for matching
+!                   * braces.
+!                   */
+!                  if (trypos == NULL && find_last_paren(l, '{', '}'))
+!                      trypos = find_start_brace(ind_maxcomment);
+! 
+!                  if (trypos != NULL)
+                   {
+                       /*
+                        * Check if we are on a case label now.  This is
+***************
+*** 5925,5930 ****
+--- 6533,6556 ----
+                   }
+  
+                   /*
++                   * Skip over continuation lines to find the one to get the
++                   * indent from
++                   * char *usethis = "bla\
++                   *           bla",
++                   *      here;
++                   */
++                  if (terminated == ',')
++                  {
++                      while (curwin->w_cursor.lnum > 1)
++                      {
++                          l = ml_get(curwin->w_cursor.lnum - 1);
++                          if (*l == NUL || l[STRLEN(l) - 1] != '\\')
++                              break;
++                          --curwin->w_cursor.lnum;
++                      }
++                  }
++ 
++                  /*
+                    * Get indent and pointer to text for current line,
+                    * ignoring any jump label.     XXX
+                    */
+***************
+*** 5938,5944 ****
+                    * ->       {
+                    *          }
+                    */
+!                  if (lookfor != LOOKFOR_TERM && theline[0] == '{')
+                   {
+                       amount = cur_amount;
+                       /*
+--- 6564,6571 ----
+                    * ->       {
+                    *          }
+                    */
+!                  if (terminated != ',' && lookfor != LOOKFOR_TERM
+!                                                       && theline[0] == '{')
+                   {
+                       amount = cur_amount;
+                       /*
+***************
+*** 5950,5955 ****
+--- 6577,6590 ----
+                        */
+                       if (*skipwhite(l) != '{')
+                           amount += ind_open_extra;
++ 
++                      if (ind_cpp_baseclass)
++                      {
++                          /* have to look back, whether it is a cpp base
++                           * class declaration or initialization */
++                          lookfor = LOOKFOR_CPP_BASECLASS;
++                          continue;
++                      }
+                       break;
+                   }
+  
+***************
+*** 5966,5974 ****
+                        *          100 +
+                        * ->           here;
+                        */
+!                      if (lookfor == LOOKFOR_UNTERM)
+                       {
+!                          amount += ind_continuation;
+                           break;
+                       }
+  
+--- 6601,6613 ----
+                        *          100 +
+                        * ->           here;
+                        */
+!                      if (lookfor == LOOKFOR_UNTERM
+!                                         || lookfor == LOOKFOR_ENUM_OR_INIT)
+                       {
+!                          if (cont_amount > 0)
+!                              amount = cont_amount;
+!                          else
+!                              amount += ind_continuation;
+                           break;
+                       }
+  
+***************
+*** 6040,6056 ****
+                        * ->       here;
+                        */
+                       if (lookfor == LOOKFOR_UNTERM)
+                           break;
+  
+!                      /*
+!                       * Found first unterminated line on a row, may line up
+!                       * with this line, remember its indent
+!                       *          100 +
+!                       * ->       here;
+!                       */
+!                      amount = cur_amount;
+!                      if (lookfor != LOOKFOR_TERM)
+!                          lookfor = LOOKFOR_UNTERM;
+                   }
+               }
+  
+--- 6679,6750 ----
+                        * ->       here;
+                        */
+                       if (lookfor == LOOKFOR_UNTERM)
++                      {
++                          /* When line ends in a comma add extra indent */
++                          if (terminated == ',')
++                              amount += ind_continuation;
+                           break;
++                      }
+  
+!                      if (lookfor == LOOKFOR_ENUM_OR_INIT)
+!                      {
+!                          /* Found two lines ending in ',', lineup with the
+!                           * lowest one, but check for cpp base class
+!                           * declaration/initialization, if it is an
+!                           * opening brace or we are looking just for
+!                           * enumerations/initializations. */
+!                          if (terminated == ',')
+!                          {
+!                              if (ind_cpp_baseclass == 0)
+!                                  break;
+! 
+!                              lookfor = LOOKFOR_CPP_BASECLASS;
+!                              continue;
+!                          }
+! 
+!                          /* Ignore unterminated lines in between, but
+!                           * reduce indent. */
+!                          if (amount > cur_amount)
+!                              amount = cur_amount;
+!                      }
+!                      else
+!                      {
+!                          /*
+!                           * Found first unterminated line on a row, may
+!                           * line up with this line, remember its indent
+!                           *      100 +
+!                           * ->           here;
+!                           */
+!                          amount = cur_amount;
+! 
+!                          /*
+!                           * If previous line ends in ',', check whether we
+!                           * are in an initialization or enum
+!                           * struct xxx =
+!                           * {
+!                           *      sizeof a,
+!                           *      124 };
+!                           * or a normal possible continuation line.
+!                           * but only, of no other statement has been found
+!                           * yet.
+!                           */
+!                          if (lookfor == LOOKFOR_INITIAL && terminated == ',')
+!                          {
+!                              lookfor = LOOKFOR_ENUM_OR_INIT;
+!                              cont_amount = cin_first_id_amount();
+!                          }
+!                          else
+!                          {
+!                              if (lookfor == LOOKFOR_INITIAL
+!                                      && *l != NUL
+!                                      && l[STRLEN(l) - 1] == '\\')
+!                                                              /* XXX */
+!                                  cont_amount = cin_get_equal_amount(
+!                                                     curwin->w_cursor.lnum);
+!                              if (lookfor != LOOKFOR_TERM)
+!                                  lookfor = LOOKFOR_UNTERM;
+!                          }
+!                      }
+                   }
+               }
+  
+***************
+*** 6069,6077 ****
+                    *      100 +               <- line up with this one
+                    * ->           here;
+                    */
+!                  if (lookfor == LOOKFOR_UNTERM)
+                   {
+!                      amount += ind_continuation;
+                       break;
+                   }
+  
+--- 6763,6775 ----
+                    *      100 +               <- line up with this one
+                    * ->           here;
+                    */
+!                  if (lookfor == LOOKFOR_UNTERM
+!                                         || lookfor == LOOKFOR_ENUM_OR_INIT)
+                   {
+!                      if (cont_amount > 0)
+!                          amount = cont_amount;
+!                      else
+!                          amount += ind_continuation;
+                       break;
+                   }
+  
+***************
+*** 6095,6100 ****
+--- 6793,6809 ----
+               else
+               {
+                   /*
++                   * Skip single break line, if before a switch label. It
++                   * may be lined up with the case label.
++                   */
++                  if (lookfor == LOOKFOR_NOBREAK
++                                && cin_isbreak(skipwhite(ml_get_curline())))
++                  {
++                      lookfor = LOOKFOR_ANY;
++                      continue;
++                  }
++ 
++                  /*
+                    * Handle "do {" line.
+                    */
+                   if (whilelevel > 0)
+***************
+*** 6114,6123 ****
+                    *   x = 1;
+                    *   y = foo +
+                    * ->       here;
+                    */
+!                  if (lookfor == LOOKFOR_UNTERM)
+                   {
+!                      amount += ind_continuation;
+                       break;
+                   }
+  
+--- 6823,6840 ----
+                    *   x = 1;
+                    *   y = foo +
+                    * ->       here;
++                   * or
++                   *   int x = 1;
++                   *   int foo,
++                   * ->       here;
+                    */
+!                  if (lookfor == LOOKFOR_UNTERM
+!                                         || lookfor == LOOKFOR_ENUM_OR_INIT)
+                   {
+!                      if (cont_amount > 0)
+!                          amount = cont_amount;
+!                      else
+!                          amount += ind_continuation;
+                       break;
+                   }
+  
+***************
+*** 6132,6138 ****
+                    */
+                   if (lookfor == LOOKFOR_TERM)
+                   {
+!                      if (whilelevel == 0)
+                           break;
+                   }
+  
+--- 6849,6855 ----
+                    */
+                   if (lookfor == LOOKFOR_TERM)
+                   {
+!                      if (!lookfor_break && whilelevel == 0)
+                           break;
+                   }
+  
+***************
+*** 6153,6160 ****
+                        */
+  term_again:
+                       l = ml_get_curline();
+!                      if (find_last_paren(l) &&
+!                              (trypos = find_match_paren(ind_maxparen,
+                                                    ind_maxcomment)) != NULL)
+                       {
+                           /*
+--- 6870,6877 ----
+                        */
+  term_again:
+                       l = ml_get_curline();
+!                      if (find_last_paren(l, '(', ')')
+!                              && (trypos = find_match_paren(ind_maxparen,
+                                                    ind_maxcomment)) != NULL)
+                       {
+                           /*
+***************
+*** 6254,6261 ****
+        */
+       else if (cur_curpos.lnum < curbuf->b_ml.ml_line_count
+               && !cin_nocode(theline)
+!              && cin_isfuncdecl(ml_get(cur_curpos.lnum + 1))
+!              && !cin_isterminated(theline, FALSE))
+       {
+           amount = ind_func_type;
+       }
+--- 6971,6980 ----
+        */
+       else if (cur_curpos.lnum < curbuf->b_ml.ml_line_count
+               && !cin_nocode(theline)
+!              && !cin_ends_in(theline, (char_u *)":", NULL)
+!              && !cin_ends_in(theline, (char_u *)",", NULL)
+!              && cin_isfuncdecl(NULL, cur_curpos.lnum + 1)
+!              && !cin_isterminated(theline, FALSE, TRUE))
+       {
+           amount = ind_func_type;
+       }
+***************
+*** 6283,6293 ****
+               }
+  
+               /*
+                * If the line looks like a function declaration, and we're
+                * not in a comment, put it the left margin.
+                */
+!              if (cin_isfuncdecl(theline))
+                   break;
+  
+               /*
+                * Finding the closing '}' of a previous function.  Put
+--- 7002,7092 ----
+               }
+  
+               /*
++               * Are we at the start of a cpp base class declaration or constructor
++               * initialization?
++               */                                                 /* XXX */
++              if (ind_cpp_baseclass != 0 && theline[0] != '{'
++                                           && cin_is_cpp_baseclass(l, &col))
++              {
++                  if (col == 0)
++                  {
++                      amount = get_indent() + ind_cpp_baseclass;  /* XXX */
++                      if (find_last_paren(l, '(', ')')
++                              && (trypos = find_match_paren(ind_maxparen,
++                                      ind_maxcomment)) != NULL)
++                          amount = get_indent_lnum(trypos->lnum)
++                                         + ind_cpp_baseclass;     /* XXX */
++                  }
++                  else
++                  {
++                      curwin->w_cursor.col = col;
++                      getvcol(curwin, &curwin->w_cursor, &col, NULL, NULL);
++                      amount = (int)col;
++                  }
++                  break;
++              }
++ 
++              /*
++               * Skip preprocessor directives and blank lines.
++               */
++              if (cin_ispreproc_cont(&l, &curwin->w_cursor.lnum))
++                  continue;
++ 
++              if (cin_nocode(l))
++                  continue;
++ 
++              /*
++               * If the previous line ends in ',', use one level of
++               * indentation:
++               * int foo,
++               *     bar;
++               * do this before checking for '}' in case of eg.
++               * enum foobar
++               * {
++               *   ...
++               * } foo,
++               *   bar;
++               */
++              n = 0;
++              if (cin_ends_in(l, (char_u *)",", NULL)
++                           || (*l != NUL && (n = l[STRLEN(l) - 1]) == '\\'))
++              {
++                  /* take us back to opening paren */
++                  if (find_last_paren(l, '(', ')')
++                          && (trypos = find_match_paren(ind_maxparen,
++                                                   ind_maxcomment)) != NULL)
++                      curwin->w_cursor.lnum = trypos->lnum;
++ 
++                  /* For a line ending in ',' that is a continuation line go
++                   * back to the first line with a backslash:
++                   * char *foo = "bla\
++                   *           bla",
++                   *      here;
++                   */
++                  while (n == 0 && curwin->w_cursor.lnum > 1)
++                  {
++                      l = ml_get(curwin->w_cursor.lnum - 1);
++                      if (*l == NUL || l[STRLEN(l) - 1] != '\\')
++                          break;
++                      --curwin->w_cursor.lnum;
++                  }
++ 
++                  amount = get_indent();          /* XXX */
++ 
++                  if (amount == 0)
++                      amount = cin_first_id_amount();
++                  if (amount == 0)
++                      amount = ind_continuation;
++                  break;
++              }
++ 
++              /*
+                * If the line looks like a function declaration, and we're
+                * not in a comment, put it the left margin.
+                */
+!              if (cin_isfuncdecl(NULL, cur_curpos.lnum))  /* XXX */
+                   break;
++              l = ml_get_curline();
+  
+               /*
+                * Finding the closing '}' of a previous function.  Put
+***************
+*** 6302,6325 ****
+                * char *string_array[] = { "foo",
+                *     / * x * / "b};ar" }; / * foobar * /
+                */
+!              if (cin_ends_in(l, (char_u *)"};"))
+                   break;
+  
+               /*
+-               * Skip preprocessor directives and blank lines.
+-               */
+-              if (cin_ispreproc(l))
+-                  continue;
+- 
+-              if (cin_nocode(l))
+-                  continue;
+- 
+-              /*
+                * If the PREVIOUS line is a function declaration, the current
+                * line (and the ones that follow) needs to be indented as
+                * parameters.
+                */
+!              if (cin_isfuncdecl(l))
+               {
+                   amount = ind_param;
+                   break;
+--- 7101,7115 ----
+                * char *string_array[] = { "foo",
+                *     / * x * / "b};ar" }; / * foobar * /
+                */
+!              if (cin_ends_in(l, (char_u *)"};", NULL))
+                   break;
+  
+               /*
+                * If the PREVIOUS line is a function declaration, the current
+                * line (and the ones that follow) needs to be indented as
+                * parameters.
+                */
+!              if (cin_isfuncdecl(&l, curwin->w_cursor.lnum))
+               {
+                   amount = ind_param;
+                   break;
+***************
+*** 6332,6369 ****
+                *     bar;
+                * indent_to_0 here;
+                */
+!              if (cin_ends_in(l, (char_u*)";"))
+               {
+                   l = ml_get(curwin->w_cursor.lnum - 1);
+!                  if (cin_ends_in(l, (char_u *)",")
+                           || (*l != NUL && l[STRLEN(l) - 1] == '\\'))
+                       break;
+                   l = ml_get_curline();
+               }
+  
+               /*
+-               * If the previous line ends in ',', use one level of
+-               * indentation:
+-               * int foo,
+-               *     bar;
+-               */
+-              if (cin_ends_in(l, (char_u *)",")
+-                      || (*l != NUL && l[STRLEN(l) - 1] == '\\'))
+-              {
+-                  amount = get_indent();
+-                  if (amount == 0)
+-                      amount = ind_param;
+-                  break;
+-              }
+- 
+-              /*
+                * Doesn't look like anything interesting -- so just
+                * use the indent of this line.
+                *
+                * Position the cursor over the rightmost paren, so that
+                * matching it will take us back to the start of the line.
+                */
+!              find_last_paren(l);
+  
+               if ((trypos = find_match_paren(ind_maxparen,
+                                                    ind_maxcomment)) != NULL)
+--- 7122,7144 ----
+                *     bar;
+                * indent_to_0 here;
+                */
+!              if (cin_ends_in(l, (char_u*)";", NULL))
+               {
+                   l = ml_get(curwin->w_cursor.lnum - 1);
+!                  if (cin_ends_in(l, (char_u *)",", NULL)
+                           || (*l != NUL && l[STRLEN(l) - 1] == '\\'))
+                       break;
+                   l = ml_get_curline();
+               }
+  
+               /*
+                * Doesn't look like anything interesting -- so just
+                * use the indent of this line.
+                *
+                * Position the cursor over the rightmost paren, so that
+                * matching it will take us back to the start of the line.
+                */
+!              find_last_paren(l, '(', ')');
+  
+               if ((trypos = find_match_paren(ind_maxparen,
+                                                    ind_maxcomment)) != NULL)
+***************
+*** 6375,6380 ****
+--- 7150,7174 ----
+           /* add extra indent for a comment */
+           if (cin_iscomment(theline))
+               amount += ind_comment;
++ 
++          /* add extra indent if the previous line ended in a backslash:
++           *        "asdfasdf\
++           *            here";
++           *      char *foo = "asdf\
++           *                   here";
++           */
++          if (cur_curpos.lnum > 1)
++          {
++              l = ml_get(cur_curpos.lnum - 1);
++              if (*l != NUL && l[STRLEN(l) - 1] == '\\')
++              {
++                  cur_amount = cin_get_equal_amount(cur_curpos.lnum - 1);
++                  if (cur_amount > 0)
++                      amount = cur_amount;
++                  else if (cur_amount == 0)
++                      amount += ind_continuation;
++              }
++          }
+       }
+      }
+  
+*** ../vim-6.2.503/src/testdir/test3.in        Sun May  4 13:29:30 2003
+--- src/testdir/test3.in       Mon Apr 26 16:56:42 2004
+***************
+*** 504,509 ****
+--- 504,513 ----
+       int indented;
+  {}
+  
++ char *a[] = {"aaa", "bbb",
++      "ccc", NULL};
++ // here
++ 
+  char *tab[] = {"aaa",
+       "xx", /* xx */};    /* asdf */
+  int not_indented;
+***************
+*** 523,538 ****
+--- 527,709 ----
+       bar;
+  int foo;
+  
++ #if defined(foo) \
++      && defined(bar)
+  char * xx = "asdf\
+       foo\
+       bor";
+  int x;
+  
++ char    *foo = "asdf\
++      asdf\
++      asdf",
++      *bar;
++ 
++ void f()
++ {
++ #if defined(foo) \
++      && defined(bar)
++ char    *foo = "asdf\
++      asdf\
++      asdf",
++      *bar;
++      {
++      int i;
++ char    *foo = "asdf\
++      asdf\
++      asdf",
++      *bar;
++      }
++ #endif
++ }
++ #endif
++ 
+  int y;               // comment
+               // comment
+  
+       // comment
+  
++ {
++      Constructor(int a,
++                      int b )  : BaseClass(a)
++      {
++      }
++ }
++ 
++ void foo()
++ {
++      char one,
++      two;
++      struct bla piet,
++      jan;
++      enum foo kees,
++      jannie;
++      static unsigned sdf,
++      krap;
++      unsigned int piet,
++      jan;
++      int
++      kees,
++      jan;
++ }
++ 
++ {
++      t(int f,
++                      int d);         // )
++      d();
++ }
++ 
++ Constructor::Constructor(int a,
++                          int b 
++                         )  : 
++    BaseClass(a,
++              b,
++              c),
++    mMember(b),
++ {
++ }
++ 
++ Constructor::Constructor(int a,
++                          int b )  : 
++    BaseClass(a)
++ {
++ }
++ 
++ Constructor::Constructor(int a,
++                          int b ) /*x*/ : /*x*/ BaseClass(a),
++                                                member(b)
++ {
++ }
++ 
++ class CAbc :
++    public BaseClass1,
++    protected BaseClass2
++ {
++    int Test() { return FALSE; }
++    int Test1() { return TRUE; }
++ 
++    CAbc(int a, int b )  : 
++       BaseClass(a)
++    { 
++       switch(xxx)
++       {
++          case abc:
++             asdf();
++             break;
++ 
++          case 999:
++             baer();
++             break;
++       }
++    }
++ 
++ public: // <-- this was incoreectly indented before!!
++    void testfall();
++ protected:
++    void testfall();
++ };
++ 
++ class CAbc : public BaseClass1,
++              protected BaseClass2
++ {
++ };
++ 
++ static struct
++ {
++     int a;
++     int b;
++ } variable[COUNT] =
++ {
++     {
++         123,
++         456
++     },
++      {
++         123,
++         456
++     }
++ };
++ 
++ static struct
++ {
++     int a;
++     int b;
++ } variable[COUNT] =
++ {
++     { 123, 456 },
++      { 123, 456 }
++ };
++ 
++ void asdf()          /* ind_maxparen may cause trouble here */
++ {
++      if ((0
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1)) break;
++ }
++ 
+  /* end of AUTO */
+  
+  STARTTEST
+***************
+*** 900,905 ****
+--- 1071,1195 ----
+       c1 && c2
+       )
+       foo;
++ }
++ 
++ STARTTEST
++ :set cino=b1
++ 2kdd]]=][
++ ENDTEST
++ 
++ void f()
++ {
++      switch (x)
++      {
++              case 1:
++                      a = b;
++                      break;
++              default:
++                      a = 0;
++                      break;
++      }
++ }
++ 
++ STARTTEST
++ :set cino=(0,W5
++ 2kdd]]=][
++ ENDTEST
++ 
++ void f()
++ {
++      invokeme(
++      argu,
++      ment);
++      invokeme(
++      argu,
++      ment
++      );
++      invokeme(argu,
++      ment
++      );
++ }
++ 
++ STARTTEST
++ :set cino=/6
++ 2kdd]]=][
++ ENDTEST
++ 
++ void f()
++ {
++      statement;
++              // comment 1
++      // comment 2
++ }
++ 
++ STARTTEST
++ :set cino=
++ 2kdd]]/comment 1/+1
++ ==
++ ENDTEST
++ 
++ void f()
++ {
++      statement;
++         // comment 1
++      // comment 2
++ }
++ 
++ STARTTEST
++ :set cino=g0
++ 2kdd]]=][
++ ENDTEST
++ 
++ class CAbc
++ {
++    int Test() { return FALSE; }
++ 
++ public: // comment
++    void testfall();
++ protected:
++    void testfall();
++ };
++ 
++ STARTTEST
++ :set cino=(0,W2s
++ 2kdd]]=][
++ ENDTEST
++ 
++ {
++    averylongfunctionnamelongfunctionnameaverylongfunctionname()->asd(
++          asdasdf,
++          func(asdf,
++               asdfadsf),
++          asdfasdf
++          );
++ 
++    /* those are ugly, but consequent */
++ 
++    func()->asd(asdasdf,
++                averylongfunctionname(
++                      abc,
++                      dec)->averylongfunctionname(
++                            asdfadsf,
++                            asdfasdf,
++                            asdfasdf,
++                            ),
++                func(asdfadf,
++                     asdfasdf
++                    ),
++                asdasdf
++               );
++ 
++    averylongfunctionnameaverylongfunctionnameavery()->asd(fasdf(
++                abc,
++                dec)->asdfasdfasdf(
++                      asdfadsf,
++                      asdfasdf,
++                      asdfasdf,
++                      ),
++          func(asdfadf,
++               asdfasdf),
++          asdasdf
++          );
+  }
+  
+  STARTTEST
+*** ../vim-6.2.503/src/testdir/test3.ok        Sun May  4 13:29:34 2003
+--- src/testdir/test3.ok       Mon Apr 26 16:57:16 2004
+***************
+*** 492,497 ****
+--- 492,501 ----
+       int indented;
+  {}
+  
++ char *a[] = {"aaa", "bbb",
++      "ccc", NULL};
++ // here
++ 
+  char *tab[] = {"aaa",
+       "xx", /* xx */};    /* asdf */
+  int not_indented;
+***************
+*** 511,526 ****
+       bar;
+  int foo;
+  
+  char * xx = "asdf\
+!      foo\
+!      bor";
+  int x;
+  
+  int y;               // comment
+  // comment
+  
+  // comment
+  
+  /* end of AUTO */
+  
+  
+--- 515,697 ----
+       bar;
+  int foo;
+  
++ #if defined(foo) \
++      && defined(bar)
+  char * xx = "asdf\
+!                       foo\
+!                       bor";
+  int x;
+  
++ char    *foo = "asdf\
++                              asdf\
++                              asdf",
++              *bar;
++ 
++ void f()
++ {
++ #if defined(foo) \
++      && defined(bar)
++      char    *foo = "asdf\
++                                      asdf\
++                                      asdf",
++                      *bar;
++      {
++              int i;
++              char    *foo = "asdf\
++                                              asdf\
++                                              asdf",
++                              *bar;
++      }
++ #endif
++ }
++ #endif
++ 
+  int y;               // comment
+  // comment
+  
+  // comment
+  
++ {
++      Constructor(int a,
++                      int b )  : BaseClass(a)
++      {
++      }
++ }
++ 
++ void foo()
++ {
++      char one,
++               two;
++      struct bla piet,
++                         jan;
++      enum foo kees,
++                       jannie;
++      static unsigned sdf,
++                                      krap;
++      unsigned int piet,
++                               jan;
++      int
++              kees,
++              jan;
++ }
++ 
++ {
++      t(int f,
++                      int d);         // )
++      d();
++ }
++ 
++ Constructor::Constructor(int a,
++              int b 
++              )  : 
++      BaseClass(a,
++                      b,
++                      c),
++      mMember(b),
++ {
++ }
++ 
++ Constructor::Constructor(int a,
++              int b )  : 
++      BaseClass(a)
++ {
++ }
++ 
++ Constructor::Constructor(int a,
++              int b ) /*x*/ : /*x*/ BaseClass(a),
++                                                        member(b)
++ {
++ }
++ 
++ class CAbc :
++      public BaseClass1,
++      protected BaseClass2
++ {
++      int Test() { return FALSE; }
++      int Test1() { return TRUE; }
++ 
++      CAbc(int a, int b )  : 
++              BaseClass(a)
++      { 
++              switch(xxx)
++              {
++                      case abc:
++                              asdf();
++                              break;
++ 
++                      case 999:
++                              baer();
++                              break;
++              }
++      }
++ 
++      public: // <-- this was incoreectly indented before!!
++      void testfall();
++      protected:
++      void testfall();
++ };
++ 
++ class CAbc : public BaseClass1,
++                       protected BaseClass2
++ {
++ };
++ 
++ static struct
++ {
++      int a;
++      int b;
++ } variable[COUNT] =
++ {
++      {
++              123,
++              456
++      },
++      {
++              123,
++              456
++      }
++ };
++ 
++ static struct
++ {
++      int a;
++      int b;
++ } variable[COUNT] =
++ {
++      { 123, 456 },
++      { 123, 456 }
++ };
++ 
++ void asdf()          /* ind_maxparen may cause trouble here */
++ {
++      if ((0
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1
++                              && 1)) break;
++ }
++ 
+  /* end of AUTO */
+  
+  
+***************
+*** 802,806 ****
+--- 973,1071 ----
+               c1 && c2
+       )
+               foo;
++ }
++ 
++ 
++ void f()
++ {
++      switch (x)
++      {
++              case 1:
++                      a = b;
++              break;
++              default:
++                      a = 0;
++              break;
++      }
++ }
++ 
++ 
++ void f()
++ {
++      invokeme(
++               argu,
++               ment);
++      invokeme(
++               argu,
++               ment
++               );
++      invokeme(argu,
++                       ment
++                      );
++ }
++ 
++ 
++ void f()
++ {
++      statement;
++                // comment 1
++                // comment 2
++ }
++ 
++ 
++ void f()
++ {
++      statement;
++         // comment 1
++         // comment 2
++ }
++ 
++ 
++ class CAbc
++ {
++      int Test() { return FALSE; }
++ 
++ public: // comment
++      void testfall();
++ protected:
++      void testfall();
++ };
++ 
++ 
++ {
++      averylongfunctionnamelongfunctionnameaverylongfunctionname()->asd(
++                      asdasdf,
++                      func(asdf,
++                               asdfadsf),
++                      asdfasdf
++                      );
++ 
++      /* those are ugly, but consequent */
++ 
++      func()->asd(asdasdf,
++                              averylongfunctionname(
++                                              abc,
++                                              dec)->averylongfunctionname(
++                                                              asdfadsf,
++                                                              asdfasdf,
++                                                              asdfasdf,
++                                                              ),
++                              func(asdfadf,
++                                       asdfasdf
++                                      ),
++                              asdasdf
++                         );
++ 
++      averylongfunctionnameaverylongfunctionnameavery()->asd(fasdf(
++                                      abc,
++                                      dec)->asdfasdfasdf(
++                                                      asdfadsf,
++                                                      asdfasdf,
++                                                      asdfasdf,
++                                                      ),
++                      func(asdfadf,
++                               asdfasdf),
++                      asdasdf
++                      );
+  }
+  
+*** ../vim-6.2.503/src/version.c       Mon Apr 26 12:37:27 2004
+--- src/version.c      Mon Apr 26 18:54:36 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+  {   /* Add new patch number below this line */
++ /**/
++     504,
+  /**/
+
+-- 
+`The Guide says there is an art to flying,' said Ford, `or at least a
+knack. The knack lies in learning how to throw yourself at the ground
+and miss.' He smiled weakly.
+               -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.505 b/6.2.505
new file mode 100644 (file)
index 0000000..1840231
--- /dev/null
+++ b/6.2.505
@@ -0,0 +1,78 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.505
+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 6.2.505
+Problem:    Help for -P argument is missing. (Ronald Hoellwarth)
+Solution:   Add the patch that was missing in 6.2.419.
+Files:      runtime/doc/starting.txt
+
+
+*** ../vim-6.2.504/runtime/doc/starting.txt    Sun Jun  1 12:20:35 2003
+--- runtime/doc/starting.txt   Wed Apr 14 01:44:52 2004
+***************
+*** 1,4 ****
+! *starting.txt*  For Vim version 6.2.  Last change: 2003 May 10
+  
+  
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+--- 1,4 ----
+! *starting.txt*  For Vim version 6.2.  Last change: 2004 Apr 14
+  
+  
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+***************
+*** 530,539 ****
+               restoring the session on login.  See |gui-gnome-session|
+               {not in Vi}
+  
+  -nb                                                  *-nb*
+  -nb:{hostname}:{addr}:{password}
+               Attempt connecting to Netbeans and become an editor server for
+!              it.  The second form specifies the hostname, address and
+               password for connecting to Netbeans. |netbeans-run|
+  
+  Example for using a script file to change a name in several files:
+--- 533,551 ----
+               restoring the session on login.  See |gui-gnome-session|
+               {not in Vi}
+  
++ -P {parent-title}                                    *-P*
++              Win32 only: Specify the title of the parent application.  When
++              possible, Vim will run in an MDI window inside the
++              application.
++              {parent-title} must appear in the window title of the parent
++              application.  Make sure that it is specific enough.
++ 
+  -nb                                                  *-nb*
++ -nb={fname}
+  -nb:{hostname}:{addr}:{password}
+               Attempt connecting to Netbeans and become an editor server for
+!              it.  The second form specifies a file to read connection info
+!              from.  The third form specifies the hostname, address and
+               password for connecting to Netbeans. |netbeans-run|
+  
+  Example for using a script file to change a name in several files:
+*** ../vim-6.2.504/src/version.c       Mon Apr 26 19:00:58 2004
+--- src/version.c      Tue Apr 27 10:01:51 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+  {   /* Add new patch number below this line */
++ /**/
++     505,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+29. Your phone bill comes to your doorstep in a box.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.506 b/6.2.506
new file mode 100644 (file)
index 0000000..6c67d1b
--- /dev/null
+++ b/6.2.506
@@ -0,0 +1,630 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.506 (extra)
+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 6.2.506 (extra)
+Problem:    Win32: When 'encoding' is a codepage then reading a utf-8 file
+           only works when iconv is available.  Writing a file in another
+           codepage uses the wrong kind of conversion.
+Solution:   Use internal conversion functions.  Enable reading and writing
+           files with 'fileencoding' different from 'encoding' for all valid
+           codepages and utf-8 without the need for iconv.
+Files:     src/fileio.c, src/testdir/Make_dos.mak, src/testdir/test52.in,
+           src/testdir/test52.ok
+
+
+*** ../vim-6.2.505/src/fileio.c        Sun Apr 25 16:26:29 2004
+--- src/fileio.c       Tue Apr 27 15:31:34 2004
+***************
+*** 939,947 ****
+  
+  # ifdef WIN3264
+       /*
+!       * Conversion from an MS-Windows codepage to UTF-8 is handled here.
+        */
+!      if (fio_flags == 0 && enc_utf8)
+           fio_flags = get_win_fio_flags(fenc);
+  # endif
+  
+--- 939,948 ----
+  
+  # ifdef WIN3264
+       /*
+!       * Conversion from an MS-Windows codepage to UTF-8 or another codepage
+!       * is handled with MultiByteToWideChar().
+        */
+!      if (fio_flags == 0)
+           fio_flags = get_win_fio_flags(fenc);
+  # endif
+  
+***************
+*** 1329,1388 ****
+           if (fio_flags & FIO_CODEPAGE)
+           {
+               /*
+!               * Conversion from an MS-Windows codepage to UTF-8, using
+!               * standard MS-Windows functions.
+                */
+               char_u  *ucsp;
+!              size_t  from_size;
+               int     needed;
+               char_u  *p;
+               int     u8c;
+  
+               /*
+!               * We can't tell if the last byte of an MBCS string is valid
+!               * and MultiByteToWideChar() returns zero if it isn't.
+!               * Try the whole string, and if that fails, bump the last byte
+!               * into conv_rest and try again.
+                */
+!              from_size = size;
+!              needed = MultiByteToWideChar(FIO_GET_CP(fio_flags),
+!                             MB_ERR_INVALID_CHARS, (LPCSTR)ptr, from_size,
+!                                                                   NULL, 0);
+!              if (needed == 0)
+               {
+!                  conv_rest[0] = ptr[from_size - 1];
+!                  conv_restlen = 1;
+!                  --from_size;
+                   needed = MultiByteToWideChar(FIO_GET_CP(fio_flags),
+!                             MB_ERR_INVALID_CHARS, (LPCSTR)ptr, from_size,
+                                                                    NULL, 0);
+!              }
+  
+!              /* If there really is a conversion error, try using another
+!               * conversion. */
+!              if (needed == 0)
+!                  goto rewind_retry;
+  
+!              /* Put the result of conversion to UCS-2 at the end of the
+!               * buffer, then convert from UCS-2 to UTF-8 into the start of
+!               * the buffer.  If there is not enough space just fail, there
+!               * is probably something wrong. */
+               ucsp = ptr + real_size - (needed * sizeof(WCHAR));
+               if (ucsp < ptr + size)
+                   goto rewind_retry;
+!              needed = MultiByteToWideChar(FIO_GET_CP(fio_flags),
+                                           MB_ERR_INVALID_CHARS, (LPCSTR)ptr,
+                                            from_size, (LPWSTR)ucsp, needed);
+  
+!              /* Now go from UCS-2 to UTF-8. */
+!              p = ptr;
+!              for (; needed > 0; --needed)
+!              {
+!                  u8c = *ucsp++;
+!                  u8c += (*ucsp++ << 8);
+!                  p += utf_char2bytes(u8c, p);
+               }
+-              size = p - ptr;
+           }
+           else
+  # endif
+--- 1330,1462 ----
+           if (fio_flags & FIO_CODEPAGE)
+           {
+               /*
+!               * Conversion from an MS-Windows codepage or UTF-8 to UTF-8 or
+!               * a codepage, using standard MS-Windows functions.
+!               * 1. find out how many ucs-2 characters there are.
+!               * 2. convert from 'fileencoding' to ucs-2
+!               * 3. convert from ucs-2 to 'encoding'
+                */
+               char_u  *ucsp;
+!              size_t  from_size = size;
+               int     needed;
+               char_u  *p;
+               int     u8c;
++              int     l, len;
+  
+               /*
+!               * 1. find out how many ucs-2 characters there are.
+                */
+!              if (FIO_GET_CP(fio_flags) == CP_UTF8)
+               {
+!                  /* Handle CP_UTF8 ourselves to be able to handle trailing
+!                   * bytes properly.  First find out the number of
+!                   * characters and check for trailing bytes. */
+!                  needed = 0;
+!                  p = ptr;
+!                  for (len = from_size; len > 0; len -= l)
+!                  {
+!                      l = utf_ptr2len_check_len(p, len);
+!                      if (l > len)                    /* incomplete char */
+!                      {
+!                          if (l > CONV_RESTLEN)
+!                              /* weird overlong byte sequence */
+!                              goto rewind_retry;
+!                          mch_memmove(conv_rest, p, len);
+!                          conv_restlen = len;
+!                          from_size -= len;
+!                          break;
+!                      }
+!                      if (l == 1 && *p >= 0x80)       /* illegal byte */
+!                          goto rewind_retry;
+!                      ++needed;
+!                      p += l;
+!                  }
+!              }
+!              else
+!              {
+!                  /* We can't tell if the last byte of an MBCS string is
+!                   * valid and MultiByteToWideChar() returns zero if it
+!                   * isn't.  Try the whole string, and if that fails, bump
+!                   * the last byte into conv_rest and try again. */
+                   needed = MultiByteToWideChar(FIO_GET_CP(fio_flags),
+!                               MB_ERR_INVALID_CHARS, (LPCSTR)ptr, from_size,
+                                                                    NULL, 0);
+!                  if (needed == 0)
+!                  {
+!                      conv_rest[0] = ptr[from_size - 1];
+!                      conv_restlen = 1;
+!                      --from_size;
+!                      needed = MultiByteToWideChar(FIO_GET_CP(fio_flags),
+!                               MB_ERR_INVALID_CHARS, (LPCSTR)ptr, from_size,
+!                                                                   NULL, 0);
+!                  }
+  
+!                  /* If there really is a conversion error, try using another
+!                   * conversion. */
+!                  if (needed == 0)
+!                      goto rewind_retry;
+!              }
+  
+!              /*
+!               * 2. convert from 'fileencoding' to ucs-2
+!               *
+!               * Put the result of conversion to UCS-2 at the end of the
+!               * buffer, then convert from UCS-2 to UTF-8 or "enc_codepage"
+!               * into the start of the buffer.  If there is not enough space
+!               * just fail, there is probably something wrong.
+!               */
+               ucsp = ptr + real_size - (needed * sizeof(WCHAR));
+               if (ucsp < ptr + size)
+                   goto rewind_retry;
+! 
+!              if (FIO_GET_CP(fio_flags) == CP_UTF8)
+!              {
+!                  /* Convert from utf-8 to ucs-2. */
+!                  needed = 0;
+!                  p = ptr;
+!                  for (len = from_size; len > 0; len -= l)
+!                  {
+!                      l = utf_ptr2len_check_len(p, len);
+!                      u8c = utf_ptr2char(p);
+!                      ucsp[needed * 2] = (u8c & 0xff);
+!                      ucsp[needed * 2 + 1] = (u8c >> 8);
+!                      ++needed;
+!                      p += l;
+!                  }
+!              }
+!              else
+!                  needed = MultiByteToWideChar(FIO_GET_CP(fio_flags),
+                                           MB_ERR_INVALID_CHARS, (LPCSTR)ptr,
+                                            from_size, (LPWSTR)ucsp, needed);
+  
+!              /*
+!               * 3. convert from ucs-2 to 'encoding'
+!               */
+!              if (enc_utf8)
+!              {
+!                  /* From UCS-2 to UTF-8.  Cannot fail. */
+!                  p = ptr;
+!                  for (; needed > 0; --needed)
+!                  {
+!                      u8c = *ucsp++;
+!                      u8c += (*ucsp++ << 8);
+!                      p += utf_char2bytes(u8c, p);
+!                  }
+!                  size = p - ptr;
+!              }
+!              else
+!              {
+!                  BOOL        bad = FALSE;
+! 
+!                  /* From UCS-2 to "enc_codepage". If the conversion uses
+!                   * the default character "?", the data doesn't fit in this
+!                   * encoding, so fail (unless forced). */
+!                  size = WideCharToMultiByte(enc_codepage, 0,
+!                                                      (LPCWSTR)ucsp, needed,
+!                                          (LPSTR)ptr, real_size, "?", &bad);
+!                  if (bad && !keep_dest_enc)
+!                      goto rewind_retry;
+               }
+           }
+           else
+  # endif
+***************
+*** 3442,3451 ****
+      }
+  
+  # ifdef WIN3264
+!     if (converted && wb_flags == 0 && get_win_fio_flags(fenc))
+      {
+-      wb_flags = get_win_fio_flags(fenc);
+- 
+       /* Convert UTF-8 -> UCS-2 and UCS-2 -> DBCS.  Worst-case * 4: */
+       write_info.bw_conv_buflen = bufsize * 4;
+       write_info.bw_conv_buf
+--- 3516,3523 ----
+      }
+  
+  # ifdef WIN3264
+!     if (converted && wb_flags == 0 && (wb_flags = get_win_fio_flags(fenc)) != 0)
+      {
+       /* Convert UTF-8 -> UCS-2 and UCS-2 -> DBCS.  Worst-case * 4: */
+       write_info.bw_conv_buflen = bufsize * 4;
+       write_info.bw_conv_buf
+***************
+*** 4474,4486 ****
+       else if (flags & FIO_CODEPAGE)
+       {
+           /*
+!           * Convert UTF-8 to UCS-2 and then to MS-Windows codepage.
+            */
+           char_u      *from;
+           size_t      fromlen;
+           char_u      *to;
+           int         u8c;
+           BOOL        bad = FALSE;
+  
+           if (ip->bw_restlen > 0)
+           {
+--- 4546,4560 ----
+       else if (flags & FIO_CODEPAGE)
+       {
+           /*
+!           * Convert UTF-8 or codepage to UCS-2 and then to MS-Windows
+!           * codepage.
+            */
+           char_u      *from;
+           size_t      fromlen;
+           char_u      *to;
+           int         u8c;
+           BOOL        bad = FALSE;
++          int         needed;
+  
+           if (ip->bw_restlen > 0)
+           {
+***************
+*** 4498,4535 ****
+               fromlen = len;
+           }
+  
+-          /* Convert from UTF-8 to UCS-2, to the start of the buffer.
+-           * The buffer has been allocated to be big enough. */
+           to = ip->bw_conv_buf;
+!          while (fromlen > 0)
+           {
+!              n = utf_ptr2len_check_len(from, fromlen);
+!              if (n > (int)fromlen)
+!                  break;
+!              u8c = utf_ptr2char(from);
+!              *to++ = (u8c & 0xff);
+!              *to++ = (u8c >> 8);
+!              fromlen -= n;
+!              from += n;
+!          }
+  
+!          /* copy remainder to ip->bw_rest[] to be used for the next call. */
+!          mch_memmove(ip->bw_rest, from, fromlen);
+!          ip->bw_restlen = fromlen;
+  
+-          /* Convert from UCS-2 to the codepage, using the remainder of the
+-           * conversion buffer.  If the conversion uses the default
+-           * character "0", the data doesn't fit in this encoding, so fail. */
+           fromlen = to - ip->bw_conv_buf;
+!          len = WideCharToMultiByte(FIO_GET_CP(flags), 0,
+!                  (LPCWSTR)ip->bw_conv_buf, (int)fromlen / sizeof(WCHAR),
+!                  (LPSTR)to, ip->bw_conv_buflen - fromlen, 0, &bad);
+!          if (bad)
+           {
+!              ip->bw_conv_error = TRUE;
+!              return FAIL;
+           }
+-          buf = to;
+       }
+  # endif
+  
+--- 4572,4675 ----
+               fromlen = len;
+           }
+  
+           to = ip->bw_conv_buf;
+!          if (enc_utf8)
+           {
+!              /* Convert from UTF-8 to UCS-2, to the start of the buffer.
+!               * The buffer has been allocated to be big enough. */
+!              while (fromlen > 0)
+!              {
+!                  n = utf_ptr2len_check_len(from, fromlen);
+!                  if (n > (int)fromlen)       /* incomplete byte sequence */
+!                      break;
+!                  u8c = utf_ptr2char(from);
+!                  *to++ = (u8c & 0xff);
+!                  *to++ = (u8c >> 8);
+!                  fromlen -= n;
+!                  from += n;
+!              }
+  
+!              /* Copy remainder to ip->bw_rest[] to be used for the next
+!               * call. */
+!              if (fromlen > CONV_RESTLEN)
+!              {
+!                  /* weird overlong sequence */
+!                  ip->bw_conv_error = TRUE;
+!                  return FAIL;
+!              }
+!              mch_memmove(ip->bw_rest, from, fromlen);
+!              ip->bw_restlen = fromlen;
+!          }
+!          else
+!          {
+!              /* Convert from enc_codepage to UCS-2, to the start of the
+!               * buffer.  The buffer has been allocated to be big enough. */
+!              ip->bw_restlen = 0;
+!              needed = MultiByteToWideChar(enc_codepage,
+!                                MB_ERR_INVALID_CHARS, (LPCSTR)from, fromlen,
+!                                                                   NULL, 0);
+!              if (needed == 0)
+!              {
+!                  /* When conversion fails there may be a trailing byte. */
+!                  ip->bw_restlen = 1;
+!                  needed = MultiByteToWideChar(enc_codepage,
+!                                MB_ERR_INVALID_CHARS, (LPCSTR)from, fromlen,
+!                                                                   NULL, 0);
+!                  if (needed == 0)
+!                  {
+!                      /* Conversion doesn't work. */
+!                      ip->bw_conv_error = TRUE;
+!                      return FAIL;
+!                  }
+!                  /* Save the trailing byte for the next call. */
+!                  *ip->bw_rest = from[fromlen - 1];
+!              }
+!              needed = MultiByteToWideChar(enc_codepage, MB_ERR_INVALID_CHARS,
+!                                     (LPCSTR)from, fromlen - ip->bw_restlen,
+!                                                        (LPWSTR)to, needed);
+!              if (needed == 0)
+!              {
+!                  /* Safety check: Conversion doesn't work. */
+!                  ip->bw_conv_error = TRUE;
+!                  return FAIL;
+!              }
+!              to += needed * 2;
+!          }
+  
+           fromlen = to - ip->bw_conv_buf;
+!          buf = to;
+!          if (FIO_GET_CP(flags) == CP_UTF8)
+           {
+!              /* Convert from UCS-2 to UTF-8, using the remainder of the
+!               * conversion buffer.  Fails when out of space. */
+!              for (from = ip->bw_conv_buf; fromlen > 1; fromlen -= 2)
+!              {
+!                  u8c = *from++;
+!                  u8c += (*from++ << 8);
+!                  to += utf_char2bytes(u8c, to);
+!                  if (to + 6 >= ip->bw_conv_buf + ip->bw_conv_buflen)
+!                  {
+!                      ip->bw_conv_error = TRUE;
+!                      return FAIL;
+!                  }
+!              }
+!              len = to - buf;
+!          }
+!          else
+!          {
+!              /* Convert from UCS-2 to the codepage, using the remainder of
+!               * the conversion buffer.  If the conversion uses the default
+!               * character "0", the data doesn't fit in this encoding, so
+!               * fail. */
+!              len = WideCharToMultiByte(FIO_GET_CP(flags), 0,
+!                      (LPCWSTR)ip->bw_conv_buf, (int)fromlen / sizeof(WCHAR),
+!                      (LPSTR)to, ip->bw_conv_buflen - fromlen, 0, &bad);
+!              if (bad)
+!              {
+!                  ip->bw_conv_error = TRUE;
+!                  return FAIL;
+!              }
+           }
+       }
+  # endif
+  
+***************
+*** 4775,4789 ****
+  #ifdef WIN3264
+  /*
+   * Check "ptr" for a MS-Windows codepage name and return the FIO_ flags needed
+!  * for the conversion MS-Windows can do for us.
+   */
+      static int
+  get_win_fio_flags(ptr)
+      char_u   *ptr;
+  {
+!     if (ptr[0] == 'c' && ptr[1] == 'p' && VIM_ISDIGIT(ptr[2]))
+!      return FIO_PUT_CP(atoi(ptr + 2)) | FIO_CODEPAGE;
+!     return 0;
+  }
+  #endif
+  
+--- 4915,4942 ----
+  #ifdef WIN3264
+  /*
+   * Check "ptr" for a MS-Windows codepage name and return the FIO_ flags needed
+!  * for the conversion MS-Windows can do for us.  Also accept "utf-8".
+!  * Used for conversion between 'encoding' and 'fileencoding'.
+   */
+      static int
+  get_win_fio_flags(ptr)
+      char_u   *ptr;
+  {
+!     int              cp;
+! 
+!     /* Cannot do this when 'encoding' is not utf-8 and not a codepage. */
+!     if (!enc_utf8 && enc_codepage <= 0)
+!      return 0;
+! 
+!     cp = encname2codepage(ptr);
+!     if (cp == 0)
+!     {
+!      if (STRCMP(ptr, "utf-8") == 0)
+!          cp = CP_UTF8;
+!      else
+!          return 0;
+!     }
+!     return FIO_PUT_CP(cp) | FIO_CODEPAGE;
+  }
+  #endif
+  
+*** ../vim-6.2.505/src/testdir/Make_dos.mak    Mon Mar 22 17:28:47 2004
+--- src/testdir/Make_dos.mak   Tue Apr 27 15:51:03 2004
+***************
+*** 24,30 ****
+               test15.out test17.out test18.out test21.out test26.out \
+               test30.out test31.out test32.out test33.out test34.out \
+               test37.out test38.out test39.out test40.out test41.out \
+!              test42.out
+  
+  SCRIPTS32 =  test50.out
+  
+--- 24,30 ----
+               test15.out test17.out test18.out test21.out test26.out \
+               test30.out test31.out test32.out test33.out test34.out \
+               test37.out test38.out test39.out test40.out test41.out \
+!              test42.out test52.out
+  
+  SCRIPTS32 =  test50.out
+  
+***************
+*** 51,56 ****
+--- 51,57 ----
+       -del tiny.vim
+       -del mbyte.vim
+       -del X*
++      -del viminfo
+  
+  .in.out:
+       copy $*.ok test.ok
+***************
+*** 60,62 ****
+--- 61,64 ----
+       rename test.out $*.out
+       -del X*
+       -del test.ok
++      -del viminfo
+*** ../vim-6.2.505/src/testdir/test52.in       Tue Apr 27 16:24:44 2004
+--- src/testdir/test52.in      Tue Apr 27 16:20:18 2004
+***************
+*** 0 ****
+--- 1,65 ----
++ Tests for reading and writing files with conversion for Win32.
++ 
++ STARTTEST
++ :so mbyte.vim
++ :" make this a dummy test for non-Win32 systems
++ :if !has("win32") | e! testk.ok | wq! test.out | endif
++ :"
++ :" write tests:
++ :" combine three values for 'encoding' with three values for 'fileencoding'
++ :" also write files for read tests
++ /^1
++ :set encoding=utf-8
++ :.w! ++enc=utf-8 test.out
++ :.w ++enc=cp1251 >>test.out
++ :.w ++enc=cp866 >>test.out
++ :.w! ++enc=utf-8 Xutf8
++ /^2
++ :set encoding=cp1251
++ :.w ++enc=utf-8 >>test.out
++ :.w ++enc=cp1251 >>test.out
++ :.w ++enc=cp866 >>test.out
++ :.w! ++enc=cp1251 Xcp1251
++ /^3
++ :set encoding=cp866
++ :.w ++enc=utf-8 >>test.out
++ :.w ++enc=cp1251 >>test.out
++ :.w ++enc=cp866 >>test.out
++ :.w! ++enc=cp866 Xcp866
++ :"
++ :" read three 'fileencoding's with utf-8 'encoding'
++ :set encoding=utf-8 fencs=utf-8,cp1251
++ :e Xutf8
++ :.w ++enc=utf-8 >>test.out
++ :e Xcp1251
++ :.w ++enc=utf-8 >>test.out
++ :set fencs=utf-8,cp866
++ :e Xcp866
++ :.w ++enc=utf-8 >>test.out
++ :"
++ :" read three 'fileencoding's with cp1251 'encoding'
++ :set encoding=utf-8 fencs=utf-8,cp1251
++ :e Xutf8
++ :.w ++enc=cp1251 >>test.out
++ :e Xcp1251
++ :.w ++enc=cp1251 >>test.out
++ :set fencs=utf-8,cp866
++ :e Xcp866
++ :.w ++enc=cp1251 >>test.out
++ :"
++ :" read three 'fileencoding's with cp866 'encoding'
++ :set encoding=cp866 fencs=utf-8,cp1251
++ :e Xutf8
++ :.w ++enc=cp866 >>test.out
++ :e Xcp1251
++ :.w ++enc=cp866 >>test.out
++ :set fencs=utf-8,cp866
++ :e Xcp866
++ :.w ++enc=cp866 >>test.out
++ :"
++ :qa!
++ ENDTEST
++ 
++ 1 utf-8 text: Для Vim version 6.2.  Последнее изменение: 1970 Jan 01
++ 2 cp1251 text: Äëÿ Vim version 6.2.  Ïîñëåäíåå èçìåíåíèå: 1970 Jan 01
++ 3 cp866 text: \84«ï Vim version 6.2.  \8f®á«¥¤­¥¥ ¨§¬¥­¥­¨¥: 1970 Jan 01
+*** ../vim-6.2.505/src/testdir/test52.ok       Tue Apr 27 16:24:44 2004
+--- src/testdir/test52.ok      Tue Apr 27 16:20:56 2004
+***************
+*** 0 ****
+--- 1,18 ----
++ 1 utf-8 text: Для Vim version 6.2.  Последнее изменение: 1970 Jan 01
++ 1 utf-8 text: Äëÿ Vim version 6.2.  Ïîñëåäíåå èçìåíåíèå: 1970 Jan 01
++ 1 utf-8 text: \84«ï Vim version 6.2.  \8f®á«¥¤­¥¥ ¨§¬¥­¥­¨¥: 1970 Jan 01
++ 2 cp1251 text: Для Vim version 6.2.  Последнее изменение: 1970 Jan 01
++ 2 cp1251 text: Äëÿ Vim version 6.2.  Ïîñëåäíåå èçìåíåíèå: 1970 Jan 01
++ 2 cp1251 text: \84«ï Vim version 6.2.  \8f®á«¥¤­¥¥ ¨§¬¥­¥­¨¥: 1970 Jan 01
++ 3 cp866 text: Для Vim version 6.2.  Последнее изменение: 1970 Jan 01
++ 3 cp866 text: Äëÿ Vim version 6.2.  Ïîñëåäíåå èçìåíåíèå: 1970 Jan 01
++ 3 cp866 text: \84«ï Vim version 6.2.  \8f®á«¥¤­¥¥ ¨§¬¥­¥­¨¥: 1970 Jan 01
++ 1 utf-8 text: Для Vim version 6.2.  Последнее изменение: 1970 Jan 01
++ 2 cp1251 text: Для Vim version 6.2.  Последнее изменение: 1970 Jan 01
++ 3 cp866 text: Для Vim version 6.2.  Последнее изменение: 1970 Jan 01
++ 1 utf-8 text: Äëÿ Vim version 6.2.  Ïîñëåäíåå èçìåíåíèå: 1970 Jan 01
++ 2 cp1251 text: Äëÿ Vim version 6.2.  Ïîñëåäíåå èçìåíåíèå: 1970 Jan 01
++ 3 cp866 text: Äëÿ Vim version 6.2.  Ïîñëåäíåå èçìåíåíèå: 1970 Jan 01
++ 1 utf-8 text: \84«ï Vim version 6.2.  \8f®á«¥¤­¥¥ ¨§¬¥­¥­¨¥: 1970 Jan 01
++ 2 cp1251 text: \84«ï Vim version 6.2.  \8f®á«¥¤­¥¥ ¨§¬¥­¥­¨¥: 1970 Jan 01
++ 3 cp866 text: \84«ï Vim version 6.2.  \8f®á«¥¤­¥¥ ¨§¬¥­¥­¨¥: 1970 Jan 01
+*** ../vim-6.2.505/src/version.c       Tue Apr 27 10:03:32 2004
+--- src/version.c      Tue Apr 27 16:23:35 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+  {   /* Add new patch number below this line */
++ /**/
++     506,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+34. You laugh at people with 14400 baud modems.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.507 b/6.2.507
new file mode 100644 (file)
index 0000000..1d18e63
--- /dev/null
+++ b/6.2.507
@@ -0,0 +1,264 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.507
+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 6.2.507
+Problem:    The ownership of the file with the password for the NetBeans
+            connection is not checked.  "-nb={file}" doesn't work for GTK.
+Solution:   Only accept the file when owned by the user and not accessible by
+            others.  Detect "-nb=" for GTK.
+Files:      src/netbeans.c, src/gui_gtk_x11.c
+    
+
+*** ../vim-6.2.506/src/netbeans.c      Sat Apr 17 21:14:10 2004
+--- src/netbeans.c     Tue Apr 27 18:16:51 2004
+***************
+*** 70,76 ****
+  static long get_buf_size __ARGS((buf_T *));
+  
+  static void netbeans_connect __ARGS((void));
+! static void getConnInfo __ARGS((char *file, char **host, char **port, char **password));
+  
+  static void nb_init_graphics __ARGS((void));
+  static void coloncmd __ARGS((char *cmd, ...));
+--- 70,76 ----
+  static long get_buf_size __ARGS((buf_T *));
+  
+  static void netbeans_connect __ARGS((void));
+! static int getConnInfo __ARGS((char *file, char **host, char **port, char **password));
+  
+  static void nb_init_graphics __ARGS((void));
+  static void coloncmd __ARGS((char *cmd, ...));
+***************
+*** 247,262 ****
+      char     *arg = NULL;
+  
+      if (netbeansArg[3] == '=')
+       /* "-nb=fname": Read info from specified file. */
+!      getConnInfo(netbeansArg + 4, &hostname, &address, &password);
+      else
+      {
+       if (netbeansArg[3] == ':')
+           /* "-nb:<host>:<addr>:<password>": get info from argument */
+           arg = netbeansArg + 4;
+       if (arg == NULL && (fname = getenv("__NETBEANS_CONINFO")) != NULL)
+           /* "-nb": get info from file specified in environment */
+!          getConnInfo(fname, &hostname, &address, &password);
+       else
+       {
+           if (arg != NULL)
+--- 247,269 ----
+      char     *arg = NULL;
+  
+      if (netbeansArg[3] == '=')
++     {
+       /* "-nb=fname": Read info from specified file. */
+!      if (getConnInfo(netbeansArg + 4, &hostname, &address, &password)
+!                                                                    == FAIL)
+!          return;
+!     }
+      else
+      {
+       if (netbeansArg[3] == ':')
+           /* "-nb:<host>:<addr>:<password>": get info from argument */
+           arg = netbeansArg + 4;
+       if (arg == NULL && (fname = getenv("__NETBEANS_CONINFO")) != NULL)
++      {
+           /* "-nb": get info from file specified in environment */
+!          if (getConnInfo(fname, &hostname, &address, &password) == FAIL)
+!              return;
+!      }
+       else
+       {
+           if (arg != NULL)
+***************
+*** 326,335 ****
+      server.sin_port = htons(port);
+      if ((host = gethostbyname(hostname)) == NULL)
+      {
+!      if (access(hostname, R_OK) >= 0)
+       {
+           /* DEBUG: input file */
+!          sd = open(hostname, O_RDONLY);
+           goto theend;
+       }
+       PERROR("gethostbyname() in netbeans_connect()");
+--- 333,342 ----
+      server.sin_port = htons(port);
+      if ((host = gethostbyname(hostname)) == NULL)
+      {
+!      if (mch_access(hostname, R_OK) >= 0)
+       {
+           /* DEBUG: input file */
+!          sd = mch_open(hostname, O_RDONLY, 0);
+           goto theend;
+       }
+       PERROR("gethostbyname() in netbeans_connect()");
+***************
+*** 421,463 ****
+  /*
+   * Obtain the NetBeans hostname, port address and password from a file.
+   * Return the strings in allocated memory.
+   */
+!     static void
+  getConnInfo(char *file, char **host, char **port, char **auth)
+  {
+!     FILE *fp = mch_fopen(file, "r");
+      char_u buf[BUFSIZ];
+      char_u *lp;
+      char_u *nl;
+  
+      if (fp == NULL)
+       PERROR("E660: Cannot open NetBeans connection info file");
+!     else
+      {
+!      /* Read the file. There should be one of each parameter */
+!      while ((lp = (char_u *)fgets((char *)buf, BUFSIZ, fp)) != NULL)
+!      {
+!          if ((nl = vim_strchr(lp, '\n')) != NULL)
+!              *nl = 0;            /* strip off the trailing newline */
+  
+!          if (STRNCMP(lp, "host=", 5) == 0)
+!          {
+!              vim_free(*host);
+!              *host = (char *)vim_strsave(&buf[5]);
+!          }
+!          else if (STRNCMP(lp, "port=", 5) == 0)
+!          {
+!              vim_free(*port);
+!              *port = (char *)vim_strsave(&buf[5]);
+!          }
+!          else if (STRNCMP(lp, "auth=", 5) == 0)
+!          {
+!              vim_free(*auth);
+!              *auth = (char *)vim_strsave(&buf[5]);
+!          }
+       }
+-      fclose(fp);
+      }
+  }
+  
+  
+--- 428,491 ----
+  /*
+   * Obtain the NetBeans hostname, port address and password from a file.
+   * Return the strings in allocated memory.
++  * Return FAIL if the file could not be read, OK otherwise (no matter what it
++  * contains).
+   */
+!     static int
+  getConnInfo(char *file, char **host, char **port, char **auth)
+  {
+!     FILE *fp;
+      char_u buf[BUFSIZ];
+      char_u *lp;
+      char_u *nl;
++ #ifdef UNIX
++     struct stat      st;
+  
++     /*
++      * For Unix only accept the file when it's owned by the current user and
++      * not accessible by others.
++      */
++     if (mch_stat(file, &st) == 0
++          && (st.st_uid != getuid() || (st.st_mode & 0077)))
++     {
++      EMSG2(_("E668: Ownership of NetBeans connection file invalid: \"%s\""),
++                                                                      file);
++      return FAIL;
++     }
++ #endif
++ 
++     fp = mch_fopen(file, "r");
+      if (fp == NULL)
++     {
+       PERROR("E660: Cannot open NetBeans connection info file");
+!      return FAIL;
+!     }
+! 
+!     /* Read the file. There should be one of each parameter */
+!     while ((lp = (char_u *)fgets((char *)buf, BUFSIZ, fp)) != NULL)
+      {
+!      if ((nl = vim_strchr(lp, '\n')) != NULL)
+!          *nl = 0;        /* strip off the trailing newline */
+  
+!      if (STRNCMP(lp, "host=", 5) == 0)
+!      {
+!          vim_free(*host);
+!          *host = (char *)vim_strsave(&buf[5]);
+!      }
+!      else if (STRNCMP(lp, "port=", 5) == 0)
+!      {
+!          vim_free(*port);
+!          *port = (char *)vim_strsave(&buf[5]);
+!      }
+!      else if (STRNCMP(lp, "auth=", 5) == 0)
+!      {
+!          vim_free(*auth);
+!          *auth = (char *)vim_strsave(&buf[5]);
+       }
+      }
++     fclose(fp);
++ 
++     return OK;
+  }
+  
+  
+***************
+*** 578,584 ****
+           if (file == NULL)
+               outfd = -3;
+           else
+!              outfd = open(file, O_WRONLY|O_CREAT|O_TRUNC, 0666);
+       }
+  
+       if (outfd >= 0)
+--- 606,612 ----
+           if (file == NULL)
+               outfd = -3;
+           else
+!              outfd = mch_open(file, O_WRONLY|O_CREAT|O_TRUNC, 0666);
+       }
+  
+       if (outfd >= 0)
+*** ../vim-6.2.506/src/gui_gtk_x11.c   Mon Apr  5 20:28:39 2004
+--- src/gui_gtk_x11.c  Tue Apr 27 18:00:59 2004
+***************
+*** 480,486 ****
+                   break;
+  #ifdef FEAT_NETBEANS_INTG
+               /* darn, -nb has non-standard syntax */
+!              if (argv[i][len] == ':'
+                       && (option->flags & ARG_INDEX_MASK) == ARG_NETBEANS)
+                   break;
+  #endif
+--- 480,486 ----
+                   break;
+  #ifdef FEAT_NETBEANS_INTG
+               /* darn, -nb has non-standard syntax */
+!              if (vim_strchr(":=", argv[i][len]) != NULL
+                       && (option->flags & ARG_INDEX_MASK) == ARG_NETBEANS)
+                   break;
+  #endif
+*** ../vim-6.2.506/src/version.c       Tue Apr 27 16:27:09 2004
+--- src/version.c      Tue Apr 27 21:38:31 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+  {   /* Add new patch number below this line */
++ /**/
++     507,
+  /**/
+
+-- 
+Despite the cost of living, have you noticed how it remains so popular?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.508 b/6.2.508
new file mode 100644 (file)
index 0000000..819b4f6
--- /dev/null
+++ b/6.2.508
@@ -0,0 +1,126 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.508
+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 6.2.508
+Problem:    Win32: "v:lang" does not show the current language for messages if
+           it differs from the other locale settings.
+Solution:   Use the value of the $LC_MESSAGES environment variable.
+Files:     src/ex_cmds2.c
+
+
+*** ../vim-6.2.507/src/ex_cmds2.c      Mon Apr 19 20:26:42 2004
+--- src/ex_cmds2.c     Tue Apr 27 22:26:37 2004
+***************
+*** 5489,5494 ****
+--- 5489,5527 ----
+  }
+  #endif
+  
++ #if !defined(LC_MESSAGES) \
++     && (((defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
++              && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))) \
++          || defined(FEAT_EVAL))
++ static char_u *get_mess_env __ARGS((void));
++ 
++ /*
++  * Get the language used for messages from the environment.
++  */
++     static char_u *
++ get_mess_env()
++ {
++     char_u   *p;
++ 
++     p = mch_getenv((char_u *)"LC_ALL");
++     if (p == NULL || *p == NUL)
++     {
++      p = mch_getenv((char_u *)"LC_MESSAGES");
++      if (p == NULL || *p == NUL)
++      {
++          p = mch_getenv((char_u *)"LANG");
++          if (VIM_ISDIGIT(*p))        /* ignore something like "1043" */
++              p = NULL;
++ # if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
++          if (p == NULL || *p == NUL)
++              p = (char_u *)get_locale_val(LC_CTYPE);
++ # endif
++      }
++     }
++     return p;
++ }
++ #endif
++ 
+  #if defined(FEAT_EVAL) || defined(PROTO)
+  
+  /*
+***************
+*** 5508,5516 ****
+  # endif
+      set_vim_var_string(VV_CTYPE, loc, -1);
+  
+!     /* When LC_MESSAGES isn't defined use the value from LC_CTYPE. */
+  # if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) && defined(LC_MESSAGES)
+      loc = (char_u *)get_locale_val(LC_MESSAGES);
+  # endif
+      set_vim_var_string(VV_LANG, loc, -1);
+  
+--- 5541,5552 ----
+  # endif
+      set_vim_var_string(VV_CTYPE, loc, -1);
+  
+!     /* When LC_MESSAGES isn't defined use the value from $LC_MESSAGES, fall
+!      * back to LC_CTYPE if it's empty. */
+  # if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) && defined(LC_MESSAGES)
+      loc = (char_u *)get_locale_val(LC_MESSAGES);
++ # else
++     loc = get_mess_env();
+  # endif
+      set_vim_var_string(VV_LANG, loc, -1);
+  
+***************
+*** 5573,5587 ****
+      {
+  #ifndef LC_MESSAGES
+       if (what == VIM_LC_MESSAGES)
+!      {
+!          p = mch_getenv((char_u *)"LC_ALL");
+!          if (p == NULL || *p == NUL)
+!          {
+!              p = mch_getenv((char_u *)"LC_MESSAGES");
+!              if (p == NULL || *p == NUL)
+!                  p = mch_getenv((char_u *)"LANG");
+!          }
+!      }
+       else
+  #endif
+           p = (char_u *)setlocale(what, NULL);
+--- 5609,5615 ----
+      {
+  #ifndef LC_MESSAGES
+       if (what == VIM_LC_MESSAGES)
+!          p = get_mess_env();
+       else
+  #endif
+           p = (char_u *)setlocale(what, NULL);
+*** ../vim-6.2.507/src/version.c       Tue Apr 27 21:42:53 2004
+--- src/version.c      Tue Apr 27 22:22:39 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+  {   /* Add new patch number below this line */
++ /**/
++     508,
+  /**/
+
+-- 
+Nothing is fool-proof to a sufficiently talented fool.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.509 b/6.2.509
new file mode 100644 (file)
index 0000000..e19f826
--- /dev/null
+++ b/6.2.509
@@ -0,0 +1,53 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.509
+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 6.2.509 (after 6.2.508)
+Problem:    Crash when $LANG is not set.
+Solution:   Add check for NULL pointer. (Ron Aaron)
+Files:     src/ex_cmds2.c
+
+
+*** ../vim-6.2.508/src/ex_cmds2.c      Tue Apr 27 22:27:24 2004
+--- src/ex_cmds2.c     Wed Apr 28 10:12:39 2004
+***************
+*** 5510,5517 ****
+       if (p == NULL || *p == NUL)
+       {
+           p = mch_getenv((char_u *)"LANG");
+!          if (VIM_ISDIGIT(*p))        /* ignore something like "1043" */
+!              p = NULL;
+  # if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
+           if (p == NULL || *p == NUL)
+               p = (char_u *)get_locale_val(LC_CTYPE);
+--- 5510,5517 ----
+       if (p == NULL || *p == NUL)
+       {
+           p = mch_getenv((char_u *)"LANG");
+!          if (p != NULL && VIM_ISDIGIT(*p))
+!              p = NULL;               /* ignore something like "1043" */
+  # if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
+           if (p == NULL || *p == NUL)
+               p = (char_u *)get_locale_val(LC_CTYPE);
+*** ../vim-6.2.508/src/version.c       Tue Apr 27 22:27:24 2004
+--- src/version.c      Wed Apr 28 12:01:15 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+  {   /* Add new patch number below this line */
++ /**/
++     509,
+  /**/
+
+-- 
+Don't read everything you believe.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.510 b/6.2.510
new file mode 100644 (file)
index 0000000..302bbc0
--- /dev/null
+++ b/6.2.510
@@ -0,0 +1,52 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.510
+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 6.2.510 (after 6.2.507)
+Problem:    Warning for pointer conversion.
+Solution:   Add a type cast.
+Files:     src/gui_gtk_x11.c
+
+
+*** ../vim-6.2.509/src/gui_gtk_x11.c   Tue Apr 27 21:42:53 2004
+--- src/gui_gtk_x11.c  Wed Apr 28 16:12:48 2004
+***************
+*** 480,486 ****
+                   break;
+  #ifdef FEAT_NETBEANS_INTG
+               /* darn, -nb has non-standard syntax */
+!              if (vim_strchr(":=", argv[i][len]) != NULL
+                       && (option->flags & ARG_INDEX_MASK) == ARG_NETBEANS)
+                   break;
+  #endif
+--- 480,486 ----
+                   break;
+  #ifdef FEAT_NETBEANS_INTG
+               /* darn, -nb has non-standard syntax */
+!              if (vim_strchr((char_u *)":=", argv[i][len]) != NULL
+                       && (option->flags & ARG_INDEX_MASK) == ARG_NETBEANS)
+                   break;
+  #endif
+*** ../vim-6.2.509/src/version.c       Wed Apr 28 12:02:26 2004
+--- src/version.c      Wed Apr 28 16:14:10 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+  {   /* Add new patch number below this line */
++ /**/
++     510,
+  /**/
+
+-- 
+George:  "I just got a new set of golf clubs for my wife!"
+  John:  "Great trade!"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.511 b/6.2.511
new file mode 100644 (file)
index 0000000..8f308b1
--- /dev/null
+++ b/6.2.511
@@ -0,0 +1,845 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.511
+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 6.2.511
+Problem:    Tags in Russian help files are in utf-8 encoding, which may be
+           different from 'encoding'.
+Solution:   Use the "TAG_FILE_ENCODING" field in the tags file to specify the
+           encoding of the tags.  Convert help tags from 'encoding' to the
+           tag file encoding when searching for matches, do the reverse when
+           listing help tags.
+Files:     runtime/doc/tagsrch.txt, src/ex_cmds.c, src/tag.c
+
+
+*** ../vim-6.2.510/runtime/doc/tagsrch.txt     Sun Jun  1 12:20:35 2003
+--- runtime/doc/tagsrch.txt    Wed Apr 28 11:58:29 2004
+***************
+*** 1,4 ****
+! *tagsrch.txt*   For Vim version 6.2.  Last change: 2003 May 18
+  
+  
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+--- 1,4 ----
+! *tagsrch.txt*   For Vim version 6.2.  Last change: 2004 Apr 28
+  
+  
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+***************
+*** 546,565 ****
+  The first lines in the tags file can contain lines that start with
+       !_TAG_
+  These are sorted to the first lines, only rare tags that start with "!" can
+! sort to before them.  Vim only recognizes the line that indicates if the file
+! was sorted.  When this line is found, Vim uses binary searching for the tags
+! file: >
+!      !_TAG_FILE_SORTED<Tab>1
+! <
+  A tag file may be case-fold sorted to avoid a linear search when 'ignorecase'
+! is on.  See 'tagbsearch' for details.  The value '2' should be used then: >
+!      !_TAG_FILE_SORTED<Tab>2
+! <
+                                                       *tag-search*
+  The command can be any Ex command, but often it is a search command.
+! Examples: >
+!      tag1    file1   /^main(argc, argv)/
+!      tag2    file2   108
+  
+  The command is always executed with 'magic' not set.  The only special
+  characters in a search pattern are "^" (begin-of-line) and "$" (<EOL>).
+--- 548,575 ----
+  The first lines in the tags file can contain lines that start with
+       !_TAG_
+  These are sorted to the first lines, only rare tags that start with "!" can
+! sort to before them.  Vim recognizes two items.  The first one is the line
+! that indicates if the file was sorted.  When this line is found, Vim uses
+! binary searching for the tags file:
+!      !_TAG_FILE_SORTED<Tab>1 ~
+! 
+  A tag file may be case-fold sorted to avoid a linear search when 'ignorecase'
+! is on.  See 'tagbsearch' for details.  The value '2' should be used then:
+!      !_TAG_FILE_SORTED<Tab>2 ~
+! 
+! The other tag that Vim recognizes, but only when compiled with the
+! |+multi_byte| feature, is the encoding of the tags file:
+!      !_TAG_FILE_ENCODING<Tab>utf-8 ~
+! Here "utf-8" is the encoding used for the tags.  Vim will then convert the tag
+! being searched for from 'encoding' to the encoding of the tags file.  And when
+! listing tags the reverse happens.  When the conversion fails the unconverted
+! tag is used.
+! 
+                                                       *tag-search*
+  The command can be any Ex command, but often it is a search command.
+! Examples:
+!      tag1    file1   /^main(argc, argv)/ ~
+!      tag2    file2   108 ~
+  
+  The command is always executed with 'magic' not set.  The only special
+  characters in a search pattern are "^" (begin-of-line) and "$" (<EOL>).
+*** ../vim-6.2.510/src/ex_cmds.c       Mon Apr 19 20:26:42 2004
+--- src/ex_cmds.c      Wed Apr 28 15:02:02 2004
+***************
+*** 5275,5280 ****
+--- 5275,5285 ----
+      char_u   *s;
+      int              i;
+      char_u   *fname;
++ # ifdef FEAT_MBYTE
++     int              utf8 = MAYBE;
++     int              this_utf8;
++     int              firstline;
++ # endif
+  
+      /*
+       * Find all *.txt files.
+***************
+*** 5342,5349 ****
+--- 5347,5375 ----
+       }
+       fname = gettail(files[fi]);
+  
++ # ifdef FEAT_MBYTE
++      firstline = TRUE;
++ # endif
+       while (!vim_fgets(IObuff, IOSIZE, fd) && !got_int)
+       {
++ # ifdef FEAT_MBYTE
++          if (firstline)
++          {
++              /* Detect utf-8 file by a non-ASCII char in the first line. */
++              this_utf8 = FALSE;
++              for (s = IObuff; *s != NUL; ++s)
++                  if (*s >= 0x80)
++                      this_utf8 = TRUE;
++              if (utf8 == MAYBE)
++                  utf8 = this_utf8;
++              else if (utf8 != this_utf8)
++              {
++                  EMSG2(_("E670: Mix of help file encodings within a language: %s"), files[fi]);
++                  got_int = TRUE;
++              }
++              firstline = FALSE;
++          }
++ # endif
+           p1 = vim_strchr(IObuff, '*');       /* find first '*' */
+           while (p1 != NULL)
+           {
+***************
+*** 5426,5431 ****
+--- 5452,5462 ----
+               ++p2;
+           }
+       }
++ 
++ # ifdef FEAT_MBYTE
++      if (utf8 == TRUE)
++          fprintf(fd_tags, "!_TAG_FILE_ENCODING\tutf-8\t//\n");
++ # endif
+  
+       /*
+        * Write the tags into the file.
+*** ../vim-6.2.510/src/tag.c   Mon Apr 19 20:26:43 2004
+--- src/tag.c  Wed Apr 28 14:39:14 2004
+***************
+*** 1005,1010 ****
+--- 1005,1060 ----
+  #endif
+  
+  /*
++  * Structure to hold info about the tag pattern being used.
++  */
++ typedef struct
++ {
++     char_u   *pat;           /* the pattern */
++     int              len;            /* length of pat[] */
++     char_u   *head;          /* start of pattern head */
++     int              headlen;        /* length of head[] */
++     regmatch_T       regmatch;       /* regexp program, may be NULL */
++ } pat_T;
++ 
++ static void prepare_pats __ARGS((pat_T *pats, int has_re));
++ 
++ /*
++  * Extract info from the tag search pattern "pats->pat".
++  */
++     static void
++ prepare_pats(pats, has_re)
++     pat_T    *pats;
++     int              has_re;
++ {
++     pats->head = pats->pat;
++     pats->headlen = pats->len;
++     if (has_re)
++     {
++      /* When the pattern starts with '^' or "\\<", binary searching can be
++       * used (much faster). */
++      if (pats->pat[0] == '^')
++          pats->head = pats->pat + 1;
++      else if (pats->pat[0] == '\\' && pats->pat[1] == '<')
++          pats->head = pats->pat + 2;
++      if (pats->head == pats->pat)
++          pats->headlen = 0;
++      else
++          for (pats->headlen = 0; pats->head[pats->headlen] != NUL;
++                                                            ++pats->headlen)
++              if (vim_strchr((char_u *)(p_magic ? ".[~*\\$" : "\\$"),
++                                         pats->head[pats->headlen]) != NULL)
++                  break;
++      if (p_tl != 0 && pats->headlen > p_tl)  /* adjust for 'taglength' */
++          pats->headlen = p_tl;
++     }
++ 
++     if (has_re)
++      pats->regmatch.regprog = vim_regcomp(pats->pat, p_magic ? RE_MAGIC : 0);
++     else
++      pats->regmatch.regprog = NULL;
++ }
++ 
++ /*
+   * find_tags() - search for tags in tags files
+   *
+   * Return FAIL if search completely failed (*num_matches will be 0, *matchesp
+***************
+*** 1053,1059 ****
+      char_u   *p;
+      char_u   *s;
+      int              i;
+-     regmatch_T       regmatch;               /* regexp program may be NULL */
+  #ifdef FEAT_TAG_BINS
+      struct tag_search_info   /* Binary search file offsets */
+      {
+--- 1103,1108 ----
+***************
+*** 1124,1132 ****
+      char_u   *saved_pat = NULL;              /* copy of pat[] */
+  #endif
+  
+!     int              patlen;                         /* length of pat[] */
+!     char_u   *pathead;                       /* start of pattern head */
+!     int              patheadlen;                     /* length of pathead[] */
+  #ifdef FEAT_TAG_BINS
+      int              findall = (mincount == MAXCOL || mincount == TAG_MANY);
+                                               /* find all matching tags */
+--- 1173,1188 ----
+      char_u   *saved_pat = NULL;              /* copy of pat[] */
+  #endif
+  
+!     /* Use two sets of variables for the pattern: "orgpat" holds the values
+!      * for the original pattern and "convpat" converted from 'encoding' to
+!      * encoding of the tags file.  "pats" point to either one of these. */
+!     pat_T    *pats;
+!     pat_T    orgpat;                 /* holds unconverted pattern info */
+! #ifdef FEAT_MBYTE
+!     pat_T    convpat;                /* holds converted pattern info */
+!     vimconv_T        vimconv;
+! #endif
+! 
+  #ifdef FEAT_TAG_BINS
+      int              findall = (mincount == MAXCOL || mincount == TAG_MANY);
+                                               /* find all matching tags */
+***************
+*** 1146,1151 ****
+--- 1202,1212 ----
+      int              verbose = (flags & TAG_VERBOSE);
+  
+      help_save = curbuf->b_help;
++     orgpat.pat = pat;
++     pats = &orgpat;
++ #ifdef FEAT_MBYTE
++     vimconv.vc_type = CONV_NONE;
++ #endif
+  
+  /*
+   * Allocate memory for the buffers that are used
+***************
+*** 1176,1230 ****
+      if (help_only)                           /* want tags from help file */
+       curbuf->b_help = TRUE;                  /* will be restored later */
+  
+!     patlen = (int)STRLEN(pat);
+  #ifdef FEAT_MULTI_LANG
+      if (curbuf->b_help)
+      {
+       /* When "@ab" is specified use only the "ab" language, otherwise
+        * search all languages. */
+!      if (patlen > 3 && pat[patlen - 3] == '@'
+!                                           && ASCII_ISALPHA(pat[patlen - 2])
+!                                          && ASCII_ISALPHA(pat[patlen - 1]))
+       {
+!          saved_pat = vim_strnsave(pat, patlen - 3);
+           if (saved_pat != NULL)
+           {
+!              help_lang_find = &pat[patlen - 2];
+!              pat = saved_pat;
+!              patlen -= 3;
+           }
+       }
+      }
+  #endif
+  
+!     if (p_tl != 0 && patlen > p_tl)          /* adjust for 'taglength' */
+!      patlen = p_tl;
+! 
+!     pathead = pat;
+!     patheadlen = patlen;
+!     if (has_re)
+!     {
+!      /* When the pattern starts with '^' or "\\<", binary searching can be
+!       * used (much faster). */
+!      if (pat[0] == '^')
+!          pathead = pat + 1;
+!      else if (pat[0] == '\\' && pat[1] == '<')
+!          pathead = pat + 2;
+!      if (pathead == pat)
+!          patheadlen = 0;
+!      else
+!          for (patheadlen = 0; pathead[patheadlen] != NUL; ++patheadlen)
+!              if (vim_strchr((char_u *)(p_magic ? ".[~*\\$" : "\\$"),
+!                                               pathead[patheadlen]) != NULL)
+!                  break;
+!      if (p_tl != 0 && patheadlen > p_tl)     /* adjust for 'taglength' */
+!          patheadlen = p_tl;
+!     }
+! 
+!     if (has_re)
+!      regmatch.regprog = vim_regcomp(pat, p_magic ? RE_MAGIC : 0);
+!     else
+!      regmatch.regprog = NULL;
+  
+  #ifdef FEAT_TAG_BINS
+      /* This is only to avoid a compiler warning for using search_info
+--- 1237,1266 ----
+      if (help_only)                           /* want tags from help file */
+       curbuf->b_help = TRUE;                  /* will be restored later */
+  
+!     pats->len = (int)STRLEN(pat);
+  #ifdef FEAT_MULTI_LANG
+      if (curbuf->b_help)
+      {
+       /* When "@ab" is specified use only the "ab" language, otherwise
+        * search all languages. */
+!      if (pats->len > 3 && pat[pats->len - 3] == '@'
+!                                        && ASCII_ISALPHA(pat[pats->len - 2])
+!                                       && ASCII_ISALPHA(pat[pats->len - 1]))
+       {
+!          saved_pat = vim_strnsave(pat, pats->len - 3);
+           if (saved_pat != NULL)
+           {
+!              help_lang_find = &pat[pats->len - 2];
+!              pats->pat = saved_pat;
+!              pats->len -= 3;
+           }
+       }
+      }
+  #endif
++     if (p_tl != 0 && pats->len > p_tl)               /* adjust for 'taglength' */
++      pats->len = p_tl;
+  
+!     prepare_pats(pats, has_re);
+  
+  #ifdef FEAT_TAG_BINS
+      /* This is only to avoid a compiler warning for using search_info
+***************
+*** 1242,1254 ****
+   * Only ignore case when TAG_NOIC not used or 'ignorecase' set.
+   */
+  #ifdef FEAT_TAG_BINS
+!     regmatch.rm_ic = ((p_ic || !noic)
+!                                 && (findall || patheadlen == 0 || !p_tbs));
+      for (round = 1; round <= 2; ++round)
+      {
+!       linear = (patheadlen == 0 || !p_tbs || round == 2);
+  #else
+!       regmatch.rm_ic = (p_ic || !noic);
+  #endif
+  
+        /*
+--- 1278,1290 ----
+   * Only ignore case when TAG_NOIC not used or 'ignorecase' set.
+   */
+  #ifdef FEAT_TAG_BINS
+!     pats->regmatch.rm_ic = ((p_ic || !noic)
+!                                 && (findall || pats->headlen == 0 || !p_tbs));
+      for (round = 1; round <= 2; ++round)
+      {
+!       linear = (pats->headlen == 0 || !p_tbs || round == 2);
+  #else
+!       pats->regmatch.rm_ic = (p_ic || !noic);
+  #endif
+  
+        /*
+***************
+*** 1566,1578 ****
+                   {
+                       state = TS_BINARY;
+                       sortic = TRUE;
+!                      regmatch.rm_ic = (p_ic || !noic);
+                   }
+                   else
+                       state = TS_LINEAR;
+               }
+  
+!              if (state == TS_BINARY && regmatch.rm_ic && !sortic)
+               {
+                   /* binary search won't work for ignoring case, use linear
+                    * search. */
+--- 1602,1614 ----
+                   {
+                       state = TS_BINARY;
+                       sortic = TRUE;
+!                      pats->regmatch.rm_ic = (p_ic || !noic);
+                   }
+                   else
+                       state = TS_LINEAR;
+               }
+  
+!              if (state == TS_BINARY && pats->regmatch.rm_ic && !sortic)
+               {
+                   /* binary search won't work for ignoring case, use linear
+                    * search. */
+***************
+*** 1612,1623 ****
+  #endif
+           }
+  
+           /*
+            * Figure out where the different strings are in this line.
+            * For "normal" tags: Do a quick check if the tag matches.
+            * This speeds up tag searching a lot!
+            */
+!          if (patheadlen
+  #ifdef FEAT_EMACS_TAGS
+                           && !is_etag
+  #endif
+--- 1648,1687 ----
+  #endif
+           }
+  
++ #ifdef FEAT_MBYTE
++          if (lbuf[0] == '!' && pats == &orgpat
++                         && STRNCMP(lbuf, "!_TAG_FILE_ENCODING\t", 20) == 0)
++          {
++              /* Convert the search pattern from 'encoding' to the
++               * specified encoding. */
++              for (p = lbuf + 20; *p > ' ' && *p < 127; ++p)
++                  ;
++              *p = NUL;
++              convert_setup(&vimconv, p_enc, lbuf + 20);
++              if (vimconv.vc_type != CONV_NONE)
++              {
++                  convpat.pat = string_convert(&vimconv, pats->pat, NULL);
++                  if (convpat.pat != NULL)
++                  {
++                      pats = &convpat;
++                      pats->len = (int)STRLEN(pats->pat);
++                      prepare_pats(pats, has_re);
++                      pats->regmatch.rm_ic = orgpat.regmatch.rm_ic;
++                  }
++              }
++ 
++              /* Prepare for converting a match the other way around. */
++              convert_setup(&vimconv, lbuf + 20, p_enc);
++              continue;
++          }
++ #endif
++ 
+           /*
+            * Figure out where the different strings are in this line.
+            * For "normal" tags: Do a quick check if the tag matches.
+            * This speeds up tag searching a lot!
+            */
+!          if (pats->headlen
+  #ifdef FEAT_EMACS_TAGS
+                           && !is_etag
+  #endif
+***************
+*** 1674,1682 ****
+               cmplen = (int)(tagp.tagname_end - tagp.tagname);
+               if (p_tl != 0 && cmplen > p_tl)     /* adjust for 'taglength' */
+                   cmplen = p_tl;
+!              if (has_re && patheadlen < cmplen)
+!                  cmplen = patheadlen;
+!              else if (state == TS_LINEAR && patheadlen != cmplen)
+                   continue;
+  
+  #ifdef FEAT_TAG_BINS
+--- 1738,1746 ----
+               cmplen = (int)(tagp.tagname_end - tagp.tagname);
+               if (p_tl != 0 && cmplen > p_tl)     /* adjust for 'taglength' */
+                   cmplen = p_tl;
+!              if (has_re && pats->headlen < cmplen)
+!                  cmplen = pats->headlen;
+!              else if (state == TS_LINEAR && pats->headlen != cmplen)
+                   continue;
+  
+  #ifdef FEAT_TAG_BINS
+***************
+*** 1695,1704 ****
+                    * Compare the current tag with the searched tag.
+                    */
+                   if (sortic)
+!                      tagcmp = tag_strnicmp(tagp.tagname, pathead,
+                                                             (size_t)cmplen);
+                   else
+!                      tagcmp = STRNCMP(tagp.tagname, pathead, cmplen);
+  
+                   /*
+                    * A match with a shorter tag means to search forward.
+--- 1759,1768 ----
+                    * Compare the current tag with the searched tag.
+                    */
+                   if (sortic)
+!                      tagcmp = tag_strnicmp(tagp.tagname, pats->head,
+                                                             (size_t)cmplen);
+                   else
+!                      tagcmp = STRNCMP(tagp.tagname, pats->head, cmplen);
+  
+                   /*
+                    * A match with a shorter tag means to search forward.
+***************
+*** 1706,1714 ****
+                    */
+                   if (tagcmp == 0)
+                   {
+!                      if (cmplen < patheadlen)
+                           tagcmp = -1;
+!                      else if (cmplen > patheadlen)
+                           tagcmp = 1;
+                   }
+  
+--- 1770,1778 ----
+                    */
+                   if (tagcmp == 0)
+                   {
+!                      if (cmplen < pats->headlen)
+                           tagcmp = -1;
+!                      else if (cmplen > pats->headlen)
+                           tagcmp = 1;
+                   }
+  
+***************
+*** 1752,1758 ****
+               }
+               else if (state == TS_SKIP_BACK)
+               {
+!                  if (MB_STRNICMP(tagp.tagname, pathead, cmplen) != 0)
+                       state = TS_STEP_FORWARD;
+                   else
+                       /* Have to skip back more.  Restore the curr_offset
+--- 1816,1822 ----
+               }
+               else if (state == TS_SKIP_BACK)
+               {
+!                  if (MB_STRNICMP(tagp.tagname, pats->head, cmplen) != 0)
+                       state = TS_STEP_FORWARD;
+                   else
+                       /* Have to skip back more.  Restore the curr_offset
+***************
+*** 1762,1768 ****
+               }
+               else if (state == TS_STEP_FORWARD)
+               {
+!                  if (MB_STRNICMP(tagp.tagname, pathead, cmplen) != 0)
+                   {
+                       if ((off_t)ftell(fp) > search_info.match_offset)
+                           break;      /* past last match */
+--- 1826,1832 ----
+               }
+               else if (state == TS_STEP_FORWARD)
+               {
+!                  if (MB_STRNICMP(tagp.tagname, pats->head, cmplen) != 0)
+                   {
+                       if ((off_t)ftell(fp) > search_info.match_offset)
+                           break;      /* past last match */
+***************
+*** 1773,1779 ****
+               else
+  #endif
+                   /* skip this match if it can't match */
+!                  if (MB_STRNICMP(tagp.tagname, pathead, cmplen) != 0)
+                   continue;
+  
+               /*
+--- 1837,1843 ----
+               else
+  #endif
+                   /* skip this match if it can't match */
+!                  if (MB_STRNICMP(tagp.tagname, pats->head, cmplen) != 0)
+                   continue;
+  
+               /*
+***************
+*** 1824,1863 ****
+           if (p_tl != 0 && cmplen > p_tl)         /* adjust for 'taglength' */
+               cmplen = p_tl;
+           /* if tag length does not match, don't try comparing */
+!          if (patlen != cmplen)
+               match = FALSE;
+           else
+           {
+!              if (regmatch.rm_ic)
+               {
+!                  match = (MB_STRNICMP(tagp.tagname, pat, cmplen) == 0);
+                   if (match)
+!                      match_no_ic = (STRNCMP(tagp.tagname, pat, cmplen) == 0);
+               }
+               else
+!                  match = (STRNCMP(tagp.tagname, pat, cmplen) == 0);
+           }
+  
+           /*
+            * Has a regexp: Also find tags matching regexp.
+            */
+           match_re = FALSE;
+!          if (!match && regmatch.regprog != NULL)
+           {
+               int     cc;
+  
+               cc = *tagp.tagname_end;
+               *tagp.tagname_end = NUL;
+!              match = vim_regexec(&regmatch, tagp.tagname, (colnr_T)0);
+               if (match)
+               {
+!                  matchoff = (int)(regmatch.startp[0] - tagp.tagname);
+!                  if (regmatch.rm_ic)
+                   {
+!                      regmatch.rm_ic = FALSE;
+!                      match_no_ic = vim_regexec(&regmatch, tagp.tagname,
+                                                                 (colnr_T)0);
+!                      regmatch.rm_ic = TRUE;
+                   }
+               }
+               *tagp.tagname_end = cc;
+--- 1888,1928 ----
+           if (p_tl != 0 && cmplen > p_tl)         /* adjust for 'taglength' */
+               cmplen = p_tl;
+           /* if tag length does not match, don't try comparing */
+!          if (pats->len != cmplen)
+               match = FALSE;
+           else
+           {
+!              if (pats->regmatch.rm_ic)
+               {
+!                  match = (MB_STRNICMP(tagp.tagname, pats->pat, cmplen) == 0);
+                   if (match)
+!                      match_no_ic = (STRNCMP(tagp.tagname, pats->pat,
+!                                                              cmplen) == 0);
+               }
+               else
+!                  match = (STRNCMP(tagp.tagname, pats->pat, cmplen) == 0);
+           }
+  
+           /*
+            * Has a regexp: Also find tags matching regexp.
+            */
+           match_re = FALSE;
+!          if (!match && pats->regmatch.regprog != NULL)
+           {
+               int     cc;
+  
+               cc = *tagp.tagname_end;
+               *tagp.tagname_end = NUL;
+!              match = vim_regexec(&pats->regmatch, tagp.tagname, (colnr_T)0);
+               if (match)
+               {
+!                  matchoff = (int)(pats->regmatch.startp[0] - tagp.tagname);
+!                  if (pats->regmatch.rm_ic)
+                   {
+!                      pats->regmatch.rm_ic = FALSE;
+!                      match_no_ic = vim_regexec(&pats->regmatch, tagp.tagname,
+                                                                 (colnr_T)0);
+!                      pats->regmatch.rm_ic = TRUE;
+                   }
+               }
+               *tagp.tagname_end = cc;
+***************
+*** 1914,1920 ****
+                       else
+                           mtt = MT_GL_OTH;
+                   }
+!                  if (regmatch.rm_ic && !match_no_ic)
+                       mtt += MT_IC_OFF;
+                   if (match_re)
+                       mtt += MT_RE_OFF;
+--- 1979,1985 ----
+                       else
+                           mtt = MT_GL_OTH;
+                   }
+!                  if (pats->regmatch.rm_ic && !match_no_ic)
+                       mtt += MT_IC_OFF;
+                   if (match_re)
+                       mtt += MT_RE_OFF;
+***************
+*** 1927,1932 ****
+--- 1992,2026 ----
+                */
+               if (ga_grow(&ga_match[mtt], 1) == OK)
+               {
++ #ifdef FEAT_MBYTE
++                  char_u      *conv_line = NULL;
++                  char_u      *lbuf_line = lbuf;
++ 
++                  if (vimconv.vc_type != CONV_NONE)
++                  {
++                      /* Convert the tag line from the encoding of the tags
++                       * file to 'encoding'.  Then parse the line again. */
++                      conv_line = string_convert(&vimconv, lbuf, NULL);
++                      if (conv_line != NULL)
++                      {
++                          if (parse_tag_line(conv_line,
++ #ifdef FEAT_EMACS_TAGS
++                                      is_etag,
++ #endif
++                                      &tagp) == OK)
++                              lbuf_line = conv_line;
++                          else
++                              /* doesn't work, go back to unconverted line. */
++                              (void)parse_tag_line(lbuf,
++ #ifdef FEAT_EMACS_TAGS
++                                                   is_etag,
++ #endif
++                                                   &tagp);
++                      }
++                  }
++ #else
++ # define lbuf_line lbuf
++ #endif
+                   if (help_only)
+                   {
+  #ifdef FEAT_MULTI_LANG
+***************
+*** 2019,2025 ****
+                        * other tag: <mtt><tag_fname><NUL><NUL><lbuf>
+                        * without Emacs tags: <mtt><tag_fname><NUL><lbuf>
+                        */
+!                      len = (int)STRLEN(tag_fname) + (int)STRLEN(lbuf) + 3;
+  #ifdef FEAT_EMACS_TAGS
+                       if (is_etag)
+                           len += (int)STRLEN(ebuf) + 1;
+--- 2113,2119 ----
+                        * other tag: <mtt><tag_fname><NUL><NUL><lbuf>
+                        * without Emacs tags: <mtt><tag_fname><NUL><lbuf>
+                        */
+!                      len = (int)STRLEN(tag_fname) + (int)STRLEN(lbuf_line) + 3;
+  #ifdef FEAT_EMACS_TAGS
+                       if (is_etag)
+                           len += (int)STRLEN(ebuf) + 1;
+***************
+*** 2049,2055 ****
+                           else
+                               *s++ = NUL;
+  #endif
+!                          STRCPY(s, lbuf);
+                       }
+                   }
+  
+--- 2143,2149 ----
+                           else
+                               *s++ = NUL;
+  #endif
+!                          STRCPY(s, lbuf_line);
+                       }
+                   }
+  
+***************
+*** 2086,2091 ****
+--- 2180,2189 ----
+                       else
+                           vim_free(mfp);
+                   }
++ #ifdef FEAT_MBYTE
++                  /* Note: this makes the values in "tagp" invalid! */
++                  vim_free(conv_line);
++ #endif
+               }
+               else    /* Out of memory! Just forget about the rest. */
+               {
+***************
+*** 2123,2128 ****
+--- 2221,2238 ----
+           vim_free(incstack[incstack_idx].etag_fname);
+       }
+  #endif
++ #ifdef FEAT_MBYTE
++      if (pats == &convpat)
++      {
++          /* Go back from converted pattern to original pattern. */
++          vim_free(pats->pat);
++          vim_free(pats->regmatch.regprog);
++          orgpat.regmatch.rm_ic = pats->regmatch.rm_ic;
++          pats = &orgpat;
++      }
++      if (vimconv.vc_type != CONV_NONE)
++          convert_setup(&vimconv, NULL, NULL);
++ #endif
+  
+  #ifdef FEAT_TAG_BINS
+       if (sort_error)
+***************
+*** 2154,2166 ****
+        /* stop searching when already did a linear search, or when
+         * TAG_NOIC used, and 'ignorecase' not set
+         * or already did case-ignore search */
+!       if (stop_searching || linear || (!p_ic && noic) || regmatch.rm_ic)
+         break;
+  # ifdef FEAT_CSCOPE
+        if (use_cscope)
+         break;
+  # endif
+!       regmatch.rm_ic = TRUE; /* try another time while ignoring case */
+      }
+  #endif
+  
+--- 2264,2276 ----
+        /* stop searching when already did a linear search, or when
+         * TAG_NOIC used, and 'ignorecase' not set
+         * or already did case-ignore search */
+!       if (stop_searching || linear || (!p_ic && noic) || pats->regmatch.rm_ic)
+         break;
+  # ifdef FEAT_CSCOPE
+        if (use_cscope)
+         break;
+  # endif
+!       pats->regmatch.rm_ic = TRUE;   /* try another time while ignoring case */
+      }
+  #endif
+  
+***************
+*** 2173,2179 ****
+  
+  findtag_end:
+      vim_free(lbuf);
+!     vim_free(regmatch.regprog);
+      vim_free(tag_fname);
+  #ifdef FEAT_EMACS_TAGS
+      vim_free(ebuf);
+--- 2283,2289 ----
+  
+  findtag_end:
+      vim_free(lbuf);
+!     vim_free(pats->regmatch.regprog);
+      vim_free(tag_fname);
+  #ifdef FEAT_EMACS_TAGS
+      vim_free(ebuf);
+*** ../vim-6.2.510/src/version.c       Wed Apr 28 16:14:57 2004
+--- src/version.c      Wed Apr 28 16:17:12 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+  {   /* Add new patch number below this line */
++ /**/
++     511,
+  /**/
+
+-- 
+The future isn't what it used to be.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.512 b/6.2.512
new file mode 100644 (file)
index 0000000..682727b
--- /dev/null
+++ b/6.2.512
@@ -0,0 +1,114 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.512
+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 6.2.512
+Problem:    Translating "\"\n" is useless. (Gerfried Fuchs)
+Solution:   Remove the _() around it.
+Files:     src/main.c, src/memline.c
+
+
+*** ../vim-6.2.511/src/main.c  Mon Apr 19 20:26:43 2004
+--- src/main.c Wed Apr 28 11:00:12 2004
+***************
+*** 933,946 ****
+                       mch_errmsg(argv[-1]);
+                       mch_errmsg(" ");
+                       mch_errmsg(argv[0]);
+!                      mch_errmsg(_("\"\n"));
+                       mch_exit(2);
+                   }
+                   if ((scriptin[0] = mch_fopen(argv[0], READBIN)) == NULL)
+                   {
+                       mch_errmsg(_("Cannot open for reading: \""));
+                       mch_errmsg(argv[0]);
+!                      mch_errmsg(_("\"\n"));
+                       mch_exit(2);
+                   }
+                   if (save_typebuf() == FAIL)
+--- 933,946 ----
+                       mch_errmsg(argv[-1]);
+                       mch_errmsg(" ");
+                       mch_errmsg(argv[0]);
+!                      mch_errmsg("\"\n");
+                       mch_exit(2);
+                   }
+                   if ((scriptin[0] = mch_fopen(argv[0], READBIN)) == NULL)
+                   {
+                       mch_errmsg(_("Cannot open for reading: \""));
+                       mch_errmsg(argv[0]);
+!                      mch_errmsg("\"\n");
+                       mch_exit(2);
+                   }
+                   if (save_typebuf() == FAIL)
+***************
+*** 984,990 ****
+                   {
+                       mch_errmsg(_("Cannot open for script output: \""));
+                       mch_errmsg(argv[0]);
+!                      mch_errmsg(_("\"\n"));
+                       mch_exit(2);
+                   }
+                   break;
+--- 984,990 ----
+                   {
+                       mch_errmsg(_("Cannot open for script output: \""));
+                       mch_errmsg(argv[0]);
+!                      mch_errmsg("\"\n");
+                       mch_exit(2);
+                   }
+                   break;
+*** ../vim-6.2.511/src/memline.c       Tue Apr 20 20:15:33 2004
+--- src/memline.c      Tue Apr 20 20:10:50 2004
+***************
+*** 3674,3684 ****
+                   (void)EMSG(_("E325: ATTENTION"));
+                   MSG_PUTS(_("\nFound a swap file by the name \""));
+                   msg_home_replace(fname);
+!                  MSG_PUTS(_("\"\n"));
+                   sx = swapfile_info(fname);
+                   MSG_PUTS(_("While opening file \""));
+                   msg_outtrans(buf->b_fname);
+!                  MSG_PUTS(_("\"\n"));
+                   if (mch_stat((char *)buf->b_fname, &st) != -1)
+                   {
+                       MSG_PUTS(_("             dated: "));
+--- 3674,3684 ----
+                   (void)EMSG(_("E325: ATTENTION"));
+                   MSG_PUTS(_("\nFound a swap file by the name \""));
+                   msg_home_replace(fname);
+!                  MSG_PUTS("\"\n");
+                   sx = swapfile_info(fname);
+                   MSG_PUTS(_("While opening file \""));
+                   msg_outtrans(buf->b_fname);
+!                  MSG_PUTS("\"\n");
+                   if (mch_stat((char *)buf->b_fname, &st) != -1)
+                   {
+                       MSG_PUTS(_("             dated: "));
+*** ../vim-6.2.511/src/version.c       Wed Apr 28 17:04:28 2004
+--- src/version.c      Wed Apr 28 17:36:56 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+  {   /* Add new patch number below this line */
++ /**/
++     512,
+  /**/
+
+-- 
+"Oh, no!  NOT the Spanish Inquisition!"
+"NOBODY expects the Spanish Inquisition!!!"
+                               -- Monty Python sketch --
+"Oh, no!  NOT another option!"
+"EVERYBODY expects another option!!!"
+                               -- Discussion in vim-dev mailing list --
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.513 b/6.2.513
new file mode 100644 (file)
index 0000000..f11b84a
--- /dev/null
+++ b/6.2.513
@@ -0,0 +1,64 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.513
+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 6.2.513 (after 6.2.507)
+Problem:    NetBeans: the check for owning the connection info file can be
+           simplified. (Nikolay Molchanov)
+Solution:   Only check if the access mode is right.
+Files:     src/netbeans.c
+
+
+*** ../vim-6.2.512/src/netbeans.c      Tue Apr 27 21:42:53 2004
+--- src/netbeans.c     Wed Apr 28 18:07:02 2004
+***************
+*** 442,454 ****
+      struct stat      st;
+  
+      /*
+!      * For Unix only accept the file when it's owned by the current user and
+!      * not accessible by others.
+       */
+!     if (mch_stat(file, &st) == 0
+!          && (st.st_uid != getuid() || (st.st_mode & 0077)))
+      {
+!      EMSG2(_("E668: Ownership of NetBeans connection file invalid: \"%s\""),
+                                                                       file);
+       return FAIL;
+      }
+--- 442,453 ----
+      struct stat      st;
+  
+      /*
+!      * For Unix only accept the file when it's not accessible by others.
+!      * The open will then fail if we don't own the file.
+       */
+!     if (mch_stat(file, &st) == 0 && (st.st_mode & 0077) != 0)
+      {
+!      EMSG2(_("E668: Wrong access mode for NetBeans connection info file: \"%s\""),
+                                                                       file);
+       return FAIL;
+      }
+*** ../vim-6.2.512/src/version.c       Wed Apr 28 17:39:04 2004
+--- src/version.c      Wed Apr 28 19:41:33 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+  {   /* Add new patch number below this line */
++ /**/
++     513,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+45. You buy a Captain Kirk chair with a built-in keyboard and mouse.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.514 b/6.2.514
new file mode 100644 (file)
index 0000000..6cb6501
--- /dev/null
+++ b/6.2.514
@@ -0,0 +1,76 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.514
+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 6.2.514
+Problem:    When a highlight/syntax group name contains invalid characters
+           there is no warning.
+Solution:   Add an error for unprintable characters and a warning for other
+           invalid characters.
+Files:     src/syntax.c
+
+
+*** ../vim-6.2.513/src/syntax.c        Mon Apr 19 20:26:43 2004
+--- src/syntax.c       Tue Apr 27 22:17:13 2004
+***************
+*** 7897,7905 ****
+   */
+      static int
+  syn_add_group(name)
+!     char_u           *name;
+  {
+!     /* TODO: check that the name is ASCII letters, digits and underscore. */
+      /*
+       * First call for this growarray: init growing array.
+       */
+--- 7897,7923 ----
+   */
+      static int
+  syn_add_group(name)
+!     char_u   *name;
+  {
+!     char_u   *p;
+! 
+!     /* Check that the name is ASCII letters, digits and underscore. */
+!     for (p = name; *p != NUL; ++p)
+!     {
+!      if (!vim_isprintc(*p))
+!      {
+!          EMSG(_("E669: Unprintable character in group name"));
+!          return 0;
+!      }
+!      else if (!ASCII_ISALNUM(*p) && *p != '_')
+!      {
+!          /* This is an error, but since there previously was no check only
+!           * give a warning. */
+!          MSG(_("W18: Invalid character in group name"));
+!          break;
+!      }
+!     }
+! 
+      /*
+       * First call for this growarray: init growing array.
+       */
+*** ../vim-6.2.513/src/version.c       Wed Apr 28 19:42:38 2004
+--- src/version.c      Wed Apr 28 19:43:49 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+  {   /* Add new patch number below this line */
++ /**/
++     514,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+46. Your wife makes a new rule: "The computer cannot come to bed."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.515 b/6.2.515
new file mode 100644 (file)
index 0000000..e2d9964
--- /dev/null
+++ b/6.2.515
@@ -0,0 +1,94 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.515
+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 6.2.515
+Problem:    When using the options window 'swapfile' is reset.
+Solution:   Use ":setlocal" instead of ":set".
+Files:     runtime/optwin.vim
+
+
+*** ../vim-6.2.514/runtime/optwin.vim  Thu Jul 24 22:20:33 2003
+--- runtime/optwin.vim Thu Apr 29 14:34:57 2004
+***************
+*** 1,7 ****
+  " These commands create the option window.
+  "
+  " Maintainer:        Bram Moolenaar <Bram@vim.org>
+! " Last Change:       2003 Jul 22
+  
+  " If there already is an option window, jump to that one.
+  if bufwinnr("option-window") > 0
+--- 1,7 ----
+  " These commands create the option window.
+  "
+  " Maintainer:        Bram Moolenaar <Bram@vim.org>
+! " Last Change:       2004 Apr 29
+  
+  " If there already is an option window, jump to that one.
+  if bufwinnr("option-window") > 0
+***************
+*** 1133,1143 ****
+  1
+  
+  " reset 'modified', so that ":q" can be used to close the window
+! set nomodified
+  
+  if has("syntax")
+    " Use Vim highlighting, with some additional stuff
+!   set ft=vim
+    syn match optwinHeader "^ \=[0-9].*"
+    syn match optwinName "^[a-z]*\t" nextgroup=optwinComment
+    syn match optwinComment ".*" contained
+--- 1137,1147 ----
+  1
+  
+  " reset 'modified', so that ":q" can be used to close the window
+! setlocal nomodified
+  
+  if has("syntax")
+    " Use Vim highlighting, with some additional stuff
+!   setlocal ft=vim
+    syn match optwinHeader "^ \=[0-9].*"
+    syn match optwinName "^[a-z]*\t" nextgroup=optwinComment
+    syn match optwinComment ".*" contained
+***************
+*** 1156,1162 ****
+  noremap <silent> <buffer> <Space> :call <SID>Space()<CR>
+  
+  " Make the buffer be deleted when the window is closed.
+! set buftype=nofile bufhidden=delete noswapfile
+  
+  augroup optwin
+    au! BufUnload,BufHidden option-window nested
+--- 1160,1166 ----
+  noremap <silent> <buffer> <Space> :call <SID>Space()<CR>
+  
+  " Make the buffer be deleted when the window is closed.
+! setlocal buftype=nofile bufhidden=delete noswapfile
+  
+  augroup optwin
+    au! BufUnload,BufHidden option-window nested
+*** ../vim-6.2.514/src/version.c       Wed Apr 28 19:45:29 2004
+--- src/version.c      Thu Apr 29 14:47:35 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+  {   /* Add new patch number below this line */
++ /**/
++     515,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+58. You turn on your computer and turn off your wife.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.516 b/6.2.516
new file mode 100644 (file)
index 0000000..cecf2b2
--- /dev/null
+++ b/6.2.516
@@ -0,0 +1,348 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.516
+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 6.2.516
+Problem:    The sign column cannot be seen, looks like there are two spaces
+           before the text. (Rob Retter)
+Solution:   Add the SignColumn highlight group.
+Files:     runtime/doc/options.txt, runtime/doc/sign.txt, src/option.c,
+           src/screen.c, src/syntax.c, src/vim.h
+
+
+*** ../vim-6.2.515/runtime/doc/options.txt     Mon Apr 19 17:00:44 2004
+--- runtime/doc/options.txt    Thu Apr 29 15:51:04 2004
+***************
+*** 1,4 ****
+! *options.txt*        For Vim version 6.2.  Last change: 2004 Apr 18
+  
+  
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+--- 1,4 ----
+! *options.txt*        For Vim version 6.2.  Last change: 2004 Apr 29
+  
+  
+                 VIM REFERENCE MANUAL    by Bram Moolenaar
+***************
+*** 3052,3058 ****
+                                    M:ModeMsg,n:LineNr,r:Question,
+                                    s:StatusLine,S:StatusLineNC,c:VertSplit
+                                    t:Title,v:Visual,w:WarningMsg,W:WildMenu,
+!                                   f:Folded,F:FoldColumn")
+                       global
+                       {not in Vi}
+       This option can be used to set highlighting mode for various
+--- 3076,3084 ----
+                                    M:ModeMsg,n:LineNr,r:Question,
+                                    s:StatusLine,S:StatusLineNC,c:VertSplit
+                                    t:Title,v:Visual,w:WarningMsg,W:WildMenu,
+!                                   f:Folded,F:FoldColumn,A:DiffAdd,
+!                                   C:DiffChange,D:DiffDelete,T:DiffText,
+!                                   >:SignColumn")
+                       global
+                       {not in Vi}
+       This option can be used to set highlighting mode for various
+***************
+*** 3084,3089 ****
+--- 3110,3116 ----
+       |hl-WildMenu|    W  wildcard matches displayed for 'wildmenu'
+       |hl-Folded|      f  line used for closed folds
+       |hl-FoldColumn|  F  'foldcolumn'
++      |hl-SignColumn|  >  column used for |signs|
+  
+       The display modes are:
+               r       reverse         (termcap entry "mr" and "me")
+*** ../vim-6.2.515/runtime/doc/sign.txt        Sun Jun  1 12:20:35 2003
+--- runtime/doc/sign.txt       Thu Apr 29 15:53:36 2004
+***************
+*** 1,4 ****
+! *sign.txt*      For Vim version 6.2.  Last change: 2003 Apr 19
+  
+  
+                 VIM REFERENCE MANUAL    by Gordon Prieur
+--- 1,4 ----
+! *sign.txt*      For Vim version 6.2.  Last change: 2004 Apr 29
+  
+  
+                 VIM REFERENCE MANUAL    by Gordon Prieur
+***************
+*** 14,20 ****
+  {only available when compiled with the |+signs| feature}
+  
+  ==============================================================================
+! 1. Introduction                                      *sign-intro*
+  
+  When a debugger or other IPE tool is driving an editor it needs to be able
+  to give specific highlights which quickly tell the user useful information
+--- 14,20 ----
+  {only available when compiled with the |+signs| feature}
+  
+  ==============================================================================
+! 1. Introduction                                      *sign-intro* *signs*
+  
+  When a debugger or other IPE tool is driving an editor it needs to be able
+  to give specific highlights which quickly tell the user useful information
+***************
+*** 45,51 ****
+  
+  When signs are defined for a file, Vim will automatically add a column of two
+  characters to display them in.  When the last sign is unplaced the column
+! disappears again.
+  
+  ==============================================================================
+  2. Commands                                  *sign-commands* *:sig* *:sign*
+--- 45,54 ----
+  
+  When signs are defined for a file, Vim will automatically add a column of two
+  characters to display them in.  When the last sign is unplaced the column
+! disappears again.  The color of the column is set with the SignColumn group
+! |hl-SignColumn|.  Example to set the color: >
+! 
+!      :highlight SignColumn guibg=darkgrey
+  
+  ==============================================================================
+  2. Commands                                  *sign-commands* *:sig* *:sign*
+*** ../vim-6.2.515/src/option.c        Mon Apr 19 20:26:43 2004
+--- src/option.c       Thu Apr 29 15:48:51 2004
+***************
+*** 1072,1078 ****
+                           {(char_u *)FALSE, (char_u *)0L}},
+      {"highlight",   "hl",   P_STRING|P_VI_DEF|P_RCLR|P_COMMA|P_NODUP,
+                           (char_u *)&p_hl, PV_NONE,
+!                          {(char_u *)"8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,r:Question,s:StatusLine,S:StatusLineNC,c:VertSplit,t:Title,v:Visual,V:VisualNOS,w:WarningMsg,W:WildMenu,f:Folded,F:FoldColumn,A:DiffAdd,C:DiffChange,D:DiffDelete,T:DiffText",
+                               (char_u *)0L}},
+      {"history",          "hi",   P_NUM|P_VIM,
+                           (char_u *)&p_hi, PV_NONE,
+--- 1072,1078 ----
+                           {(char_u *)FALSE, (char_u *)0L}},
+      {"highlight",   "hl",   P_STRING|P_VI_DEF|P_RCLR|P_COMMA|P_NODUP,
+                           (char_u *)&p_hl, PV_NONE,
+!                          {(char_u *)"8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,r:Question,s:StatusLine,S:StatusLineNC,c:VertSplit,t:Title,v:Visual,V:VisualNOS,w:WarningMsg,W:WildMenu,f:Folded,F:FoldColumn,A:DiffAdd,C:DiffChange,D:DiffDelete,T:DiffText,>:SignColumn",
+                               (char_u *)0L}},
+      {"history",          "hi",   P_NUM|P_VIM,
+                           (char_u *)&p_hi, PV_NONE,
+*** ../vim-6.2.515/src/screen.c        Mon Apr 19 20:26:43 2004
+--- src/screen.c       Thu Apr 29 16:25:40 2004
+***************
+*** 1864,1869 ****
+--- 1864,1887 ----
+  #endif
+  }
+  
++ #ifdef FEAT_SIGNS
++ static int draw_signcolumn __ARGS((win_T *wp));
++ 
++ /*
++  * Return TRUE when window "wp" has a column to draw signs in.
++  */
++     static int
++ draw_signcolumn(wp)
++     win_T *wp;
++ {
++     return (wp->w_buffer->b_signlist != NULL
++ # ifdef FEAT_NETBEANS_INTG
++                          || usingNetbeans
++ # endif
++                  );
++ }
++ #endif
++ 
+  /*
+   * Clear the rest of the window and mark the unused lines with "c1".  use "c2"
+   * as the filler character.
+***************
+*** 1877,1883 ****
+      int              endrow;
+      enum hlf_value hl;
+  {
+! #if defined(FEAT_FOLDING) || defined(FEAT_CMDWIN)
+      int              n = 0;
+  # define FDC_OFF n
+  #else
+--- 1895,1901 ----
+      int              endrow;
+      enum hlf_value hl;
+  {
+! #if defined(FEAT_FOLDING) || defined(FEAT_SIGNS) || defined(FEAT_CMDWIN)
+      int              n = 0;
+  # define FDC_OFF n
+  #else
+***************
+*** 1901,1906 ****
+--- 1919,1938 ----
+                   ' ', ' ', hl_attr(HLF_FC));
+       }
+  # endif
++ # ifdef FEAT_SIGNS
++      if (draw_signcolumn(wp))
++      {
++          int nn = n + 2;
++ 
++          /* draw the sign column left of the fold column */
++          if (nn > wp->w_width)
++              nn = wp->w_width;
++          screen_fill(W_WINROW(wp) + row, W_WINROW(wp) + endrow,
++                  W_ENDCOL(wp) - nn, (int)W_ENDCOL(wp) - n,
++                  ' ', ' ', hl_attr(HLF_SC));
++          n = nn;
++      }
++ # endif
+       screen_fill(W_WINROW(wp) + row, W_WINROW(wp) + endrow,
+               W_WINCOL(wp), W_ENDCOL(wp) - 1 - FDC_OFF,
+               c2, c2, hl_attr(hl));
+***************
+*** 1937,1942 ****
+--- 1969,1988 ----
+           n = nn;
+       }
+  #endif
++ #ifdef FEAT_SIGNS
++      if (draw_signcolumn(wp))
++      {
++          int     nn = n + 2;
++ 
++          /* draw the sign column after the fold column */
++          if (nn > W_WIDTH(wp))
++              nn = W_WIDTH(wp);
++          screen_fill(W_WINROW(wp) + row, W_WINROW(wp) + endrow,
++                  W_WINCOL(wp) + n, (int)W_WINCOL(wp) + nn,
++                  ' ', ' ', hl_attr(HLF_SC));
++          n = nn;
++      }
++ #endif
+       screen_fill(W_WINROW(wp) + row, W_WINROW(wp) + endrow,
+               W_WINCOL(wp) + FDC_OFF, (int)W_ENDCOL(wp),
+               c1, c2, hl_attr(hl));
+***************
+*** 2032,2038 ****
+  
+  #ifdef FEAT_SIGNS
+      /* If signs are being displayed, add two spaces. */
+!     if (wp->w_buffer->b_signlist != NULL)
+      {
+       len = W_WIDTH(wp) - col;
+       if (len > 0)
+--- 2078,2084 ----
+  
+  #ifdef FEAT_SIGNS
+      /* If signs are being displayed, add two spaces. */
+!     if (draw_signcolumn(wp))
+      {
+       len = W_WIDTH(wp) - col;
+       if (len > 0)
+***************
+*** 2963,2973 ****
+               draw_state = WL_SIGN;
+               /* Show the sign column when there are any signs in this
+                * buffer or when using Netbeans. */
+!              if ((wp->w_buffer->b_signlist != NULL
+! # ifdef FEAT_NETBEANS_INTG
+!                          || usingNetbeans
+! # endif
+!                  )
+  # ifdef FEAT_DIFF
+                       && filler_todo <= 0
+  # endif
+--- 3009,3015 ----
+               draw_state = WL_SIGN;
+               /* Show the sign column when there are any signs in this
+                * buffer or when using Netbeans. */
+!              if (draw_signcolumn(wp)
+  # ifdef FEAT_DIFF
+                       && filler_todo <= 0
+  # endif
+***************
+*** 2980,2986 ****
+  
+                   /* Draw two cells with the sign value or blank. */
+                   c_extra = ' ';
+!                  char_attr = 0;
+                   n_extra = 2;
+  
+                   if (row == startrow)
+--- 3022,3028 ----
+  
+                   /* Draw two cells with the sign value or blank. */
+                   c_extra = ' ';
+!                  char_attr = hl_attr(HLF_SC);
+                   n_extra = 2;
+  
+                   if (row == startrow)
+*** ../vim-6.2.515/src/syntax.c        Wed Apr 28 19:45:29 2004
+--- src/syntax.c       Thu Apr 29 15:54:32 2004
+***************
+*** 5940,5945 ****
+--- 5940,5946 ----
+       "WildMenu term=standout ctermbg=Yellow ctermfg=Black guibg=Yellow guifg=Black",
+       "Folded term=standout ctermbg=Grey ctermfg=DarkBlue guibg=LightGrey guifg=DarkBlue",
+       "FoldColumn term=standout ctermbg=Grey ctermfg=DarkBlue guibg=Grey guifg=DarkBlue",
++      "SignColumn term=standout ctermbg=Grey ctermfg=DarkBlue guibg=Grey guifg=DarkBlue",
+       "DiffAdd term=bold ctermbg=LightBlue guibg=LightBlue",
+       "DiffChange term=bold ctermbg=LightMagenta guibg=LightMagenta",
+       "DiffDelete term=bold ctermfg=Blue ctermbg=LightCyan gui=bold guifg=Blue guibg=LightCyan",
+***************
+*** 5960,5965 ****
+--- 5961,5967 ----
+       "WildMenu term=standout ctermbg=Yellow ctermfg=Black guibg=Yellow guifg=Black",
+       "Folded term=standout ctermbg=DarkGrey ctermfg=Cyan guibg=DarkGrey guifg=Cyan",
+       "FoldColumn term=standout ctermbg=DarkGrey ctermfg=Cyan guibg=Grey guifg=Cyan",
++      "SignColumn term=standout ctermbg=DarkGrey ctermfg=Cyan guibg=Grey guifg=Cyan",
+       "DiffAdd term=bold ctermbg=DarkBlue guibg=DarkBlue",
+       "DiffChange term=bold ctermbg=DarkMagenta guibg=DarkMagenta",
+       "DiffDelete term=bold ctermfg=Blue ctermbg=DarkCyan gui=bold guifg=Blue guibg=DarkCyan",
+*** ../vim-6.2.515/src/vim.h   Tue Apr 20 12:52:53 2004
+--- src/vim.h  Thu Apr 29 15:48:18 2004
+***************
+*** 1074,1086 ****
+      , HLF_CHD            /* Changed diff line */
+      , HLF_DED            /* Deleted diff line */
+      , HLF_TXD            /* Text Changed in diff line */
+      , HLF_COUNT          /* MUST be the last one */
+  };
+  
+  /* the HL_FLAGS must be in the same order as the HLF_ enums! */
+  #define HL_FLAGS {'8', '@', 'd', 'e', 'h', 'i', 'l', 'm', 'M', \
+                 'n', 'r', 's', 'S', 'c', 't', 'v', 'V', 'w', 'W', \
+!                'f', 'F', 'A', 'C', 'D', 'T'}
+  
+  /*
+   * Boolean constants
+--- 1074,1087 ----
+      , HLF_CHD            /* Changed diff line */
+      , HLF_DED            /* Deleted diff line */
+      , HLF_TXD            /* Text Changed in diff line */
++     , HLF_SC     /* Sign column */
+      , HLF_COUNT          /* MUST be the last one */
+  };
+  
+  /* the HL_FLAGS must be in the same order as the HLF_ enums! */
+  #define HL_FLAGS {'8', '@', 'd', 'e', 'h', 'i', 'l', 'm', 'M', \
+                 'n', 'r', 's', 'S', 'c', 't', 'v', 'V', 'w', 'W', \
+!                'f', 'F', 'A', 'C', 'D', 'T', '>'}
+  
+  /*
+   * Boolean constants
+*** ../vim-6.2.515/src/version.c       Thu Apr 29 14:49:12 2004
+--- src/version.c      Thu Apr 29 16:33:00 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+  {   /* Add new patch number below this line */
++ /**/
++     516,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+61. Your best friends know your e-mail address, but neither your phone number
+    nor the address where you live.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.517 b/6.2.517
new file mode 100644 (file)
index 0000000..f61220e
--- /dev/null
+++ b/6.2.517
@@ -0,0 +1,130 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.517
+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 6.2.517
+Problem:    Using "r*" in Visual mode on multi-byte characters replaces
+           too many characters.  In Visual Block mode replacing with a
+           multi-byte character doesn't work.
+Solution:   Adjust the operator end for the difference in byte length of the
+           original and the replaced character.  Insert all bytes of a
+           multi-byte character, take care of double-wide characters.
+Files:     src/ops.c
+
+
+*** ../vim-6.2.516/src/ops.c   Fri Apr 23 15:19:46 2004
+--- src/ops.c  Fri Apr 30 17:21:32 2004
+***************
+*** 1925,1930 ****
+--- 1925,1933 ----
+      int              c;
+  {
+      int                      n, numc;
++ #ifdef FEAT_MBYTE
++     int                      num_chars;
++ #endif
+      char_u           *newp, *oldp;
+      size_t           oldlen;
+      struct block_def bd;
+***************
+*** 1978,1988 ****
+  #ifdef FEAT_VIRTUALEDIT
+                   && !bd.is_oneChar
+  #endif
+!                  && bd.end_char_vcols > 0 ? bd.end_char_vcols - 1 : 0);
+           /* Figure out how many characters to replace. */
+           numc = oap->end_vcol - oap->start_vcol + 1;
+           if (bd.is_short && (!virtual_op || bd.is_MAX))
+               numc -= (oap->end_vcol - bd.end_vcol) + 1;
+           /* oldlen includes textlen, so don't double count */
+           n += numc - bd.textlen;
+  
+--- 1981,2009 ----
+  #ifdef FEAT_VIRTUALEDIT
+                   && !bd.is_oneChar
+  #endif
+!                  && bd.end_char_vcols > 0) ? bd.end_char_vcols - 1 : 0;
+           /* Figure out how many characters to replace. */
+           numc = oap->end_vcol - oap->start_vcol + 1;
+           if (bd.is_short && (!virtual_op || bd.is_MAX))
+               numc -= (oap->end_vcol - bd.end_vcol) + 1;
++ 
++ #ifdef FEAT_MBYTE
++          /* A double-wide character can be replaced only up to half the
++           * times. */
++          if ((*mb_char2cells)(c) > 1)
++          {
++              if ((numc & 1) && !bd.is_short)
++              {
++                  ++bd.endspaces;
++                  ++n;
++              }
++              numc = numc / 2;
++          }
++ 
++          /* Compute bytes needed, move character count to num_chars. */
++          num_chars = numc;
++          numc *= (*mb_char2len)(c);
++ #endif
+           /* oldlen includes textlen, so don't double count */
+           n += numc - bd.textlen;
+  
+***************
+*** 1998,2004 ****
+           /* insert pre-spaces */
+           copy_spaces(newp + bd.textcol, (size_t)bd.startspaces);
+           /* insert replacement chars CHECK FOR ALLOCATED SPACE */
+!          copy_chars(newp + STRLEN(newp), (size_t)numc, c);
+           if (!bd.is_short)
+           {
+               /* insert post-spaces */
+--- 2019,2034 ----
+           /* insert pre-spaces */
+           copy_spaces(newp + bd.textcol, (size_t)bd.startspaces);
+           /* insert replacement chars CHECK FOR ALLOCATED SPACE */
+! #ifdef FEAT_MBYTE
+!          if (has_mbyte)
+!          {
+!              n = STRLEN(newp);
+!              while (--num_chars >= 0)
+!                  n += (*mb_char2bytes)(c, newp + n);
+!          }
+!          else
+! #endif
+!              copy_chars(newp + STRLEN(newp), (size_t)numc, c);
+           if (!bd.is_short)
+           {
+               /* insert post-spaces */
+***************
+*** 2036,2041 ****
+--- 2066,2072 ----
+               {
+                   /* This is slow, but it handles replacing a single-byte
+                    * with a multi-byte and the other way around. */
++                  oap->end.col += (*mb_char2len)(c) - (*mb_char2len)(n);
+                   n = State;
+                   State = REPLACE;
+                   ins_char(c);
+*** ../vim-6.2.516/src/version.c       Thu Apr 29 16:36:50 2004
+--- src/version.c      Fri Apr 30 19:38:27 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+  {   /* Add new patch number below this line */
++ /**/
++     517,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+80. At parties, you introduce your spouse as your "service provider."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.518 b/6.2.518
new file mode 100644 (file)
index 0000000..f3af108
--- /dev/null
+++ b/6.2.518
@@ -0,0 +1,65 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.518
+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 6.2.518
+Problem:    Last line of a window is not updated after using "J" and then "D".
+           (Adri Verhoef)
+Solution:   When no line is found below a change that doesn't need updating,
+           update all lines below the change.
+Files:     src/screen.c
+
+
+*** ../vim-6.2.517/src/screen.c        Thu Apr 29 16:36:50 2004
+--- src/screen.c       Sat May  1 14:13:00 2004
+***************
+*** 1484,1498 ****
+  
+               if (i >= wp->w_lines_valid)
+               {
+!                  /* When buffer lines have been inserted/deleted, and
+!                   * insering/deleting window lines is not possible, need to
+!                   * check for redraw until the end of the window.  This is
+!                   * also required when w_topline changed. */
+!                  if (buf->b_mod_xlines != 0
+!                          || (wp->w_topline == mod_top
+!                              && wp->w_lines_valid > 0
+!                              && wp->w_lines[0].wl_lnum != mod_top))
+!                      bot_start = 0;
+               }
+               else
+               {
+--- 1484,1493 ----
+  
+               if (i >= wp->w_lines_valid)
+               {
+!                  /* We can't find a valid line below the changed lines,
+!                   * need to redraw until the end of the window.
+!                   * Inserting/deleting lines has no use. */
+!                  bot_start = 0;
+               }
+               else
+               {
+*** ../vim-6.2.517/src/version.c       Fri Apr 30 19:42:02 2004
+--- src/version.c      Sat May  1 14:17:27 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+  {   /* Add new patch number below this line */
++ /**/
++     518,
+  /**/
+
+-- 
+From "know your smileys":
+ :^[/   mean-smiley-with-cigarette
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.519 b/6.2.519
new file mode 100644 (file)
index 0000000..3b2d09e
--- /dev/null
+++ b/6.2.519
@@ -0,0 +1,257 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.519
+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 6.2.519
+Problem:    Mac: cannot read/write files in MacRoman format.
+Solution:   Do internal conversion from/to MacRoman to/from utf-8 and latin1.
+           (Eckehard Berns)
+Files:     src/fileio.c
+
+
+*** ../vim-6.2.518/src/fileio.c        Tue Apr 27 16:27:09 2004
+--- src/fileio.c       Sat May  1 21:00:35 2004
+***************
+*** 83,88 ****
+--- 83,91 ----
+  #  define FIO_PUT_CP(x) (((x) & 0xffff) << 16)       /* put codepage in top word */
+  #  define FIO_GET_CP(x)      (((x)>>16) & 0xffff)    /* get codepage from top word */
+  # endif
++ # ifdef MACOS_X
++ #  define FIO_MACROMAN       0x20    /* convert MacRoman */
++ # endif
+  # define FIO_ENDIAN_L        0x80    /* little endian */
+  # define FIO_ENCRYPTED       0x1000  /* encrypt written bytes */
+  # define FIO_NOCONVERT       0x2000  /* skip encoding conversion */
+***************
+*** 133,138 ****
+--- 136,144 ----
+  # ifdef WIN3264
+  static int get_win_fio_flags __ARGS((char_u *ptr));
+  # endif
++ # ifdef MACOS_X
++ static int get_mac_fio_flags __ARGS((char_u *ptr));
++ # endif
+  #endif
+  static int move_lines __ARGS((buf_T *frombuf, buf_T *tobuf));
+  
+***************
+*** 946,951 ****
+--- 952,963 ----
+           fio_flags = get_win_fio_flags(fenc);
+  # endif
+  
++ # ifdef MACOS_X
++      /* Conversion from Apple MacRoman to latin1 or UTF-8 */
++      if (fio_flags == 0)
++          fio_flags = get_mac_fio_flags(fenc);
++ # endif
++ 
+  # ifdef USE_ICONV
+       /*
+        * Try using iconv() if we can't convert internally.
+***************
+*** 1106,1111 ****
+--- 1118,1127 ----
+               else if (fio_flags & FIO_CODEPAGE)
+                   size = size / ICONV_MULT;   /* also worst case */
+  # endif
++ # ifdef MACOS_X
++              else if (fio_flags & FIO_MACROMAN)
++                  size = size / ICONV_MULT;   /* also worst case */
++ # endif
+  #endif
+  
+  #ifdef FEAT_MBYTE
+***************
+*** 1460,1465 ****
+--- 1476,1521 ----
+           }
+           else
+  # endif
++ # ifdef MACOS_X
++          if (fio_flags & FIO_MACROMAN)
++          {
++              /*
++               * Conversion from Apple MacRoman char encoding to UTF-8 or
++               * latin1, using standard Carbon framework.
++               */
++              CFStringRef     cfstr;
++              CFRange         r;
++              CFIndex         len = size;
++ 
++              /* MacRoman is an 8-bit encoding, no need to move bytes to
++               * conv_rest[]. */
++              cfstr = CFStringCreateWithBytes(NULL, ptr, len,
++                                              kCFStringEncodingMacRoman, 0);
++              /*
++               * If there is a conversion error, try using another
++               * conversion.
++               */
++              if (cfstr == NULL)
++                  goto rewind_retry;
++ 
++              r.location = 0;
++              r.length = CFStringGetLength(cfstr);
++              if (r.length != CFStringGetBytes(cfstr, r,
++                      (enc_utf8) ? kCFStringEncodingUTF8
++                                               : kCFStringEncodingISOLatin1,
++                      0, /* no lossy conversion */
++                      0, /* not external representation */
++                      ptr + size, real_size - size, &len))
++              {
++                  CFRelease(cfstr);
++                  goto rewind_retry;
++              }
++              CFRelease(cfstr);
++              mch_memmove(ptr, ptr + size, len);
++              size = len;
++          }
++          else
++ # endif
+           if (fio_flags != 0)
+           {
+               int     u8c;
+***************
+*** 3527,3532 ****
+--- 3583,3599 ----
+      }
+  # endif
+  
++ # ifdef MACOS_X
++     if (converted && wb_flags == 0 && (wb_flags = get_mac_fio_flags(fenc)) != 0)
++     {
++      write_info.bw_conv_buflen = bufsize * 3;
++      write_info.bw_conv_buf
++                          = lalloc((long_u)write_info.bw_conv_buflen, TRUE);
++      if (write_info.bw_conv_buf == NULL)
++          end = 0;
++     }
++ # endif
++ 
+  # if defined(FEAT_EVAL) || defined(USE_ICONV)
+      if (converted && wb_flags == 0)
+      {
+***************
+*** 4673,4678 ****
+--- 4740,4811 ----
+       }
+  # endif
+  
++ # ifdef MACOS_X
++      else if (flags & FIO_MACROMAN)
++      {
++          /*
++           * Convert UTF-8 or latin1 to Apple MacRoman.
++           */
++          CFStringRef cfstr;
++          CFRange     r;
++          CFIndex     l;
++          char_u      *from;
++          size_t      fromlen;
++ 
++          if (ip->bw_restlen > 0)
++          {
++              /* Need to concatenate the remainder of the previous call and
++               * the bytes of the current call.  Use the end of the
++               * conversion buffer for this. */
++              fromlen = len + ip->bw_restlen;
++              from = ip->bw_conv_buf + ip->bw_conv_buflen - fromlen;
++              mch_memmove(from, ip->bw_rest, (size_t)ip->bw_restlen);
++              mch_memmove(from + ip->bw_restlen, buf, (size_t)len);
++          }
++          else
++          {
++              from = buf;
++              fromlen = len;
++          }
++ 
++          ip->bw_restlen = 0;
++          cfstr = CFStringCreateWithBytes(NULL, from, fromlen,
++                  (enc_utf8) ?
++                  kCFStringEncodingUTF8 : kCFStringEncodingISOLatin1,
++                  0);
++          while (cfstr == NULL && ip->bw_restlen < 3 && fromlen > 1)
++          {
++              ip->bw_rest[ip->bw_restlen++] = from[--fromlen];
++              cfstr = CFStringCreateWithBytes(NULL, from, fromlen,
++                  (enc_utf8) ?
++                  kCFStringEncodingUTF8 : kCFStringEncodingISOLatin1,
++                  0);
++          }
++          if (cfstr == NULL)
++          {
++              ip->bw_conv_error = TRUE;
++              return FAIL;
++          }
++ 
++          r.location = 0;
++          r.length = CFStringGetLength(cfstr);
++          if (r.length != CFStringGetBytes(cfstr, r,
++                      kCFStringEncodingMacRoman,
++                      0, /* no lossy conversion */
++                      0, /* not external representation (since vim
++                          * handles this internally */
++                      ip->bw_conv_buf, ip->bw_conv_buflen, &l))
++          {
++              CFRelease(cfstr);
++              ip->bw_conv_error = TRUE;
++              return FAIL;
++          }
++          CFRelease(cfstr);
++          buf = ip->bw_conv_buf;
++          len = l;
++      }
++ # endif
++ 
+  # ifdef USE_ICONV
+       if (ip->bw_iconv_fd != (iconv_t)-1)
+       {
+***************
+*** 4940,4945 ****
+--- 5073,5094 ----
+  }
+  #endif
+  
++ #ifdef MACOS_X
++ /*
++  * Check "ptr" for a Carbon supported encoding and return the FIO_ flags
++  * needed for the internal conversion to/from utf-8 or latin1.
++  */
++     static int
++ get_mac_fio_flags(ptr)
++     char_u   *ptr;
++ {
++     if ((enc_utf8 || STRCMP(p_enc, "latin1") == 0)
++                                   && (enc_canon_props(ptr) & ENC_MACROMAN))
++      return FIO_MACROMAN;
++     return 0;
++ }
++ #endif
++ 
+  /*
+   * Check for a Unicode BOM (Byte Order Mark) at the start of p[size].
+   * "size" must be at least 2.
+*** ../vim-6.2.518/src/version.c       Sat May  1 14:20:36 2004
+--- src/version.c      Sat May  1 21:02:36 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+  {   /* Add new patch number below this line */
++ /**/
++     519,
+  /**/
+
+-- 
+From "know your smileys":
+ ~#:-( I just washed my hair, and I can't do nuthin' with it.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.520 b/6.2.520
new file mode 100644 (file)
index 0000000..088e2a4
--- /dev/null
+++ b/6.2.520
@@ -0,0 +1,709 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.520 (extra)
+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 6.2.520 (extra)
+Problem:    The NSIS installer is outdated.
+Solution:   Make it work with NSIS 2.0.  Also include console executables for
+           Win 95/98/ME and Win NT/2000/XP.  Use LZWA compression.  Use
+           "/oname" to avoid having to rename files before running NSIS.
+Files:     Makefile, nsis/gvim.nsi
+
+
+*** ../vim-6.2.519/Makefile    Fri Mar 12 15:26:18 2004
+--- Makefile   Sun May  2 15:06:28 2004
+***************
+*** 118,124 ****
+  # - Rename the executables to "vimd16.exe", "xxdd16.exe", "installd16.exe" and
+  #   "uninstald16.exe".
+  # 32 bit DOS version:
+! # - Set environment for compiling with DJGPP; "make -f Make_djg.mak".
+  # - "rm testdir/*.out", "make -f Make_djg.mak test" and check the output.
+  # - Rename the executables to "vimd32.exe", "xxdd32.exe", "installd32.exe" and
+  #   "uninstald32.exe".
+--- 120,126 ----
+  # - Rename the executables to "vimd16.exe", "xxdd16.exe", "installd16.exe" and
+  #   "uninstald16.exe".
+  # 32 bit DOS version:
+! # - Set environment for compiling with DJGPP; "gmake -f Make_djg.mak".
+  # - "rm testdir/*.out", "make -f Make_djg.mak test" and check the output.
+  # - Rename the executables to "vimd32.exe", "xxdd32.exe", "installd32.exe" and
+  #   "uninstald32.exe".
+***************
+*** 156,165 ****
+  # - "make doslang".
+  # NSIS self installing exe:
+  # - Unpack the doslang archive on the PC.
+! # - rename gvim_ole.exe to gvim.exe
+! # - rename installw32.exe to install.exe
+! # - rename uninstalw32.exe to uninstal.exe
+! # - rename xxdw32.exe to xxd/xxd.exe
+  # - put gvimext.dll in src/GvimExt and VisVim.dll in src/VisVim (get them
+  #   from a binary archive or build them)
+  # - make sure there is a diff.exe two levels up
+--- 158,166 ----
+  # - "make doslang".
+  # NSIS self installing exe:
+  # - Unpack the doslang archive on the PC.
+! # - Make sure gvim_ole.exe, vimd32.exe, vimw32.exe, installw32.exe,
+! #   uninstalw32.exe and xxdw32.exe have been build as mentioned above.
+! # - Move the files from the "runtime" directory one level up.
+  # - put gvimext.dll in src/GvimExt and VisVim.dll in src/VisVim (get them
+  #   from a binary archive or build them)
+  # - make sure there is a diff.exe two levels up
+*** ../vim-6.2.519/nsis/gvim.nsi       Tue Jun  3 21:43:31 2003
+--- nsis/gvim.nsi      Sun May  2 16:55:20 2004
+***************
+*** 1,6 ****
+  # NSIS file to create a self-installing exe for Vim.
+! # It needs NSIS version 1.80 or later.
+! # Last modification: 2001 Oct 31
+  
+  # WARNING: if you make changes to this script, look out for $0 to be valid,
+  # because this line is very dangerous:               RMDir /r $0
+--- 1,6 ----
+  # NSIS file to create a self-installing exe for Vim.
+! # It requires NSIS version 2.0 or later.
+! # Last change:       2004 May 02
+  
+  # WARNING: if you make changes to this script, look out for $0 to be valid,
+  # because this line is very dangerous:               RMDir /r $0
+***************
+*** 17,40 ****
+  
+  Name "Vim ${VER_MAJOR}.${VER_MINOR}"
+  OutFile gvim${VER_MAJOR}${VER_MINOR}.exe
+! CRCCheck on
+  ComponentText "This will install Vim ${VER_MAJOR}.${VER_MINOR} on your computer."
+  DirText "Choose a directory to install Vim (must end in 'vim')"
+- SetDatablockOptimize on
+  Icon icons\vim_16c.ico
+! EnabledBitmap icons\enabled.bmp
+! DisabledBitmap icons\disabled.bmp
+  UninstallText "This will uninstall Vim ${VER_MAJOR}.${VER_MINOR} from your system."
+  UninstallIcon icons\vim_uninst_16c.ico
+! BGGradient 004000 008200 ffffff
+  LicenseText "You should read the following before installing:"
+  LicenseData ..\doc\uganda.nsis.txt
+  
+  !ifdef HAVE_UPX
+    !packhdr temp.dat "upx --best --compress-icons=1 temp.dat"
+  !endif
+! # This add '\vim' to the user choice automagically.
+! InstallDir "C:\vim"
+  
+  # Types of installs we can perform:
+  InstType Typical
+--- 17,44 ----
+  
+  Name "Vim ${VER_MAJOR}.${VER_MINOR}"
+  OutFile gvim${VER_MAJOR}${VER_MINOR}.exe
+! CRCCheck force
+! SetCompressor lzma
+! SetDatablockOptimize on
+! 
+  ComponentText "This will install Vim ${VER_MAJOR}.${VER_MINOR} on your computer."
+  DirText "Choose a directory to install Vim (must end in 'vim')"
+  Icon icons\vim_16c.ico
+! # NSIS2 uses a different strategy with six diferent images in a strip...
+! #EnabledBitmap icons\enabled.bmp
+! #DisabledBitmap icons\disabled.bmp
+  UninstallText "This will uninstall Vim ${VER_MAJOR}.${VER_MINOR} from your system."
+  UninstallIcon icons\vim_uninst_16c.ico
+! BGGradient 004000 008200 FFFFFF
+  LicenseText "You should read the following before installing:"
+  LicenseData ..\doc\uganda.nsis.txt
+  
+  !ifdef HAVE_UPX
+    !packhdr temp.dat "upx --best --compress-icons=1 temp.dat"
+  !endif
+! 
+! # This adds '\vim' to the user choice automagically.
+! InstallDir $PROGRAMFILES\Vim
+  
+  # Types of installs we can perform:
+  InstType Typical
+***************
+*** 50,62 ****
+    MessageBox MB_YESNO|MB_ICONQUESTION \
+       "This will install Vim ${VER_MAJOR}.${VER_MINOR} on your computer.$\n Continue?" \
+       IDYES NoAbort
+! 
+!   Abort ; causes installer to quit.
+!   NoAbort:
+  
+    # run the install program to check for already installed versions
+    SetOutPath $TEMP
+!   File ..\src\install.exe
+    ExecWait "$TEMP\install.exe -uninstall-check"
+    Delete $TEMP\install.exe
+  
+--- 54,65 ----
+    MessageBox MB_YESNO|MB_ICONQUESTION \
+       "This will install Vim ${VER_MAJOR}.${VER_MINOR} on your computer.$\n Continue?" \
+       IDYES NoAbort
+!          Abort ; causes installer to quit.
+!      NoAbort:
+  
+    # run the install program to check for already installed versions
+    SetOutPath $TEMP
+!   File /oname=install.exe ..\src\installw32.exe
+    ExecWait "$TEMP\install.exe -uninstall-check"
+    Delete $TEMP\install.exe
+  
+***************
+*** 71,77 ****
+  
+    # If ReadINIStr failed for some reason, use default dir.
+    StrCmp $INSTDIR "" 0 IniOK
+!     StrCpy $INSTDIR "C:\vim"
+    IniOK:
+  
+    # Should check for the value of $VIM and use it.  Unfortunately I don't know
+--- 74,80 ----
+  
+    # If ReadINIStr failed for some reason, use default dir.
+    StrCmp $INSTDIR "" 0 IniOK
+!   StrCpy $INSTDIR "$PROGRAMFILES\Vim"
+    IniOK:
+  
+    # Should check for the value of $VIM and use it.  Unfortunately I don't know
+***************
+*** 80,92 ****
+    #   StrCpy $INSTDIR "$VIM"
+    # No_Vim:
+  
+! # User variables:
+! # $0 - holds the directory the executables are installed to
+! # $1 - holds the parameters to be passed to install.exe.  Starts with OLE
+! #      registration (since a non-OLE gvim will not complain, and we want to
+! #      always register an OLE gvim).
+    StrCpy $0 "$INSTDIR\vim${VER_MAJOR}${VER_MINOR}"
+    StrCpy $1 "-register-OLE"
+  
+  FunctionEnd
+  
+--- 83,97 ----
+    #   StrCpy $INSTDIR "$VIM"
+    # No_Vim:
+  
+!   # User variables:
+!   # $0 - holds the directory the executables are installed to
+!   # $1 - holds the parameters to be passed to install.exe.  Starts with OLE
+!   #      registration (since a non-OLE gvim will not complain, and we want to
+!   #      always register an OLE gvim).
+!   # $2 - holds the names to create batch files for
+    StrCpy $0 "$INSTDIR\vim${VER_MAJOR}${VER_MINOR}"
+    StrCpy $1 "-register-OLE"
++   StrCpy $2 "gvim evim gview gvimdiff"
+  
+  FunctionEnd
+  
+***************
+*** 100,107 ****
+  Function .onVerifyInstDir
+    StrCpy $0 $INSTDIR 3 -3
+    StrCmp $0 "vim" PathGood
+!     Abort
+! 
+    PathGood:
+  FunctionEnd
+  
+--- 105,111 ----
+  Function .onVerifyInstDir
+    StrCpy $0 $INSTDIR 3 -3
+    StrCmp $0 "vim" PathGood
+!       Abort
+    PathGood:
+  FunctionEnd
+  
+***************
+*** 110,116 ****
+    MessageBox MB_YESNO|MB_ICONQUESTION \
+       "The installation process has been successfull. Happy Vimming! \
+       $\n$\n Do you want to see the README file now?" IDNO NoReadme
+!      Exec '$0\gvim.exe -R "$0\README.txt"'
+    NoReadme:
+  FunctionEnd
+  
+--- 114,120 ----
+    MessageBox MB_YESNO|MB_ICONQUESTION \
+       "The installation process has been successfull. Happy Vimming! \
+       $\n$\n Do you want to see the README file now?" IDNO NoReadme
+!       Exec '$0\gvim.exe -R "$0\README.txt"'
+    NoReadme:
+  FunctionEnd
+  
+***************
+*** 143,364 ****
+  
+  ##########################################################
+  Section "Vim executables and runtime files"
+! SectionIn 1 2 3
+! 
+! # we need also this here if the user changes the instdir
+! StrCpy $0 "$INSTDIR\vim${VER_MAJOR}${VER_MINOR}"
+! 
+! SetOutPath $0
+! File ..\src\gvim.exe
+! File ..\src\install.exe
+! File ..\src\uninstal.exe
+! File ..\src\vimrun.exe
+! File ..\src\xxd\xxd.exe
+! File ..\..\diff.exe
+! File ..\vimtutor.bat
+! File ..\README.txt
+! File ..\uninstal.txt
+! File ..\*.vim
+! File ..\rgb.txt
+! 
+! SetOutPath $0\colors
+! File ..\colors\*.*
+! 
+! SetOutPath $0\compiler
+! File ..\compiler\*.*
+! 
+! SetOutPath $0\doc
+! File ..\doc\*.txt
+! File ..\doc\tags
+! 
+! SetOutPath $0\ftplugin
+! File ..\ftplugin\*.*
+  
+! SetOutPath $0\indent
+! File ..\indent\*.*
+! 
+! SetOutPath $0\macros
+! File ..\macros\*.*
+! 
+! SetOutPath $0\plugin
+! File ..\plugin\*.*
+! 
+! SetOutPath $0\syntax
+! File ..\syntax\*.*
+! 
+! SetOutPath $0\tools
+! File ..\tools\*.*
+! 
+! SetOutPath $0\tutor
+! File ..\tutor\*.*
+  
+  SectionEnd
+! ##########################################################
+! SectionDivider
+  ##########################################################
+  Section "Create icons on the Desktop"
+! SectionIn 1 3
+! 
+! StrCpy $1 "$1 -install-icons"
+  
+  SectionEnd
+  ##########################################################
+  Section "Add Vim to the Start Menu"
+! SectionIn 1 3
+! 
+! StrCpy $1 "$1 -add-start-menu"
+  
+  SectionEnd
+  ##########################################################
+  Section "Add an Edit-with-Vim context menu entry"
+! SectionIn 1 3
+! 
+! SetOutPath $0
+! File ..\src\GvimExt\gvimext.dll
+! 
+! StrCpy $1 "$1 -install-popup"
+  
+  SectionEnd
+! ##########################################################
+! SectionDivider
+  ##########################################################
+  Section "Create a _vimrc if it doesn't exist"
+! SectionIn 1 3
+! 
+! StrCpy $1 "$1 -create-vimrc"
+  
+  SectionEnd
+  ##########################################################
+  Section "Create .bat files for command line use"
+! SectionIn 3
+! 
+! StrCpy $1 "$1 -create-batfiles gvim evim gview gvimdiff"
+  
+  SectionEnd
+  ##########################################################
+  Section "Create plugin directories in HOME or VIM"
+! SectionIn 1 3
+! 
+! StrCpy $1 "$1 -create-directories home"
+  
+  SectionEnd
+  ##########################################################
+  Section "Create plugin directories in VIM"
+! SectionIn 3
+! 
+! StrCpy $1 "$1 -create-directories vim"
+  
+  SectionEnd
+  
+  ##########################################################
+- SectionDivider
+- ##########################################################
+  Section "VisVim Extension for MS Visual Studio"
+! SectionIn 3
+! 
+! SetOutPath $0
+! File ..\src\VisVim\VisVim.dll
+! File ..\src\VisVim\README_VisVim.txt
+! ExecWait "regsvr32.exe /s $0\VisVim.dll"
+  
+  SectionEnd
+  ##########################################################
+  !ifdef HAVE_NLS
+! Section "Native Language Support"
+! SectionIn 1 3
+! 
+! SetOutPath $0\lang
+! File /r ..\lang\*.*
+! SetOutPath $0\keymap
+! File ..\keymap\README.txt
+! File ..\keymap\*.vim
+! SetOutPath $0
+! File ..\libintl.dll
+  
+! SectionEnd
+  !endif
+  ##########################################################
+  Section -call_install_exe
+! 
+! SetOutPath $0
+!   ExecWait "$0\install.exe $1"
+! 
+  SectionEnd
+  ##########################################################
+  Section -post
+! 
+!   BringToFront
+! 
+  SectionEnd
+  
+  ##########################################################
+  Section Uninstall
+  
+! # Apparently $INSTDIR is set to the directory where the uninstaller is created.
+! # Thus the "vim61" directory is included in it.
+! StrCpy $0 "$INSTDIR"
+! 
+! ; If VisVim was installed, unregister the DLL
+! IfFileExists "$0\VisVim.dll" Has_VisVim No_VisVim
+! Has_VisVim:
+!    ExecWait "regsvr32.exe /u /s $0\VisVim.dll"
+! 
+! No_VisVim:
+! 
+! ; delete the context menu entry and batch files
+! ExecWait "$0\uninstal.exe -nsis"
+! 
+! # We may have been put to the background when uninstall did something.
+! BringToFront
+! 
+! # ask the user if the Vim version dir must be removed
+! MessageBox MB_YESNO|MB_ICONQUESTION \
+!   "Would you like to delete $0?$\n \
+!    $\nIt contains the Vim executables and runtime files." IDNO NoRemoveExes
+! 
+! Delete /REBOOTOK $0\gvimext.dll
+! ClearErrors
+! RMDir /r $0
+! 
+! IfErrors ErrorMess NoErrorMess
+!   ErrorMess:
+!     MessageBox MB_OK|MB_ICONEXCLAMATION \
+!       "Some files in $0 have not been deleted!$\nYou must do it manually."
+!   NoErrorMess:
+! 
+! NoRemoveExes:
+! 
+! # get the parent dir of the installation
+! Push $INSTDIR
+! Call un.GetParent
+! Pop $0
+! 
+! StrCpy $1 $0
+! 
+! # if a plugin dir was created at installation ask the user to remove it
+! # first look in the root of the installation then in HOME
+! IfFileExists $1\vimfiles AskRemove 0
+!     ReadEnvStr $1 "HOME"
+!     StrCmp $1 "" NoRemove 0
+! 
+!     IfFileExists $1\vimfiles 0 NoRemove
+! 
+!   AskRemove:
+!     MessageBox MB_YESNO|MB_ICONQUESTION \
+!       "Remove all files in your $1\vimfiles directory? \
+!       $\nIf you have created something there that you want to keep, click No" IDNO Fin
+!     RMDir /r $1\vimfiles
+!   NoRemove:
+! 
+! # ask the user if the Vim root dir must be removed
+! MessageBox MB_YESNO|MB_ICONQUESTION \
+!   "Would you like to remove $0?$\n \
+!    $\nIt contains your Vim configuration files!" IDNO NoDelete
+!    RMDir /r $0 ; skipped if no
+! NoDelete:
+! 
+! Fin:
+! 
+! Call un.onUnInstSuccess
+  
+  SectionEnd
+--- 147,371 ----
+  
+  ##########################################################
+  Section "Vim executables and runtime files"
+!      SectionIn 1 2 3
+  
+!      # we need also this here if the user changes the instdir
+!      StrCpy $0 "$INSTDIR\vim${VER_MAJOR}${VER_MINOR}"
+  
++      SetOutPath $0
++      File /oname=gvim.exe ..\src\gvim_ole.exe
++      File /oname=install.exe ..\src\installw32.exe
++      File /oname=uninstal.exe ..\src\uninstalw32.exe
++      File ..\src\vimrun.exe
++      File /oname=xxd.exe ..\src\xxdw32.exe
++      File ..\..\diff.exe
++      File ..\vimtutor.bat
++      File ..\README.txt
++      File ..\uninstal.txt
++      File ..\*.vim
++      File ..\rgb.txt
++ 
++      SetOutPath $0\colors
++      File ..\colors\*.*
++ 
++      SetOutPath $0\compiler
++      File ..\compiler\*.*
++ 
++      SetOutPath $0\doc
++      File ..\doc\*.txt
++      File ..\doc\tags
++ 
++      SetOutPath $0\ftplugin
++      File ..\ftplugin\*.*
++ 
++      SetOutPath $0\indent
++      File ..\indent\*.*
++ 
++      SetOutPath $0\macros
++      File ..\macros\*.*
++ 
++      SetOutPath $0\plugin
++      File ..\plugin\*.*
++ 
++      SetOutPath $0\syntax
++      File ..\syntax\*.*
++ 
++      SetOutPath $0\tools
++      File ..\tools\*.*
++ 
++      SetOutPath $0\tutor
++      File ..\tutor\*.*
++ SectionEnd
++ 
++ ##########################################################
++ Section "Vim console program (vim.exe)"
++      SectionIn 1 3
++ 
++      SetOutPath $0
++      ReadRegStr $R0 HKLM \
++         "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
++      IfErrors 0 lbl_winnt
++          # Windows 95/98/ME
++          File /oname=vim.exe ..\src\vimd32.exe
++          Goto lbl_done
++      lbl_winnt:
++          # Windows NT/2000/XT
++          File /oname=vim.exe ..\src\vimw32.exe
++      lbl_done:
++      StrCpy $2 "$2 vim view vimdiff"
+  SectionEnd
+! 
+  ##########################################################
+  Section "Create icons on the Desktop"
+!      SectionIn 1 3
+  
++      StrCpy $1 "$1 -install-icons"
+  SectionEnd
++ 
+  ##########################################################
+  Section "Add Vim to the Start Menu"
+!      SectionIn 1 3
+  
++      StrCpy $1 "$1 -add-start-menu"
+  SectionEnd
++ 
+  ##########################################################
+  Section "Add an Edit-with-Vim context menu entry"
+!      SectionIn 1 3
+  
++      SetOutPath $0
++      File ..\src\GvimExt\gvimext.dll
++      StrCpy $1 "$1 -install-popup"
+  SectionEnd
+! 
+  ##########################################################
+  Section "Create a _vimrc if it doesn't exist"
+!      SectionIn 1 3
+  
++      StrCpy $1 "$1 -create-vimrc"
+  SectionEnd
++ 
+  ##########################################################
+  Section "Create .bat files for command line use"
+!      SectionIn 3
+  
++      StrCpy $1 "$1 -create-batfiles $2"
+  SectionEnd
++ 
+  ##########################################################
+  Section "Create plugin directories in HOME or VIM"
+!      SectionIn 1 3
+  
++      StrCpy $1 "$1 -create-directories home"
+  SectionEnd
++ 
+  ##########################################################
+  Section "Create plugin directories in VIM"
+!      SectionIn 3
+  
++      StrCpy $1 "$1 -create-directories vim"
+  SectionEnd
+  
+  ##########################################################
+  Section "VisVim Extension for MS Visual Studio"
+!      SectionIn 3
+  
++      SetOutPath $0
++      File ..\src\VisVim\VisVim.dll
++      File ..\src\VisVim\README_VisVim.txt
++      ExecWait "regsvr32.exe /s $0\VisVim.dll"
+  SectionEnd
++ 
+  ##########################################################
+  !ifdef HAVE_NLS
+!      Section "Native Language Support"
+!              SectionIn 1 3
+  
+!              SetOutPath $0\lang
+!              File /r ..\lang\*.*
+!              SetOutPath $0\keymap
+!              File ..\keymap\README.txt
+!              File ..\keymap\*.vim
+!              SetOutPath $0
+!              File ..\libintl.dll
+!      SectionEnd
+  !endif
++ 
+  ##########################################################
+  Section -call_install_exe
+!      SetOutPath $0
+!      ExecWait "$0\install.exe $1"
+  SectionEnd
++ 
+  ##########################################################
+  Section -post
+!      BringToFront
+  SectionEnd
+  
+  ##########################################################
+  Section Uninstall
++      # Apparently $INSTDIR is set to the directory where the uninstaller is
++      # created.  Thus the "vim61" directory is included in it.
++      StrCpy $0 "$INSTDIR"
++ 
++      # If VisVim was installed, unregister the DLL
++      IfFileExists "$0\VisVim.dll" Has_VisVim No_VisVim
++      Has_VisVim:
++         ExecWait "regsvr32.exe /u /s $0\VisVim.dll"
++ 
++      No_VisVim:
++ 
++      # delete the context menu entry and batch files
++      ExecWait "$0\uninstal.exe -nsis"
++ 
++      # We may have been put to the background when uninstall did something.
++      BringToFront
++ 
++      # ask the user if the Vim version dir must be removed
++      MessageBox MB_YESNO|MB_ICONQUESTION \
++        "Would you like to delete $0?$\n \
++         $\nIt contains the Vim executables and runtime files." IDNO NoRemoveExes
++ 
++      Delete /REBOOTOK $0\gvimext.dll
++      ClearErrors
++      RMDir /r $0
++ 
++      IfErrors ErrorMess NoErrorMess
++        ErrorMess:
++          MessageBox MB_OK|MB_ICONEXCLAMATION \
++            "Some files in $0 have not been deleted!$\nYou must do it manually."
++        NoErrorMess:
++ 
++      NoRemoveExes:
++      # get the parent dir of the installation
++      Push $INSTDIR
++      Call un.GetParent
++      Pop $0
++      StrCpy $1 $0
++ 
++      # if a plugin dir was created at installation ask the user to remove it
++      # first look in the root of the installation then in HOME
++      IfFileExists $1\vimfiles AskRemove 0
++          ReadEnvStr $1 "HOME"
++          StrCmp $1 "" NoRemove 0
++ 
++          IfFileExists $1\vimfiles 0 NoRemove
++ 
++        AskRemove:
++          MessageBox MB_YESNO|MB_ICONQUESTION \
++            "Remove all files in your $1\vimfiles directory? \
++            $\nIf you have created something there that you want to keep, click No" IDNO Fin
++          RMDir /r $1\vimfiles
++        NoRemove:
++ 
++      # ask the user if the Vim root dir must be removed
++      MessageBox MB_YESNO|MB_ICONQUESTION \
++        "Would you like to remove $0?$\n \
++         $\nIt contains your Vim configuration files!" IDNO NoDelete
++         RMDir /r $0 ; skipped if no
++      NoDelete:
+  
+!      Fin:
+!      Call un.onUnInstSuccess
+  
+  SectionEnd
+*** ../vim-6.2.519/src/version.c       Sat May  1 21:04:31 2004
+--- src/version.c      Sun May  2 16:46:38 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+  {   /* Add new patch number below this line */
++ /**/
++     520,
+  /**/
+
+-- 
+From "know your smileys":
+ *<|:-)        Santa Claus (Ho Ho Ho)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.521 b/6.2.521
new file mode 100644 (file)
index 0000000..172c0b8
--- /dev/null
+++ b/6.2.521
@@ -0,0 +1,53 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.521
+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 6.2.521
+Problem:    When using silent Ex mode the "changing a readonly file" warning
+           is omitted but the one second wait isn't. (Yakov Lerner)
+Solution:   Skip the delay when "silent_mode" is set.
+Files:     src/misc1.c
+
+
+*** ../vim-6.2.520/src/misc1.c Mon Apr 26 19:00:58 2004
+--- src/misc1.c        Sun May  2 16:15:50 2004
+***************
+*** 2774,2780 ****
+                                                  hl_attr(HLF_W) | MSG_HIST);
+       msg_clr_eos();
+       (void)msg_end();
+!      if (msg_silent == 0)
+       {
+           out_flush();
+           ui_delay(1000L, TRUE); /* give the user time to think about it */
+--- 2774,2780 ----
+                                                  hl_attr(HLF_W) | MSG_HIST);
+       msg_clr_eos();
+       (void)msg_end();
+!      if (msg_silent == 0 && !silent_mode)
+       {
+           out_flush();
+           ui_delay(1000L, TRUE); /* give the user time to think about it */
+*** ../vim-6.2.520/src/version.c       Sun May  2 16:57:24 2004
+--- src/version.c      Sun May  2 16:59:21 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+  {   /* Add new patch number below this line */
++ /**/
++     521,
+  /**/
+
+-- 
+From "know your smileys":
+ ...---...   SOS
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.522 b/6.2.522
new file mode 100644 (file)
index 0000000..14953ec
--- /dev/null
+++ b/6.2.522
@@ -0,0 +1,60 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.522
+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 6.2.522
+Problem:    GUI: when changing 'cmdheight' in the gvimrc file the window
+           layout is messed up. (Keith Dart)
+Solution:   Skip updating the window layout when changing 'cmdheight' while
+           still starting up.
+Files:     src/option.c
+
+
+*** ../vim-6.2.521/src/option.c        Thu Apr 29 16:36:50 2004
+--- src/option.c       Mon May  3 14:16:40 2004
+***************
+*** 6741,6747 ****
+           errmsg = e_positive;
+           p_ch = 1;
+       }
+!      if (p_ch != old_value)
+           command_height(old_value);
+      }
+  
+--- 6753,6766 ----
+           errmsg = e_positive;
+           p_ch = 1;
+       }
+! 
+!      /* Only compute the new window layout when startup has been
+!       * completed. Otherwise the frame sizes may be wrong. */
+!      if (p_ch != old_value && full_screen
+! #ifdef FEAT_GUI
+!              && !gui.starting
+! #endif
+!         )
+           command_height(old_value);
+      }
+  
+*** ../vim-6.2.521/src/version.c       Sun May  2 17:00:06 2004
+--- src/version.c      Mon May  3 21:19:36 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+  {   /* Add new patch number below this line */
++ /**/
++     522,
+  /**/
+
+-- 
+A fool learns from his mistakes, a wise man from someone elses.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.523 b/6.2.523
new file mode 100644 (file)
index 0000000..66877c1
--- /dev/null
+++ b/6.2.523
@@ -0,0 +1,96 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.523
+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 6.2.523
+Problem:    When loading a session and aborting when a swap file already
+           exists, the user is left with useless windows. (Robert Webb)
+Solution:   Load one file before creating the windows.
+Files:     src/ex_docmd.c
+
+
+*** ../vim-6.2.522/src/ex_docmd.c      Fri Apr 23 12:02:42 2004
+--- src/ex_docmd.c     Thu Apr 29 13:45:57 2004
+***************
+*** 8569,8574 ****
+--- 8567,8573 ----
+      int              restore_size = TRUE;
+      win_T    *wp;
+      char_u   *sname;
++     win_T    *edited_win = NULL;
+  
+      if (ssop_flags & SSOP_BUFFERS)
+       only_save_windows = FALSE;              /* Save ALL buffers */
+***************
+*** 8657,8662 ****
+--- 8656,8684 ----
+  #endif
+  
+      /*
++      * Before creating the window layout, try loading one file.  If this is
++      * aborted we don't end up with a number of useless windows.
++      * This may have side effects! (e.g., compressed or network file).
++      */
++     for (wp = firstwin; wp != NULL; wp = wp->w_next)
++     {
++      if (ses_do_win(wp)
++              && wp->w_buffer->b_ffname != NULL
++              && !wp->w_buffer->b_help
++ #ifdef FEAT_QUICKFIX
++              && !bt_nofile(wp->w_buffer)
++ #endif
++              )
++      {
++          if (fputs("edit ", fd) < 0
++                  || ses_fname(fd, wp->w_buffer, &ssop_flags) == FAIL)
++              return FAIL;
++          edited_win = wp;
++          break;
++      }
++     }
++ 
++     /*
+       * Save current window layout.
+       */
+      if (put_line(fd, "set splitbelow splitright") == FAIL)
+***************
+*** 8702,8708 ****
+      {
+       if (!ses_do_win(wp))
+           continue;
+!      if (put_view(fd, wp, TRUE, &ssop_flags) == FAIL)
+           return FAIL;
+       if (nr > 1 && put_line(fd, "wincmd w") == FAIL)
+           return FAIL;
+--- 8724,8730 ----
+      {
+       if (!ses_do_win(wp))
+           continue;
+!      if (put_view(fd, wp, wp != edited_win, &ssop_flags) == FAIL)
+           return FAIL;
+       if (nr > 1 && put_line(fd, "wincmd w") == FAIL)
+           return FAIL;
+*** ../vim-6.2.522/src/version.c       Mon May  3 21:26:46 2004
+--- src/version.c      Mon May  3 21:28:08 2004
+***************
+*** 639,640 ****
+--- 639,642 ----
+  {   /* Add new patch number below this line */
++ /**/
++     523,
+  /**/
+
+-- 
+I AM THANKFUL...
+...for all the complaining I hear about the government
+because it means we have freedom of speech.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.524 b/6.2.524
new file mode 100644 (file)
index 0000000..1f80bb8
--- /dev/null
+++ b/6.2.524
@@ -0,0 +1,1088 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.524 (extra)
+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 6.2.524 (extra, after 6.2.520)
+Problem:    Win32: (un)installing gvimext.dll may fail if it was used.
+           The desktop and start menu links are created for the current user
+           instead of all users.
+           Using the home directory as working directory for the links is a
+           bad idea for multi-user systems.
+           Cannot use Vim from the "Open With..." menu.
+Solution:   Force a reboot if necessary. (Alejandro Lopez-Valencia)  Also use
+           macros for the directory of the source and runtime files.  Use
+           "CSIDL_COMMON_*" instead of "CSIDL_*" when possible.
+           Do not specify a working directory in the links.
+           Add Vim to the "Open With..." menu. (Giuseppe Bilotta)
+Files:     nsis/gvim.nsi, src/dosinst.c, src/dosinst.h, src/uninstal.c
+
+
+*** ../vim-6.2.523/nsis/gvim.nsi       Sun May  2 16:57:24 2004
+--- nsis/gvim.nsi      Tue May  4 15:49:21 2004
+***************
+*** 3,11 ****
+  # Last change:       2004 May 02
+  
+  # WARNING: if you make changes to this script, look out for $0 to be valid,
+! # because this line is very dangerous:               RMDir /r $0
+  
+! # comment next line if you don't have UPX.
+  # Get it at http://upx.sourceforge.net
+  !define HAVE_UPX
+  
+--- 3,20 ----
+  # Last change:       2004 May 02
+  
+  # WARNING: if you make changes to this script, look out for $0 to be valid,
+! # because uninstall deletes most files in $0.
+  
+! # Location of gvim_ole.exe, vimd32.exe, GvimExt/*, etc.
+! !define VIMSRC "..\src"
+! 
+! # Location of runtime files
+! !define VIMRT ".."
+! 
+! # Location of extra tools: diff.exe
+! !define VIMTOOLS ..\..
+! 
+! # Comment the next line if you don't have UPX.
+  # Get it at http://upx.sourceforge.net
+  !define HAVE_UPX
+  
+***************
+*** 15,20 ****
+--- 24,33 ----
+  !define VER_MINOR 2
+  !define VER_MAJOR 6
+  
++ # ----------- No configurable settings below this line -----------
++ 
++ !include UpgradeDLL.nsh              # for VisVim.dll
++ 
+  Name "Vim ${VER_MAJOR}.${VER_MINOR}"
+  OutFile gvim${VER_MAJOR}${VER_MINOR}.exe
+  CRCCheck force
+***************
+*** 31,44 ****
+  UninstallIcon icons\vim_uninst_16c.ico
+  BGGradient 004000 008200 FFFFFF
+  LicenseText "You should read the following before installing:"
+! LicenseData ..\doc\uganda.nsis.txt
+  
+  !ifdef HAVE_UPX
+    !packhdr temp.dat "upx --best --compress-icons=1 temp.dat"
+  !endif
+  
+  # This adds '\vim' to the user choice automagically.
+! InstallDir $PROGRAMFILES\Vim
+  
+  # Types of installs we can perform:
+  InstType Typical
+--- 44,57 ----
+  UninstallIcon icons\vim_uninst_16c.ico
+  BGGradient 004000 008200 FFFFFF
+  LicenseText "You should read the following before installing:"
+! LicenseData ${VIMRT}\doc\uganda.nsis.txt
+  
+  !ifdef HAVE_UPX
+    !packhdr temp.dat "upx --best --compress-icons=1 temp.dat"
+  !endif
+  
+  # This adds '\vim' to the user choice automagically.
+! InstallDir "$PROGRAMFILES\Vim"
+  
+  # Types of installs we can perform:
+  InstType Typical
+***************
+*** 59,65 ****
+  
+    # run the install program to check for already installed versions
+    SetOutPath $TEMP
+!   File /oname=install.exe ..\src\installw32.exe
+    ExecWait "$TEMP\install.exe -uninstall-check"
+    Delete $TEMP\install.exe
+  
+--- 72,78 ----
+  
+    # run the install program to check for already installed versions
+    SetOutPath $TEMP
+!   File /oname=install.exe ${VIMSRC}\installw32.exe
+    ExecWait "$TEMP\install.exe -uninstall-check"
+    Delete $TEMP\install.exe
+  
+***************
+*** 153,200 ****
+       StrCpy $0 "$INSTDIR\vim${VER_MAJOR}${VER_MINOR}"
+  
+       SetOutPath $0
+!      File /oname=gvim.exe ..\src\gvim_ole.exe
+!      File /oname=install.exe ..\src\installw32.exe
+!      File /oname=uninstal.exe ..\src\uninstalw32.exe
+!      File ..\src\vimrun.exe
+!      File /oname=xxd.exe ..\src\xxdw32.exe
+!      File ..\..\diff.exe
+!      File ..\vimtutor.bat
+!      File ..\README.txt
+       File ..\uninstal.txt
+!      File ..\*.vim
+!      File ..\rgb.txt
+  
+       SetOutPath $0\colors
+!      File ..\colors\*.*
+  
+       SetOutPath $0\compiler
+!      File ..\compiler\*.*
+  
+       SetOutPath $0\doc
+!      File ..\doc\*.txt
+!      File ..\doc\tags
+  
+       SetOutPath $0\ftplugin
+!      File ..\ftplugin\*.*
+  
+       SetOutPath $0\indent
+!      File ..\indent\*.*
+  
+       SetOutPath $0\macros
+!      File ..\macros\*.*
+  
+       SetOutPath $0\plugin
+!      File ..\plugin\*.*
+  
+       SetOutPath $0\syntax
+!      File ..\syntax\*.*
+  
+       SetOutPath $0\tools
+!      File ..\tools\*.*
+  
+       SetOutPath $0\tutor
+!      File ..\tutor\*.*
+  SectionEnd
+  
+  ##########################################################
+--- 166,213 ----
+       StrCpy $0 "$INSTDIR\vim${VER_MAJOR}${VER_MINOR}"
+  
+       SetOutPath $0
+!      File /oname=gvim.exe ${VIMSRC}\gvim_ole.exe
+!      File /oname=install.exe ${VIMSRC}\installw32.exe
+!      File /oname=uninstal.exe ${VIMSRC}\uninstalw32.exe
+!      File ${VIMSRC}\vimrun.exe
+!      File /oname=xxd.exe ${VIMSRC}\xxdw32.exe
+!      File ${VIMTOOLS}\diff.exe
+!      File ${VIMRT}\vimtutor.bat
+!      File ${VIMRT}\README.txt
+       File ..\uninstal.txt
+!      File ${VIMRT}\*.vim
+!      File ${VIMRT}\rgb.txt
+  
+       SetOutPath $0\colors
+!      File ${VIMRT}\colors\*.*
+  
+       SetOutPath $0\compiler
+!      File ${VIMRT}\compiler\*.*
+  
+       SetOutPath $0\doc
+!      File ${VIMRT}\doc\*.txt
+!      File ${VIMRT}\doc\tags
+  
+       SetOutPath $0\ftplugin
+!      File ${VIMRT}\ftplugin\*.*
+  
+       SetOutPath $0\indent
+!      File ${VIMRT}\indent\*.*
+  
+       SetOutPath $0\macros
+!      File ${VIMRT}\macros\*.*
+  
+       SetOutPath $0\plugin
+!      File ${VIMRT}\plugin\*.*
+  
+       SetOutPath $0\syntax
+!      File ${VIMRT}\syntax\*.*
+  
+       SetOutPath $0\tools
+!      File ${VIMRT}\tools\*.*
+  
+       SetOutPath $0\tutor
+!      File ${VIMRT}\tutor\*.*
+  SectionEnd
+  
+  ##########################################################
+***************
+*** 206,221 ****
+          "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
+       IfErrors 0 lbl_winnt
+           # Windows 95/98/ME
+!          File /oname=vim.exe ..\src\vimd32.exe
+           Goto lbl_done
+       lbl_winnt:
+           # Windows NT/2000/XT
+!          File /oname=vim.exe ..\src\vimw32.exe
+       lbl_done:
+       StrCpy $2 "$2 vim view vimdiff"
+  SectionEnd
+  
+  ##########################################################
+  Section "Create icons on the Desktop"
+       SectionIn 1 3
+  
+--- 219,241 ----
+          "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
+       IfErrors 0 lbl_winnt
+           # Windows 95/98/ME
+!          File /oname=vim.exe ${VIMSRC}\vimd32.exe
+           Goto lbl_done
+       lbl_winnt:
+           # Windows NT/2000/XT
+!          File /oname=vim.exe ${VIMSRC}\vimw32.exe
+       lbl_done:
+       StrCpy $2 "$2 vim view vimdiff"
+  SectionEnd
+  
+  ##########################################################
++ Section "Create .bat files for command line use"
++      SectionIn 3
++ 
++      StrCpy $1 "$1 -create-batfiles $2"
++ SectionEnd
++ 
++ ##########################################################
+  Section "Create icons on the Desktop"
+       SectionIn 1 3
+  
+***************
+*** 233,241 ****
+  Section "Add an Edit-with-Vim context menu entry"
+       SectionIn 1 3
+  
+       SetOutPath $0
+!      File ..\src\GvimExt\gvimext.dll
+!      StrCpy $1 "$1 -install-popup"
+  SectionEnd
+  
+  ##########################################################
+--- 253,284 ----
+  Section "Add an Edit-with-Vim context menu entry"
+       SectionIn 1 3
+  
++      # Be aware of this sequence of events:
++      # - user uninstalls Vim, gvimext.dll can't be removed (it's in use) and
++      #   is scheduled to be removed at next reboot.
++      # - user installs Vim in same directory, gvimext.dll still exists.
++      # If we now skip installing gvimext.dll, it will disappear at the next
++      # reboot.  Thus when copying gvimext.dll fails always schedule it to be
++      # installed at the next reboot.  Can't use UpgradeDLL!
++      # We don't ask the user to reboot, the old dll will keep on working.
+       SetOutPath $0
+!      ClearErrors
+!      SetOverwrite try
+!      File /oname=gvimext.dll ${VIMSRC}\GvimExt\gvimext.dll
+!      IfErrors 0 GvimExtDone
+! 
+!      # Can't copy gvimext.dll, create it under another name and rename it on
+!      # next reboot.
+!      GetTempFileName $3 $0
+!      File /oname=$3 ${VIMSRC}\GvimExt\gvimext.dll
+!      Rename /REBOOTOK $3 $0\gvimext.dll
+! 
+!      GvimExtDone:
+!      SetOverwrite lastused
+! 
+!      # We don't have a separate entry for the "Open With..." menu, assume
+!      # the user wants either both or none.
+!      StrCpy $1 "$1 -install-popup -install-openwith"
+  SectionEnd
+  
+  ##########################################################
+***************
+*** 246,258 ****
+  SectionEnd
+  
+  ##########################################################
+- Section "Create .bat files for command line use"
+-      SectionIn 3
+- 
+-      StrCpy $1 "$1 -create-batfiles $2"
+- SectionEnd
+- 
+- ##########################################################
+  Section "Create plugin directories in HOME or VIM"
+       SectionIn 1 3
+  
+--- 289,294 ----
+***************
+*** 271,279 ****
+       SectionIn 3
+  
+       SetOutPath $0
+!      File ..\src\VisVim\VisVim.dll
+!      File ..\src\VisVim\README_VisVim.txt
+!      ExecWait "regsvr32.exe /s $0\VisVim.dll"
+  SectionEnd
+  
+  ##########################################################
+--- 307,314 ----
+       SectionIn 3
+  
+       SetOutPath $0
+!      !insertmacro UpgradeDLL "${VIMSRC}\VisVim\VisVim.dll" "$0\VisVim.dll" "$0"
+!      File ${VIMSRC}\VisVim\README_VisVim.txt
+  SectionEnd
+  
+  ##########################################################
+***************
+*** 282,293 ****
+               SectionIn 1 3
+  
+               SetOutPath $0\lang
+!              File /r ..\lang\*.*
+               SetOutPath $0\keymap
+!              File ..\keymap\README.txt
+!              File ..\keymap\*.vim
+               SetOutPath $0
+!              File ..\libintl.dll
+       SectionEnd
+  !endif
+  
+--- 317,328 ----
+               SectionIn 1 3
+  
+               SetOutPath $0\lang
+!              File /r ${VIMRT}\lang\*.*
+               SetOutPath $0\keymap
+!              File ${VIMRT}\keymap\README.txt
+!              File ${VIMRT}\keymap\*.vim
+               SetOutPath $0
+!              File ${VIMRT}\libintl.dll
+       SectionEnd
+  !endif
+  
+***************
+*** 308,314 ****
+       # created.  Thus the "vim61" directory is included in it.
+       StrCpy $0 "$INSTDIR"
+  
+!      # If VisVim was installed, unregister the DLL
+       IfFileExists "$0\VisVim.dll" Has_VisVim No_VisVim
+       Has_VisVim:
+          ExecWait "regsvr32.exe /u /s $0\VisVim.dll"
+--- 343,349 ----
+       # created.  Thus the "vim61" directory is included in it.
+       StrCpy $0 "$INSTDIR"
+  
+!      # If VisVim was installed, unregister the DLL.
+       IfFileExists "$0\VisVim.dll" Has_VisVim No_VisVim
+       Has_VisVim:
+          ExecWait "regsvr32.exe /u /s $0\VisVim.dll"
+***************
+*** 326,340 ****
+         "Would you like to delete $0?$\n \
+          $\nIt contains the Vim executables and runtime files." IDNO NoRemoveExes
+  
+!      Delete /REBOOTOK $0\gvimext.dll
+       ClearErrors
+!      RMDir /r $0
+  
+       IfErrors ErrorMess NoErrorMess
+         ErrorMess:
+           MessageBox MB_OK|MB_ICONEXCLAMATION \
+             "Some files in $0 have not been deleted!$\nYou must do it manually."
+         NoErrorMess:
+  
+       NoRemoveExes:
+       # get the parent dir of the installation
+--- 361,397 ----
+         "Would you like to delete $0?$\n \
+          $\nIt contains the Vim executables and runtime files." IDNO NoRemoveExes
+  
+!      Delete /REBOOTOK $0\*.dll
+       ClearErrors
+!      # Remove everything but *.dll files.  Avoids that
+!      # a lot remains when gvimext.dll cannot be deleted.
+!      RMDir /r $0\colors
+!      RMDir /r $0\compiler
+!      RMDir /r $0\doc
+!      RMDir /r $0\ftplugin
+!      RMDir /r $0\indent
+!      RMDir /r $0\macros
+!      RMDir /r $0\plugin
+!      RMDir /r $0\syntax
+!      RMDir /r $0\tools
+!      RMDir /r $0\tutor
+!      RMDir /r $0\VisVim
+!      RMDir /r $0\lang
+!      RMDir /r $0\keymap
+!      Delete $0\*.exe
+!      Delete $0\*.bat
+!      Delete $0\*.vim
+!      Delete $0\*.txt
+  
+       IfErrors ErrorMess NoErrorMess
+         ErrorMess:
+           MessageBox MB_OK|MB_ICONEXCLAMATION \
+             "Some files in $0 have not been deleted!$\nYou must do it manually."
+         NoErrorMess:
++ 
++      # No error message if the "vim62" directory can't be removed, the
++      # gvimext.dll may still be there.
++      RMDir $0
+  
+       NoRemoveExes:
+       # get the parent dir of the installation
+*** ../vim-6.2.523/src/dosinst.c       Sun Apr 25 16:29:55 2004
+--- src/dosinst.c      Mon May  3 22:24:47 2004
+***************
+*** 32,38 ****
+--- 32,40 ----
+                                    directory to write .bat files in */
+  char *default_vim_dir = NULL;  /* when not NULL, use this as the default
+                                    install dir for NSIS */
++ #if 0
+  char homedir[BUFSIZE];       /* home directory or "" */
++ #endif
+  
+  /*
+   * Structure used for each choice the user can make.
+***************
+*** 113,118 ****
+--- 115,123 ----
+  /* non-zero when selected to install the popup menu entry. */
+  static int   install_popup = 0;
+  
++ /* non-zero when selected to install the "Open with" entry. */
++ static int   install_openwith = 0;
++ 
+  /* non-zero when need to add an uninstall entry in the registry */
+  static int   need_uninstall_entry = 0;
+  
+***************
+*** 679,684 ****
+--- 684,690 ----
+      else
+       *oldvimrc = NUL;
+  
++ #if 0 /* currently not used */
+      /*
+       * Get default home directory.
+       * Prefer $HOME if it's set.  For Win NT use $HOMEDRIVE and $HOMEPATH.
+***************
+*** 709,714 ****
+--- 715,721 ----
+               *homedir = NUL;
+       }
+      }
++ #endif
+  }
+  
+  /*
+***************
+*** 1311,1316 ****
+--- 1318,1324 ----
+  /*
+   * Add some entries to the registry:
+   * - to add "Edit with Vim" to the context * menu
++  * - to add Vim to the "Open with..." list
+   * - to uninstall Vim
+   */
+  /*ARGSUSED*/
+***************
+*** 1367,1372 ****
+--- 1375,1396 ----
+           fprintf(fd, "\n");
+       }
+  
++      if (install_openwith)
++      {
++          char        bufg[BUFSIZE];
++          struct stat st;
++ 
++          printf("Creating \"Open with ...\" list entry\n");
++ 
++          fprintf(fd, "[HKEY_CLASSES_ROOT\\Applications\\gvim.exe]\n\n");
++          fprintf(fd, "[HKEY_CLASSES_ROOT\\Applications\\gvim.exe\\shell]\n\n");
++          fprintf(fd, "[HKEY_CLASSES_ROOT\\Applications\\gvim.exe\\shell\\edit]\n\n");
++          fprintf(fd, "[HKEY_CLASSES_ROOT\\Applications\\gvim.exe\\shell\\edit\\command]\n");
++          fprintf(fd, "@=\"%sgvim.exe \\\"%%1\\\"\"\n\n", buf);
++          fprintf(fd, "[HKEY_CLASSES_ROOT\\.htm\\OpenWithList\\gvim.exe]\n\n");
++          fprintf(fd, "[HKEY_CLASSES_ROOT\\*\\OpenWithList\\gvim.exe]\n\n");
++      }
++ 
+       printf("Creating an uninstall entry\n");
+  
+       /* The registry entries for uninstalling the menu */
+***************
+*** 1435,1440 ****
+--- 1459,1502 ----
+       add_dummy_choice();
+  }
+  
++     static void
++ change_openwith_choice(int idx)
++ {
++     if (install_openwith == 0)
++     {
++      choices[idx].text = "Add Vim to the \"Open With...\" list in the popup menu for the right\n    mouse button so that you can edit any file with Vim";
++      install_openwith = 1;
++     }
++     else
++     {
++      choices[idx].text = "Do NOT add Vim to the \"Open With...\" list in the popup menu for the\n    right mouse button to edit any file with Vim";
++      install_openwith = 0;
++     }
++ }
++ 
++ /*
++  * Only add the choice for the open-with menu entry when gvim.exe was found
++  * and and regedit.exe exist.
++  */
++     static void
++ init_openwith_choice(void)
++ {
++     if (has_gvim
++ #ifndef WIN3264
++          && searchpath("regedit.exe") != NULL
++ #endif
++        )
++     {
++      choices[choice_count].changefunc = change_openwith_choice;
++      choices[choice_count].installfunc = NULL;
++      choices[choice_count].active = 1;
++      change_openwith_choice(choice_count);  /* set the text */
++      ++choice_count;
++     }
++     else
++      add_dummy_choice();
++ }
++ 
+  #ifdef WIN3264
+  /* create_shortcut
+   *
+***************
+*** 1577,1582 ****
+--- 1639,1650 ----
+  }
+  
+  /*
++  * We used to use "homedir" as the working directory, but that is a bad choice
++  * on multi-user systems.  Not specifying a directory appears to work best.
++  */
++ #define WORKDIR ""
++ 
++ /*
+   * Create shortcut(s) in the Start Menu\Programs\Vim folder.
+   */
+      static void
+***************
+*** 1587,1614 ****
+      if (has_vim)
+      {
+       if (build_shortcut("Vim", "vim.exe", "",
+!                                            VIM_STARTMENU, homedir) == FAIL)
+           return;
+       if (build_shortcut("Vim Read-only", "vim.exe", "-R",
+!                                            VIM_STARTMENU, homedir) == FAIL)
+           return;
+       if (build_shortcut("Vim Diff", "vim.exe", "-d",
+!                                            VIM_STARTMENU, homedir) == FAIL)
+           return;
+      }
+      if (has_gvim)
+      {
+       if (build_shortcut("gVim", "gvim.exe", "",
+!                                            VIM_STARTMENU, homedir) == FAIL)
+           return;
+       if (build_shortcut("gVim Easy", "gvim.exe", "-y",
+!                                            VIM_STARTMENU, homedir) == FAIL)
+           return;
+       if (build_shortcut("gVim Read-only", "gvim.exe", "-R",
+!                                            VIM_STARTMENU, homedir) == FAIL)
+           return;
+       if (build_shortcut("gVim Diff", "gvim.exe", "-d",
+!                                            VIM_STARTMENU, homedir) == FAIL)
+           return;
+      }
+      if (build_shortcut("Uninstall",
+--- 1655,1682 ----
+      if (has_vim)
+      {
+       if (build_shortcut("Vim", "vim.exe", "",
+!                                            VIM_STARTMENU, WORKDIR) == FAIL)
+           return;
+       if (build_shortcut("Vim Read-only", "vim.exe", "-R",
+!                                            VIM_STARTMENU, WORKDIR) == FAIL)
+           return;
+       if (build_shortcut("Vim Diff", "vim.exe", "-d",
+!                                            VIM_STARTMENU, WORKDIR) == FAIL)
+           return;
+      }
+      if (has_gvim)
+      {
+       if (build_shortcut("gVim", "gvim.exe", "",
+!                                            VIM_STARTMENU, WORKDIR) == FAIL)
+           return;
+       if (build_shortcut("gVim Easy", "gvim.exe", "-y",
+!                                            VIM_STARTMENU, WORKDIR) == FAIL)
+           return;
+       if (build_shortcut("gVim Read-only", "gvim.exe", "-R",
+!                                            VIM_STARTMENU, WORKDIR) == FAIL)
+           return;
+       if (build_shortcut("gVim Diff", "gvim.exe", "-d",
+!                                            VIM_STARTMENU, WORKDIR) == FAIL)
+           return;
+      }
+      if (build_shortcut("Uninstall",
+***************
+*** 1621,1627 ****
+                                          VIM_STARTMENU, installdir) == FAIL)
+       return;
+      if (build_shortcut("Help", has_gvim ? "gvim.exe" : "vim.exe", "-c h",
+!                                            VIM_STARTMENU, homedir) == FAIL)
+       return;
+      {
+       char    shell_folder_path[BUFSIZE];
+--- 1689,1695 ----
+                                          VIM_STARTMENU, installdir) == FAIL)
+       return;
+      if (build_shortcut("Help", has_gvim ? "gvim.exe" : "vim.exe", "-c h",
+!                                            VIM_STARTMENU, WORKDIR) == FAIL)
+       return;
+      {
+       char    shell_folder_path[BUFSIZE];
+***************
+*** 1674,1680 ****
+      if (choices[idx].arg)
+      {
+       (void)build_shortcut(icon_names[0], "gvim.exe",
+!                                                    "", "desktop", homedir);
+       need_uninstall_entry = 1;
+      }
+  }
+--- 1742,1748 ----
+      if (choices[idx].arg)
+      {
+       (void)build_shortcut(icon_names[0], "gvim.exe",
+!                                                    "", "desktop", WORKDIR);
+       need_uninstall_entry = 1;
+      }
+  }
+***************
+*** 1685,1691 ****
+      if (choices[idx].arg)
+      {
+       (void)build_shortcut(icon_names[1], "gvim.exe",
+!                                                  "-y", "desktop", homedir);
+       need_uninstall_entry = 1;
+      }
+  }
+--- 1753,1759 ----
+      if (choices[idx].arg)
+      {
+       (void)build_shortcut(icon_names[1], "gvim.exe",
+!                                                  "-y", "desktop", WORKDIR);
+       need_uninstall_entry = 1;
+      }
+  }
+***************
+*** 1696,1702 ****
+      if (choices[idx].arg)
+      {
+       (void)build_shortcut(icon_names[2], "gvim.exe",
+!                                                  "-R", "desktop", homedir);
+       need_uninstall_entry = 1;
+      }
+  }
+--- 1764,1770 ----
+      if (choices[idx].arg)
+      {
+       (void)build_shortcut(icon_names[2], "gvim.exe",
+!                                                  "-R", "desktop", WORKDIR);
+       need_uninstall_entry = 1;
+      }
+  }
+***************
+*** 1974,1979 ****
+--- 2042,2050 ----
+      /* Whether to add Vim to the popup menu */
+      init_popup_choice();
+  
++     /* Whether to add Vim to the "Open With..." menu */
++     init_openwith_choice();
++ 
+      /* Whether to add Vim to the Start Menu. */
+      init_startmenu_choice();
+  
+***************
+*** 1995,2000 ****
+--- 2066,2073 ----
+      printf("    Create a default _vimrc file if one does not already exist.\n");
+      printf("-install-popup\n");
+      printf("    Install the Edit-with-Vim context menu entry\n");
++     printf("-install-openwith\n");
++     printf("    Add Vim to the \"Open With...\" context menu list\n");
+  #ifdef WIN3264
+      printf("-add-start-menu");
+      printf("    Add Vim to the start menu\n");
+***************
+*** 2054,2059 ****
+--- 2127,2136 ----
+       {
+           init_popup_choice();
+       }
++      else if (strcmp(argv[i], "-install-openwith") == 0)
++      {
++          init_openwith_choice();
++      }
+       else if (strcmp(argv[i], "-add-start-menu") == 0)
+       {
+           init_startmenu_choice();
+***************
+*** 2178,2184 ****
+  "select each file type.\n"
+  "An alternative is the option offered here: Install an \"Edit with Vim\"\n"
+  "entry in the popup menu for the right mouse button.  This means you can\n"
+! "edit any file with Vim\n"
+  ,
+  "Add Vim to the Start menu\n"
+  "-------------------------\n"
+--- 2255,2268 ----
+  "select each file type.\n"
+  "An alternative is the option offered here: Install an \"Edit with Vim\"\n"
+  "entry in the popup menu for the right mouse button.  This means you can\n"
+! "edit any file with Vim.\n"
+! ,
+! "\"Open With...\" context menu entry\n"
+! "--------------------------------\n"
+! "(this choice is only available when gvim.exe is present)\n"
+! "This option adds Vim to the \"Open With...\" entry in the popup menu for\n"
+! "the right mouse button.  This also makes it possible to edit HTML files\n"
+! "directly from Internet Explorer.\n"
+  ,
+  "Add Vim to the Start menu\n"
+  "-------------------------\n"
+***************
+*** 2237,2243 ****
+           (choices[i].installfunc)(i);
+  
+      /* Add some entries to the registry, if needed. */
+!     if (install_popup || (need_uninstall_entry && interactive) || !interactive)
+       install_registry();
+  
+  #ifdef WIN3264
+--- 2321,2330 ----
+           (choices[i].installfunc)(i);
+  
+      /* Add some entries to the registry, if needed. */
+!     if (install_popup
+!          || install_openwith
+!          || (need_uninstall_entry && interactive)
+!          || !interactive)
+       install_registry();
+  
+  #ifdef WIN3264
+*** ../vim-6.2.523/src/dosinst.h       Tue May 27 22:00:56 2003
+--- src/dosinst.h      Mon May  3 22:56:17 2004
+***************
+*** 213,228 ****
+      /*
+       * The following code was successfully built with make_mvc.mak.
+       * The resulting executable worked on Windows 95, Millennium Edition, and
+!      * 2000 Professional.
+       */
+!     LPITEMIDLIST pidl = 0; /* Pointer to an Item ID list allocated below */
+!     LPMALLOC pMalloc; /* Pointer to an IMalloc interface */
+!     int csidl;
+  
+      if (strcmp(shell_folder_name, "desktop") == 0)
+!      csidl = CSIDL_DESKTOP;
+      else if (strncmp(shell_folder_name, "Programs", 8) == 0)
+!      csidl = CSIDL_PROGRAMS;
+      else
+      {
+       printf("\nERROR (internal) unrecognised shell_folder_name: \"%s\"\n\n",
+--- 213,241 ----
+      /*
+       * The following code was successfully built with make_mvc.mak.
+       * The resulting executable worked on Windows 95, Millennium Edition, and
+!      * 2000 Professional.  But it was changed after testing...
+       */
+!     LPITEMIDLIST    pidl = 0; /* Pointer to an Item ID list allocated below */
+!     LPMALLOC     pMalloc;  /* Pointer to an IMalloc interface */
+!     int                  csidl;
+!     int                  alt_csidl = -1;
+!     static int           desktop_csidl = -1;
+!     static int           programs_csidl = -1;
+!     int                  *pcsidl;
+!     int                  r;
+  
+      if (strcmp(shell_folder_name, "desktop") == 0)
+!     {
+!      pcsidl = &desktop_csidl;
+!      csidl = CSIDL_COMMON_DESKTOPDIRECTORY;
+!      alt_csidl = CSIDL_DESKTOP;
+!     }
+      else if (strncmp(shell_folder_name, "Programs", 8) == 0)
+!     {
+!      pcsidl = &programs_csidl;
+!      csidl = CSIDL_COMMON_PROGRAMS;
+!      alt_csidl = CSIDL_PROGRAMS;
+!     }
+      else
+      {
+       printf("\nERROR (internal) unrecognised shell_folder_name: \"%s\"\n\n",
+***************
+*** 230,235 ****
+--- 243,256 ----
+       return FAIL;
+      }
+  
++     /* Did this stuff before, use the same ID again. */
++     if (*pcsidl >= 0)
++     {
++      csidl = *pcsidl;
++      alt_csidl = -1;
++     }
++ 
++ retry:
+      /* Initialize pointer to IMalloc interface */
+      if (NOERROR != SHGetMalloc(&pMalloc))
+      {
+***************
+*** 241,265 ****
+      /* Get an ITEMIDLIST corresponding to the folder code */
+      if (NOERROR != SHGetSpecialFolderLocation(0, csidl, &pidl))
+      {
+!      printf("\nERROR getting ITEMIDLIST for shell_folder_name: \"%s\"\n\n",
+                                                          shell_folder_name);
+!      return FAIL;
+      }
+  
+      /* Translate that ITEMIDLIST to a string */
+!     if (!SHGetPathFromIDList(pidl, shell_folder_path))
+      {
+       printf("\nERROR translating ITEMIDLIST for shell_folder_name: \"%s\"\n\n",
+                                                          shell_folder_name);
+-      pMalloc->lpVtbl->Free(pMalloc, pidl);
+-      pMalloc->lpVtbl->Release(pMalloc);
+       return FAIL;
+      }
+  
+!     /* Free the data associated with pidl */
+!     pMalloc->lpVtbl->Free(pMalloc, pidl);
+!     /* Release the IMalloc interface */
+!     pMalloc->lpVtbl->Release(pMalloc);
+  
+      if (strncmp(shell_folder_name, "Programs\\", 9) == 0)
+       strcat(shell_folder_path, shell_folder_name + 8);
+--- 262,328 ----
+      /* Get an ITEMIDLIST corresponding to the folder code */
+      if (NOERROR != SHGetSpecialFolderLocation(0, csidl, &pidl))
+      {
+!      if (alt_csidl < 0 || NOERROR != SHGetSpecialFolderLocation(0,
+!                                                          alt_csidl, &pidl))
+!      {
+!          printf("\nERROR getting ITEMIDLIST for shell_folder_name: \"%s\"\n\n",
+                                                          shell_folder_name);
+!          return FAIL;
+!      }
+!      csidl = alt_csidl;
+!      alt_csidl = -1;
+      }
+  
+      /* Translate that ITEMIDLIST to a string */
+!     r = SHGetPathFromIDList(pidl, shell_folder_path);
+! 
+!     /* Free the data associated with pidl */
+!     pMalloc->lpVtbl->Free(pMalloc, pidl);
+!     /* Release the IMalloc interface */
+!     pMalloc->lpVtbl->Release(pMalloc);
+! 
+!     if (!r)
+      {
++      if (alt_csidl >= 0)
++      {
++          /* We probably get here for Windows 95: the "all users"
++           * desktop/start menu entry doesn't exist. */
++          csidl = alt_csidl;
++          alt_csidl = -1;
++          goto retry;
++      }
+       printf("\nERROR translating ITEMIDLIST for shell_folder_name: \"%s\"\n\n",
+                                                          shell_folder_name);
+       return FAIL;
+      }
+  
+!     /* If there is an alternative: verify we can write in this directory.
+!      * This should cause a retry when the "all users" directory exists but we
+!      * are a normal user and can't write there. */
+!     if (alt_csidl >= 0)
+!     {
+!      char tbuf[BUFSIZE];
+!      FILE *fd;
+! 
+!      strcpy(tbuf, shell_folder_path);
+!      strcat(tbuf, "\\vim write test");
+!      fd = fopen(tbuf, "w");
+!      if (fd == NULL)
+!      {
+!          csidl = alt_csidl;
+!          alt_csidl = -1;
+!          goto retry;
+!      }
+!      fclose(fd);
+!      unlink(tbuf);
+!     }
+! 
+!     /*
+!      * Keep the found csidl for next time, so that we don't have to do the
+!      * write test every time.
+!      */
+!     if (*pcsidl < 0)
+!      *pcsidl = csidl;
+  
+      if (strncmp(shell_folder_name, "Programs\\", 9) == 0)
+       strcat(shell_folder_path, shell_folder_name + 8);
+*** ../vim-6.2.523/src/uninstal.c      Tue May 13 20:39:50 2003
+--- src/uninstal.c     Mon May  3 22:28:05 2004
+***************
+*** 11,16 ****
+--- 11,17 ----
+   * uninstal.c:       Minimalistic uninstall program for Vim on MS-Windows
+   *           Removes:
+   *           - the "Edit with Vim" popup menu entry
++  *           - the Vim "Open With..." popup menu entry
+   *           - any Vim Batch files in the path
+   *           - icons for Vim on the Desktop
+   *           - the Vim entry in the Start Menu
+***************
+*** 57,62 ****
+--- 58,88 ----
+      return (r == ERROR_SUCCESS);
+  }
+  
++ /*
++  * Check if the "Open With..." menu entry exists and what gvim it refers to.
++  * Returns non-zero when it's found.
++  */
++     static int
++ openwith_gvim_path(char *buf)
++ {
++     HKEY     key_handle;
++     DWORD    value_type;
++     DWORD    bufsize = BUFSIZE;
++     int              r;
++ 
++     /* Open the key where the path to gvim.exe is stored. */
++     if (RegOpenKeyEx(HKEY_CLASSES_ROOT,
++              "Applications\\gvim.exe\\shell\\edit\\command", 0, KEY_READ,
++                                              &key_handle) != ERROR_SUCCESS)
++      return 0;
++ 
++     /* get the DisplayName out of it to show the user */
++     r = RegQueryValueEx(key_handle, "", 0, &value_type, (LPBYTE)buf, &bufsize);
++     RegCloseKey(key_handle);
++ 
++     return (r == ERROR_SUCCESS);
++ }
++ 
+      static void
+  remove_popup(void)
+  {
+***************
+*** 83,93 ****
+       ++fail;
+  
+      if (fail == 6)
+!      printf("No Vim registry entries could be removed\n");
+      else if (fail)
+!      printf("Some Vim registry entries could not be removed\n");
+      else
+!      printf("The Vim registry entries have been removed\n");
+  }
+  #endif
+  
+--- 109,146 ----
+       ++fail;
+  
+      if (fail == 6)
+!      printf("No Vim popup registry entries could be removed\n");
+!     else if (fail)
+!      printf("Some Vim popup registry entries could not be removed\n");
+!     else
+!      printf("The Vim popup registry entries have been removed\n");
+! }
+! 
+!     static void
+! remove_openwith(void)
+! {
+!     int              fail = 0;
+!     HKEY     kh;
+! 
+!     if (RegDeleteKey(HKEY_CLASSES_ROOT, "Applications\\gvim.exe\\shell\\edit\\command") != ERROR_SUCCESS)
+!      ++fail;
+!     if (RegDeleteKey(HKEY_CLASSES_ROOT, "Applications\\gvim.exe\\shell\\edit") != ERROR_SUCCESS)
+!      ++fail;
+!     if (RegDeleteKey(HKEY_CLASSES_ROOT, "Applications\\gvim.exe\\shell") != ERROR_SUCCESS)
+!      ++fail;
+!     if (RegDeleteKey(HKEY_CLASSES_ROOT, "Applications\\gvim.exe") != ERROR_SUCCESS)
+!      ++fail;
+!     if (RegDeleteKey(HKEY_CLASSES_ROOT, ".htm\\OpenWithList\\gvim.exe") != ERROR_SUCCESS)
+!      ++fail;
+!     if (RegDeleteKey(HKEY_CLASSES_ROOT, "*\\OpenWithList\\gvim.exe") != ERROR_SUCCESS)
+!      ++fail;
+! 
+!     if (fail == 6)
+!      printf("No Vim open-with registry entries could be removed\n");
+      else if (fail)
+!      printf("Some Vim open-with registry entries could not be removed\n");
+      else
+!      printf("The Vim open-with registry entries have been removed\n");
+  }
+  #endif
+  
+***************
+*** 302,308 ****
+--- 355,374 ----
+       printf("   which uses \"%s\"\n", popup_path);
+       printf("\nRemove it (y/n)? ");
+       if (confirm())
++      {
+           remove_popup();
++          /* Assume the "Open With" entry can be removed as well, don't
++           * bother the user with asking him again. */
++          remove_openwith();
++      }
++     }
++     else if (openwith_gvim_path(popup_path))
++     {
++      printf(" - the Vim \"Open With...\" entry in the popup menu\n");
++      printf("   which uses \"%s\"\n", popup_path);
++      printf("\nRemove it (y/n)? ");
++      if (confirm())
++          remove_openwith();
+      }
+  
+      if (get_shell_folder_path(path, "desktop"))
+*** ../vim-6.2.523/src/version.c       Mon May  3 21:30:07 2004
+--- src/version.c      Tue May  4 15:42:08 2004
+***************
+*** 639,640 ****
+--- 642,645 ----
+  {   /* Add new patch number below this line */
++ /**/
++     524,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+99. The hum of a cooling fan and the click of keys is comforting to you.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.525 b/6.2.525
new file mode 100644 (file)
index 0000000..cb88d8d
--- /dev/null
+++ b/6.2.525
@@ -0,0 +1,79 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.525
+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 6.2.525
+Problem:    When the history contains a very long line ":history" causes a
+           crash. (Volker Kiefel)
+Solution:   Shorten the history entry to fit it in one line.
+Files:     src/ex_getln.c
+
+
+*** ../vim-6.2.524/src/ex_getln.c      Mon Apr 19 20:26:42 2004
+--- src/ex_getln.c     Tue May  4 19:21:08 2004
+***************
+*** 608,614 ****
+                   if (c == '=')
+                   {
+                       p = get_expr_line();
+!                      if (p != NULL && realloc_cmdbuff(STRLEN(p) + 1) == OK)
+                       {
+                           ccline.cmdlen = STRLEN(p);
+                           STRCPY(ccline.cmdbuff, p);
+--- 608,615 ----
+                   if (c == '=')
+                   {
+                       p = get_expr_line();
+!                      if (p != NULL
+!                               && realloc_cmdbuff((int)STRLEN(p) + 1) == OK)
+                       {
+                           ccline.cmdlen = STRLEN(p);
+                           STRCPY(ccline.cmdbuff, p);
+***************
+*** 4809,4816 ****
+                       && hist[i].hisnum >= j && hist[i].hisnum <= k)
+               {
+                   msg_putchar('\n');
+!                  sprintf((char *)IObuff, "%c%6d  %s", i == idx ? '>' : ' ',
+!                                          hist[i].hisnum, hist[i].hisstr);
+                   msg_outtrans(IObuff);
+                   out_flush();
+               }
+--- 4810,4822 ----
+                       && hist[i].hisnum >= j && hist[i].hisnum <= k)
+               {
+                   msg_putchar('\n');
+!                  sprintf((char *)IObuff, "%c%6d  ", i == idx ? '>' : ' ',
+!                                                            hist[i].hisnum);
+!                  if (vim_strsize(hist[i].hisstr) > (int)Columns - 10)
+!                      trunc_string(hist[i].hisstr, IObuff + STRLEN(IObuff),
+!                                                         (int)Columns - 10);
+!                  else
+!                      STRCAT(IObuff, hist[i].hisstr);
+                   msg_outtrans(IObuff);
+                   out_flush();
+               }
+*** ../vim-6.2.524/src/version.c       Tue May  4 15:53:18 2004
+--- src/version.c      Tue May  4 19:22:08 2004
+***************
+*** 639,640 ****
+--- 642,645 ----
+  {   /* Add new patch number below this line */
++ /**/
++     525,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+106. When told to "go to your room" you inform your parents that you
+     can't...because you were kicked out and banned.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.526 b/6.2.526
new file mode 100644 (file)
index 0000000..a2c6bc6
--- /dev/null
+++ b/6.2.526
@@ -0,0 +1,67 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.526
+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 6.2.526
+Problem:    When s:lang is "ja" the Japanese menus are not used.
+Solution:   Add 'encoding' to the language when there is no charset.
+Files:     runtime/menu.vim
+
+
+*** ../vim-6.2.525/runtime/menu.vim    Mon Mar  1 16:43:34 2004
+--- runtime/menu.vim   Tue May  4 15:57:24 2004
+***************
+*** 2,8 ****
+  " You can also use this as a start for your own set of menus.
+  "
+  " Maintainer:        Bram Moolenaar <Bram@vim.org>
+! " Last Change:       2004 Mar 01
+  
+  " Note that ":an" (short for ":anoremenu") is often used to make a menu work
+  " in all modes and avoid side effects from mappings defined by the user.
+--- 2,8 ----
+  " You can also use this as a start for your own set of menus.
+  "
+  " Maintainer:        Bram Moolenaar <Bram@vim.org>
+! " Last Change:       2004 May 04
+  
+  " Note that ":an" (short for ":anoremenu") is often used to make a menu work
+  " in all modes and avoid side effects from mappings defined by the user.
+***************
+*** 30,35 ****
+--- 30,40 ----
+    endif
+    " A language name must be at least two characters, don't accept "C"
+    if strlen(s:lang) > 1
++     " When the language does not include the charset add 'encoding'
++     if s:lang =~ '^\a\a$\|^\a\a_\a\a$'
++       let s:lang = s:lang . '.' . &enc
++     endif
++ 
+      " We always use a lowercase name.
+      " Change "iso-8859" to "iso_8859" and "iso8859" to "iso_8859", some
+      " systems appear to use this.
+*** ../vim-6.2.525/src/version.c       Tue May  4 19:23:13 2004
+--- src/version.c      Tue May  4 21:12:08 2004
+***************
+*** 639,640 ****
+--- 642,645 ----
+  {   /* Add new patch number below this line */
++ /**/
++     526,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+107. When using your phone you forget that you don't have to use your
+     keyboard.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.527 b/6.2.527
new file mode 100644 (file)
index 0000000..345090d
--- /dev/null
+++ b/6.2.527
@@ -0,0 +1,201 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.527
+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 6.2.527
+Problem:    The 2html script uses ":wincmd p", which breaks when using some
+           autocommands.
+Solution:   Remember the window numbers and jump to them with ":wincmd w".
+           Also add XHTML support. (Panagiotis Issaris)
+Files:     runtime/syntax/2html.vim
+
+
+*** ../vim-6.2.526/runtime/syntax/2html.vim    Mon Dec 29 20:49:00 2003
+--- runtime/syntax/2html.vim   Wed May  5 11:17:45 2004
+***************
+*** 1,7 ****
+  " Vim syntax support file
+  " Maintainer: Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2003 Nov 13
+  "           (modified by David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>)
+  
+  " Transform a file into HTML, using the current syntax highlighting.
+  
+--- 1,8 ----
+  " Vim syntax support file
+  " Maintainer: Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2004 May 05
+  "           (modified by David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>)
++ "           (XHTML support by Panagiotis Issaris <takis@lumumba.luc.ac.be>)
+  
+  " Transform a file into HTML, using the current syntax highlighting.
+  
+***************
+*** 168,178 ****
+--- 169,183 ----
+  set report=1000000
+  
+  " Split window to create a buffer with the HTML file.
++ let s:orgbufnr = winbufnr(0)
+  if expand("%") == ""
+    new Untitled.html
+  else
+    new %.html
+  endif
++ let s:newwin = winnr()
++ let s:orgwin = bufwinnr(s:orgbufnr)
++ 
+  set modifiable
+  %d
+  let s:old_paste = &paste
+***************
+*** 180,192 ****
+  let s:old_magic = &magic
+  set magic
+  
+  " HTML header, with the title and generator ;-). Left free space for the CSS,
+  " to be filled at the end.
+  exe "normal! a<html>\n<head>\n<title>\e"
+  exe "normal! a" . expand("%:p:~") . "</title>\n\e"
+! exe "normal! a<meta name=\"Generator\" content=\"Vim/" . version/100 . "." . version %100 . "\">\n\e"
+  if s:html_encoding != ""
+!   exe "normal! a<meta http-equiv=\"content-type\" content=\"text/html; charset=" . s:html_encoding . "\">\n\e"
+  endif
+  if exists("html_use_css")
+    exe "normal! a<style type=\"text/css\">\n<!--\n-->\n</style>\n\e"
+--- 185,204 ----
+  let s:old_magic = &magic
+  set magic
+  
++ if exists("use_xhtml")
++   exe "normal! a<?xml version=\"1.0\"?>\n\e"
++   let tag_close = '/>'
++ else
++   let tag_close = '>'
++ endif
++ 
+  " HTML header, with the title and generator ;-). Left free space for the CSS,
+  " to be filled at the end.
+  exe "normal! a<html>\n<head>\n<title>\e"
+  exe "normal! a" . expand("%:p:~") . "</title>\n\e"
+! exe "normal! a<meta name=\"Generator\" content=\"Vim/" . v:version/100 . "." . v:version %100 . '"' . tag_close . "\n\e"
+  if s:html_encoding != ""
+!   exe "normal! a<meta http-equiv=\"content-type\" content=\"text/html; charset=" . s:html_encoding . '"' . tag_close . "\n\e"
+  endif
+  if exists("html_use_css")
+    exe "normal! a<style type=\"text/css\">\n<!--\n-->\n</style>\n\e"
+***************
+*** 197,203 ****
+    exe "normal! a</head>\n<body>\n<pre>\n\e"
+  endif
+  
+! wincmd p
+  
+  " List of all id's
+  let s:idlist = ","
+--- 209,215 ----
+    exe "normal! a</head>\n<body>\n<pre>\n\e"
+  endif
+  
+! exe s:orgwin . "wincmd w"
+  
+  " List of all id's
+  let s:idlist = ","
+***************
+*** 274,290 ****
+    endwhile
+  
+    if exists("html_no_pre")
+!     let s:new = substitute(s:new, '  ', '\&nbsp;\&nbsp;', 'g') . '<br>'
+    endif
+!   exe "normal! \<C-W>pa" . strtrans(s:new) . "\n\e\<C-W>p"
+    let s:lnum = s:lnum + 1
+    +
+  endwhile
+  " Finish with the last line
+  if exists("html_no_pre")
+!   exe "normal! \<C-W>pa\n</body>\n</html>\e"
+  else
+!   exe "normal! \<C-W>pa</pre>\n</body>\n</html>\e"
+  endif
+  
+  
+--- 286,309 ----
+    endwhile
+  
+    if exists("html_no_pre")
+!     if exists("use_xhtml")
+!       let s:new = substitute(s:new, '  ', '\&#x20;\&#x20;', 'g') . '<br/>'
+!     else
+!       let s:new = substitute(s:new, '  ', '\&nbsp;\&nbsp;', 'g') . '<br>'
+!     endif
+    endif
+!   exe s:newwin . "wincmd w"
+!   exe "normal! a" . strtrans(s:new) . "\n\e"
+!   exe s:orgwin . "wincmd w"
+    let s:lnum = s:lnum + 1
+    +
+  endwhile
+  " Finish with the last line
++ exe s:newwin . "wincmd w"
+  if exists("html_no_pre")
+!   exe "normal! a\n</body>\n</html>\e"
+  else
+!   exe "normal! a</pre>\n</body>\n</html>\e"
+  endif
+  
+  
+***************
+*** 375,388 ****
+  let &paste = s:old_paste
+  let &magic = s:old_magic
+  let @/ = s:old_search
+! wincmd p
+  let &l:et = s:old_et
+! wincmd p
+  
+! " Save a little bit of memory (worths doing?)
+  unlet s:old_et s:old_paste s:old_icon s:old_report s:old_title s:old_search
+  unlet s:whatterm s:idlist s:lnum s:end s:fgc s:bgc s:old_magic
+  unlet! s:col s:id s:attr s:len s:line s:new s:did_retab s:numblines
+  delfunc s:HtmlColor
+  delfunc s:CSS1
+  if !exists("html_use_css")
+--- 394,408 ----
+  let &paste = s:old_paste
+  let &magic = s:old_magic
+  let @/ = s:old_search
+! exe s:orgwin . "wincmd w"
+  let &l:et = s:old_et
+! exe s:newwin . "wincmd w"
+  
+! " Save a little bit of memory (worth doing?)
+  unlet s:old_et s:old_paste s:old_icon s:old_report s:old_title s:old_search
+  unlet s:whatterm s:idlist s:lnum s:end s:fgc s:bgc s:old_magic
+  unlet! s:col s:id s:attr s:len s:line s:new s:did_retab s:numblines
++ unlet s:orgwin s:newwin s:orgbufnr
+  delfunc s:HtmlColor
+  delfunc s:CSS1
+  if !exists("html_use_css")
+*** ../vim-6.2.526/src/version.c       Tue May  4 21:16:25 2004
+--- src/version.c      Wed May  5 11:15:10 2004
+***************
+*** 639,640 ****
+--- 642,645 ----
+  {   /* Add new patch number below this line */
++ /**/
++     527,
+  /**/
+
+-- 
+Corduroy pillows: They're making headlines!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.528 b/6.2.528
new file mode 100644 (file)
index 0000000..d3349f3
--- /dev/null
+++ b/6.2.528
@@ -0,0 +1,224 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.528
+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 6.2.528
+Problem:    NetBeans: Changes of the "~" command are not reported.
+Solution:   Call netbeans_inserted() after performing "~". (Gordon Prieur)
+           Also change NetBeans debugging to append to the log file.
+           Also fix that "~" in Visual block mode changes too much if there
+           are multi-byte characters.
+Files:     src/nbdebug.c, src/normal.c, src/ops.c
+
+
+*** ../vim-6.2.527/src/nbdebug.c       Sun Oct 12 16:42:14 2003
+--- src/nbdebug.c      Wed Apr 14 19:55:02 2004
+***************
+*** 86,92 ****
+       if (log_var && (file = getenv(log_var)) != NULL) {
+               time_t now;
+  
+!              nb_debug = fopen(file, "w");
+               time(&now);
+               fprintf(nb_debug, "%s", asctime(localtime(&now)));
+               if (level_var && (cp = getenv(level_var)) != NULL) {
+--- 86,92 ----
+       if (log_var && (file = getenv(log_var)) != NULL) {
+               time_t now;
+  
+!              nb_debug = fopen(file, "a");
+               time(&now);
+               fprintf(nb_debug, "%s", asctime(localtime(&now)));
+               if (level_var && (cp = getenv(level_var)) != NULL) {
+*** ../vim-6.2.527/src/normal.c        Mon Apr 19 20:26:43 2004
+--- src/normal.c       Mon Apr 26 15:19:26 2004
+***************
+*** 6460,6465 ****
+--- 6460,6470 ----
+      long     n;
+      pos_T    startpos;
+      int              did_change = 0;
++ #ifdef FEAT_NETBEANS_INTG
++     pos_T    pos;
++     char_u   *ptr;
++     int              count;
++ #endif
+  
+      if (checkclearopq(cap->oap))
+       return;
+***************
+*** 6476,6481 ****
+--- 6481,6489 ----
+       return;
+  
+      startpos = curwin->w_cursor;
++ #ifdef FEAT_NETBEANS_INTG
++     pos = startpos;
++ #endif
+      for (n = cap->count1; n > 0; --n)
+      {
+       did_change |= swapchar(cap->oap->op_type, &curwin->w_cursor);
+***************
+*** 6485,6490 ****
+--- 6493,6512 ----
+           if (vim_strchr(p_ww, '~') != NULL
+                   && curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
+           {
++ #ifdef FEAT_NETBEANS_INTG
++              if (usingNetbeans)
++              {
++                  if (did_change)
++                  {
++                      ptr = ml_get(pos.lnum);
++                      count = STRLEN(ptr) - pos.col;
++                      netbeans_inserted(curbuf, pos.lnum, pos.col,
++                                               count, &ptr[pos.col], count);
++                  }
++                  pos.col = 0;
++                  pos.lnum++;
++              }
++ #endif
+               ++curwin->w_cursor.lnum;
+               curwin->w_cursor.col = 0;
+               if (n > 1)
+***************
+*** 6498,6503 ****
+--- 6520,6535 ----
+               break;
+       }
+      }
++ #ifdef FEAT_NETBEANS_INTG
++     if (did_change && usingNetbeans)
++     {
++      ptr = ml_get(pos.lnum);
++      count = curwin->w_cursor.col - pos.col;
++      netbeans_inserted(curbuf, pos.lnum, pos.col,
++                                               count, &ptr[pos.col], count);
++     }
++ #endif
++ 
+  
+      check_cursor();
+      curwin->w_set_curswant = TRUE;
+*** ../vim-6.2.527/src/ops.c   Fri Apr 30 19:42:02 2004
+--- src/ops.c  Wed May  5 10:34:02 2004
+***************
+*** 2148,2155 ****
+--- 2148,2159 ----
+      pos_T            pos;
+  #ifdef FEAT_VISUAL
+      struct block_def bd;
++     int                      done;
+  #endif
+      int                      did_change = 0;
++ #ifdef FEAT_MBYTE
++     colnr_T          col;
++ #endif
+  
+      if (u_save((linenr_T)(oap->start.lnum - 1),
+                                      (linenr_T)(oap->end.lnum + 1)) == FAIL)
+***************
+*** 2163,2174 ****
+       {
+           block_prep(oap, &bd, pos.lnum, FALSE);
+           pos.col = bd.textcol;
+!          while (--bd.textlen >= 0)
+           {
+               did_change |= swapchar(oap->op_type, &pos);
+               if (inc(&pos) == -1)        /* at end of file */
+                   break;
+           }
+       }
+       if (did_change)
+           changed_lines(oap->start.lnum, 0, oap->end.lnum + 1, 0L);
+--- 2167,2195 ----
+       {
+           block_prep(oap, &bd, pos.lnum, FALSE);
+           pos.col = bd.textcol;
+!          for (done = 0; done < bd.textlen; ++done)
+           {
+               did_change |= swapchar(oap->op_type, &pos);
++ # ifdef FEAT_MBYTE
++              col = pos.col + 1;
++ # endif
+               if (inc(&pos) == -1)        /* at end of file */
+                   break;
++ # ifdef FEAT_MBYTE
++              if (pos.col > col)
++                  /* Count extra bytes of a multi-byte character. */
++                  done += pos.col - col;
++ # endif
+           }
++ # ifdef FEAT_NETBEANS_INTG
++          if (usingNetbeans && did_change)
++          {
++              char_u *ptr = ml_get_buf(curbuf, pos.lnum, FALSE);
++ 
++              netbeans_inserted(curbuf, pos.lnum, bd.textcol,
++                                  bd.textlen, &ptr[bd.textcol], bd.textlen);
++          }
++ # endif
+       }
+       if (did_change)
+           changed_lines(oap->start.lnum, 0, oap->end.lnum + 1, 0L);
+***************
+*** 2194,2201 ****
+--- 2215,2246 ----
+               break;
+       }
+       if (did_change)
++      {
+           changed_lines(oap->start.lnum, oap->start.col, oap->end.lnum + 1,
+                                                                         0L);
++ #ifdef FEAT_NETBEANS_INTG
++          if (usingNetbeans && did_change)
++          {
++              char_u *ptr;
++              int count;
++ 
++              pos = oap->start;
++              while (pos.lnum < oap->end.lnum)
++              {
++                  ptr = ml_get_buf(curbuf, pos.lnum, FALSE);
++                  count = STRLEN(ptr) - pos.col;
++                  netbeans_inserted(curbuf, pos.lnum, pos.col,
++                                               count, &ptr[pos.col], count);
++                  pos.col = 0;
++                  pos.lnum++;
++              }
++              ptr = ml_get_buf(curbuf, pos.lnum, FALSE);
++              count = oap->end.col - pos.col + 1;
++              netbeans_inserted(curbuf, pos.lnum, pos.col,
++                                               count, &ptr[pos.col], count);
++          }
++ #endif
++      }
+      }
+  
+  #ifdef FEAT_VISUAL
+*** ../vim-6.2.527/src/version.c       Wed May  5 11:17:53 2004
+--- src/version.c      Wed May  5 11:47:08 2004
+***************
+*** 639,640 ****
+--- 642,645 ----
+  {   /* Add new patch number below this line */
++ /**/
++     528,
+  /**/
+
+-- 
+Nobody will ever need more than 640 kB RAM.
+               -- Bill Gates, 1983
+Windows 98 requires 16 MB RAM.
+               -- Bill Gates, 1999
+Logical conclusion: Nobody will ever need Windows 98.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.529 b/6.2.529
new file mode 100644 (file)
index 0000000..eb32fb1
--- /dev/null
+++ b/6.2.529
@@ -0,0 +1,58 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.529 (extra)
+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 6.2.529 (extra)
+Problem:    VisVim only works for Admin.  Doing it for one user doesn't work.
+           (Alexandre Gouraud)
+Solution:   When registering the module fails, simply continue.
+Files:     src/VisVim/VisVim.cpp
+
+
+*** ../vim-6.2.528/src/VisVim/VisVim.cpp       Mon Jan  7 17:16:20 2002
+--- src/VisVim/VisVim.cpp      Tue May  4 12:31:29 2004
+***************
+*** 86,92 ****
+       // Registers object, typelib and all interfaces in typelib
+       hRes = _Module.RegisterServer (TRUE);
+       if (FAILED (hRes))
+!              return hRes;
+  
+       _ATL_OBJMAP_ENTRY *pEntry = _Module.m_pObjMap;
+       CRegKey key;
+--- 86,97 ----
+       // Registers object, typelib and all interfaces in typelib
+       hRes = _Module.RegisterServer (TRUE);
+       if (FAILED (hRes))
+!              // Hack: When this fails we might be a normal user, while the
+!              // admin already registered the module.  Returning S_OK then
+!              // makes it work.  When the module was never registered it
+!              // will soon fail in another way.
+!              // old code: return hRes;
+!              return S_OK;
+  
+       _ATL_OBJMAP_ENTRY *pEntry = _Module.m_pObjMap;
+       CRegKey key;
+*** ../vim-6.2.528/src/version.c       Wed May  5 11:49:55 2004
+--- src/version.c      Wed May  5 11:53:56 2004
+***************
+*** 639,640 ****
+--- 642,645 ----
+  {   /* Add new patch number below this line */
++ /**/
++     529,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+113. You are asked about a bus schedule, you wonder if it is 16 or 32 bits.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.530 b/6.2.530
new file mode 100644 (file)
index 0000000..6f2ee80
--- /dev/null
+++ b/6.2.530
@@ -0,0 +1,44 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.530
+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 6.2.530
+Problem:    Warning for missing prototype on the Amiga.
+Solution:   Include time.h
+Files:     src/version.c
+
+
+*** ../vim-6.2.529/src/version.c       Wed May  5 11:54:50 2004
+--- src/version.c      Wed May  5 11:56:11 2004
+***************
+*** 10,13 ****
+--- 10,17 ----
+  #include "vim.h"
+  
++ #ifdef AMIGA
++ # include <time.h>   /* for time() */
++ #endif
++ 
+  /*
+   * Vim originated from Stevie version 3.6 (Fish disk 217) by GRWalter (Fred)
+***************
+*** 639,640 ****
+--- 642,645 ----
+  {   /* Add new patch number below this line */
++ /**/
++     530,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+114. You are counting items, you go "0,1,2,3,4,5,6,7,8,9,A,B,C,D...".
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.531 b/6.2.531
new file mode 100644 (file)
index 0000000..665d65f
--- /dev/null
+++ b/6.2.531
@@ -0,0 +1,102 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.531
+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 6.2.531
+Problem:    In silent ex mode no messages are given, which makes debugging
+           very difficult.
+Solution:   Do output messages when 'verbose' is set.
+Files:     src/message.c, src/ui.c
+
+
+*** ../vim-6.2.530/src/message.c       Fri Apr 16 22:03:45 2004
+--- src/message.c      Wed May  5 12:30:46 2004
+***************
+*** 1761,1772 ****
+      if (msg_use_printf())
+      {
+  #ifdef WIN3264
+!      if (!silent_mode)
+           mch_settmode(TMODE_COOK);   /* handle '\r' and '\n' correctly */
+  #endif
+       while (*s != NUL && (maxlen < 0 || (int)(s - str) < maxlen))
+       {
+!          if (!silent_mode)
+           {
+               p = &buf[0];
+               /* NL --> CR NL translation (for Unix, not for "--version") */
+--- 1761,1772 ----
+      if (msg_use_printf())
+      {
+  #ifdef WIN3264
+!      if (!(silent_mode && p_verbose == 0))
+           mch_settmode(TMODE_COOK);   /* handle '\r' and '\n' correctly */
+  #endif
+       while (*s != NUL && (maxlen < 0 || (int)(s - str) < maxlen))
+       {
+!          if (!(silent_mode && p_verbose == 0))
+           {
+               p = &buf[0];
+               /* NL --> CR NL translation (for Unix, not for "--version") */
+***************
+*** 1806,1812 ****
+       msg_didout = TRUE;          /* assume that line is not empty */
+  
+  #ifdef WIN3264
+!      if (!silent_mode)
+           mch_settmode(TMODE_RAW);
+  #endif
+       return;
+--- 1806,1812 ----
+       msg_didout = TRUE;          /* assume that line is not empty */
+  
+  #ifdef WIN3264
+!      if (!(silent_mode && p_verbose == 0))
+           mch_settmode(TMODE_RAW);
+  #endif
+       return;
+*** ../vim-6.2.530/src/ui.c    Fri Apr  2 14:07:44 2004
+--- src/ui.c   Wed May  5 12:31:49 2004
+***************
+*** 33,40 ****
+      }
+  #endif
+  #ifndef NO_CONSOLE
+!     /* Don't output anything in silent mode ("ex -s") */
+!     if (!silent_mode)
+      {
+  #ifdef FEAT_MBYTE
+       char_u  *tofree = NULL;
+--- 33,40 ----
+      }
+  #endif
+  #ifndef NO_CONSOLE
+!     /* Don't output anything in silent mode ("ex -s") unless 'verbose' set */
+!     if (!(silent_mode && p_verbose == 0))
+      {
+  #ifdef FEAT_MBYTE
+       char_u  *tofree = NULL;
+*** ../vim-6.2.530/src/version.c       Wed May  5 11:56:50 2004
+--- src/version.c      Wed May  5 12:36:41 2004
+***************
+*** 643,644 ****
+--- 643,646 ----
+  {   /* Add new patch number below this line */
++ /**/
++     531,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+116. You are living with your boyfriend who networks your respective
+     computers so you can sit in separate rooms and email each other
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
diff --git a/6.2.532 b/6.2.532
new file mode 100644 (file)
index 0000000..4e0f52a
--- /dev/null
+++ b/6.2.532
@@ -0,0 +1,214 @@
+To: vim-dev@vim.org
+Subject: Patch 6.2.532 (extra)
+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 6.2.532 (extra)
+Problem:    Compiling for Win32s with VC 4.1 doesn't work.
+Solution:   Don't use CP_UTF8 if it's not defined.  Don't use CSIDL_COMMON*
+            when not defined.
+Files:      src/dosinst.h, src/fileio.c
+
+
+*** ../vim-6.2.531/src/dosinst.h       Tue May  4 15:53:18 2004
+--- src/dosinst.h      Wed May  5 14:43:43 2004
+***************
+*** 227,240 ****
+--- 227,248 ----
+      if (strcmp(shell_folder_name, "desktop") == 0)
+      {
+       pcsidl = &desktop_csidl;
++ #ifdef CSIDL_COMMON_DESKTOPDIRECTORY
+       csidl = CSIDL_COMMON_DESKTOPDIRECTORY;
+       alt_csidl = CSIDL_DESKTOP;
++ #else
++      csidl = CSIDL_DESKTOP;
++ #endif
+      }
+      else if (strncmp(shell_folder_name, "Programs", 8) == 0)
+      {
+       pcsidl = &programs_csidl;
++ #ifdef CSIDL_COMMON_PROGRAMS
+       csidl = CSIDL_COMMON_PROGRAMS;
+       alt_csidl = CSIDL_PROGRAMS;
++ #else
++      csidl = CSIDL_PROGRAMS;
++ #endif
+      }
+      else
+      {
+*** ../vim-6.2.531/src/fileio.c        Sat May  1 21:04:31 2004
+--- src/fileio.c       Wed May  5 14:36:19 2004
+***************
+*** 1357,1385 ****
+               int     needed;
+               char_u  *p;
+               int     u8c;
+-              int     l, len;
+  
+               /*
+                * 1. find out how many ucs-2 characters there are.
+                */
+               if (FIO_GET_CP(fio_flags) == CP_UTF8)
+               {
+                   /* Handle CP_UTF8 ourselves to be able to handle trailing
+                    * bytes properly.  First find out the number of
+                    * characters and check for trailing bytes. */
+                   needed = 0;
+                   p = ptr;
+!                  for (len = from_size; len > 0; len -= l)
+                   {
+!                      l = utf_ptr2len_check_len(p, len);
+!                      if (l > len)                    /* incomplete char */
+                       {
+                           if (l > CONV_RESTLEN)
+                               /* weird overlong byte sequence */
+                               goto rewind_retry;
+!                          mch_memmove(conv_rest, p, len);
+!                          conv_restlen = len;
+!                          from_size -= len;
+                           break;
+                       }
+                       if (l == 1 && *p >= 0x80)       /* illegal byte */
+--- 1357,1387 ----
+               int     needed;
+               char_u  *p;
+               int     u8c;
+  
+               /*
+                * 1. find out how many ucs-2 characters there are.
+                */
++ #  ifdef CP_UTF8     /* VC 4.1 doesn't define CP_UTF8 */
+               if (FIO_GET_CP(fio_flags) == CP_UTF8)
+               {
++                  int         l, flen;
++ 
+                   /* Handle CP_UTF8 ourselves to be able to handle trailing
+                    * bytes properly.  First find out the number of
+                    * characters and check for trailing bytes. */
+                   needed = 0;
+                   p = ptr;
+!                  for (flen = from_size; flen > 0; flen -= l)
+                   {
+!                      l = utf_ptr2len_check_len(p, flen);
+!                      if (l > flen)                   /* incomplete char */
+                       {
+                           if (l > CONV_RESTLEN)
+                               /* weird overlong byte sequence */
+                               goto rewind_retry;
+!                          mch_memmove(conv_rest, p, flen);
+!                          conv_restlen = flen;
+!                          from_size -= flen;
+                           break;
+                       }
+                       if (l == 1 && *p >= 0x80)       /* illegal byte */
+***************
+*** 1389,1394 ****
+--- 1391,1397 ----
+                   }
+               }
+               else
++ #  endif
+               {
+                   /* We can't tell if the last byte of an MBCS string is
+                    * valid and MultiByteToWideChar() returns zero if it
+***************
+*** 1425,1438 ****
+               if (ucsp < ptr + size)
+                   goto rewind_retry;
+  
+               if (FIO_GET_CP(fio_flags) == CP_UTF8)
+               {
+                   /* Convert from utf-8 to ucs-2. */
+                   needed = 0;
+                   p = ptr;
+!                  for (len = from_size; len > 0; len -= l)
+                   {
+!                      l = utf_ptr2len_check_len(p, len);
+                       u8c = utf_ptr2char(p);
+                       ucsp[needed * 2] = (u8c & 0xff);
+                       ucsp[needed * 2 + 1] = (u8c >> 8);
+--- 1428,1444 ----
+               if (ucsp < ptr + size)
+                   goto rewind_retry;
+  
++ #  ifdef CP_UTF8     /* VC 4.1 doesn't define CP_UTF8 */
+               if (FIO_GET_CP(fio_flags) == CP_UTF8)
+               {
++                  int         l, flen;
++ 
+                   /* Convert from utf-8 to ucs-2. */
+                   needed = 0;
+                   p = ptr;
+!                  for (flen = from_size; flen > 0; flen -= l)
+                   {
+!                      l = utf_ptr2len_check_len(p, flen);
+                       u8c = utf_ptr2char(p);
+                       ucsp[needed * 2] = (u8c & 0xff);
+                       ucsp[needed * 2 + 1] = (u8c >> 8);
+***************
+*** 1441,1446 ****
+--- 1447,1453 ----
+                   }
+               }
+               else
++ #  endif
+                   needed = MultiByteToWideChar(FIO_GET_CP(fio_flags),
+                                           MB_ERR_INVALID_CHARS, (LPCSTR)ptr,
+                                            from_size, (LPWSTR)ucsp, needed);
+***************
+*** 4705,4710 ****
+--- 4712,4718 ----
+  
+           fromlen = to - ip->bw_conv_buf;
+           buf = to;
++ #  ifdef CP_UTF8     /* VC 4.1 doesn't define CP_UTF8 */
+           if (FIO_GET_CP(flags) == CP_UTF8)
+           {
+               /* Convert from UCS-2 to UTF-8, using the remainder of the
+***************
+*** 4723,4728 ****
+--- 4731,4737 ----
+               len = to - buf;
+           }
+           else
++ #endif
+           {
+               /* Convert from UCS-2 to the codepage, using the remainder of
+                * the conversion buffer.  If the conversion uses the default
+***************
+*** 5064,5072 ****
+--- 5073,5083 ----
+      cp = encname2codepage(ptr);
+      if (cp == 0)
+      {
++ #  ifdef CP_UTF8     /* VC 4.1 doesn't define CP_UTF8 */
+       if (STRCMP(ptr, "utf-8") == 0)
+           cp = CP_UTF8;
+       else
++ #  endif
+           return 0;
+      }
+      return FIO_PUT_CP(cp) | FIO_CODEPAGE;
+*** ../vim-6.2.531/src/version.c       Wed May  5 12:38:40 2004
+--- src/version.c      Wed May  5 14:45:21 2004
+***************
+*** 643,644 ****
+--- 643,646 ----
+  {   /* Add new patch number below this line */
++ /**/
++     532,
+  /**/
+
+-- 
+An actual excerpt from a classified section of a city newspaper:
+"Illiterate?  Write today for free help!"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
+ \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
This page took 0.367671 seconds and 4 git commands to generate.