Patch 7.4.1169
Problem:    The socket I/O is intertwined with the netbeans code.
Solution:   Start refactoring the netbeans communication to split off the
            socket I/O.  Add the +channel feature.
Files:      src/channel.c, src/netbeans.c, src/proto/channel.pro,
            src/proto/netbeans.pro, src/proto/gui_w32.pro, src/gui_w32.c,
            src/eval.c, src/os_mswin.c, src/ui.c, src/macros.h, Makefile,
            src/proto.h, src/feature.h, src/os_unix.c, src/vim.h,
            src/configure.in, src/auto/configure, src/config.mk.in,
            src/config.aap.in, src/config.h.in, src/Make_bc5.mak,
            src/Make_cyg_ming.mak, src/Make_mvc.mak


*** ../vim-7.4.1168/src/channel.c       2016-01-24 20:31:32.161071711 +0100
--- src/channel.c       2016-01-24 20:20:11.172172343 +0100
***************
*** 0 ****
--- 1,187 ----
+ /* vi:set ts=8 sts=4 sw=4:
+  *
+  * VIM - Vi IMproved  by Bram Moolenaar
+  *
+  * Do ":help uganda"  in Vim to read copying and usage conditions.
+  * Do ":help credits" in Vim to see a list of people who contributed.
+  */
+ 
+ /*
+  * Implements communication through a socket or any file handle.
+  */
+ 
+ #include "vim.h"
+ 
+ #if defined(FEAT_CHANNEL) || defined(PROTO)
+ 
+ typedef struct {
+     sock_T  ch_fd;
+     int           ch_idx;
+ } channel_T;
+ 
+ static channel_T *channels = NULL;
+ static int channel_count = 0;
+ 
+ /*
+  * Add a new channel slot, return the index.
+  * Returns -1 if out of space.
+  */
+     static int
+ add_channel(void)
+ {
+     int               idx;
+     channel_T *new_channels;
+ 
+     if (channels != NULL)
+       for (idx = 0; idx < channel_count; ++idx)
+           if (channels[idx].ch_fd < 0)
+               /* re-use a closed channel slot */
+               return idx;
+     if (channel_count == MAX_OPEN_CHANNELS)
+       return -1;
+     new_channels = (channel_T *)alloc(sizeof(channel_T) * channel_count + 1);
+     if (new_channels == NULL)
+       return -1;
+     if (channels != NULL)
+       mch_memmove(new_channels, channels, sizeof(channel_T) * channel_count);
+     channels = new_channels;
+     channels[channel_count].ch_fd = (sock_T)-1;
+ 
+     return channel_count++;
+ }
+ 
+ #if defined(FEAT_NETBEANS_INTG) || defined(PROTO)
+ static int netbeans_channel = -1;
+ 
+ /*
+  * Add the netbeans socket to the channels.
+  * Return the channel index.
+  */
+     int
+ channel_add_netbeans(sock_T fd)
+ {
+     int idx = add_channel();
+ 
+     if (idx >= 0)
+     {
+       channels[idx].ch_fd = fd;
+       netbeans_channel = idx;
+     }
+     return idx;
+ }
+ 
+     void
+ channel_remove_netbeans()
+ {
+     channels[netbeans_channel].ch_fd = (sock_T)-1;
+     netbeans_channel = -1;
+ }
+ #endif
+ 
+     static void
+ channel_read(int idx)
+ {
+ # ifdef FEAT_NETBEANS_INTG
+     if (idx == netbeans_channel)
+       netbeans_read();
+     else
+ # endif
+     {
+       ; /* TODO: read */
+     }
+ }
+ 
+ #if (defined(UNIX) && !defined(HAVE_SELECT)) || defined(PROTO)
+ /*
+  * Add open channels to the poll struct.
+  * Return the adjusted struct index.
+  * The type of "fds" is hidden to avoid problems with the function proto.
+  */
+     int
+ channel_poll_setup(int nfd_in, void *fds_in)
+ {
+     int nfd = nfd_in;
+     int i;
+     struct pollfd *fds = fds_in;
+ 
+     for (i = 0; i < channel_count; ++i)
+       if (channels[i].ch_fd >= 0)
+       {
+           channels[i].ch_idx = nfd;
+           fds[nfd].fd = channels[i].ch_fd;
+           fds[nfd].events = POLLIN;
+           nfd++;
+       }
+       else
+           channels[i].ch_idx = -1;
+ 
+     return nfd;
+ }
+ 
+ /*
+  * The type of "fds" is hidden to avoid problems with the function proto.
+  */
+     int
+ channel_poll_check(int ret_in, void *fds_in)
+ {
+     int ret = ret_in;
+     int i;
+     struct pollfd *fds = fds_in;
+ 
+     for (i = 0; i < channel_count; ++i)
+       if (ret > 0 && channels[i].ch_idx != -1
+                                && fds[channels[i].ch_idx].revents & POLLIN)
+       {
+           channel_read(i);
+           --ret;
+       }
+ 
+     return ret;
+ }
+ #endif /* UNIX && !HAVE_SELECT */
+ 
+ #if (defined(UNIX) && defined(HAVE_SELECT)) || defined(PROTO)
+ /*
+  * The type of "rfds" is hidden to avoid problems with the function proto.
+  */
+     int
+ channel_select_setup(int maxfd_in, void *rfds_in)
+ {
+     int           maxfd = maxfd_in;
+     int           i;
+     fd_set  *rfds = rfds_in;
+ 
+     for (i = 0; i < channel_count; ++i)
+       if (channels[i].ch_fd >= 0)
+       {
+           FD_SET(channels[i].ch_fd, rfds);
+           if (maxfd < channels[i].ch_fd)
+               maxfd = channels[i].ch_fd;
+       }
+ 
+     return maxfd;
+ }
+ 
+ /*
+  * The type of "rfds" is hidden to avoid problems with the function proto.
+  */
+     int
+ channel_select_check(int ret_in, void *rfds_in)
+ {
+     int           ret = ret_in;
+     int           i;
+     fd_set  *rfds = rfds_in;
+ 
+     for (i = 0; i < channel_count; ++i)
+       if (ret > 0 && channels[i].ch_fd >= 0
+                                      && FD_ISSET(channels[i].ch_fd, rfds))
+       {
+           channel_read(i);
+           --ret;
+       }
+ 
+     return ret;
+ }
+ #endif /* UNIX && HAVE_SELECT */
+ 
+ #endif /* FEAT_CHANNEL */
*** ../vim-7.4.1168/src/netbeans.c      2015-12-31 19:06:56.052081865 +0100
--- src/netbeans.c      2016-01-24 20:02:48.859023505 +0100
***************
*** 106,118 ****
  # define NB_HAS_GUI (gui.in_use || gui.starting)
  #endif
  
! #ifdef WIN64
! typedef __int64 NBSOCK;
! #else
! typedef int NBSOCK;
! #endif
! 
! static NBSOCK nbsock = -1;            /* socket fd for Netbeans connection */
  #define NETBEANS_OPEN (nbsock != -1)
  
  #ifdef FEAT_GUI_X11
--- 106,112 ----
  # define NB_HAS_GUI (gui.in_use || gui.starting)
  #endif
  
! static sock_T nbsock = -1;            /* socket fd for Netbeans connection */
  #define NETBEANS_OPEN (nbsock != -1)
  
  #ifdef FEAT_GUI_X11
***************
*** 175,180 ****
--- 169,175 ----
  
      sock_close(nbsock);
      nbsock = -1;
+     channel_remove_netbeans();
  }
  
  /*
***************
*** 243,250 ****
      if (*params == '=')
      {
        /* "=fname": Read info from specified file. */
!       if (getConnInfo(params + 1, &hostname, &address, &password)
!                                                                     == FAIL)
            return FAIL;
      }
      else
--- 238,244 ----
      if (*params == '=')
      {
        /* "=fname": Read info from specified file. */
!       if (getConnInfo(params + 1, &hostname, &address, &password) == FAIL)
            return FAIL;
      }
      else
***************
*** 312,324 ****
        goto theend;        /* out of memory */
  
  #ifdef FEAT_GUI_W32
!     netbeans_init_winsock();
  #endif
  
  #ifdef INET_SOCKETS
      port = atoi(address);
  
!     if ((sd = (NBSOCK)socket(AF_INET, SOCK_STREAM, 0)) == (NBSOCK)-1)
      {
        nbdebug(("error in socket() in netbeans_connect()\n"));
        PERROR("socket() in netbeans_connect()");
--- 306,318 ----
        goto theend;        /* out of memory */
  
  #ifdef FEAT_GUI_W32
!     channel_init_winsock();
  #endif
  
  #ifdef INET_SOCKETS
      port = atoi(address);
  
!     if ((sd = (sock_T)socket(AF_INET, SOCK_STREAM, 0)) == (sock_T)-1)
      {
        nbdebug(("error in socket() in netbeans_connect()\n"));
        PERROR("socket() in netbeans_connect()");
***************
*** 358,364 ****
        {
            sock_close(sd);
  #ifdef INET_SOCKETS
!           if ((sd = (NBSOCK)socket(AF_INET, SOCK_STREAM, 0)) == (NBSOCK)-1)
            {
                SOCK_ERRNO;
                nbdebug(("socket()#2 in netbeans_connect()\n"));
--- 352,358 ----
        {
            sock_close(sd);
  #ifdef INET_SOCKETS
!           if ((sd = (sock_T)socket(AF_INET, SOCK_STREAM, 0)) == (sock_T)-1)
            {
                SOCK_ERRNO;
                nbdebug(("socket()#2 in netbeans_connect()\n"));
***************
*** 423,428 ****
--- 417,423 ----
      }
  
      nbsock = sd;
+     channel_add_netbeans(nbsock);
      vim_snprintf(buf, sizeof(buf), "AUTH %s\n", password);
      nb_send(buf, "netbeans_connect");
  
***************
*** 2954,2960 ****
  #endif
  
  /*
!  * Return TRUE when the netbeans connection is closed.
   */
      int
  netbeans_active(void)
--- 2949,2955 ----
  #endif
  
  /*
!  * Return TRUE when the netbeans connection is active.
   */
      int
  netbeans_active(void)
***************
*** 2962,2976 ****
      return NETBEANS_OPEN;
  }
  
- /*
-  * Return netbeans file descriptor.
-  */
-     int
- netbeans_filedesc(void)
- {
-     return nbsock;
- }
- 
  #if defined(FEAT_GUI) || defined(PROTO)
  /*
   * Register our file descriptor with the gui event handling system.
--- 2957,2962 ----
*** ../vim-7.4.1168/src/proto/channel.pro       2016-01-24 20:31:32.173071585 
+0100
--- src/proto/channel.pro       2016-01-24 20:08:17.379606035 +0100
***************
*** 0 ****
--- 1,8 ----
+ /* channel.c */
+ int channel_add_netbeans(sock_T fd);
+ void channel_remove_netbeans(void);
+ int channel_poll_setup(int nfd_in, void *fds_in);
+ int channel_poll_check(int ret_in, void *fds_in);
+ int channel_select_setup(int maxfd_in, void *rfds_in);
+ int channel_select_check(int ret_in, void *rfds_in);
+ /* vim: set ft=c : */
*** ../vim-7.4.1168/src/proto/netbeans.pro      2016-01-19 13:21:55.845334290 
+0100
--- src/proto/netbeans.pro      2016-01-24 20:33:11.404036846 +0100
***************
*** 9,15 ****
  void ex_nbstart(exarg_T *eap);
  void netbeans_beval_cb(BalloonEval *beval, int state);
  int netbeans_active(void);
- int netbeans_filedesc(void);
  void netbeans_gui_register(void);
  void netbeans_open(char *params, int doabort);
  void netbeans_send_disconnect(void);
--- 9,14 ----
*** ../vim-7.4.1168/src/gui_w32.c       2016-01-10 16:07:39.848871814 +0100
--- src/gui_w32.c       2016-01-24 19:46:27.161212172 +0100
***************
*** 553,559 ****
  static TMonitorFromWindow   pMonitorFromWindow = NULL;
  static TGetMonitorInfo            pGetMonitorInfo = NULL;
  static HANDLE             user32_lib = NULL;
! #ifdef FEAT_NETBEANS_INTG
  int WSInitialized = FALSE; /* WinSock is initialized */
  #endif
  /*
--- 553,559 ----
  static TMonitorFromWindow   pMonitorFromWindow = NULL;
  static TGetMonitorInfo            pGetMonitorInfo = NULL;
  static HANDLE             user32_lib = NULL;
! #ifdef FEAT_CHANNEL
  int WSInitialized = FALSE; /* WinSock is initialized */
  #endif
  /*
***************
*** 5048,5059 ****
      SetPixel(s_hdc, x+3, y++, gui.currFgColor);
      SetPixel(s_hdc, x+2, y, gui.currFgColor);
  }
  
  /*
   * Initialize the Winsock dll.
   */
      void
! netbeans_init_winsock()
  {
      WSADATA wsaData;
      int wsaerr;
--- 5048,5061 ----
      SetPixel(s_hdc, x+3, y++, gui.currFgColor);
      SetPixel(s_hdc, x+2, y, gui.currFgColor);
  }
+ #endif
  
+ #if defined(FEAT_CHANNEL) || defined(PROTO)
  /*
   * Initialize the Winsock dll.
   */
      void
! channel_init_winsock()
  {
      WSADATA wsaData;
      int wsaerr;
*** ../vim-7.4.1168/src/eval.c  2016-01-24 17:54:19.031096454 +0100
--- src/eval.c  2016-01-24 19:48:03.536211790 +0100
***************
*** 13083,13088 ****
--- 13083,13091 ----
  #ifdef FEAT_BYTEOFF
        "byte_offset",
  #endif
+ #ifdef FEAT_CHANNEL
+       "channel",
+ #endif
  #ifdef FEAT_CINDENT
        "cindent",
  #endif
*** ../vim-7.4.1168/src/os_mswin.c      2016-01-19 19:00:24.107668109 +0100
--- src/os_mswin.c      2016-01-24 19:58:01.042010329 +0100
***************
*** 231,237 ****
  # ifdef FEAT_OLE
      UninitOLE();
  # endif
! # ifdef FEAT_NETBEANS_INTG
      if (WSInitialized)
      {
        WSInitialized = FALSE;
--- 231,237 ----
  # ifdef FEAT_OLE
      UninitOLE();
  # endif
! # ifdef FEAT_CHANNEL
      if (WSInitialized)
      {
        WSInitialized = FALSE;
*** ../vim-7.4.1168/src/ui.c    2015-12-31 19:06:56.060081779 +0100
--- src/ui.c    2016-01-24 19:58:46.317540465 +0100
***************
*** 1562,1568 ****
   * descriptions which would otherwise overflow.  The buffer is considered full
   * when only this extra space (or part of it) remains.
   */
! #if defined(FEAT_SUN_WORKSHOP) || defined(FEAT_NETBEANS_INTG) \
        || defined(FEAT_CLIENTSERVER)
     /*
      * Sun WorkShop and NetBeans stuff debugger commands into the input buffer.
--- 1562,1568 ----
   * descriptions which would otherwise overflow.  The buffer is considered full
   * when only this extra space (or part of it) remains.
   */
! #if defined(FEAT_SUN_WORKSHOP) || defined(FEAT_CHANNEL) \
        || defined(FEAT_CLIENTSERVER)
     /*
      * Sun WorkShop and NetBeans stuff debugger commands into the input buffer.
*** ../vim-7.4.1168/src/macros.h        2016-01-20 22:47:57.653335842 +0100
--- src/macros.h        2016-01-24 20:00:18.832580375 +0100
***************
*** 317,322 ****
  # define PLINES_NOFILL(x) plines(x)
  #endif
  
! #if defined(FEAT_NETBEANS_INTG) || defined(FEAT_CLIENTSERVER)
  # define MESSAGE_QUEUE
  #endif
--- 317,322 ----
  # define PLINES_NOFILL(x) plines(x)
  #endif
  
! #if defined(FEAT_CHANNEL) || defined(FEAT_CLIENTSERVER)
  # define MESSAGE_QUEUE
  #endif
*** ../vim-7.4.1168/src/proto.h 2016-01-23 19:45:48.618931375 +0100
--- src/proto.h 2016-01-24 18:15:57.189644050 +0100
***************
*** 209,214 ****
--- 209,217 ----
  # ifdef FEAT_NETBEANS_INTG
  #  include "netbeans.pro"
  # endif
+ # ifdef FEAT_CHANNEL
+ #  include "channel.pro"
+ # endif
  
  # ifdef FEAT_GUI
  #  include "gui.pro"
*** ../vim-7.4.1168/src/feature.h       2016-01-20 22:11:53.249565738 +0100
--- src/feature.h       2016-01-24 18:19:40.915326075 +0100
***************
*** 1237,1242 ****
--- 1237,1243 ----
   * +sniff             Sniff interface: "--enable-sniff"
   * +sun_workshop      Sun Workshop integration
   * +netbeans_intg     Netbeans integration
+  * +channel           Inter process communication
   */
  
  /*
***************
*** 1261,1266 ****
--- 1262,1274 ----
  #endif
  
  /*
+  * The Channel feature requires +eval.
+  */
+ #if !defined(FEAT_EVAL) && defined(FEAT_CHANNEL)
+ # undef FEAT_CHANNEL
+ #endif
+ 
+ /*
   * +signs             Allow signs to be displayed to the left of text lines.
   *                    Adds the ":sign" command.
   */
*** ../vim-7.4.1168/src/os_unix.c       2016-01-17 15:56:29.366605222 +0100
--- src/os_unix.c       2016-01-24 20:06:33.352689736 +0100
***************
*** 5189,5197 ****
      int               *check_for_gpm UNUSED;
  {
      int               ret;
- #ifdef FEAT_NETBEANS_INTG
-     int               nb_fd = netbeans_filedesc();
- #endif
  #if defined(FEAT_XCLIPBOARD) || defined(USE_XSMP) || defined(FEAT_MZSCHEME)
      static int        busy = FALSE;
  
--- 5189,5194 ----
***************
*** 5241,5247 ****
  # endif
  #endif
  #ifndef HAVE_SELECT
!       struct pollfd   fds[6];
        int             nfd;
  # ifdef FEAT_XCLIPBOARD
        int             xterm_idx = -1;
--- 5238,5244 ----
  # endif
  #endif
  #ifndef HAVE_SELECT
!       struct pollfd   fds[6 + MAX_OPEN_CHANNELS];
        int             nfd;
  # ifdef FEAT_XCLIPBOARD
        int             xterm_idx = -1;
***************
*** 5252,5260 ****
  # ifdef USE_XSMP
        int             xsmp_idx = -1;
  # endif
- # ifdef FEAT_NETBEANS_INTG
-       int             nb_idx = -1;
- # endif
        int             towait = (int)msec;
  
  # ifdef FEAT_MZSCHEME
--- 5249,5254 ----
***************
*** 5306,5319 ****
            nfd++;
        }
  # endif
! #ifdef FEAT_NETBEANS_INTG
!       if (nb_fd != -1)
!       {
!           nb_idx = nfd;
!           fds[nfd].fd = nb_fd;
!           fds[nfd].events = POLLIN;
!           nfd++;
!       }
  #endif
  
        ret = poll(fds, nfd, towait);
--- 5300,5307 ----
            nfd++;
        }
  # endif
! #ifdef FEAT_CHANNEL
!       nfd = channel_poll_setup(nfd, &fds);
  #endif
  
        ret = poll(fds, nfd, towait);
***************
*** 5368,5379 ****
                finished = FALSE;       /* Try again */
        }
  # endif
! #ifdef FEAT_NETBEANS_INTG
!       if (ret > 0 && nb_idx != -1 && fds[nb_idx].revents & POLLIN)
!       {
!           netbeans_read();
!           --ret;
!       }
  #endif
  
  
--- 5356,5364 ----
                finished = FALSE;       /* Try again */
        }
  # endif
! #ifdef FEAT_CHANNEL
!       if (ret > 0)
!           ret = channel_poll_check(ret, &fds);
  #endif
  
  
***************
*** 5462,5474 ****
                maxfd = xsmp_icefd;
        }
  # endif
! # ifdef FEAT_NETBEANS_INTG
!       if (nb_fd != -1)
!       {
!           FD_SET(nb_fd, &rfds);
!           if (maxfd < nb_fd)
!               maxfd = nb_fd;
!       }
  # endif
  
        ret = select(maxfd + 1, &rfds, NULL, &efds, tvp);
--- 5447,5454 ----
                maxfd = xsmp_icefd;
        }
  # endif
! # ifdef FEAT_CHANNEL
!       maxfd = channel_select_setup(maxfd, &rfds);
  # endif
  
        ret = select(maxfd + 1, &rfds, NULL, &efds, tvp);
***************
*** 5556,5567 ****
            }
        }
  # endif
! #ifdef FEAT_NETBEANS_INTG
!       if (ret > 0 && nb_fd != -1 && FD_ISSET(nb_fd, &rfds))
!       {
!           netbeans_read();
!           --ret;
!       }
  #endif
  
  #endif /* HAVE_SELECT */
--- 5536,5544 ----
            }
        }
  # endif
! #ifdef FEAT_CHANNEL
!       if (ret > 0)
!           ret = channel_select_check(ret, &rfds);
  #endif
  
  #endif /* HAVE_SELECT */
*** ../vim-7.4.1168/src/vim.h   2016-01-23 19:45:48.618931375 +0100
--- src/vim.h   2016-01-24 20:03:23.598663010 +0100
***************
*** 1929,1936 ****
  #  ifdef FEAT_OLE
  #   define WM_OLE (WM_APP+0)
  #  endif
! #  ifdef FEAT_NETBEANS_INTG
!     /* message for Netbeans socket event */
  #   define WM_NETBEANS (WM_APP+1)
  #  endif
  # endif
--- 1929,1936 ----
  #  ifdef FEAT_OLE
  #   define WM_OLE (WM_APP+0)
  #  endif
! #  ifdef FEAT_CHANNEL
!     /* message for channel socket event */
  #   define WM_NETBEANS (WM_APP+1)
  #  endif
  # endif
***************
*** 1979,1984 ****
--- 1979,1992 ----
  # define stat(a,b) (access(a,0) ? -1 : stat(a,b))
  #endif
  
+ #ifdef FEAT_CHANNEL
+ # ifdef WIN64
+ typedef __int64 sock_T;
+ # else
+ typedef int sock_T;
+ # endif
+ #endif
+ 
  #include "ex_cmds.h"      /* Ex command defines */
  #include "proto.h"        /* function prototypes */
  
***************
*** 2312,2315 ****
--- 2320,2329 ----
  # define SET_NO_HLSEARCH(flag) no_hlsearch = (flag)
  #endif
  
+ #ifdef FEAT_CHANNEL
+ # define MAX_OPEN_CHANNELS 10
+ #else
+ # define MAX_OPEN_CHANNELS 0
+ #endif
+ 
  #endif /* VIM__H */
*** ../vim-7.4.1168/src/configure.in    2016-01-20 22:11:53.253565698 +0100
--- src/configure.in    2016-01-24 18:36:43.424711424 +0100
***************
*** 1938,1947 ****
        , [enable_netbeans="yes"])
  if test "$enable_netbeans" = "yes"; then
    AC_MSG_RESULT(no)
    dnl On Solaris we need the socket and nsl library.
    AC_CHECK_LIB(socket, socket)
    AC_CHECK_LIB(nsl, gethostbyname)
!   AC_MSG_CHECKING(whether compiling netbeans integration is possible)
    AC_TRY_LINK([
  #include <stdio.h>
  #include <stdlib.h>
--- 1938,1967 ----
        , [enable_netbeans="yes"])
  if test "$enable_netbeans" = "yes"; then
    AC_MSG_RESULT(no)
+ else
+   AC_MSG_RESULT(yes)
+ fi
+ 
+ AC_MSG_CHECKING(--disable-channel argument)
+ AC_ARG_ENABLE(channel,
+       [  --disable-channel      Disable process communication support.],
+       , [enable_channel="yes"])
+ if test "$enable_channel" = "yes"; then
+   AC_MSG_RESULT(no)
+ else
+   if test "$enable_netbeans" = "yes"; then
+     AC_MSG_RESULT(yes, netbeans also disabled)
+     enable_netbeans="no"
+   else
+     AC_MSG_RESULT(yes)
+   fi
+ fi
+ 
+ if "$enable_channel" = "yes"; then
    dnl On Solaris we need the socket and nsl library.
    AC_CHECK_LIB(socket, socket)
    AC_CHECK_LIB(nsl, gethostbyname)
!   AC_MSG_CHECKING(whether compiling with process communication is possible)
    AC_TRY_LINK([
  #include <stdio.h>
  #include <stdlib.h>
***************
*** 1967,1975 ****
                  (void)connect(1, (struct sockaddr *)&server, sizeof(server));
            ],
        AC_MSG_RESULT(yes),
!       AC_MSG_RESULT(no); enable_netbeans="no")
! else
!   AC_MSG_RESULT(yes)
  fi
  if test "$enable_netbeans" = "yes"; then
    AC_DEFINE(FEAT_NETBEANS_INTG)
--- 1987,1993 ----
                  (void)connect(1, (struct sockaddr *)&server, sizeof(server));
            ],
        AC_MSG_RESULT(yes),
!       AC_MSG_RESULT(no); enable_netbeans="no"; enable_channel="no")
  fi
  if test "$enable_netbeans" = "yes"; then
    AC_DEFINE(FEAT_NETBEANS_INTG)
***************
*** 1978,1983 ****
--- 1996,2008 ----
    NETBEANS_OBJ="objects/netbeans.o"
    AC_SUBST(NETBEANS_OBJ)
  fi
+ if test "$enable_channel" = "yes"; then
+   AC_DEFINE(FEAT_CHANNEL)
+   CHANNEL_SRC="channel.c"
+   AC_SUBST(CHANNEL_SRC)
+   CHANNEL_OBJ="objects/channel.o"
+   AC_SUBST(CHANNEL_OBJ)
+ fi
  
  AC_MSG_CHECKING(--enable-sniff argument)
  AC_ARG_ENABLE(sniff,
*** ../vim-7.4.1168/src/auto/configure  2016-01-20 22:11:53.257565658 +0100
--- src/auto/configure  2016-01-24 18:13:23.887232449 +0100
***************
*** 656,661 ****
--- 656,663 ----
  xmkmfpath
  SNIFF_OBJ
  SNIFF_SRC
+ CHANNEL_OBJ
+ CHANNEL_SRC
  NETBEANS_OBJ
  NETBEANS_SRC
  WORKSHOP_OBJ
***************
*** 810,815 ****
--- 812,818 ----
  enable_cscope
  enable_workshop
  enable_netbeans
+ enable_channel
  enable_sniff
  enable_multibyte
  enable_hangulinput
***************
*** 1473,1478 ****
--- 1476,1482 ----
    --enable-cscope         Include cscope interface.
    --enable-workshop       Include Sun Visual Workshop support.
    --disable-netbeans      Disable NetBeans integration support.
+   --disable-channel      Disable process communication support.
    --enable-sniff          Include Sniff interface.
    --enable-multibyte      Include multibyte editing support.
    --enable-hangulinput    Include Hangul input support.
***************
*** 7227,7232 ****
--- 7231,7259 ----
  if test "$enable_netbeans" = "yes"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+ fi
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking --disable-channel argument" 
>&5
+ $as_echo_n "checking --disable-channel argument... " >&6; }
+ # Check whether --enable-channel was given.
+ if test "${enable_channel+set}" = set; then :
+   enableval=$enable_channel;
+ else
+   enable_channel="yes"
+ fi
+ 
+ if test "$enable_channel" = "yes"; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+ fi
+ 
+ if test "$enable_netbeans" = "yes" -o "$enable_channel" = "yes"; then
      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket" 
>&5
  $as_echo_n "checking for socket in -lsocket... " >&6; }
  if ${ac_cv_lib_socket_socket+:} false; then :
***************
*** 7317,7324 ****
  
  fi
  
!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiling 
netbeans integration is possible" >&5
! $as_echo_n "checking whether compiling netbeans integration is possible... " 
>&6; }
    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
  
--- 7344,7351 ----
  
  fi
  
!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiling with 
process communication is possible" >&5
! $as_echo_n "checking whether compiling with process communication is 
possible... " >&6; }
    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
  
***************
*** 7358,7370 ****
  $as_echo "yes" >&6; }
  else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
! $as_echo "no" >&6; }; enable_netbeans="no"
  fi
  rm -f core conftest.err conftest.$ac_objext \
      conftest$ac_exeext conftest.$ac_ext
- else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
- $as_echo "yes" >&6; }
  fi
  if test "$enable_netbeans" = "yes"; then
    $as_echo "#define FEAT_NETBEANS_INTG 1" >>confdefs.h
--- 7385,7394 ----
  $as_echo "yes" >&6; }
  else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
! $as_echo "no" >&6; }; enable_netbeans="no"; enable_channel="no"
  fi
  rm -f core conftest.err conftest.$ac_objext \
      conftest$ac_exeext conftest.$ac_ext
  fi
  if test "$enable_netbeans" = "yes"; then
    $as_echo "#define FEAT_NETBEANS_INTG 1" >>confdefs.h
***************
*** 7374,7379 ****
--- 7398,7411 ----
    NETBEANS_OBJ="objects/netbeans.o"
  
  fi
+ if test "$enable_channel" = "yes"; then
+   $as_echo "#define FEAT_CHANNEL 1" >>confdefs.h
+ 
+   CHANNEL_SRC="channel.c"
+ 
+   CHANNEL_OBJ="objects/channel.o"
+ 
+ fi
  
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking --enable-sniff argument" >&5
  $as_echo_n "checking --enable-sniff argument... " >&6; }
*** ../vim-7.4.1168/src/config.mk.in    2015-12-29 18:52:33.344054429 +0100
--- src/config.mk.in    2016-01-24 18:11:51.860185985 +0100
***************
*** 89,94 ****
--- 89,96 ----
  
  NETBEANS_SRC  = @NETBEANS_SRC@
  NETBEANS_OBJ  = @NETBEANS_OBJ@
+ CHANNEL_SRC   = @CHANNEL_SRC@
+ CHANNEL_OBJ   = @CHANNEL_OBJ@
  
  RUBY          = @vi_cv_path_ruby@
  RUBY_SRC      = @RUBY_SRC@
*** ../vim-7.4.1168/src/config.aap.in   2010-07-14 22:59:55.000000000 +0200
--- src/config.aap.in   2016-01-24 18:12:29.307797966 +0100
***************
*** 65,70 ****
--- 65,72 ----
  
  NETBEANS_SRC  = @NETBEANS_SRC@
  NETBEANS_OBJ  = @NETBEANS_OBJ@
+ CHANNEL_SRC   = @CHANNEL_SRC@
+ CHANNEL_OBJ   = @CHANNEL_OBJ@
  
  RUBY          = @vi_cv_path_ruby@
  RUBY_SRC      = @RUBY_SRC@
*** ../vim-7.4.1168/src/config.h.in     2016-01-09 19:39:39.277685945 +0100
--- src/config.h.in     2016-01-24 18:12:58.023500434 +0100
***************
*** 435,440 ****
--- 435,443 ----
  /* Define if you want to include NetBeans integration. */
  #undef FEAT_NETBEANS_INTG
  
+ /* Define if you want to include process communication. */
+ #undef FEAT_CHANNEL
+ 
  /* Define default global runtime path */
  #undef RUNTIME_GLOBAL
  
*** ../vim-7.4.1168/src/Make_bc5.mak    2016-01-23 19:45:48.622931332 +0100
--- src/Make_bc5.mak    2016-01-24 18:40:18.666474776 +0100
***************
*** 86,94 ****
  #             (BIG for WIN32, SMALL for DOS16)
  # WINVER      0x0400 or 0x0500: minimum Win32 version to support (0x0400)
  # CSCOPE      no or yes: include support for Cscope interface (yes)
! # NETBEANS    no or yes: include support for Netbeans interface (yes if GUI
  #             is yes)
  # NBDEBUG     no or yes: include support for debugging Netbeans interface (no)
  # XPM         define to path to XPM dir to get support for loading XPM images.
  
  ### BOR: root of the BC installation
--- 86,97 ----
  #             (BIG for WIN32, SMALL for DOS16)
  # WINVER      0x0400 or 0x0500: minimum Win32 version to support (0x0400)
  # CSCOPE      no or yes: include support for Cscope interface (yes)
! # NETBEANS    no or yes: include support for Netbeans interface; also
! #             requires CHANNEL (yes if GUI
  #             is yes)
  # NBDEBUG     no or yes: include support for debugging Netbeans interface (no)
+ # CHANNEL     no or yes: include support for inter process communication (yes
+ #             if GUI is yes)
  # XPM         define to path to XPM dir to get support for loading XPM images.
  
  ### BOR: root of the BC installation
***************
*** 137,142 ****
--- 140,150 ----
  NETBEANS = yes
  !endif
  
+ ### CHANNEL: yes to enable inter process communication, no to disable it
+ !if ("$(CHANNEL)"=="") && ("$(GUI)"=="yes")
+ CHANNEL = yes
+ !endif
+ 
  ### LUA: uncomment this line if you want lua support in vim
  # LUA=c:\lua
  
***************
*** 466,471 ****
--- 474,480 ----
  RESFILE = vim.res
  !else
  !undef NETBEANS
+ !undef CHANNEL
  !undef XPM
  !undef VIMDLL
  !if ("$(DEBUG)"=="yes")
***************
*** 488,499 ****
--- 497,517 ----
  !endif
  
  !if ("$(NETBEANS)"=="yes")
+ !if ("$(CHANNEL)"!="yes")
+ # cannot use Netbeans without CHANNEL
+ NETBEANS = no
+ !else
  DEFINES = $(DEFINES) -DFEAT_NETBEANS_INTG
  !if ("$(NBDEBUG)"=="yes")
  DEFINES = $(DEFINES) -DNBDEBUG
  NBDEBUG_DEP = nbdebug.h nbdebug.c
  !endif
  !endif
+ !endif
+ 
+ !if ("$(CHANNEL)"=="yes")
+ DEFINES = $(DEFINES) -DFEAT_CHANNEL
+ !endif
  
  !ifdef XPM
  !if ("$(GUI)"=="yes")
***************
*** 673,678 ****
--- 691,701 ----
      $(OBJDIR)\netbeans.obj
  !endif
  
+ !if ("$(CHANNEL)"=="yes")
+ vimobj = $(vimobj) \
+     $(OBJDIR)\channel.obj
+ !endif
+ 
  !ifdef XPM
  vimobj = $(vimobj) \
      $(OBJDIR)\xpm_w32.obj
***************
*** 748,753 ****
--- 771,779 ----
  !if ("$(NETBEANS)"=="yes")
  MSG = $(MSG) NETBEANS
  !endif
+ !if ("$(CHANNEL)"=="yes")
+ MSG = $(MSG) CHANNEL
+ !endif
  !ifdef XPM
  MSG = $(MSG) XPM
  !endif
***************
*** 1029,1034 ****
--- 1055,1063 ----
  $(OBJDIR)\netbeans.obj: netbeans.c $(NBDEBUG_DEP)
        $(CC) $(CCARG) $(CC1) $(CC2)$@ netbeans.c
  
+ $(OBJDIR)\channel.obj: channel.c
+       $(CC) $(CCARG) $(CC1) $(CC2)$@ channel.c
+ 
  $(OBJDIR)\vim.res: vim.rc version.h tools.bmp tearoff.bmp \
                vim.ico vim_error.ico vim_alert.ico vim_info.ico vim_quest.ico
        $(BRC) -fo$(OBJDIR)\vim.res -i $(BOR)\include -w32 -r vim.rc @&&|
*** ../vim-7.4.1168/src/Make_cyg_ming.mak       2016-01-23 19:45:48.622931332 
+0100
--- src/Make_cyg_ming.mak       2016-01-24 18:41:36.221668634 +0100
***************
*** 64,71 ****
  endif
  # Set to yes to enable Cscope support.
  CSCOPE=yes
! # Set to yes to enable Netbeans support.
  NETBEANS=$(GUI)
  
  
  # Link against the shared version of libstdc++ by default.  Set
--- 64,73 ----
  endif
  # Set to yes to enable Cscope support.
  CSCOPE=yes
! # Set to yes to enable Netbeans support (requires CHANNEL).
  NETBEANS=$(GUI)
+ # Set to yes to enable inter process communication.
+ CHANNEL=$(GUI)
  
  
  # Link against the shared version of libstdc++ by default.  Set
***************
*** 526,531 ****
--- 528,537 ----
  endif
  endif
  
+ ifeq ($(CHANNEL),yes)
+ DEFINES += -DFEAT_CHANNEL
+ endif
+ 
  # DirectWrite (DirectX)
  ifeq ($(DIRECTX),yes)
  # Only allow DirectWrite for a GUI build.
***************
*** 667,679 ****
--- 673,700 ----
  ifeq ($(CSCOPE),yes)
  OBJ += $(OUTDIR)/if_cscope.o
  endif
+ 
  ifeq ($(NETBEANS),yes)
+ ifneq ($(CHANNEL),yes)
+ # Cannot use Netbeans without CHANNEL
+ NETBEANS=no
+ else
  # Only allow NETBEANS for a GUI build.
  ifeq (yes, $(GUI))
  OBJ += $(OUTDIR)/netbeans.o
  LIB += -lwsock32
  endif
  endif
+ endif
+ 
+ ifeq ($(CHANNEL),yes)
+ OBJ += $(OUTDIR)/channel.o
+ ifneq ($(NETBEANS),yes)
+ LIB += -lwsock32
+ endif
+ endif
+ endif
+ 
  ifeq ($(DIRECTX),yes)
  # Only allow DIRECTX for a GUI build.
  ifeq (yes, $(GUI))
***************
*** 866,871 ****
--- 887,895 ----
  $(OUTDIR)/netbeans.o: netbeans.c $(INCL) $(NBDEBUG_INCL) $(NBDEBUG_SRC)
        $(CC) -c $(CFLAGS) netbeans.c -o $(OUTDIR)/netbeans.o
  
+ $(OUTDIR)/channel.o:  channel.c $(INCL)
+       $(CC) -c $(CFLAGS) channel.c -o $(OUTDIR)/channel.o
+ 
  $(OUTDIR)/regexp.o:           regexp.c regexp_nfa.c $(INCL)
        $(CC) -c $(CFLAGS) regexp.c -o $(OUTDIR)/regexp.o
  
*** ../vim-7.4.1168/src/Make_mvc.mak    2016-01-23 19:45:48.626931291 +0100
--- src/Make_mvc.mak    2016-01-24 18:45:45.635076419 +0100
***************
*** 96,101 ****
--- 96,108 ----
  #     PostScript printing: POSTSCRIPT=yes (default is no)
  #
  #     Netbeans Support: NETBEANS=[yes or no] (default is yes if GUI is yes)
+ #     Requires CHANNEL.
+ #
+ #     Netbeans Debugging Support: NBDEBUG=[yes or no] (should be no, yes
+ #     doesn't work)
+ #
+ #     Inter process communication: CHANNEL=[yes or no] (default is yes if GUI
+ #     is yes)
  #
  #     XPM Image Support: XPM=[path to XPM directory]
  #     Default is "xpm", using the files included in the distribution.
***************
*** 114,122 ****
  #       yes:   Write a normal mapfile.
  #       lines: Write a mapfile with line numbers (only for VC6 and later)
  #
- #     Netbeans Debugging Support: NBDEBUG=[yes or no] (should be no, yes
- #     doesn't work)
- #
  #     Static Code Analysis: ANALYZE=yes (works with VS2012 only)
  #
  # You can combine any of these interfaces
--- 121,126 ----
***************
*** 290,298 ****
  NETBEANS = $(GUI)
  !endif
  
! # Only allow NETBEANS and XPM for a GUI build.
  !if "$(GUI)" == "yes"
! !if "$(NETBEANS)" == "yes"
  # NETBEANS - Include support for Netbeans integration
  NETBEANS_PRO  = proto/netbeans.pro
  NETBEANS_OBJ  = $(OBJDIR)/netbeans.obj
--- 294,306 ----
  NETBEANS = $(GUI)
  !endif
  
! !ifndef CHANNEL
! CHANNEL = $(GUI)
! !endif
! 
! # Only allow NETBEANS and XPM for a GUI build and CHANNEL.
  !if "$(GUI)" == "yes"
! !if "$(NETBEANS)" == "yes" && "$(CHANNEL)" == "yes"
  # NETBEANS - Include support for Netbeans integration
  NETBEANS_PRO  = proto/netbeans.pro
  NETBEANS_OBJ  = $(OBJDIR)/netbeans.obj
***************
*** 333,338 ****
--- 341,354 ----
  !endif
  !endif
  
+ !if "$(CHANNEL)" == "yes"
+ CHANNEL_PRO   = proto/channel.pro
+ CHANNEL_OBJ   = $(OBJDIR)/channel.obj
+ CHANNEL_DEFS  = -DFEAT_CHANNEL
+ 
+ NETBEANS_LIB  = WSock32.lib
+ !endif
+ 
  # Set which version of the CRT to use
  !if defined(USE_MSVCRT)
  # CVARS = $(cvarsdll)
***************
*** 365,371 ****
  #VIMRUNTIMEDIR = somewhere
  
  CFLAGS = -c /W3 /nologo $(CVARS) -I. -Iproto -DHAVE_PATHDEF -DWIN32 \
!               $(SNIFF_DEFS) $(CSCOPE_DEFS) $(NETBEANS_DEFS) \
                $(NBDEBUG_DEFS) $(XPM_DEFS) \
                $(DEFINES) -DWINVER=$(WINVER) -D_WIN32_WINNT=$(WINVER) \
                /Fo$(OUTDIR)/ 
--- 381,387 ----
  #VIMRUNTIMEDIR = somewhere
  
  CFLAGS = -c /W3 /nologo $(CVARS) -I. -Iproto -DHAVE_PATHDEF -DWIN32 \
!               $(SNIFF_DEFS) $(CSCOPE_DEFS) $(NETBEANS_DEFS) $(CHANNEL_DEFS) \
                $(NBDEBUG_DEFS) $(XPM_DEFS) \
                $(DEFINES) -DWINVER=$(WINVER) -D_WIN32_WINNT=$(WINVER) \
                /Fo$(OUTDIR)/ 
***************
*** 1005,1016 ****
  
  $(VIM).exe: $(OUTDIR) $(OBJ) $(GUI_OBJ) $(OLE_OBJ) $(OLE_IDL) $(MZSCHEME_OBJ) 
\
                $(LUA_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) 
$(TCL_OBJ) \
!               $(SNIFF_OBJ) $(CSCOPE_OBJ) $(NETBEANS_OBJ) $(XPM_OBJ) \
                version.c version.h
        $(CC) $(CFLAGS) version.c
        $(link) $(LINKARGS1) -out:$(VIM).exe $(OBJ) $(GUI_OBJ) $(OLE_OBJ) \
                $(LUA_OBJ) $(MZSCHEME_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) 
$(PYTHON3_OBJ) $(RUBY_OBJ) \
!               $(TCL_OBJ) $(SNIFF_OBJ) $(CSCOPE_OBJ) $(NETBEANS_OBJ) \
                $(XPM_OBJ) $(OUTDIR)\version.obj $(LINKARGS2)
        if exist $(VIM).exe.manifest mt.exe -nologo -manifest 
$(VIM).exe.manifest -updateresource:$(VIM).exe;1
  
--- 1021,1032 ----
  
  $(VIM).exe: $(OUTDIR) $(OBJ) $(GUI_OBJ) $(OLE_OBJ) $(OLE_IDL) $(MZSCHEME_OBJ) 
\
                $(LUA_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) 
$(TCL_OBJ) \
!               $(SNIFF_OBJ) $(CSCOPE_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) 
$(XPM_OBJ) \
                version.c version.h
        $(CC) $(CFLAGS) version.c
        $(link) $(LINKARGS1) -out:$(VIM).exe $(OBJ) $(GUI_OBJ) $(OLE_OBJ) \
                $(LUA_OBJ) $(MZSCHEME_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) 
$(PYTHON3_OBJ) $(RUBY_OBJ) \
!               $(TCL_OBJ) $(SNIFF_OBJ) $(CSCOPE_OBJ) $(NETBEANS_OBJ) 
$(CHANNEL_OBJ) \
                $(XPM_OBJ) $(OUTDIR)\version.obj $(LINKARGS2)
        if exist $(VIM).exe.manifest mt.exe -nologo -manifest 
$(VIM).exe.manifest -updateresource:$(VIM).exe;1
  
***************
*** 1227,1232 ****
--- 1243,1250 ----
  
  $(OUTDIR)/netbeans.obj: $(OUTDIR) netbeans.c $(NBDEBUG_SRC) $(INCL)
  
+ $(OUTDIR)/channel.obj: $(OUTDIR) channel.c $(INCL)
+ 
  $(OUTDIR)/normal.obj: $(OUTDIR) normal.c  $(INCL)
  
  $(OUTDIR)/option.obj: $(OUTDIR) option.c  $(INCL)
***************
*** 1362,1368 ****
        proto/ui.pro \
        proto/undo.pro \
        proto/window.pro \
!       $(NETBEANS_PRO)
  
  .SUFFIXES: .cod .i
  
--- 1380,1387 ----
        proto/ui.pro \
        proto/undo.pro \
        proto/window.pro \
!       $(NETBEANS_PRO) \
!       $(CHANNEL_PRO)
  
  .SUFFIXES: .cod .i
  
*** ../vim-7.4.1168/src/version.c       2016-01-24 17:54:19.031096454 +0100
--- src/version.c       2016-01-24 20:31:43.984948410 +0100
***************
*** 743,744 ****
--- 743,746 ----
  {   /* Add new patch number below this line */
+ /**/
+     1169,
  /**/

-- 
He who laughs last, thinks slowest.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui