lkundrak / rpms / vim

Forked from rpms/vim 4 years ago
Clone
81c2858
To: vim-dev@vim.org
81c2858
Subject: Patch 7.2.228
81c2858
Fcc: outbox
81c2858
From: Bram Moolenaar <Bram@moolenaar.net>
81c2858
Mime-Version: 1.0
81c2858
Content-Type: text/plain; charset=UTF-8
81c2858
Content-Transfer-Encoding: 8bit
81c2858
------------
81c2858
81c2858
Patch 7.2.228
81c2858
Problem:    Cscope is limited to 8 connections.
81c2858
Solution:   Allocated the connection array to handle any number of
81c2858
	    connections. (Dominique Pelle)
81c2858
Files:	    runtime/doc/if_cscop.txt, src/if_cscope.h, src/if_cscope.c
81c2858
81c2858
81c2858
*** ../vim-7.2.227/runtime/doc/if_cscop.txt	2009-03-18 14:30:46.000000000 +0100
81c2858
--- runtime/doc/if_cscop.txt	2009-07-09 15:40:48.000000000 +0200
81c2858
***************
81c2858
*** 355,367 ****
81c2858
  The DJGPP-built version from http://cscope.sourceforge.net is known to not
81c2858
  work with Vim.
81c2858
  
81c2858
! There are a couple of hard-coded limitations:
81c2858
! 
81c2858
!     1. The maximum number of cscope connections allowed is 8.  Do you
81c2858
!     really need more?
81c2858
! 
81c2858
!     2. Doing a |:tjump| when |:cstag| searches the tag files is not
81c2858
!     configurable (e.g., you can't do a tselect instead).
81c2858
  
81c2858
  ==============================================================================
81c2858
  6. Suggested usage					*cscope-suggestions*
81c2858
--- 355,362 ----
81c2858
  The DJGPP-built version from http://cscope.sourceforge.net is known to not
81c2858
  work with Vim.
81c2858
  
81c2858
! Hard-coded limitation: doing a |:tjump| when |:cstag| searches the tag files
81c2858
! is not configurable (e.g., you can't do a tselect instead).
81c2858
  
81c2858
  ==============================================================================
81c2858
  6. Suggested usage					*cscope-suggestions*
81c2858
*** ../vim-7.2.227/src/if_cscope.h	2008-08-25 04:35:13.000000000 +0200
81c2858
--- src/if_cscope.h	2009-07-09 15:39:32.000000000 +0200
81c2858
***************
81c2858
*** 25,31 ****
81c2858
  
81c2858
  #define CSCOPE_SUCCESS		0
81c2858
  #define CSCOPE_FAILURE		-1
81c2858
- #define CSCOPE_MAX_CONNECTIONS	8   /* you actually need more? */
81c2858
  
81c2858
  #define	CSCOPE_DBFILE		"cscope.out"
81c2858
  #define	CSCOPE_PROMPT		">> "
81c2858
--- 25,30 ----
81c2858
*** ../vim-7.2.227/src/if_cscope.c	2009-05-16 17:29:37.000000000 +0200
81c2858
--- src/if_cscope.c	2009-07-09 15:39:32.000000000 +0200
81c2858
***************
81c2858
*** 46,52 ****
81c2858
  static int	    cs_find __ARGS((exarg_T *eap));
81c2858
  static int	    cs_find_common __ARGS((char *opt, char *pat, int, int, int));
81c2858
  static int	    cs_help __ARGS((exarg_T *eap));
81c2858
- static void	    cs_init __ARGS((void));
81c2858
  static void	    clear_csinfo __ARGS((int i));
81c2858
  static int	    cs_insert_filelist __ARGS((char *, char *, char *,
81c2858
  			struct stat *));
81c2858
--- 46,51 ----
81c2858
***************
81c2858
*** 66,72 ****
81c2858
  static int	    cs_show __ARGS((exarg_T *eap));
81c2858
  
81c2858
  
81c2858
! static csinfo_T	    csinfo[CSCOPE_MAX_CONNECTIONS];
81c2858
  static int	    eap_arg_len;    /* length of eap->arg, set in
81c2858
  				       cs_lookup_cmd() */
81c2858
  static cscmd_T	    cs_cmds[] =
81c2858
--- 65,74 ----
81c2858
  static int	    cs_show __ARGS((exarg_T *eap));
81c2858
  
81c2858
  
81c2858
! static csinfo_T *   csinfo = NULL;
81c2858
! static int	    csinfo_size = 0;	/* number of items allocated in
81c2858
! 					   csinfo[] */
81c2858
! 
81c2858
  static int	    eap_arg_len;    /* length of eap->arg, set in
81c2858
  				       cs_lookup_cmd() */
81c2858
  static cscmd_T	    cs_cmds[] =
81c2858
***************
81c2858
*** 144,166 ****
81c2858
  	}
81c2858
      case EXP_CSCOPE_KILL:
81c2858
  	{
81c2858
! 	    static char_u	connection[2];
81c2858
  
81c2858
  	    /* ":cscope kill" accepts connection numbers or partial names of
81c2858
  	     * the pathname of the cscope database as argument.  Only complete
81c2858
  	     * with connection numbers. -1 can also be used to kill all
81c2858
  	     * connections. */
81c2858
! 	    for (i = 0, current_idx = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
81c2858
  	    {
81c2858
  		if (csinfo[i].fname == NULL)
81c2858
  		    continue;
81c2858
  		if (current_idx++ == idx)
81c2858
  		{
81c2858
! 		    /* Connection number fits in one character since
81c2858
! 		     * CSCOPE_MAX_CONNECTIONS is < 10 */
81c2858
! 		    connection[0] = i + '0';
81c2858
! 		    connection[1] = NUL;
81c2858
! 		    return connection;
81c2858
  		}
81c2858
  	    }
81c2858
  	    return (current_idx == idx && idx > 0) ? (char_u *)"-1" : NULL;
81c2858
--- 146,165 ----
81c2858
  	}
81c2858
      case EXP_CSCOPE_KILL:
81c2858
  	{
81c2858
! 	    static char	connection[5];
81c2858
  
81c2858
  	    /* ":cscope kill" accepts connection numbers or partial names of
81c2858
  	     * the pathname of the cscope database as argument.  Only complete
81c2858
  	     * with connection numbers. -1 can also be used to kill all
81c2858
  	     * connections. */
81c2858
! 	    for (i = 0, current_idx = 0; i < csinfo_size; i++)
81c2858
  	    {
81c2858
  		if (csinfo[i].fname == NULL)
81c2858
  		    continue;
81c2858
  		if (current_idx++ == idx)
81c2858
  		{
81c2858
! 		    vim_snprintf(connection, sizeof(connection), "%d", i);
81c2858
! 		    return (char_u *)connection;
81c2858
  		}
81c2858
  	    }
81c2858
  	    return (current_idx == idx && idx > 0) ? (char_u *)"-1" : NULL;
81c2858
***************
81c2858
*** 223,229 ****
81c2858
  {
81c2858
      cscmd_T *cmdp;
81c2858
  
81c2858
-     cs_init();
81c2858
      if ((cmdp = cs_lookup_cmd(eap)) == NULL)
81c2858
      {
81c2858
  	cs_help(eap);
81c2858
--- 222,227 ----
81c2858
***************
81c2858
*** 284,291 ****
81c2858
  {
81c2858
      int ret = FALSE;
81c2858
  
81c2858
-     cs_init();
81c2858
- 
81c2858
      if (*eap->arg == NUL)
81c2858
      {
81c2858
  	(void)EMSG(_("E562: Usage: cstag <ident>"));
81c2858
--- 282,287 ----
81c2858
***************
81c2858
*** 441,447 ****
81c2858
      if (num < 0 || num > 4 || (num > 0 && !dbpath))
81c2858
  	return FALSE;
81c2858
  
81c2858
!     for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
81c2858
      {
81c2858
  	if (!csinfo[i].fname)
81c2858
  	    continue;
81c2858
--- 437,443 ----
81c2858
      if (num < 0 || num > 4 || (num > 0 && !dbpath))
81c2858
  	return FALSE;
81c2858
  
81c2858
!     for (i = 0; i < csinfo_size; i++)
81c2858
      {
81c2858
  	if (!csinfo[i].fname)
81c2858
  	    continue;
81c2858
***************
81c2858
*** 684,690 ****
81c2858
      short i;
81c2858
      short cnt = 0;
81c2858
  
81c2858
!     for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
81c2858
      {
81c2858
  	if (csinfo[i].fname != NULL)
81c2858
  	    cnt++;
81c2858
--- 680,686 ----
81c2858
      short i;
81c2858
      short cnt = 0;
81c2858
  
81c2858
!     for (i = 0; i < csinfo_size; i++)
81c2858
      {
81c2858
  	if (csinfo[i].fname != NULL)
81c2858
  	    cnt++;
81c2858
***************
81c2858
*** 1112,1118 ****
81c2858
  {
81c2858
      int i;
81c2858
      char *cmd;
81c2858
!     int nummatches[CSCOPE_MAX_CONNECTIONS], totmatches;
81c2858
  #ifdef FEAT_QUICKFIX
81c2858
      char cmdletter;
81c2858
      char *qfpos;
81c2858
--- 1108,1115 ----
81c2858
  {
81c2858
      int i;
81c2858
      char *cmd;
81c2858
!     int *nummatches;
81c2858
!     int totmatches;
81c2858
  #ifdef FEAT_QUICKFIX
81c2858
      char cmdletter;
81c2858
      char *qfpos;
81c2858
***************
81c2858
*** 1123,1135 ****
81c2858
      if (cmd == NULL)
81c2858
  	return FALSE;
81c2858
  
81c2858
      /* send query to all open connections, then count the total number
81c2858
       * of matches so we can alloc matchesp all in one swell foop
81c2858
       */
81c2858
!     for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
81c2858
  	nummatches[i] = 0;
81c2858
      totmatches = 0;
81c2858
!     for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
81c2858
      {
81c2858
  	if (csinfo[i].fname == NULL || csinfo[i].to_fp == NULL)
81c2858
  	    continue;
81c2858
--- 1120,1136 ----
81c2858
      if (cmd == NULL)
81c2858
  	return FALSE;
81c2858
  
81c2858
+     nummatches = (int *)alloc(sizeof(int)*csinfo_size);
81c2858
+     if (nummatches == NULL)
81c2858
+ 	return FALSE;
81c2858
+ 
81c2858
      /* send query to all open connections, then count the total number
81c2858
       * of matches so we can alloc matchesp all in one swell foop
81c2858
       */
81c2858
!     for (i = 0; i < csinfo_size; i++)
81c2858
  	nummatches[i] = 0;
81c2858
      totmatches = 0;
81c2858
!     for (i = 0; i < csinfo_size; i++)
81c2858
      {
81c2858
  	if (csinfo[i].fname == NULL || csinfo[i].to_fp == NULL)
81c2858
  	    continue;
81c2858
***************
81c2858
*** 1154,1160 ****
81c2858
--- 1155,1164 ----
81c2858
  	char *buf;
81c2858
  
81c2858
  	if (!verbose)
81c2858
+ 	{
81c2858
+ 	    vim_free(nummatches);
81c2858
  	    return FALSE;
81c2858
+ 	}
81c2858
  
81c2858
  	buf = (char *)alloc((unsigned)(strlen(opt) + strlen(pat) + strlen(nf)));
81c2858
  	if (buf == NULL)
81c2858
***************
81c2858
*** 1165,1170 ****
81c2858
--- 1169,1175 ----
81c2858
  	    (void)EMSG(buf);
81c2858
  	    vim_free(buf);
81c2858
  	}
81c2858
+ 	vim_free(nummatches);
81c2858
  	return FALSE;
81c2858
      }
81c2858
  
81c2858
***************
81c2858
*** 1217,1222 ****
81c2858
--- 1222,1228 ----
81c2858
  		(void)EMSG(buf);
81c2858
  		vim_free(buf);
81c2858
  	    }
81c2858
+ 	    vim_free(nummatches);
81c2858
  	    return FALSE;
81c2858
  	}
81c2858
      }
81c2858
***************
81c2858
*** 1264,1269 ****
81c2858
--- 1270,1276 ----
81c2858
  	}
81c2858
  	mch_remove(tmp);
81c2858
  	vim_free(tmp);
81c2858
+ 	vim_free(nummatches);
81c2858
  	return TRUE;
81c2858
      }
81c2858
      else
81c2858
***************
81c2858
*** 1275,1280 ****
81c2858
--- 1282,1288 ----
81c2858
  	/* read output */
81c2858
  	cs_fill_results((char *)pat, totmatches, nummatches, &matches,
81c2858
  							 &contexts, &matched);
81c2858
+ 	vim_free(nummatches);
81c2858
  	if (matches == NULL)
81c2858
  	    return FALSE;
81c2858
  
81c2858
***************
81c2858
*** 1328,1353 ****
81c2858
  } /* cs_help */
81c2858
  
81c2858
  
81c2858
- /*
81c2858
-  * PRIVATE: cs_init
81c2858
-  *
81c2858
-  * initialize cscope structure if not already
81c2858
-  */
81c2858
-     static void
81c2858
- cs_init()
81c2858
- {
81c2858
-     short i;
81c2858
-     static int init_already = FALSE;
81c2858
- 
81c2858
-     if (init_already)
81c2858
- 	return;
81c2858
- 
81c2858
-     for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
81c2858
- 	clear_csinfo(i);
81c2858
- 
81c2858
-     init_already = TRUE;
81c2858
- } /* cs_init */
81c2858
- 
81c2858
      static void
81c2858
  clear_csinfo(i)
81c2858
      int	    i;
81c2858
--- 1336,1341 ----
81c2858
***************
81c2858
*** 1444,1450 ****
81c2858
  #endif
81c2858
  
81c2858
      i = -1; /* can be set to the index of an empty item in csinfo */
81c2858
!     for (j = 0; j < CSCOPE_MAX_CONNECTIONS; j++)
81c2858
      {
81c2858
  	if (csinfo[j].fname != NULL
81c2858
  #if defined(UNIX)
81c2858
--- 1432,1438 ----
81c2858
  #endif
81c2858
  
81c2858
      i = -1; /* can be set to the index of an empty item in csinfo */
81c2858
!     for (j = 0; j < csinfo_size; j++)
81c2858
      {
81c2858
  	if (csinfo[j].fname != NULL
81c2858
  #if defined(UNIX)
81c2858
***************
81c2858
*** 1471,1479 ****
81c2858
  
81c2858
      if (i == -1)
81c2858
      {
81c2858
! 	if (p_csverbose)
81c2858
! 	    (void)EMSG(_("E569: maximum number of cscope connections reached"));
81c2858
! 	return -1;
81c2858
      }
81c2858
  
81c2858
      if ((csinfo[i].fname = (char *)alloc((unsigned)strlen(fname)+1)) == NULL)
81c2858
--- 1459,1483 ----
81c2858
  
81c2858
      if (i == -1)
81c2858
      {
81c2858
! 	i = csinfo_size;
81c2858
! 	if (csinfo_size == 0)
81c2858
! 	{
81c2858
! 	    /* First time allocation: allocate only 1 connection. It should
81c2858
! 	     * be enough for most users.  If more is needed, csinfo will be
81c2858
! 	     * reallocated. */
81c2858
! 	    csinfo_size = 1;
81c2858
! 	    csinfo = (csinfo_T *)alloc_clear(sizeof(csinfo_T));
81c2858
! 	}
81c2858
! 	else
81c2858
! 	{
81c2858
! 	    /* Reallocate space for more connections. */
81c2858
! 	    csinfo_size *= 2;
81c2858
! 	    csinfo = vim_realloc(csinfo, sizeof(csinfo_T)*csinfo_size);
81c2858
! 	}
81c2858
! 	if (csinfo == NULL)
81c2858
! 	    return -1;
81c2858
! 	for (j = csinfo_size/2; j < csinfo_size; j++)
81c2858
! 	    clear_csinfo(j);
81c2858
      }
81c2858
  
81c2858
      if ((csinfo[i].fname = (char *)alloc((unsigned)strlen(fname)+1)) == NULL)
81c2858
***************
81c2858
*** 1580,1594 ****
81c2858
  	/* It must be part of a name.  We will try to find a match
81c2858
  	 * within all the names in the csinfo data structure
81c2858
  	 */
81c2858
! 	for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
81c2858
  	{
81c2858
  	    if (csinfo[i].fname != NULL && strstr(csinfo[i].fname, stok))
81c2858
  		break;
81c2858
  	}
81c2858
      }
81c2858
  
81c2858
!     if ((i >= CSCOPE_MAX_CONNECTIONS || i < -1 || csinfo[i].fname == NULL)
81c2858
! 	    && i != -1)
81c2858
      {
81c2858
  	if (p_csverbose)
81c2858
  	    (void)EMSG2(_("E261: cscope connection %s not found"), stok);
81c2858
--- 1584,1597 ----
81c2858
  	/* It must be part of a name.  We will try to find a match
81c2858
  	 * within all the names in the csinfo data structure
81c2858
  	 */
81c2858
! 	for (i = 0; i < csinfo_size; i++)
81c2858
  	{
81c2858
  	    if (csinfo[i].fname != NULL && strstr(csinfo[i].fname, stok))
81c2858
  		break;
81c2858
  	}
81c2858
      }
81c2858
  
81c2858
!     if ((i != -1) && (i >= csinfo_size || i < -1 || csinfo[i].fname == NULL))
81c2858
      {
81c2858
  	if (p_csverbose)
81c2858
  	    (void)EMSG2(_("E261: cscope connection %s not found"), stok);
81c2858
***************
81c2858
*** 1597,1603 ****
81c2858
      {
81c2858
  	if (i == -1)
81c2858
  	{
81c2858
! 	    for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
81c2858
  	    {
81c2858
  		if (csinfo[i].fname)
81c2858
  		    cs_kill_execute(i, csinfo[i].fname);
81c2858
--- 1600,1606 ----
81c2858
      {
81c2858
  	if (i == -1)
81c2858
  	{
81c2858
! 	    for (i = 0; i < csinfo_size; i++)
81c2858
  	    {
81c2858
  		if (csinfo[i].fname)
81c2858
  		    cs_kill_execute(i, csinfo[i].fname);
81c2858
***************
81c2858
*** 1857,1863 ****
81c2858
      if (buf == NULL)
81c2858
  	return;
81c2858
  
81c2858
!     for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
81c2858
      {
81c2858
  	if (nummatches_a[i] < 1)
81c2858
  	    continue;
81c2858
--- 1860,1866 ----
81c2858
      if (buf == NULL)
81c2858
  	return;
81c2858
  
81c2858
!     for (i = 0; i < csinfo_size; i++)
81c2858
      {
81c2858
  	if (nummatches_a[i] < 1)
81c2858
  	    continue;
81c2858
***************
81c2858
*** 1929,1935 ****
81c2858
      if ((cntxts = (char **)alloc(sizeof(char *) * totmatches)) == NULL)
81c2858
  	goto parse_out;
81c2858
  
81c2858
!     for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
81c2858
      {
81c2858
  	if (nummatches_a[i] < 1)
81c2858
  	    continue;
81c2858
--- 1932,1938 ----
81c2858
      if ((cntxts = (char **)alloc(sizeof(char *) * totmatches)) == NULL)
81c2858
  	goto parse_out;
81c2858
  
81c2858
!     for (i = 0; i < csinfo_size; i++)
81c2858
      {
81c2858
  	if (nummatches_a[i] < 1)
81c2858
  	    continue;
81c2858
***************
81c2858
*** 2383,2392 ****
81c2858
      int	i;
81c2858
      char buf[20]; /* for sprintf " (#%d)" */
81c2858
  
81c2858
      /* malloc our db and ppath list */
81c2858
!     dblist = (char **)alloc(CSCOPE_MAX_CONNECTIONS * sizeof(char *));
81c2858
!     pplist = (char **)alloc(CSCOPE_MAX_CONNECTIONS * sizeof(char *));
81c2858
!     fllist = (char **)alloc(CSCOPE_MAX_CONNECTIONS * sizeof(char *));
81c2858
      if (dblist == NULL || pplist == NULL || fllist == NULL)
81c2858
      {
81c2858
  	vim_free(dblist);
81c2858
--- 2386,2398 ----
81c2858
      int	i;
81c2858
      char buf[20]; /* for sprintf " (#%d)" */
81c2858
  
81c2858
+     if (csinfo_size == 0)
81c2858
+ 	return CSCOPE_SUCCESS;
81c2858
+ 
81c2858
      /* malloc our db and ppath list */
81c2858
!     dblist = (char **)alloc(csinfo_size * sizeof(char *));
81c2858
!     pplist = (char **)alloc(csinfo_size * sizeof(char *));
81c2858
!     fllist = (char **)alloc(csinfo_size * sizeof(char *));
81c2858
      if (dblist == NULL || pplist == NULL || fllist == NULL)
81c2858
      {
81c2858
  	vim_free(dblist);
81c2858
***************
81c2858
*** 2395,2401 ****
81c2858
  	return CSCOPE_FAILURE;
81c2858
      }
81c2858
  
81c2858
!     for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
81c2858
      {
81c2858
  	dblist[i] = csinfo[i].fname;
81c2858
  	pplist[i] = csinfo[i].ppath;
81c2858
--- 2401,2407 ----
81c2858
  	return CSCOPE_FAILURE;
81c2858
      }
81c2858
  
81c2858
!     for (i = 0; i < csinfo_size; i++)
81c2858
      {
81c2858
  	dblist[i] = csinfo[i].fname;
81c2858
  	pplist[i] = csinfo[i].ppath;
81c2858
***************
81c2858
*** 2405,2411 ****
81c2858
      }
81c2858
  
81c2858
      /* rebuild the cscope connection list */
81c2858
!     for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
81c2858
      {
81c2858
  	if (dblist[i] != NULL)
81c2858
  	{
81c2858
--- 2411,2417 ----
81c2858
      }
81c2858
  
81c2858
      /* rebuild the cscope connection list */
81c2858
!     for (i = 0; i < csinfo_size; i++)
81c2858
      {
81c2858
  	if (dblist[i] != NULL)
81c2858
  	{
81c2858
***************
81c2858
*** 2502,2508 ****
81c2858
  	MSG_PUTS_ATTR(
81c2858
  	    _(" # pid    database name                       prepend path\n"),
81c2858
  	    hl_attr(HLF_T));
81c2858
! 	for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
81c2858
  	{
81c2858
  	    if (csinfo[i].fname == NULL)
81c2858
  		continue;
81c2858
--- 2508,2514 ----
81c2858
  	MSG_PUTS_ATTR(
81c2858
  	    _(" # pid    database name                       prepend path\n"),
81c2858
  	    hl_attr(HLF_T));
81c2858
! 	for (i = 0; i < csinfo_size; i++)
81c2858
  	{
81c2858
  	    if (csinfo[i].fname == NULL)
81c2858
  		continue;
81c2858
***************
81c2858
*** 2531,2538 ****
81c2858
  {
81c2858
      int i;
81c2858
  
81c2858
!     for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++)
81c2858
  	cs_release_csp(i, TRUE);
81c2858
  }
81c2858
  
81c2858
  #endif	/* FEAT_CSCOPE */
81c2858
--- 2537,2546 ----
81c2858
  {
81c2858
      int i;
81c2858
  
81c2858
!     for (i = 0; i < csinfo_size; i++)
81c2858
  	cs_release_csp(i, TRUE);
81c2858
+     vim_free(csinfo);
81c2858
+     csinfo_size = 0;
81c2858
  }
81c2858
  
81c2858
  #endif	/* FEAT_CSCOPE */
81c2858
*** ../vim-7.2.227/src/version.c	2009-07-09 20:13:59.000000000 +0200
81c2858
--- src/version.c	2009-07-09 21:21:48.000000000 +0200
81c2858
***************
81c2858
*** 678,679 ****
81c2858
--- 678,681 ----
81c2858
  {   /* Add new patch number below this line */
81c2858
+ /**/
81c2858
+     228,
81c2858
  /**/
81c2858
81c2858
-- 
81c2858
hundred-and-one symptoms of being an internet addict:
81c2858
84. Books in your bookcase bear the names Bongo, WinSock and Inside OLE
81c2858
81c2858
 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
81c2858
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
81c2858
\\\        download, build and distribute -- http://www.A-A-P.org        ///
81c2858
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///