This is the mail archive of the gdb-patches@sourceware.cygnus.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: GDB-5 2000-03-03


Eli Zaretskii writes:
 > 
 > > Andrew Cagney writes:
 > >  > Eli Zaretskii wrote:
 > >  > 
 > >  > > But there's a similar issue with Readline.  The current version in the
 > >  > > GDB CVS tree has bugs in the DJGPP-specific code, one of which simply
 > >  > > prevents GDB from linking.  I see that most of these problems are
 > >  > > solved in the current beta version of Readline, but will you be
 > >  > > synchronizing the GDB tree with that version before release?  If not,
 > >  > > I don't see any solution but a local patch.  Please advise.
 > >  > 
 > >  > Consider yourself the maintainer of the DJGPP specific readline stuff
 > >  > (like mmalloc).  (I'll add a note to MAINTAINERS.)
 > >  > 
 > >  > The main thing is to make certain that the true readline sources have
 > >  > the fix as well.  I wasn't planning on importing readline (I'll add a
 > >  > note stateing that this is something that won't make it).
 > >  > 
 > >  > 	Andrew
 > > 
 > > Eli, yes, please check in you fix to readline, I have no time this
 > > week to do another import.
 > 
 > I just committed the changes below.
 > 
 > (It seems the readline directory doesn't have a ChangeLog file, 'cause
 > CVS won't check it out for me.  Am I missing something?)
 > 

There is ChangeLog.Cygnus file. You can use that for the time
being. The readline package doesn't include a ChangeLog. I wonder
though if this makes any sense anymore, I mean, the name 'Cygnus'.

Elena

 > --- readline/support/shobj-conf.~	Tue Aug  3 02:08:42 1999
 > +++ readline/support/shobj-conf	Sat Feb 26 15:07:52 2000
 > @@ -305,6 +305,12 @@
 >  
 >  	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
 >  	;;
 > +
 > +msdosdjgpp*)
 > +	SHOBJ_STATUS=unsupported
 > +	SHLIB_STATUS=unsupported
 > +	;;
 > +
 >  #
 >  # Rely on correct gcc configuration for everything else
 >  #
 > --- readline/bind.c~	Tue Aug  3 02:08:36 1999
 > +++ readline/bind.c	Wed Feb 23 16:05:52 2000
 > @@ -62,6 +62,10 @@ extern int errno;
 >  extern char *strchr (), *strrchr ();
 >  #endif /* !strchr && !__STDC__ */
 >  
 > +#ifndef O_BINARY
 > +# define O_BINARY 0
 > +#endif
 > +
 >  extern int _rl_horizontal_scroll_mode;
 >  extern int _rl_mark_modified_lines;
 >  extern int _rl_bell_preference;
 > @@ -646,7 +650,7 @@ _rl_read_file (filename, sizep)
 >    char *buffer;
 >    int i, file;
 >  
 > -  if ((stat (filename, &finfo) < 0) || (file = open (filename, O_RDONLY, 0666)) < 0)
 > +  if ((stat (filename, &finfo) < 0) || (file = open (filename, O_RDONLY | O_BINARY, 0666)) < 0)
 >      return ((char *)NULL);
 >  
 >    file_size = (size_t)finfo.st_size;
 > @@ -667,7 +671,7 @@ _rl_read_file (filename, sizep)
 >    i = read (file, buffer, file_size);
 >    close (file);
 >  
 > -#if 0
 > +#if 1
 >    if (i < file_size)
 >  #else
 >    if (i < 0)
 > @@ -678,6 +682,30 @@ _rl_read_file (filename, sizep)
 >      }
 >  
 >    buffer[file_size] = '\0';
 > +
 > +#if O_BINARY
 > +  {
 > +    /* Systems which distinguish between text and binary files need
 > +       to strip the CR characters before each Newline, otherwise the
 > +       parsing functions won't work.  */
 > +    char *s, *d;
 > +    size_t removed = 0;
 > +
 > +    for (s = buffer, d = buffer; s < buffer + file_size; s++)
 > +      {
 > +	if (removed)
 > +	  *d = *s;
 > +	if (*s != '\r' || s[1] != '\n')
 > +	  d++;
 > +	else
 > +	  removed++;
 > +      }
 > +
 > +    file_size -= removed;
 > +    buffer[file_size] = '\0';
 > +  }
 > +#endif
 > +
 >    if (sizep)
 >      *sizep = file_size;
 >    return (buffer);
 > @@ -699,6 +728,7 @@ rl_re_read_init_file (count, ignore)
 >       1. the filename used for the previous call
 >       2. the value of the shell variable `INPUTRC'
 >       3. ~/.inputrc
 > +     4. (for __MSDOS__ only) ~/_inputrc
 >     If the file existed and could be opened and read, 0 is returned,
 >     otherwise errno is returned. */
 >  int
 > @@ -718,6 +748,20 @@ rl_read_init_file (filename)
 >    if (*filename == 0)
 >      filename = DEFAULT_INPUTRC;
 >  
 > +#ifdef __MSDOS__
 > +  {
 > +    /* DOS doesn't allow leading dots in file names.  If the original
 > +       name fails (it could work if we are on Windows), fall back to
 > +       ~/_inputrc.  */
 > +    int retval = _rl_read_init_file (filename, 0);
 > +
 > +    if (retval == 0)
 > +      return retval;
 > +    else if (strcmp (filename, "~/.inputrc") == 0)
 > +      filename = "~/_inputrc";
 > +  }
 > +#endif
 > +
 >    return (_rl_read_init_file (filename, 0));
 >  }
 >  
 > --- readline/complete.c~	Tue Aug  3 02:08:36 1999
 > +++ readline/complete.c	Wed Feb 23 18:02:32 2000
 > @@ -1407,9 +1410,9 @@ username_completion_function (text, stat
 >       char *text;
 >       int state;
 >  {
 > -#if defined (__GO32__) || defined (__WIN32__) || defined (__OPENNT)
 > +#if defined (__WIN32__) || defined (__OPENNT)
 >    return (char *)NULL;
 > -#else /* !__GO32__ */
 > +#else /* !__WIN32__ && !__OPENNT */
 >    static char *username = (char *)NULL;
 >    static struct passwd *entry;
 >    static int namelen, first_char, first_char_loc;
 > @@ -1499,6 +1502,14 @@ filename_completion_function (text, stat
 >  	  strcpy (filename, ++temp);
 >  	  *temp = '\0';
 >  	}
 > +#if defined (__WIN32__) || defined (__OPENNT) || defined (__MSDOS__)
 > +      /* Handle the drive-relative names "d:foo/bar".  */
 > +      else if (dirname[1] == ':')
 > +	{
 > +	  strcpy (filename, dirname + 2);
 > +	  dirname[2] = '\0';
 > +	}
 > +#endif
 >        else
 >  	{
 >  	  dirname[0] = '.';
 > --- readline/display.c~	Tue Aug  3 02:08:36 1999
 > +++ readline/display.c	Wed Feb 23 16:13:52 2000
 > @@ -1126,8 +1126,10 @@ _rl_move_vert (to)
 >    {
 >      int row, col;
 >  
 > +    i = fflush (rl_outstream);	/* make sure the cursor pos is current! */
 >      ScreenGetCursor (&row, &col);
 >      ScreenSetCursor ((row + to - _rl_last_v_pos), col);
 > +    delta = i;
 >    }
 >  #else /* !__GO32__ */
 >  
 > @@ -1377,7 +1379,10 @@ space_to_eol (count)
 >  void
 >  _rl_clear_screen ()
 >  {
 > -#if !defined (__GO32__)
 > +#if defined (__GO32__)
 > +  ScreenClear ();	/* FIXME: only works in text modes */
 > +  ScreenSetCursor (0, 0);  /* term_clrpag is "cl" which homes the cursor */
 > +#else
 >    if (term_clrpag)
 >      tputs (term_clrpag, 1, _rl_output_character_function);
 >    else
 > @@ -1392,6 +1397,7 @@ insert_some_chars (string, count)
 >       int count;
 >  {
 >  #if defined (__GO32__)
 > +#ifndef __DJGPP__
 >    int row, col, width;
 >    char *row_start;
 >  
 > @@ -1400,7 +1406,7 @@ insert_some_chars (string, count)
 >    row_start = ScreenPrimary + (row * width);
 >  
 >    memcpy (row_start + col + count, row_start + col, width - col - count);
 > -
 > +#endif /* !__DJGPP__ */
 >    /* Place the text on the screen. */
 >    _rl_output_some_chars (string, count);
 >  #else /* !_GO32 */
 > @@ -1445,6 +1451,7 @@ static void
 >  delete_chars (count)
 >       int count;
 >  {
 > +#if !defined (__DJGPP__)
 >  #if defined (__GO32__)
 >    int row, col, width;
 >    char *row_start;
 > @@ -1473,6 +1480,7 @@ delete_chars (count)
 >  	  tputs (term_dc, 1, _rl_output_character_function);
 >      }
 >  #endif /* !__GO32__ */
 > +#endif /* !__DJGPP__ */
 >  }
 >  
 >  void
 > --- readline/histfile.c~	Tue Aug  3 02:08:38 1999
 > +++ readline/histfile.c	Wed Feb 23 18:11:46 2000
 > @@ -140,6 +140,16 @@ read_history_range (filename, from, to)
 >    input = history_filename (filename);
 >    file = open (input, O_RDONLY|O_BINARY, 0666);
 >  
 > +
 > +#ifdef __MSDOS__
 > +  /* MSDOS doesn't allow leading dots in file names.  Try again
 > +     with the dot replaced by an underscore.  */
 > +  if (file < 0 && !filename)
 > +    {
 > +      input[strlen (input) - 8] = '_';
 > +      file = open (input, O_RDONLY|O_BINARY, 0666);
 > +    }
 > +#endif
 >    if ((file < 0) || (fstat (file, &finfo) == -1))
 >      goto error_and_exit;
 >  
 > @@ -233,6 +243,16 @@ history_truncate_file (fname, lines)
 >    filename = history_filename (fname);
 >    file = open (filename, O_RDONLY|O_BINARY, 0666);
 >  
 > +#ifdef __MSDOS__
 > +  /* MSDOS doesn't allow leading dots in file names.  Try again
 > +     with the dot replaced by an underscore.  */
 > +  if (file < 0 && !fname)
 > +    {
 > +      filename[strlen (filename) - 8] = '_';
 > +      file = open (filename, O_RDONLY|O_BINARY, 0666);
 > +    }
 > +#endif
 > +
 >    if (file == -1 || fstat (file, &finfo) == -1)
 >      goto truncate_exit;
 >  
 > @@ -314,8 +334,23 @@ history_do_write (filename, nelements, o
 >  
 >    if ((file = open (output, mode, 0600)) == -1)
 >      {
 > +#ifdef __MSDOS__
 > +      /* MSDOS doesn't allow leading dots in file names.  If this is
 > +	 the default file name, try again with the dot replaced by an
 > +	 underscore.  */
 > +      if (!filename)
 > +	{
 > +	  output[strlen (output) - 8] = '_';
 > +	  if ((file = open (output, mode, 0600)) == -1)
 > +	    {
 > +	      FREE (output);
 > +	      return (errno);
 > +	    }
 > +	}
 > +#else
 >        FREE (output);
 >        return (errno);
 > +#endif
 >      }
 >  
 >    if (nelements > history_length)
 > --- readline/input.c~	Tue Aug  3 02:08:38 1999
 > +++ readline/input.c	Wed Feb 23 16:25:20 2000
 > @@ -96,7 +96,7 @@ extern Keymap _rl_keymap;
 >  
 >  extern int _rl_convert_meta_chars_to_ascii;
 >  
 > -#if defined (__GO32__)
 > +#if defined (__GO32__) && !defined (HAVE_SELECT)
 >  #  include <pc.h>
 >  #endif /* __GO32__ */
 >  
 > @@ -176,7 +176,7 @@ rl_unget_char (key)
 >  static void
 >  rl_gather_tyi ()
 >  {
 > -#if defined (__GO32__)
 > +#if defined (__GO32__) && !defined (HAVE_SELECT)
 >    char input;
 >  
 >    if (isatty (0) && kbhit () && ibuffer_space ())
 > @@ -397,7 +397,7 @@ rl_getc (stream)
 >    int result, flags;
 >    unsigned char c;
 >  
 > -#if defined (__GO32__)
 > +#if defined (__GO32__) && !defined (HAVE_TERMIOS_H)
 >    if (isatty (0))
 >      return (getkey () & 0x7F);
 >  #endif /* __GO32__ */
 > @@ -448,7 +448,7 @@ rl_getc (stream)
 >  	}
 >  #endif /* _POSIX_VERSION && EAGAIN && O_NONBLOCK */
 >  
 > -#if !defined (__GO32__)
 > +#if !defined (__GO32__) || defined (HAVE_TERMIOS_H)
 >        /* If the error that we received was SIGINT, then try again,
 >  	 this is simply an interrupted system call to read ().
 >  	 Otherwise, some error ocurred, also signifying EOF. */
 > --- readline/readline.c~	Tue Aug  3 02:08:38 1999
 > +++ readline/readline.c	Wed Feb 23 17:58:46 2000
 > @@ -163,14 +163,16 @@ static void readline_initialize_everythi
 >  static void start_using_history ();
 >  static void bind_arrow_keys ();
 >  
 > -#if !defined (__GO32__)
 > +#if !defined (__GO32__) || defined (HAVE_TERMIOS_H)
 >  static void readline_default_bindings ();
 >  #endif /* !__GO32__ */
 >  
 >  #if defined (__GO32__)
 >  #  include <go32.h>
 >  #  include <pc.h>
 > -#  undef HANDLE_SIGNALS
 > +#  if !defined (__DJGPP__)
 > +#    undef HANDLE_SIGNALS
 > +#  endif /* !__DJGPP__ */
 >  #endif /* __GO32__ */
 >  
 >  extern char *xmalloc (), *xrealloc ();
 > @@ -745,10 +747,10 @@ readline_initialize_everything ()
 >    /* Initialize the terminal interface. */
 >    _rl_init_terminal_io ((char *)NULL);
 >  
 > -#if !defined (__GO32__)
 > +#if !defined (__GO32__) || defined (HAVE_TERMIOS_H)
 >    /* Bind tty characters to readline functions. */
 >    readline_default_bindings ();
 > -#endif /* !__GO32__ */
 > +#endif /* !__GO32__ || HAVE_TERMIOS_H */
 >  
 >    /* Initialize the function names. */
 >    rl_initialize_funmap ();
 > @@ -1272,7 +1279,7 @@ rl_refresh_line (ignore1, ignore2)
 >    _rl_move_vert (curr_line);
 >    _rl_move_cursor_relative (0, the_line);   /* XXX is this right */
 >  
 > -#if defined (__GO32__)
 > +#if defined (__GO32__) && !defined (__DJGPP__)
 >    {
 >      int row, col, width, row_start;
 >  
 > @@ -1281,9 +1288,9 @@ rl_refresh_line (ignore1, ignore2)
 >      row_start = ScreenPrimary + (row * width);
 >      memset (row_start + col, 0, (width - col) * 2);
 >    }
 > -#else /* !__GO32__ */
 > +#else /* !__GO32__ || __DJGPP__ */
 >    _rl_clear_to_eol (0);		/* arg of 0 means to not use spaces */
 > -#endif /* !__GO32__ */
 > +#endif /* !__GO32__ || __DJGPP__ */
 >  
 >    rl_forced_update_display ();
 >    rl_display_fixed = 1;
 > --- readline/rltty.c~	Mon Aug 16 22:17:56 1999
 > +++ readline/rltty.c	Wed Feb 23 15:56:42 2000
 > @@ -57,7 +57,9 @@ extern void _rl_control_keypad ();
 >  
 >  #if defined (__GO32__)
 >  #  include <pc.h>
 > -#  undef HANDLE_SIGNALS
 > +#  if !defined (__DJGPP__)
 > +#    undef HANDLE_SIGNALS
 > +#  endif /* !__DJGPP__ */
 >  #endif /* __GO32__ */
 >  
 >  /* Indirect functions to allow apps control over terminal management. */
 > @@ -260,7 +262,7 @@ prepare_terminal_settings (meta_flag, ot
 >       int meta_flag;
 >       TIOTYPE otio, *tiop;
 >  {
 > -#if !defined (__GO32__)
 > +#if !defined (__GO32__) || defined (HAVE_TERMIOS_H)
 >    readline_echoing_p = (otio.sgttyb.sg_flags & ECHO);
 >  
 >    /* Copy the original settings to the structure we're going to use for
 > @@ -326,7 +328,7 @@ prepare_terminal_settings (meta_flag, ot
 >    tiop->ltchars.t_dsuspc = -1;	/* C-y */
 >    tiop->ltchars.t_lnextc = -1;	/* C-v */
 >  #endif /* TIOCGLTC */
 > -#endif /* !__GO32__ */
 > +#endif /* !__GO32__ || HAVE_TERMIOS_H */
 >  }
 >  
 >  #else  /* !defined (NEW_TTY_DRIVER) */
 > @@ -524,7 +526,7 @@ void
 >  rl_prep_terminal (meta_flag)
 >       int meta_flag;
 >  {
 > -#if !defined (__GO32__)
 > +#if !defined (__GO32__) || defined (HAVE_TERMIOS_H)
 >    int tty;
 >    TIOTYPE tio;
 >  
 > @@ -559,14 +561,14 @@ rl_prep_terminal (meta_flag)
 >    terminal_prepped = 1;
 >  
 >    release_sigint ();
 > -#endif /* !__GO32__ */
 > +#endif /* !__GO32__ || HAVE_TERMIOS_H */
 >  }
 >  
 >  /* Restore the terminal's normal settings and modes. */
 >  void
 >  rl_deprep_terminal ()
 >  {
 > -#if !defined (__GO32__)
 > +#if !defined (__GO32__) || defined (HAVE_TERMIOS_H)
 >    int tty;
 >  
 >    if (!terminal_prepped)
 > @@ -591,7 +593,7 @@ rl_deprep_terminal ()
 >    terminal_prepped = 0;
 >  
 >    release_sigint ();
 > -#endif /* !__GO32__ */
 > +#endif /* !__GO32__ || HAVE_TERMIOS_H */
 >  }
 >  
 >  /* **************************************************************** */
 > --- readline/signals.c~	Tue Aug  3 02:08:38 1999
 > +++ readline/signals.c	Wed Feb 23 18:04:20 2000
 > @@ -40,9 +40,9 @@
 >  #  include <sys/ioctl.h>
 >  #endif /* GWINSZ_IN_SYS_IOCTL */
 >  
 > -#if defined (__GO32__)
 > +#if defined (__GO32__) && !defined(__DJGPP__)
 >  #  undef HANDLE_SIGNALS
 > -#endif /* __GO32__ */
 > +#endif /* __GO32__  && !__DJGPP__ */
 >  
 >  #if defined (HANDLE_SIGNALS)
 >  /* Some standard library routines. */
 > @@ -93,7 +93,9 @@ int rl_catch_sigwinch = 1;
 >  #endif
 >  
 >  static int signals_set_flag;
 > +#ifdef SIGWINCH
 >  static int sigwinch_set_flag;
 > +#endif
 >  
 >  /* **************************************************************** */
 >  /*					        		    */
 > --- readline/terminal.c~	Tue Aug  3 02:08:38 1999
 > +++ readline/terminal.c	Wed Feb 23 18:07:12 2000
 > @@ -57,6 +57,10 @@
 >  #  include <sys/ioctl.h>
 >  #endif /* GWINSZ_IN_SYS_IOCTL && !TIOCGWINSZ */
 >  
 > +#if defined (__GO32__)
 > +#  include <pc.h>
 > +#endif
 > +
 >  #include "rltty.h"
 >  #include "tcap.h"
 >  
 > @@ -77,19 +81,24 @@ extern void _rl_bind_if_unbound ();
 >  extern void set_lines_and_columns ();
 >  extern char *get_env_value ();
 >  
 > +/* Functions imported from display.c */
 > +extern void _rl_redisplay_after_sigwinch ();
 > +
 >  /* **************************************************************** */
 >  /*								    */
 >  /*			Terminal and Termcap			    */
 >  /*								    */
 >  /* **************************************************************** */
 >  
 > +#ifndef __DJGPP__
 >  static char *term_buffer = (char *)NULL;
 >  static char *term_string_buffer = (char *)NULL;
 >  
 > -static int tcap_initialized;
 > -
 >  /* Non-zero means this terminal can't really do anything. */
 >  static int dumb_term;
 > +#endif
 > +
 > +static int tcap_initialized;
 >  
 >  #if !defined (__linux__)
 >  #  if defined (__EMX__) || defined (NEED_EXTERN_PC)
 > @@ -186,7 +195,11 @@ _rl_get_screen_size (tty, ignore_env)
 >        if (ignore_env == 0 && (ss = get_env_value ("COLUMNS")))
 >  	screenwidth = atoi (ss);
 >  
 > -#if !defined(__DJGPP__)
 > +#if defined(__DJGPP__)
 > +      tty = tty;
 > +      if (screenwidth <= 0)
 > +	screenwidth = ScreenCols ();
 > +#else
 >        if (screenwidth <= 0 && term_string_buffer)
 >  	screenwidth = tgetnum ("co");
 >  #endif
 > @@ -199,7 +212,10 @@ _rl_get_screen_size (tty, ignore_env)
 >        if (ignore_env == 0 && (ss = get_env_value ("LINES")))
 >  	screenheight = atoi (ss);
 >  
 > -#if !defined(__DJGPP__)
 > +#if defined(__DJGPP__)
 > +      if (screenheight <= 0)
 > +	screenheight = ScreenRows ();
 > +#else
 >        if (screenheight <= 0 && term_string_buffer)
 >  	screenheight = tgetnum ("li");
 >  #endif
 > @@ -291,7 +307,9 @@ static void
 >  get_term_capabilities (bp)
 >       char **bp;
 >  {
 > -#if !defined(__DJGPP__)
 > +#if defined(__DJGPP__)
 > +  bp = bp;
 > +#else
 >    register int i;
 >  
 >    for (i = 0; i < NUM_TC_STRINGS; i++)
 > @@ -305,9 +323,10 @@ _rl_init_terminal_io (terminal_name)
 >       char *terminal_name;
 >  {
 >  #if defined (__GO32__)
 > -  screenwidth = ScreenCols ();
 > -  screenheight = ScreenRows ();
 > -  screenchars = screenwidth * screenheight;
 > +  terminal_name = terminal_name;
 > +  screenwidth = screenheight = 0;
 > +  _rl_get_screen_size (rl_instream ? fileno (rl_instream) : 0, 0);
 > +
 >    term_cr = "\r";
 >    term_im = term_ei = term_ic = term_IC = (char *)NULL;
 >    term_up = term_dc = term_DC = visible_bell = (char *)NULL;
 > @@ -323,7 +342,7 @@ _rl_init_terminal_io (terminal_name)
 >    term_forward_char = (char *)NULL;
 >  #endif /* HACK_TERMCAP_MOTION */
 >    terminal_can_insert = _rl_term_autowrap = 0;
 > -  return;
 > +  return 0;
 >  #else /* !__GO32__ */
 >  
 >    char *term, *buffer;
 > @@ -510,28 +529,28 @@ ding ()
 >  {
 >    if (readline_echoing_p)
 >      {
 > -#if !defined (__GO32__)
 >        switch (_rl_bell_preference)
 >          {
 >  	case NO_BELL:
 >  	default:
 >  	  break;
 >  	case VISIBLE_BELL:
 > +#if defined (__GO32__)
 > +	  ScreenVisualBell ();
 > +	  break;
 > +#else
 >  	  if (visible_bell)
 >  	    {
 >  	      tputs (visible_bell, 1, _rl_output_character_function);
 >  	      break;
 >  	    }
 > +#endif
 >  	  /* FALLTHROUGH */
 >  	case AUDIBLE_BELL:
 >  	  fprintf (stderr, "\007");
 >  	  fflush (stderr);
 >  	  break;
 >          }
 > -#else /* __GO32__ */
 > -      fprintf (stderr, "\007");
 > -      fflush (stderr);
 > -#endif /* __GO32__ */
 >        return (0);
 >      }
 >    return (-1);
 > @@ -556,7 +575,9 @@ void
 >  _rl_control_keypad (on)
 >       int on;
 >  {
 > -#if !defined(__DJGPP__)
 > +#if defined(__DJGPP__)
 > +  on = on;
 > +#else
 >    if (on && term_ks)
 >      tputs (term_ks, 1, _rl_output_character_function);
 >    else if (!on && term_ke)

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]