diff --git a/gdb/testsuite/config/cfdbug.exp b/gdb/testsuite/config/cfdbug.exp
new file mode 100644
index 0000000..955288c
--- /dev/null
+++ b/gdb/testsuite/config/cfdbug.exp
@@ -0,0 +1,20 @@
+#   Copyright (C) 1997 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
+
+# Please email any bugs, comments, and/or additions to this file to:
+# bug-gdb@prep.ai.mit.edu
+
+load_lib "../config/monitor.exp"
diff --git a/gdb/testsuite/gdb.base/annota1.c b/gdb/testsuite/gdb.base/annota1.c
new file mode 100644
index 0000000..7eeee77
--- /dev/null
+++ b/gdb/testsuite/gdb.base/annota1.c
@@ -0,0 +1,33 @@
+#include <stdio.h>
+#include <signal.h>
+
+#ifdef __sh__
+#define signal(a,b)	/* Signals not supported on this target - make them go away */
+#endif
+
+
+void
+handle_USR1 (sig)
+     int sig;
+{
+}
+
+int value;
+
+int
+main ()
+{
+  int my_array[3] = { 1, 2, 3 };
+  
+  value = 7;
+  
+#ifdef SIGUSR1
+  signal (SIGUSR1, handle_USR1);
+#endif
+
+  printf ("value is %d\n", value);
+  printf ("my_array[2] is %d\n", my_array[2]);
+
+  return 0;
+}
+
diff --git a/gdb/testsuite/gdb.base/annota1.exp b/gdb/testsuite/gdb.base/annota1.exp
new file mode 100644
index 0000000..fb3703e
--- /dev/null
+++ b/gdb/testsuite/gdb.base/annota1.exp
@@ -0,0 +1,393 @@
+#   Copyright (C) 1999
+#   Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
+
+# Please email any bugs, comments, and/or additions to this file to:
+# bug-gdb@prep.ai.mit.edu
+
+# This file was written by Elena Zannoni (ezannoni@cygnus.com)
+
+if $tracelevel then {
+    strace $tracelevel
+}
+
+
+#
+# test running programs
+#
+set prms_id 0
+set bug_id 0
+
+set testfile "annota1"
+set srcfile ${testfile}.c
+set binfile ${objdir}/${subdir}/${testfile}
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-w}] != "" } {
+    gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
+}
+
+
+# are we on a target board? If so, don't run these tests.
+# note: this is necessary because we cannot use runto_main (which would
+# work for remote targets too) because of the different prompt we get
+# when using annotation level 2.
+#
+if ![isnative] then {
+    return 0
+}
+
+
+gdb_exit
+gdb_start
+gdb_reinitialize_dir $srcdir/$subdir
+gdb_load ${binfile}
+
+if [target_info exists gdb_stub] {
+    gdb_step_for_stub;
+}
+
+#
+# the line at which break main will put the breakpoint
+#
+set main_line 20
+
+# The commands we test here produce many lines of output; disable "press 
+# <return> to continue" prompts.
+send_gdb "set height 0\n"
+gdb_expect -re "$gdb_prompt $"
+
+#
+# break at main
+#
+gdb_test "break main" \
+    "Breakpoint.*at.* file .*$srcfile, line.*" \
+    "breakpoint main"
+
+
+#
+# NOTE: this prompt is OK only when the annotation level is > 1
+# NOTE: When this prompt is in use the gdb_test procedure cannot be used because
+# it assumes that the last char after the gdb_prompt is a white space. This is not
+# true with this annotated prompt. So we must use send_gdb and gdb_expect.
+#
+
+set old_gdb_prompt $gdb_prompt
+set gdb_prompt "\r\n\032\032pre-prompt\r\n$gdb_prompt \r\n\032\032prompt\r\n"
+
+
+
+#
+# set the annotation level to 2
+#
+# of course, this will test:
+# annotate-pre-prompt
+# annotate-prompt
+# annotate-post-prompt (in the next block)
+#
+send_gdb "set annotate 2\n" 
+gdb_expect {
+    -re "set annotate 2\r\n$gdb_prompt$" { pass "annotation set at level 2" }
+    -re ".*$gdb_prompt$"       { fail "annotation set at level 2" }
+    timeout	            { fail "annotation set at level 2 (timeout)" }
+  }
+
+
+#
+# info break will test:
+# annotate-breakpoints-headers
+# annotate-field
+# annotate-breakpoints-table
+# annotate-record
+# annotate-breakpoints-table-end
+#
+send_gdb "info break\n" 
+gdb_expect {
+ -re "\r\n\032\032post-prompt\r\n\r\n\032\032breakpoints-headers\r\n\r\n\032\032field 0\r\nNum \r\n\032\032field 1\r\nType           \r\n\032\032field 2\r\nDisp \r\n\032\032field 3\r\nEnb \r\n\032\032field 4\r\nAddress    \r\n\032\032field 5\r\nWhat\r\n\r\n\032\032breakpoints-table\r\n\r\n\032\032record\r\n\r\n\032\032field 0\r\n1   \r\n\032\032field 1\r\nbreakpoint     \r\n\032\032field 2\r\nkeep \r\n\032\032field 3\r\ny   \r\n\032\032field 4\r\n$hex \r\n\032\032field 5\r\nin main at ${srcdir}/${subdir}/${srcfile}:$main_line\r\n\r\n\032\032breakpoints-table-end\r\n$gdb_prompt$" \
+	{pass "breakpoint info"}
+   -re ".*$gdb_prompt$" { fail "breakpoint info" }
+   timeout { fail "breakpoint info (timeout)" }
+}
+
+
+#
+# run to a break point will test:
+# annotate-frames-invalid
+# annotate-breakpoints-invalid (a.k.a. breakpoints-changed)
+# annotate-starting
+# annotate-breakpoint
+# annotate-frame-begin
+# annotate-frame-function-name
+# annotate-frame-args
+# annotate-frame-source-begin
+# annotate-frame-source-file
+# annotate-frame-source-file-end
+# annotate-frame-source-line
+# annotate-frame-source-end
+# annotate-source
+# annotate-frame-end
+# annotate-stopped
+#
+send_gdb "run\n"
+  gdb_expect {
+    -re "\r\n\032\032post-prompt\r\nStarting program: $binfile \r\n\r\n\032\032frames-invalid\r\n\r\n\032\032frames-invalid\r\n\r\n\032\032breakpoints-invalid\r\n\r\n\032\032starting\(\r\n\r\n\032\032frames-invalid\)+\r\n\r\n\032\032breakpoint 1\r\n\r\nBreakpoint 1, \r\n\032\032frame-begin 0 $hex\r\n\r\n\032\032frame-function-name\r\nmain\r\n\032\032frame-args\r\n \\(\\)\r\n\032\032frame-source-begin\r\n at \r\n\032\032frame-source-file\r\n.*annota1.c\r\n\032\032frame-source-file-end\r\n:\r\n\032\032frame-source-line\r\n$main_line\r\n\032\032frame-source-end\r\n\r\n\r\n\032\032source.*$srcfile:$main_line:.*:beg:$hex\r\n\r\n\032\032frame-end\r\n\r\n\032\032stopped\r\n$gdb_prompt$" \
+	                    { pass "run until main breakpoint" }
+    -re ".*$gdb_prompt$"       { fail "run until main breakpoint" }
+    timeout	            { fail "run until main breakpoint (timeout)" }
+  }
+
+
+#
+# Let's do a next, to get to a point where the array is initialized
+# We don't care about the annotated output for this operation, it is the same as
+# the one produced by run above
+#
+send_gdb "next\n" 
+gdb_expect {
+    -re ".*$gdb_prompt$" { pass "go after array init line" }
+    timeout { fail "go after array init line (timeout)" }
+}
+
+
+#
+# printing the array will test:
+# annotate-value-history-begin
+# annotate-value-history-value
+# annotate-array-section-begin
+# annotate-elt
+# FIXME: annotate-elt-rep and annotate-elt-rep-end not tested
+# annotate-array-section-end
+# annotate-value-history-end
+# FIXME: annotate-value-begin and annotate-value-end not tested (the gdb output
+#              command would cause them to be used)
+#
+send_gdb "print my_array\n"
+gdb_expect {
+  -re "\r\n\032\032post-prompt\r\n\r\n\032\032value-history-begin 1 -\r\n.*= \r\n\032\032value-history-value\r\n.\r\n\032\032array-section-begin 0 -\r\n1\r\n\032\032elt\r\n, 2\r\n\032\032elt\r\n, 3\r\n\032\032elt\r\n\r\n\032\032array-section-end\r\n.\r\n\r\n\032\032value-history-end\r\n$gdb_prompt$" \
+	{ pass "print array" }
+  -re ".*$gdb_prompt$"     { fail "print array" }
+  timeout	            { fail "print array (timeout)" }
+}
+
+
+#
+# this should generate an error message, so to test:
+# annotate-error-begin
+# FIXME: annotate-error not tested
+#
+
+#exp_internal 1
+send_gdb "print non_existent_value\n"
+gdb_expect {
+  -re "\r\n\032\032post-prompt\r\n\r\n\032\032error-begin\r\nNo symbol \"non_existent_value\" in current context.\r\n\r\n\032\032error\r\n$gdb_prompt$" \
+	{ pass "print non_existent_value" }
+  -re ".*$gdb_prompt$"     { fail "print non_existent_value" }
+  timeout	            { fail "print non_existent_value (timeout)" }
+}
+
+
+#
+# break at signal handler. So that, once we are in the sig handler, if we do a bt
+# we can test annotate-signal-handler-caller
+#
+send_gdb "break handle_USR1\n"
+gdb_expect {
+  -re  "\r\n\032\032post-prompt\r\n\r\n\032\032breakpoints-invalid\r\nBreakpoint.*at $hex: file.*$srcfile, line.*\r\n$gdb_prompt$" \
+	    { pass "breakpoint handle_USR1" }
+  -re ".*$gdb_prompt$"     { fail "break at handle_USR1" }
+  timeout	            { fail "break at handle_USR1 (timeout)" }
+}
+
+#
+# break at printf. When we are stopped at printf, we can test 
+#
+send_gdb "break printf\n"
+gdb_expect {
+  -re  "\r\n\032\032post-prompt\r\n\r\n\032\032breakpoints-invalid\r\nBreakpoint.*at $hex.*$gdb_prompt$" \
+	    { pass "breakpoint printf" }
+  -re ".*$gdb_prompt$"     { fail "break printf" }
+  timeout	            { fail "break printf (timeout)" }
+}
+
+#
+# get to printf
+#
+send_gdb "continue\n"
+gdb_expect {
+  -re "\r\n\032\032post-prompt\r\nContinuing.\r\n\r\n\032\032starting\r\n\r\n\032\032frames-invalid\r\n\r\n\032\032breakpoint 3\r\n\r\nBreakpoint 3, \r\n\032\032frame-begin 0 $hex\r\n\r\n\032\032frame-address\r\n$hex\r\n\032\032frame-address-end\r\n in \r\n\032\032frame-function-name\r\nprintf\r\n\032\032frame-args\r\n \\(\\)\r\n\032\032frame-where\r\n from.*\032\032frame-end\r\n\r\n\032\032stopped\r\n$gdb_prompt$" \
+	  { pass "continue to printf" }
+  -re ".*$gdb_prompt$"     { fail "continue to printf" }
+  timeout	            { fail "continue to printf (timeout)" }
+}
+
+#
+# test:
+# annotate-frame-where
+# annotate-frame-address
+# annotate-frame-address-end
+#
+send_gdb "backtrace\n"
+gdb_expect {
+  -re "\r\n\032\032post-prompt\r\n\r\n\032\032frame-begin 0 $hex\r\n.0  \r\n\032\032frame-address\r\n$hex\r\n\032\032frame-address-end\r\n in \r\n\032\032frame-function-name\r\nprintf\r\n\032\032frame-args\r\n \\(\\)\r\n\032\032frame-where\r\n from.*\r\n\032\032frame-end\r\n\r\n\032\032frame-begin 1 $hex\r\n.1  \r\n\032\032frame-address\r\n$hex\r\n\032\032frame-address-end\r\n in \r\n\032\032frame-function-name\r\nmain\r\n\032\032frame-args\r\n \\(\\)\r\n\032\032frame-source-begin\r\n at \r\n\032\032frame-source-file\r\n${srcdir}/${subdir}/${srcfile}\r\n\032\032frame-source-file-end\r\n:\r\n\032\032frame-source-line\r\n.*\r\n\032\032frame-source-end\r\n\r\n\r\n\032\032frame-end\r\n$gdb_prompt$" \
+	  { pass "bactrace from shlibrary" }
+  -re ".*$gdb_prompt$"     { fail "backtrace from shlibrary" }
+  timeout	            { fail "backtrace from shlibrary (timeout)" }
+}
+
+
+#
+# test printing a frame with some arguments: 
+# annotate-arg-begin
+# annotate-arg-name-end
+# annotate-arg-value
+# annotate-arg-end
+#
+send_gdb "signal SIGUSR1\n"
+gdb_expect {
+  -re "\r\n\032\032post-prompt\r\nContinuing with signal SIGUSR1.\r\n\r\n\032\032starting\r\n\r\n\032\032frames-invalid\r\n\r\n\032\032breakpoint 2\r\n\r\nBreakpoint 2, \r\n\032\032frame-begin 0 $hex\r\n\r\n\032\032frame-function-name\r\nhandle_USR1\r\n\032\032frame-args\r\n \\(\r\n\032\032arg-begin\r\nsig\r\n\032\032arg-name-end\r\n=\r\n\032\032arg-value -\r\n16\r\n\032\032arg-end\r\n\\)\r\n\032\032frame-source-begin\r\n at \r\n\032\032frame-source-file\r\n${srcdir}/${subdir}/${srcfile}\r\n\032\032frame-source-file-end\r\n:\r\n\032\032frame-source-line\r\n.*\r\n\032\032frame-source-end\r\n\r\n\r\n\032\032source.*annota1.c:.*:185:beg:$hex\r\n\r\n\032\032frame-end\r\n\r\n\032\032stopped\r\n$gdb_prompt$" \
+	{ pass "send SIGUSR1" }
+  -re ".*$gdb_prompt$"     { fail "send SIGUSR1" }
+  timeout	            { fail "send SIGUSR1 (timeout)" }
+}
+
+
+#
+# test:
+# annotate-signal-handler-caller
+#
+send_gdb "backtrace\n"
+gdb_expect {
+  -re ".*frame-begin 0 $hex.*0.*frame-end.*frame-begin 1 $hex.*1.*\032\032signal-handler-caller\r\n.signal handler called.\r\n\r\n\032\032frame-end\r\n\r\n.*frame-begin 2 $hex.*2.*frame-begin 3 $hex.*3.*frame-end.*$gdb_prompt$" \
+	{ pass "backtrace @ signal handler" }
+  -re ".*$gdb_prompt$"     { fail "backtrace @ signal handler" }
+  timeout	            { fail "backtrace @ signal handler (timeout)" }
+}
+
+#
+# delete all the breakpoints
+#
+send_gdb "delete 1\n"
+gdb_expect {
+     -re "\r\n\032\032post-prompt\r\n$gdb_prompt$" \
+          { pass "delete bp 1" }
+     -re ".*$gdb_prompt$"  { fail "delete bp 1" }
+     timeout { fail "delete bp 1 (timeout)" }
+}
+
+send_gdb "delete 2\n"
+gdb_expect {
+     -re "\r\n\032\032post-prompt\r\n$gdb_prompt$" \
+	     { pass "delete bp 2" }
+     -re ".*$gdb_prompt$"  { fail "delete bp 2 " }
+     timeout { fail "delete bp 2 (timeout)" }
+}
+
+send_gdb "delete 3\n"
+gdb_expect {
+     -re "\r\n\032\032post-prompt\r\n$gdb_prompt$" \
+	     { pass "delete bp 3" }
+     -re ".*$gdb_prompt$"  { fail "delete bp 3" }
+     timeout { fail "delete bp 3 (timeout)" }
+}
+
+#
+# break at main, after value is initialized. This is in preparation
+# to test the annotate output for the display command.
+#
+send_gdb "break main\n"
+gdb_expect {
+     -re "post-prompt.*\032\032breakpoints-invalid.*Breakpoint 4 at $hex: file ${srcdir}/${subdir}/${srcfile}, line $main_line.*$gdb_prompt$" \
+	     { pass "break at 28" }
+     -re ".*$gdb_prompt$"  { fail "break at 28" }
+     timeout { fail "break at 28 (timeout)" }
+}
+
+#
+# display the value; test:
+# annotate-display-begin
+# annotate-display-number-end
+# annotate-display-format
+# annotate-display-expression
+# annotate-display-expression-end
+# annotate-display-end
+# FIXME: annotate-display-value not tested
+#
+send_gdb "display value\n"
+gdb_expect {
+    -re "post-prompt\r\n\r\n\032\032display-begin\r\n1\r\n\032\032display-number-end\r\n: \r\n\032\032display-format\r\n\r\n\032\032display-expression\r\nvalue\r\n\032\032display-expression-end\r\n = \r\n\032\032display-expression\r\n7\r\n\r\n\032\032display-end\r\n$gdb_prompt$" \
+	     { pass "set up display" }
+     -re ".*$gdb_prompt$"  { fail "set up display" }
+     timeout { fail "set up display (timeout)" }
+}
+
+
+# should ask query. Test annotate-query.
+# we don't care about anything else here, only the query.
+
+send_gdb "run\n"
+gdb_expect {
+  -re "pre-query.*already.*\\(y or n\\).*query\r\n" {
+         send_gdb "y\n"
+         gdb_expect {
+	     -re ".*post-query.*$gdb_prompt$" \
+		     { pass "re-run" }
+	     -re ".*$gdb_prompt$"  { fail "re-run" }
+	     timeout { fail "re-run (timeout)" }
+	 }
+     }
+  -re ".*$gdb_prompt$"  { fail "re-run" }
+  timeout { fail "re-run (timeout)" }
+}
+
+
+#
+# Send a signal that is not handled; test:
+# annotate-signalled
+# annotate-signal-name
+# annotate-signal-name-end
+# annotate-signal-string
+# annotate-signal-string-end
+# FIXME: annotate-signal not tested (requires that the inferior be 
+#                        stopped by a "random" signal)
+#
+send_gdb "signal SIGTRAP\n"
+gdb_expect {
+  -re ".*\032\032post-prompt\r\nContinuing with signal SIGTRAP.\r\n\r\n\032\032starting\r\n\r\n\032\032frames-invalid\r\n\r\n\032\032signalled\r\n\r\n\032\032frames-invalid\r\n\r\nProgram terminated with signal \r\n\032\032signal-name\r\nSIGTRAP\r\n\032\032signal-name-end\r\n, \r\n\032\032signal-string\r\nTrace.breakpoint trap\r\n\032\032signal-string-end\r\n.\r\nThe program no longer exists.\r\n\r\n\032\032stopped\r\n$gdb_prompt$" \
+	  { pass "signal sent" }
+  -re ".*$gdb_prompt$" { fail "signal sent" }
+  timeout { fail "signal sent (timeout)" }
+}
+
+
+# Check for production of a core file
+# and remove it!
+
+set exec_output [remote_exec build "ls core"]
+
+if [ regexp "core not found" $exec_output]  {
+    pass "No core dumped"
+} else {
+  if [ regexp "No such file or directory" $exec_output] {
+      pass "No core dumped"
+  } else {
+      remote_exec build "rm -f core"
+      pass "Core dumped and removed"
+  }
+}
+
+
+# restore the original prompt for the rest of the testsuite
+
+set gdb_prompt $old_gdb_prompt
diff --git a/gdb/testsuite/gdb.base/annota2.cc b/gdb/testsuite/gdb.base/annota2.cc
new file mode 100644
index 0000000..e9d7da03
--- /dev/null
+++ b/gdb/testsuite/gdb.base/annota2.cc
@@ -0,0 +1,25 @@
+class A {
+public:
+  int x;
+  int y;
+  int foo (int arg);
+};
+
+
+int A::foo (int arg)
+{
+  x += arg;
+  return arg *2;
+}
+
+int main()
+{
+  A a;
+
+  a.x = 1;
+  a.y = 2;
+
+  printf ("a.x is %d\n", a.x);
+  return 0;
+}
+
diff --git a/gdb/testsuite/gdb.base/annota2.exp b/gdb/testsuite/gdb.base/annota2.exp
new file mode 100644
index 0000000..7c9116b
--- /dev/null
+++ b/gdb/testsuite/gdb.base/annota2.exp
@@ -0,0 +1,224 @@
+#   Copyright (C) 1999
+#   Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
+
+# Please email any bugs, comments, and/or additions to this file to:
+# bug-gdb@prep.ai.mit.edu
+
+# This file was written by Elena Zannoni (ezannoni@cygnus.com)
+
+if $tracelevel then {
+    strace $tracelevel
+}
+
+
+#
+# test running programs
+#
+set prms_id 0
+set bug_id 0
+
+set testfile "annota2"
+set srcfile ${testfile}.cc
+set binfile ${objdir}/${subdir}/${testfile}
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++ additional_flags=-w}] != "" } {
+    gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
+}
+
+# are we on a target board? If so, don't run these tests.
+# note: this is necessary because we cannot use runto_main (which would
+# work for remote targets too) because of the different prompt we get
+# when using annotation level 2.
+#
+if ![isnative] then {
+    return 0
+}
+
+
+gdb_exit
+gdb_start
+gdb_reinitialize_dir $srcdir/$subdir
+gdb_load ${binfile}
+
+if [target_info exists gdb_stub] {
+    gdb_step_for_stub;
+}
+
+#
+# line number where we need to stop in main
+#
+set main_line 22
+
+# The commands we test here produce many lines of output; disable "press 
+# <return> to continue" prompts.
+send_gdb "set height 0\n"
+gdb_expect -re "$gdb_prompt $"
+
+#
+# break at main
+#
+gdb_test "break 22" \
+    "Breakpoint.*at.* file .*$srcfile, line.*" \
+    "breakpoint main"
+
+
+#
+# NOTE: this prompt is OK only when the annotation level is > 1
+# NOTE: When this prompt is in use the gdb_test procedure cannot be used because
+# it assumes that the last char of the gdb_prompt is a white space. This is not
+# true with this annotated prompt. So we must use send_gdb and gdb_expect.
+#
+
+set old_gdb_prompt $gdb_prompt
+set gdb_prompt "\r\n\032\032pre-prompt\r\n$gdb_prompt \r\n\032\032prompt\r\n"
+
+send_gdb "set annotate 2\n" 
+gdb_expect {
+    -re "set annotate 2\r\n$gdb_prompt$" { pass "annotation set at level 2" }
+    -re ".*$gdb_prompt$"       { fail "annotation set at level 2" }
+    timeout	            { fail "annotation set at level 2 (timeout)" }
+  }
+
+send_gdb "run\n"
+  gdb_expect {
+    -re "\r\n\032\032post-prompt\r\nStarting program: $binfile \r\n\r\n\032\032frames-invalid\r\n\r\n\032\032frames-invalid\r\n\r\n\032\032breakpoints-invalid\r\n\r\n\032\032starting\(\r\n\r\n\032\032frames-invalid\)+\r\n\r\n\032\032breakpoint 1\r\n\r\nBreakpoint 1, \r\n\032\032frame-begin 0 $hex\r\n\r\n\032\032frame-function-name\r\nmain\r\n\032\032frame-args\r\n \\(\\)\r\n\032\032frame-source-begin\r\n at \r\n\032\032frame-source-file\r\n.*annota2.cc\r\n\032\032frame-source-file-end\r\n:\r\n\032\032frame-source-line\r\n$main_line\r\n\032\032frame-source-end\r\n\r\n\r\n\032\032source.*$srcfile:$main_line:.*:beg:$hex\r\n\r\n\032\032frame-end\r\n\r\n\032\032stopped\r\n$gdb_prompt$" \
+	                    { pass "run until main breakpoint" }
+    -re ".*$gdb_prompt$"       { fail "run until main breakpoint" }
+    timeout	            { fail "run until main breakpoint (timeout)" }
+  }
+
+#
+# print class 'a' with public fields.
+# this will test:
+# annotate-field-begin
+# annotate-field-name-end
+# annotate-field-value
+# annotate-field-end
+#
+send_gdb "print a\n"
+gdb_expect {
+  -re "\r\n\032\032post-prompt\r\n\r\n\032\032value-history-begin 1 -\r\n.*= \r\n\032\032value-history-value\r\n\\{\r\n\032\032field-begin -\r\nx\r\n\032\032field-name-end\r\n = \r\n\032\032field-value\r\n1\r\n\032\032field-end\r\n, \r\n\032\032field-begin -\r\ny\r\n\032\032field-name-end\r\n = \r\n\032\032field-value\r\n2\r\n\032\032field-end\r\n\\}\r\n\r\n\032\032value-history-end\r\n$gdb_prompt$" \
+	{ pass "print class" }
+  -re ".*$gdb_prompt$"     { fail "print class" }
+  timeout	            { fail "print class (timeout)" }
+}
+
+#
+# continue until exit
+# this will test:
+# annotate-exited
+#
+send_gdb "continue\n"
+gdb_expect {
+  -re "\r\n\032\032post-prompt\r\nContinuing.\r\n\r\n\032\032starting\r\n\r\n\032\032frames-invalid\r\na.x is 1\r\n\r\n\032\032frames-invalid\r\n\r\n\032\032exited 0\r\n\r\nProgram exited normally.\r\n\r\n\032\032frames-invalid\r\n\r\n\032\032stopped\r\n$gdb_prompt$" \
+	  { pass "continue until exit" }
+  -re ".*$gdb_prompt$"     { fail "continue to exit" }
+  timeout	            { fail "continue to exit (timeout)" }
+}
+
+#
+# delete all breakpoints
+#
+send_gdb "delete\n"
+gdb_expect {
+  -re " " {
+           send_gdb "y\n"
+           gdb_expect {
+	     -re " " { pass "delete bps" }
+	     -re ".*$gdb_prompt$" { fail "delete bps" }
+	     timeout  { fail "delete bps (timeout)" }
+	 }
+     }
+  -re ".*$gdb_prompt$" { fail "delete bps" }
+  timeout  { fail "delete bps (timeout)" }
+}
+
+#
+# break at first line of main. 
+#
+send_gdb "break main\n"
+gdb_expect {
+  -re  "\r\n\032\032post-prompt\r\n\r\n\032\032breakpoints-invalid\r\nBreakpoint.*at $hex: file.*$srcfile, line.*\r\n$gdb_prompt$" \
+	    { pass "breakpoint at main" }
+  -re ".*$gdb_prompt$"     { fail "break at main" }
+  timeout	            { fail "break at main (timeout)" }
+}
+
+#
+# change value of main_line
+#
+set main_line 19
+
+#
+# run program up to breakpoint.
+#
+send_gdb "run\n"
+  gdb_expect {
+    -re "\r\n\032\032post-prompt\r\n.*Starting program: $binfile \r\n\r\n\032\032frames-invalid\r\n\r\n\032\032frames-invalid\r\n\r\n\032\032breakpoints-invalid\r\n\r\n\032\032starting\(\r\n\r\n\032\032frames-invalid\)+\r\n\r\n\032\032breakpoint 2\r\n\r\nBreakpoint 2, \r\n\032\032frame-begin 0 $hex\r\n\r\n\032\032frame-function-name\r\nmain\r\n\032\032frame-args\r\n \\(\\)\r\n\032\032frame-source-begin\r\n at \r\n\032\032frame-source-file\r\n.*annota2.cc\r\n\032\032frame-source-file-end\r\n:\r\n\032\032frame-source-line\r\n$main_line\r\n\032\032frame-source-end\r\n\r\n\r\n\032\032source.*$srcfile:$main_line:.*:beg:$hex\r\n\r\n\032\032frame-end\r\n\r\n\032\032stopped\r\n$gdb_prompt$" \
+	                    { pass "run until main breakpoint" }
+    -re ".*$gdb_prompt$"       { fail "run until main breakpoint" }
+    timeout	            { fail "run until main breakpoint (timeout)" }
+  }
+
+#
+# set up a watch point on a.x 
+#
+send_gdb "watch a.x\n"
+gdb_expect {
+   -re "\r\n\032\032post-prompt\r\n\r\n\032\032breakpoints-invalid\r\nWatchpoint 3: a.x\r\n$gdb_prompt$" \
+	   { pass "set watch on a.x" }
+   -re ".*$gdb_prompt$"  { fail "set watch on a.x" }
+   timeout    { fail "set watch on a.x (timeout)" }
+}
+
+#
+# do a next, so that the watchpoint triggers. This will test:
+# annotate-watchpoint
+#
+send_gdb "next\n"
+gdb_expect {
+   -re "\r\n\032\032post-prompt\r\n\r\n\032\032starting\r\n\r\n\032\032frames-invalid\r\n\r\n\032\032frames-invalid\r\n\r\n\032\032frames-invalid\r\n\r\n\032\032watchpoint 3\r\nWatchpoint 3: a.x\r\n\r\nOld value = 4\r\nNew value = 1\r\n\r\n\032\032frame-begin 0 $hex\r\n\r\n\032\032frame-function-name\r\nmain\r\n\032\032frame-args\r\n \\(\\)\r\n\032\032frame-source-begin\r\n at \r\n\032\032frame-source-file\r\n.*$srcfile\r\n\032\032frame-source-file-end\r\n:\r\n\032\032frame-source-line\r\n20\r\n\032\032frame-source-end\r\n\r\n\r\n\032\032source .*$srcfile.*beg:$hex\r\n\r\n\032\032frame-end\r\n\r\n\032\032stopped\r\n$gdb_prompt$" \
+	   { pass "watch triggered on a.x" }
+   -re ".*$gdb_prompt$"  { fail "watch triggered on a.x" }
+   timeout    { fail "watch triggered on a.x (timeout)" }
+}
+
+
+#
+# send ^C to gdb, so that the quit() function gets called 
+# and annotate-quit is tested
+# test:
+# annotate-quit
+#
+send_gdb "\003"
+gdb_expect {
+    -re "\r\n\032\032error-begin\r\nQuit\r\n\r\n\032\032quit\r\n$gdb_prompt$" \
+	    { pass "annotate-quit" }
+    -re ".*$gdb_prompt$" { fail "annotate-quit" }
+    timeout { fail "annotate-quit (timeout)" }
+}
+
+#
+# FIXME: the testsuite does not currently have tests for 
+#        annotate_catchpoints and annotate_function_call
+#        and a few variants of the annotations that are 
+#        tested (marked by FIXME on the annot?.exp files)
+#
+
+# reinstall the old prompt for the rest of the testsuite.
+
+set gdb_prompt $old_gdb_prompt
diff --git a/readline/ChangeLog.Cygnus b/readline/ChangeLog.Cygnus
new file mode 100644
index 0000000..08a6ff7
--- /dev/null
+++ b/readline/ChangeLog.Cygnus
@@ -0,0 +1,988 @@
+1999-04-27  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>
+
+	* ChangeLog.Cygnus: new file. It is the old Changelog.
+	* ChangeLog: removed. It was conflicting with CHANGELOG
+	  on Windows.
+
+1999-04-22  Jason Molenda  (jsm@bugshack.cygnus.com)
+
+	* Makefile.in (install): Make comment about this change more explicit.
+
+1999-04-22  Jason Molenda  (jsm@bugshack.cygnus.com)
+
+        * Makefile.in (install): Don't install the final libreadline.a
+        or .h files.
+
+Tue Mar 23 10:56:08 1999  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>
+
+	Patches from Robert Hoehne <robert.hoehne@gmx.net>:
+ 	
+	* display.c: Change some terminal calls to work on DJGPP.
+	* terminal.c: Likewise.
+	* Makefile.in: Remove . from the VPATH directive.
+	
+Tue Mar  9 14:58:13 1999  Geoffrey Noer  <noer@cygnus.com>
+
+	* support/config.sub: Recognize cygwin*, not just cygwin32.
+
+Tue Feb  9 10:38:57 1999  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>
+
+	* configure.in: Do not use the ./support directory.
+	* configure: Regenerate.
+
+Wed Jan  6 12:24:19 1999  Christopher Faylor <cgf@cygnus.com>
+
+	* configure.in: Use LOCAL_CFLAGS rather than CFLAGS for
+	searching libtermcap directory.
+	* configure: Regenerate.
+
+Thu Dec 31 12:07:01 1998  Christopher Faylor <cgf@cygnus.com>
+
+	* configure.in: Search devo libtermcap directory for termcap.h
+	when compiling for cygwin.
+	* configure: Regenerated.
+
+1998-12-30  Michael Meissner  <meissner@cygnus.com>
+
+	* Makefile.in (install): Only try to copy libreadline.a and
+	libhistory.a if they exist.
+
+Tue Dec 29 23:49:20 1998  Christopher Faylor <cgf@cygnus.com>
+
+	* cross-build/cygwin.cache: Add a couple more known settings.
+	* configure.in: Fix typo.
+	* configure: Regenerated.
+
+Tue Dec 29 18:11:28 1998  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>
+
+	* cross-build: new directory.
+	
+	* cross-build/cygwin.cache: new file. Used for Cygwin cross builds.
+
+	* configure.in: added tests for cross-build for Cygwin.
+
+1998-12-24  Jason Molenda  (jsm@bugshack.cygnus.com)
+
+	* Makefile.in: Add CYGNUS LOCAL comment.
+	* acconfig.h: Add missing defines.
+	* config.h.bot: Add missing content.
+	* configure, config.h.in: Regenerated.
+
+Wed Dec 23 16:21:41 1998  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>
+
+	* Makefile.in: comment out the rule to rebuild configure by 
+	running autoconf. 
+
+Tue Dec 22 10:00:30 1998  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>
+
+	* shell.c (savestring): ifdef'd it out. 
+
+	* Imported new version of Readline 2.2.1. Removed all the Cygnus
+	local changes.
+
+	New files: acconfig.h, aclocal.m4, ansi_stdlib.h, callback.c,
+ 	config.h.in, configure, histexpand.c, histfile.c, histlib.h,
+ 	histsearch.c, input.c, kill.c, macro.c, nls.c, posixdir.h,
+ 	posixjmp.h, posixstat.h, rlconf.h, rltty.h, rlwinsize.h, shell.c,
+ 	tcap.h, terminal.c, undo.c, util.c, support directory.
+
+	Removed files: sysdep*, config directory.
+	
+
+Fri Dec  4 15:25:41 1998  David Taylor  <taylor@texas.cygnus.com>
+
+	The following changes were made by Jim Blandy
+ 	<jimb@zwingli.cygnus.com> and David Taylor
+ 	<taylor@texas.cygnus.com> as part of a project to merge in changes
+ 	made by HP; HP did not create ChangeLog entries.
+
+	* config/mp-enable-tui: New file.
+	(TUI_CFLAGS): Search devo's include directory, as long as we're
+ 	totally ruining modularity.
+	(INCLUDE_SRCDIR): New var.
+	(GDB_TUI_SRCDIR): Fix syntax error.
+
+	* configure.in: Check the --enable-tui flag; if it's set, include
+ 	a makefile fragment that #defines TUI and adds the needed #include
+ 	directories.
+	(*-*-hpux*): New host; use sysdep-hpux.h.
+
+	* Makefile.in (.c.o): Check the variable set in the makefile
+	fragment above.
+
+	* display.c (term_goto): declare it.
+	(insert_some_chars): set it.
+	(delete_chars): set it.
+
+	* readline.c: add tui include files surrounded by TUI.
+	(rl_reset): new function, move some of rl_abort functionality to
+ 	here.
+	(rl_abort): call rl_reset.
+	(rl_getc): tui changes.
+	(init_terminal_io): tui changes.
+
+	* readline.h (tui_version, fputc_unfiltered, fputs_unfiltered,
+	tui_tputs): declare if TUI is defined.
+
+	* rltty.c (prepare_terminal_settings): additional comment.
+
+	* signals.c: add tui include files surrounded by TUI.  move #if
+ 	and #endif to column 1 so HP's compiler will accept them.  Remove
+ 	declaration of tuiDoAndReturnToTop since it's declared in tui.h.
+	(rl_handle_sigwinch): call tuiDoAndReturnToTop if TUI defined.
+  	(rl_handle_sigwinch_on_clear): define if TUI defined.
+	(rl_set_signals): if TUI, avoid infinite recursion.
+	(rl_clear_signals): install rl_handle_sigwinch_on_clear.
+
+	* sysdep-hpux.h: New file.
+
+Mon Nov  2 15:26:33 1998  Geoffrey Noer  <noer@cygnus.com>
+
+        * configure.in: Check cygwin* instead of cygwin32*.
+
+Tue Jul 28 09:43:27 1998  Jeffrey A Law  (law@cygnus.com)
+
+	* sysdep-hpux11.h: New file.
+	* configure.in (*-*-*-hpux11*): Use sysdep-hpux11.h.
+
+Thu Jul 23 17:48:21 1998  Ian Lance Taylor  <ian@cygnus.com>
+
+	* configure.bat: Remove obsolete file.
+	* examples/configure.bat: Remove obsolete file.
+
+Wed May 13 13:41:53 1998  Ian Lance Taylor  <ian@cygnus.com>
+
+	* sysdep-6irix.h: New file.
+	* configure.in (*-*-irix6*): New host; use sysdep-6irix.h.
+
+	* Makefile.in (isearch.o, search.o): Depend upon sysdep.h.
+	(Makefile): Depend upon $(srcdir)/configure.in.
+
+Thu Apr  9 11:59:38 1998  Ian Dall (<Ian.Dall@dsto.defence.gov.au>
+
+	* configure.in (host==netbsd): Include config/mh-bsd44.
+	* config/mh-bsd44: New file.
+
+Wed Dec  3 16:48:20 1997  Michael Snyder  (msnyder@cleaver.cygnus.com)
+
+	* rltty.c: fix typos.
+
+Tue Oct  8 08:59:24 1996  Stu Grossman  (grossman@critters.cygnus.com)
+
+	* tilde.c (tilde_word_expand):  __MSDOS___ -> __MSDOS__
+
+Sat Oct 05 11:24:34 1996  Mark Alexander  <marka@cygnus.com>
+
+	* rldefs.h: On Linux, include <termios.h> to fix compile error
+	in <termcap.h>.
+
+Wed Sep  4 18:06:51 1996  Stu Grossman  (grossman@critters.cygnus.com)
+
+	* rldefs.h:  Enable HANDLE_SIGNALS for cygwin32.
+
+Thu Aug 29 16:59:45 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+	* configure.in (i[345]86-*-*): Recognize i686 for pentium pro.
+
+Fri Aug 16 17:49:57 1996  Stu Grossman  (grossman@critters.cygnus.com)
+
+	* complete.c:  Include <pwd.h> if not DOS, and if cygwin32 or not
+	win32.
+	* configure.in:  Add test for *-*-cygwin32* to use config/mh-posix.
+	* readline.c:  Move decl of tgetstr to rldefs.h.
+	* (_rl_set_screen_size):  Remove redundant ifdef MINIMALs.
+	* rldefs.h:  Don't do MINIMAL for cygwin32.  Cygwin32 now uses
+	full-blown readline, except for termcap.
+
+Sun Aug 11 21:06:26 1996  Stu Grossman  (grossman@critters.cygnus.com)
+
+	* rldefs.c:  Get rid of define of SIGALRM if _WIN32 or __MSDOS__.
+	* Don't define ScreenCols/ScreenRows/... if cygwin32.
+	* sysdep-norm.h:  Don't include <malloc.h> if cygwin32.
+
+Sun Aug 11 14:59:09 1996  Fred Fish  <fnf@cygnus.com>
+
+	* rldefs.h:  If __osf__is defined, include <termio.h> instead of
+	<sgtty.h>.
+
+Fri Aug  9 08:54:26 1996  Stu Grossman  (grossman@critters.cygnus.com)
+
+	* bind.c complete.c history.c readline.c:  Don't include sys/file.h.
+	* complete.c display.c parens.c readline.c rldefs.h rltty.c
+	signals.c tilde.c:  Change refs to _MSC_VER and __WIN32__ to _WIN32.
+	* signals.c (rl_signal_handler):  Ifdef out kill if _WIN32.
+	* sysdep-norm.h:  Ifdef out include of dirent.h if _WIN32.
+	Include malloc.h if _WIN32.
+
+Thu Jul 18 15:59:35 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+	* rldefs.h (sys/uio.h) Before sys/stream.h is included under AIX,
+	include sys/uio.h, which prevents an undefined structure used in a
+	prototype message from being generated.
+
+Tue Jun 25 23:05:55 1996  Jason Molenda  (crash@godzilla.cygnus.co.jp)
+
+        * Makefile.in (datadir): Set to $(prefix)/share.
+	(docdir): Removed.
+
+Sun May 26 15:14:42 1996  Fred Fish  <fnf@cygnus.com>
+
+	From: David Mosberger-Tang  <davidm@azstarnet.com>
+
+	* sysdep-linux.h: New file.
+	* display.c: Add include of "sysdep.h" to get HAVE_VARARGS_H.
+	* configure.in: Change pattern i[345]86-*-linux* into *-*-linux* to
+	support non-x86 based Linux platforms.
+
+Sun Apr  7 22:06:11 1996  Fred Fish  <fnf@cygnus.com>
+
+	From: Miles Bader  <miles@gnu.ai.mit.edu>
+	* config/mh-gnu: New file.
+	* configure.in (*-*-gnu*): New host.
+
+Sun Apr  7 13:21:51 1996  Fred Fish  <fnf@cygnus.com>
+
+	From: Robert Lipe <robertl@dgii.com>
+	* configure.in: SCO OpenServer 5 (a.k.a 3.2v5*) is more like
+	SCO 3.2v4 than 3.2v2.
+
+Wed Jan  3 18:22:10 1996  steve chamberlain  <sac@slash.cygnus.com>
+
+	* readline.c, display.c, complete.c: Add _MSC_VER to list of
+	things which can't do most things.
+
+Thu Nov 16 15:39:05 1995  Geoffrey Noer <noer@cygnus.com>
+
+	* complete.c: Change WIN32 to __WIN32__, added #else return NULL
+	to end of that define.
+
+Tue Oct 31 10:38:58 1995  steve chamberlain  <sac@slash.cygnus.com>
+
+	* display.c, parens.c, readline.c, rldefs.h: Change use of
+	WIN32 to __WIN32__.
+
+Tue Oct 10 11:07:23 1995  Fred Fish  <fnf@cygnus.com>
+
+	* Makefile.in (BISON): Remove macro.
+
+Tue Oct 10 08:49:00 1995  steve chamberlain  <sac@slash.cygnus.com>
+
+	* complete.c (filename_completion_function): Enable for
+	win32 when not MSC.
+
+Sun Oct  8 04:17:19 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
+
+	* configure.in:  Handle powerpc-ibm-aix* like rs6000-ibm-aix*.
+
+Sat Oct  7 20:36:16 1995  Michael Meissner  <meissner@cygnus.com>
+
+	* rltty.c (outchar): Return an int, like tputs expects.
+	* signals.c (_rl_output_character_function): Ditto.
+
+Fri Sep 29 15:19:23 1995  steve chamberlain  <sac@slash.cygnus.com>
+
+	Fixes for when the host WIN32, but not MSC.
+	* complete.c: Sometimes have pwd.h
+	* parens.c: WIN32 has similar restrictions to __GO32__.
+	* readline.c (__GO32__): Some of this moved into rldefs.h
+	* signals.c (__GO32__): Likewise.
+	* rldefs.h (MSDOS||WIN32) becomes MSDOS||MSC.
+	(WIN32&&!WIN32): New definitions.
+
+Wed Sep 20 12:57:17 1995  Ian Lance Taylor  <ian@cygnus.com>
+
+	* Makefile.in (maintainer-clean): New synonym for realclean.
+
+Wed Mar  1 13:33:43 1995  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+	* rltty.c (outchar): Provide prototype for outchar, to silence
+	type warnings in passing outchar to tputs on systems like Linux
+	that have full prototypes.
+
+	* signals.c (_rl_output_character_function): Provide prototype to
+	silence type warnings.
+
+Sun Jan 15 14:10:37 1995  Steve Chamberlain  <sac@splat>
+
+	* rldefs.h: Define MINIMAL for __GO32__ and WIN32.
+	* complete.c, display.c, readline.c, rltty.c: Test MINIMAL
+	instead of __GO32__.
+
+Wed Aug 24 13:04:47 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)
+
+	* configure.in: Change i[34]86 to i[345]86.
+
+Sat Jul 16 13:26:31 1994  Stan Shebs  (shebs@andros.cygnus.com)
+
+	* configure.in (m88*-harris-cxux7*): Recognize.
+	* sysdep-cxux7.h: New file.
+
+Fri Jul  8 13:18:33 1994  Steve Chamberlain  (sac@jonny.cygnus.com)
+
+	* rttty.c (control_meta_key_on): Remove superfluous testing of
+	__GO32__.
+
+Thu Jun 30 15:21:54 1994  Steve Chamberlain  (sac@jonny.cygnus.com)
+
+	* rltty.c (control_meta_key_on): Don't compile if __GO32__ is
+	defined.
+	(rltty_set_default_bindings): Likewise.
+	* display.c (insert_some_chars, delete_chars): row_start should be
+	a short.
+	* parens.c (rl_insert_close): No FD_SET if using __GO32__.
+	* readline.c (rl_gather_tyi): Strip off spurious high bits.
+
+Sun Jun 12 03:51:52 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
+
+	* history.c:  Swap inclusion of rldefs.h and chardefs.h to avoid
+	CTRL macro redefinition.
+
+Mon May  9 18:29:42 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
+
+	* readline.c (readline_default_bindings): Don't compile if
+	__GO32__ is defined.
+	(_rl_set_screen_size): Likewise.
+	* rltty.c (rltty_set_default_bindings): Likewise.
+	(control_meta_key): Likewise.
+	* display.c: If __GO32__ is defined, include <sys/pc.h>.
+	* parens.c: If __GO32__ is defined, undefine FD_SET.
+	* signals.c: Include SIGWINCH handling in the set of things which
+	is not done if HANDLE_SIGNALS is not set.
+
+Fri May  6 13:38:39 1994  Steve Chamberlain  (sac@cygnus.com)
+
+        * config/mh-go32: New fragment.
+	* configure.in (host==go32): Use go32 fragment.
+
+Wed May  4 14:36:53 1994  Stu Grossman  (grossman@cygnus.com)
+
+	* chardefs.h, rldefs.h:  Move decls of string funcs from chardefs.h
+	to rldefs.h so that they don't pollute apps that include
+	readline.h.
+	* history.c:  include rldefs.h to get decls of string funcs.
+
+Wed May  4 12:15:11 1994  Stan Shebs  (shebs@andros.cygnus.com)
+
+	* configure.in (rs6000-bull-bosx*): New configuration, RS/6000
+	variant.
+
+Wed Apr 20 10:43:52 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* configure.in: Use mh-posix for sunos4.1*.
+
+Wed Apr 13 21:28:44 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)
+
+	* rltty.c (set_tty_settings): Don't set readline_echoing_p.
+	(rl_deprep_terminal) [NEW_TTY_DRIVER]: Set readline_echoing_p.
+
+Sun Mar 13 09:13:12 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* Makefile.in: Add TAGS target.
+
+Wed Mar  9 18:01:31 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* isearch.c, search.c: Include sysdep.h.
+
+Thu Mar  3 17:40:03 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)
+
+	* configure.in: For ISC, use mh-sysv, not mh-isc.
+
+Thu Feb 24 04:13:53 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
+
+	* Merge in changes from bash-1.13.5. Merge changes from glob/tilde.c
+	into tilde.c and use it. Add system function declarations where
+	necessary. Check for __GO32__, not _GO32_ consistently.
+	* Makefile.in:  Update dependencies.
+	* rltty.c:  Include <sys/file.h> to match include file setup
+	in readline.c for rldefs.h. Otherwise we get inconsistent
+	TTY_DRIVER definitions in readline.c and rltty.c.
+	* bind.c, complete.c:  Do not include <sys/types.h>, it is already
+	included via sysdep.h, which causes problems if <sys/types.h> has
+	no multiple inclusion protection.
+	* readline.c (_rl_set_screen_size):  Reestablish test for
+	TIOCGWINSZ_BROKEN.
+	* rldefs.h:  Define S_ISREG if necessary.
+
+Fri Feb 18 08:56:35 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* Makefile.in: Add search.o rule for Sun make.
+
+Wed Feb 16 16:35:49 1994  Per Bothner  (bothner@kalessin.cygnus.com)
+
+	* rltty.c:  #if out some code if __GO32__.
+
+Tue Feb 15 14:07:08 1994  Per Bothner  (bothner@kalessin.cygnus.com)
+
+	* readline.c (_rl_output_character_function), display.c:
+	Return int, not void, to conform with the expected arg of tputs.
+	* readline.c (init_terminal_io):  tgetflag only takes 1 arg.
+	* readline.c (_rl_savestring):  New function.
+	* chardefs.h:  To avoid conflicts and/or warnings, define
+	savestring as a macro wrapper for _rl_savestring.
+	* display.c (extern term_xn):  It's an int flag, not a string.
+	* charsdefs.h, rldefs.h:  Remove HAVE_STRING_H-related junk.
+
+Sat Feb  5 08:32:30 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* Makefile.in: Remove obsolete rules for history.info and
+	readline.info.
+
+Thu Jan 27 17:04:01 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)
+
+	* chardefs.h: Only declare strrchr if it is not #define'd.
+
+Tue Jan 25 11:30:06 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* rldefs.h: Accept __hpux as well as hpux for HP compiler in ANSI mode.
+
+Fri Jan 21 17:31:26 1994  Jim Kingdon  (kingdon@lisa.cygnus.com)
+
+	* chardefs.h, tilde.c: Just declare strrchr rather than trying to
+	include a system header.
+
+Fri Jan 21 14:40:43 1994  Fred Fish  (fnf@cygnus.com)
+
+	* Makefile.in (distclean, realclean):  Expand local-distclean
+	inline after doing recursion.  You can't recurse after removing
+	Makefile.  Make them depend on local-clean.
+	* Makefile.in (local-distclean):  Remove now superfluous target.
+
+Mon Jan 17 12:42:07 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)
+
+	* readline.c (doing_an_undo): Delete second declaration, since it
+	confuses the alpha-osf1 native compiler.
+
+Sun Jan 16 12:33:11 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* complete.c, bind.c: Include <sys/stat.h>.
+	* complete.c: Define X_OK if not defined by a system header.
+
+	* chardefs.h: Don't declare xmalloc.
+
+	* keymaps.h: Include "chardefs.h" not <readline/chardefs.h>.
+
+	* Makefile.in (clean mostlyclean distclean realclean): Recurse
+	into subdirectories as well as doing this directory.  Add clean-dvi
+	target.
+
+Sat Jan 15 19:36:12 1994  Per Bothner  (bothner@kalessin.cygnus.com)
+
+	* readline.c, display.c:  Patches to allow use of all 80
+	columns on most terminals (those with am and xn).
+
+	Merge in changes from bash-1.13.  The most obvious one is
+	that the file readline.c has been split into multiple files.
+	* bind.c, complete.c, dispay.c, isearch.c, parens.c, rldefs.h,
+	rltty.c, search.c signals.c, tilde.c, tilde.h, xmalloc.c:  New files.
+
+Sat Dec 11 16:29:17 1993  Steve Chamberlain  (sac@thepub.cygnus.com)
+
+	* readline.c (rl_getc): If GO32, trim high bit from getkey,
+	otherwise fancy PC keys cause grief.
+
+Fri Nov  5 11:49:47 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* configure.in: Add doc to configdirs.
+	* Makefile.in (info dvi install-info clean-info): Recurse into doc.
+
+Fri Oct 22 07:55:08 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* configure.in: Add * to end of all OS names.
+
+Tue Oct  5 12:33:51 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* readline.c: Add stuff for HIUX to place where we detect termio
+	vs. sgtty (ugh, but I don't see a simple better way).
+
+Wed Sep 29 11:02:58 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* readline.c (parser_if): Free tname when done with it (change
+	imported from from bash	1.12 readline).
+
+Tue Sep  7 17:15:37 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* configure.in (m88k-*-sysvr4*): Comment out previous change.
+
+Fri Jul  2 11:05:34 1993  Ian Lance Taylor  (ian@cygnus.com)
+
+	* configure.in (*-*-riscos*): New entry; use mh-sysv.
+
+Wed Jun 23 13:00:12 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* configure.in: Add comment.
+
+Mon Jun 14 14:28:55 1993  Jim Kingdon  (kingdon@eric)
+
+	* configure.in (m88k-*-sysvr4*): Use sysdep-norm.h.
+
+Sun Jun 13 13:04:09 1993  Jim Kingdon  (kingdon@cygnus.com)
+
+	* Makefile.in ({real,dist}clean): Remove sysdep.h.
+
+Thu Jun 10 11:22:41 1993  Jim Kingdon  (kingdon@cygnus.com)
+
+	* Makefile.in: Add mostlyclean, distclean, and realclean targets.
+
+Fri May 21 17:09:28 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+	* config/mh-isc: New file.
+	* configure.in: Use it.
+
+Sat Apr 17 00:40:12 1993  Jim Kingdon  (kingdon at calvin)
+
+	* readline.c, history.c: Don't include sys/types.h; sysdep.h does.
+
+	* config/mh-sysv: Define TIOCGWINSZ_BROKEN.
+	readline.c: Check it.
+
+Wed Mar 24 02:06:15 1993  david d `zoo' zuhn  (zoo at poseidon.cygnus.com)
+
+	* Makefile.in: add installcheck & dvi targets
+
+Fri Mar 12 18:36:53 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)
+
+	* configure.in: recognize *-*-solaris2* instead of *-*-solaris* (a
+	number of people want to call SunOS 4.1.2 "solaris1.0"
+	and get it right)
+
+Tue Mar  2 21:25:36 1993  Fred Fish  (fnf@cygnus.com)
+
+	* sysdep-sysv4.h:  New file for SVR4.
+	* configure.in (*-*-sysv4*):  Use sysdep-sysv4.h.
+
+	* configure.in (*-*-ultrix2):  Add triplet from Michael Rendell
+	(michael@mercury.cs.mun.ca)
+
+Tue Dec 15 12:38:16 1992  Ian Lance Taylor  (ian@cygnus.com)
+
+	* configure.in (i[34]86-*-sco3.2v4*): use mh-sco4.
+	* config/mh-sco4: New file, like mh-sco but without defining
+	_POSIX_SOURCE.
+
+Wed Nov 11 21:20:14 1992  John Gilmore  (gnu@cygnus.com)
+
+	* configure.in:  Reformat to one-case-per-line.
+	Handle SunOS 3.5, as per Karl Berry, <karl@claude.cs.umb.edu>.
+
+Wed Nov  4 15:32:31 1992  Stu Grossman  (grossman at cygnus.com)
+
+	* sysdep-norm.h:  Remove some crud, install dire warning.
+
+Thu Oct 22 01:08:13 1992  Stu Grossman  (grossman at cygnus.com)
+
+	* configure.in:  Make SCO work again...
+
+Mon Oct 12 15:04:07 1992  Ian Lance Taylor  (ian@cygnus.com)
+
+	* readline.c (init_terminal_io): if tgetent returns 0, the
+	terminal type is unknown.
+
+Thu Oct  1 23:44:14 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)
+
+	* configure.in: use cpu-vendor-os triple instead of nested cases
+
+Wed Sep 30 12:58:57 1992  Stu Grossman  (grossman at cygnus.com)
+
+	* readline.c (rl_complete_internal):  Cast alloca to (char *) to
+	avoid warning.
+
+Fri Sep 25 12:45:05 1992  Stu Grossman  (grossman at cygnus.com)
+
+	* readline.c (clear_to_eol, rl_generic_bind):  Make static.
+	(rl_digit_loop):  Add arg to call to rl_message().
+	* vi_mode.c (rl_vi_first_print):  Add arg to call to
+	rl_back_to_indent().
+
+Wed Aug 19 14:59:07 1992  Ian Lance Taylor  (ian@cygnus.com)
+
+	* Makefile.in: always create installation directories, use full
+	file name for install target.
+
+Wed Aug 12 15:50:57 1992  John Gilmore  (gnu@cygnus.com)
+
+	* readline.c (last_readline_init_file):  Fix typo made by Steve
+	Chamberlain/DJ Delorie.  Proper control file name is ~/.inputrc,
+	not ~/inputrc.
+
+Thu Jun 25 16:15:27 1992  Stu Grossman  (grossman at cygnus.com)
+
+	* configure.in:  Make bsd based systems use sysdep-obsd.h.
+
+Tue Jun 23 23:22:53 1992  Per Bothner  (bothner@cygnus.com)
+
+	* config/mh-posix:  New file, for Posix-compliant systems.
+	* configure.in:  Use mh-posix for Linux (free Unix clone).
+
+Tue Jun 23 21:59:20 1992  Fred Fish  (fnf@cygnus.com)
+
+	* sysdep-norm.h (alloca):  Protect against previous definition as
+	a macro with arguments.
+
+Fri Jun 19 15:48:54 1992  Stu Grossman  (grossman at cygnus.com)
+
+	* sysdep-obsd.h:  #include <sys/types.h> to make this more Kosher.
+
+Fri Jun 19 12:53:28 1992  John Gilmore  (gnu at cygnus.com)
+
+	* config/mh-apollo68v, mh-sco, mh-sysv, mh-sysv4}: RANLIB=true.
+
+Mon Jun 15 13:50:34 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)
+
+	* configure.in: use mh-sysv4 on solaris2
+
+Mon Jun 15 12:28:24 1992  Fred Fish  (fnf@cygnus.com)
+
+	* config/mh-ncr3000 (INSTALL):  Don't use /usr/ucb/install,
+	it is broken on ncr 3000's.
+	* config/mh-ncr3000 (RANLIB):  Use RANLIB=true.
+
+Mon Jun 15 01:35:55 1992  John Gilmore  (gnu at cygnus.com)
+
+	* readline.c: Make new SIGNALS_* macros to parameterize the 
+	ugly changes in signal blocking.  Use them throughout,
+	reducing #ifdef HAVE_POSIX_SIGNALS and HAVE_BSD_SIGNALS clutter
+	significantly.  Make all such places use POSIX if available,
+	to avoid losing with poor `sigsetmask' emulation from libiberty.
+
+Sun Jun 14 15:19:51 1992  Stu Grossman  (grossman at cygnus.com)
+
+	* readline.c (insert_some_chars):  Return void.
+
+Thu Jun 11 01:27:45 1992  John Gilmore  (gnu at cygnus.com)
+
+	* readline.c:  #undef PC, which Solaris2 defines in sys/types.h,
+	clobbering the termcap global variable PC.
+
+Tue Jun  9 17:30:23 1992  Fred Fish  (fnf@cygnus.com)
+
+	* config/{mh-ncr3000, mh-sysv4}:  Change INSTALL to use
+	/usr/ucb/install.
+
+Mon Jun  8 23:10:07 1992  Fred Fish  (fnf@cygnus.com)
+
+	* readline.h (rl_completer_quote_characters):  Add declaration.
+	* readline.c (rl_completer_quote_characters):  Add global var.
+	* readline.c (strpbrk):  Add prototype and function.
+	* readline.c (rl_complete_internal):  Add code to handle
+	expansion of quoted strings.
+
+Mon May 11 12:39:30 1992  John Gilmore  (gnu at cygnus.com)
+
+	* readline.c:  Can't initialize FILE *'s with stdin and stdout,
+	because they might not be constant.  Patch from Tom Quinn,
+	trq@dinoysos.thphys.ox.ac.uk.
+
+Tue Apr 28 21:52:34 1992  John Gilmore  (gnu at cygnus.com)
+
+	* readline.h:  Declare rl_event_hook (which already existed).
+	Suggested by Christoph Tietz <tietz@zi.gmd.dbp.de>.
+
+Wed Apr 22 18:08:01 1992  K. Richard Pixley  (rich@rtl.cygnus.com)
+
+	* configure.in: remove subdirs declaration.  The obsolete semantic
+	  for subdirs has been usurped by per's new meaning.
+
+Tue Apr 21 11:54:23 1992  K. Richard Pixley  (rich@cygnus.com)
+
+	* Makefile.in: rework CFLAGS so that they can be set on the
+	  command line to make.  Remove MINUS_G.  Default CFLAGS to -g.
+
+Fri Apr 10 23:02:27 1992  Fred Fish  (fnf@cygnus.com)
+
+	* configure.in:  Recognize new ncr3000 config.
+	* config/mh-ncr3000:  New NCR 3000 config file.
+
+Wed Mar 25 10:46:30 1992  John Gilmore  (gnu at cygnus.com)
+
+	* history.c (stifle_history):  Negative arg treated as zero.
+
+Tue Mar 24 23:46:20 1992  K. Richard Pixley  (rich@cygnus.com)
+
+	* config/mh-sysv: INSTALL_PROG -> INSTALL.
+
+Mon Feb 10 01:41:35 1992  Brian Fox  (bfox at gnuwest.fsf.org)
+
+	* history.c (history_do_write) Build a buffer of all of the lines
+	to write and write them in one fell swoop (lower overhead than
+	calling write () for each line).  Suggested by Peter Ho.
+
+	* vi_mode.c (rl_vi_subst) Don't forget to end the undo group.
+
+Sat Mar  7 00:15:36 1992  K. Richard Pixley  (rich@rtl.cygnus.com)
+
+	* Makefile.in: remove FIXME's on info and install-info targets.
+
+Fri Mar  6 22:02:04 1992  K. Richard Pixley  (rich@cygnus.com)
+
+	* Makefile.in: added check target.
+
+Wed Feb 26 18:04:40 1992  K. Richard Pixley  (rich@cygnus.com)
+
+	* Makefile.in, configure.in: removed traces of namesubdir,
+	  -subdirs, $(subdir), $(unsubdir), some rcs triggers.  Forced
+	  copyrights to '92, changed some from Cygnus to FSF.
+
+Fri Feb 21 14:37:32 1992  Steve Chamberlain  (sac at rtl.cygnus.com)
+
+	* readline.c, examples/fileman.c: patches from DJ to support DOS
+
+Thu Feb 20 23:23:16 1992  Stu Grossman  (grossman at cygnus.com)
+
+	* readline.c (rl_read_init_file):  Make sure that null filename is
+	not passed to open() or else we end up opening the directory, and
+	read a bunch of garbage into keymap[].
+
+Mon Feb 17 17:15:09 1992  Fred Fish  (fnf at cygnus.com)
+
+	* readline.c (readline_default_bindings):  Only make use of VLNEXT
+	when both VLNEXT and TERMIOS_TTY_DRIVER is defined.  On SVR4
+	<termio.h> includes <termios.h>, so VLNEXT is always defined.
+
+	* sysdep-norm.h (_POSIX_VERSION):  Define this for all SVR4
+	systems so that <termios.h> gets used, instead of <termio.h>.
+
+Fri Dec 20 12:04:31 1991  Fred Fish  (fnf at cygnus.com)
+
+	* configure.in:  Change svr4 references to sysv4.
+
+Tue Dec 10 04:07:20 1991  K. Richard Pixley  (rich at rtl.cygnus.com)
+
+	* Makefile.in: infodir belongs in datadir.
+
+Fri Dec  6 23:23:14 1991  K. Richard Pixley  (rich at rtl.cygnus.com)
+
+	* Makefile.in: remove spaces following hyphens, bsd make can't
+	  cope. added clean-info.  added standards.text support.  Don't
+	  know how to make info anymore.
+
+	* configure.in: commontargets is no longer a recognized hook, so
+	  remove it.  new subdir called doc.
+
+Thu Dec  5 22:46:10 1991  K. Richard Pixley  (rich at rtl.cygnus.com)
+
+	* Makefile.in: idestdir and ddestdir go away.  Added copyrights
+	  and shift gpl to v2.  Added ChangeLog if it didn't exist. docdir
+	  and mandir now keyed off datadir by default.
+
+Fri Nov 22 09:02:32 1991  John Gilmore  (gnu at cygnus.com)
+
+	* sysdep-obsd.h:  Rename from sysdep-newsos.h.
+	* configure.in:  Use sysdep-obsd for Mach as well as NEWs.
+
+	* sysdep-norm.h, sysdep-aix.h:  Add <sys/types.h>, which POSIX
+	requires to make <dirent.h> work.  Improve Sun alloca decl.
+
+Thu Nov 21 18:48:08 1991  John Gilmore  (gnu at cygnus.com)
+
+	* Makefile.in:  Clean up ../glob/tilde.c -> tilde.o path.
+	Clean up makefile a bit in general.
+
+Thu Nov 21 14:40:29 1991  Stu Grossman  (grossman at cygnus.com)
+
+	* configure.in, config/mh-svr4:  Make SVR4 work.
+
+	* readline.c:  Move config stuff to sysdep.h, use typedef dirent
+	consistently, remove refs to d_namlen (& D_NAMLEN) to improve
+	portability.  Also, update copyright notice.
+	readline.h:  remove config stuff that I added erroneously in the
+	first place.
+
+	* emacs_keymap.c, funmap.c, history.c, keymaps.c, vi_keymap.c,
+	vi_mode.c:  move config stuff to sysdep.h, update copyright notices.
+
+Tue Nov 19 15:02:13 1991  Stu Grossman  (grossman at cygnus.com)
+
+	* history.c:  #include "sysdep.h".
+
+Tue Nov 19 10:49:17 1991  Fred Fish  (fnf at cygnus.com)
+
+	* Makefile.in, config/hm-sysv, config/hm-sco:  Change SYSV to
+	USG to match current usage.
+
+	* readline.c:  Add USGr4 to list of defined things to check for
+	to use <dirent.h> style directory access.
+
+	* config/hm-svr4:  New file for System V Release 4 (USGr4).
+
+Mon Nov 18 23:59:52 1991  Stu Grossman  (grossman at cygnus.com)
+
+	* readline.c (filename_completion_function):  use struct dirent
+	instead	of struct direct.
+
+Fri Nov  1 07:02:13 1991  Brian Fox  (bfox at gnuwest.fsf.org)
+
+	* readline.c (rl_translate_keyseq) Make C-? translate to RUBOUT
+	unconditionally.
+
+Mon Oct 28 11:34:52 1991  Brian Fox  (bfox at gnuwest.fsf.org)
+
+	* readline.c; Use Posix directory routines and macros.
+
+	* funmap.c; Add entry for call-last-kbd-macro.
+
+	* readline.c (rl_prep_term); Use system EOF character on POSIX
+	systems also.
+
+Thu Oct  3 16:19:53 1991  Brian Fox  (bfox at gnuwest.fsf.org)
+
+	* readline.c; Make a distinction between having a TERMIOS tty
+	driver, and having POSIX signal handling.  You might one without
+	the other.  New defines used HAVE_POSIX_SIGNALS, and
+	TERMIOS_TTY_DRIVER.
+
+Tue Jul 30 22:37:26 1991  Brian Fox  (bfox at gnuwest.fsf.org)
+
+	* readline.c: rl_getc () If a call to read () returns without an
+	error, but with zero characters, the file is empty, so return EOF.
+
+Thu Jul 11 20:58:38 1991  Brian Fox  (bfox at gnuwest.fsf.org)
+
+	* readline.c: (rl_get_next_history, rl_get_previous_history)
+	Reallocate the buffer space if the line being moved to is longer
+	the the current space allocated.  Amazing that no one has found
+	this bug until now.
+
+Sun Jul  7 02:37:05 1991  Brian Fox  (bfox at gnuwest.fsf.org)
+
+	* readline.c:(rl_parse_and_bind) Allow leading whitespace.
+	  Make sure TERMIO and TERMIOS systems treat CR and NL
+	  disctinctly.
+	
+Tue Jun 25 04:09:27 1991  Brian Fox  (bfox at gnuwest.fsf.org)
+
+	* readline.c: Rework parsing conditionals to pay attention to the
+	prior states of the conditional stack.  This makes $if statements
+	work correctly.
+
+Mon Jun 24 20:45:59 1991  Brian Fox  (bfox at gnuwest.fsf.org)
+
+	* readline.c: support for displaying key binding information
+	includes the functions rl_list_funmap_names (),
+	invoking_keyseqs_in_map (), rl_invoking_keyseqs (),
+	rl_dump_functions (), and rl_function_dumper ().
+
+	funmap.c: support for same includes rl_funmap_names ().
+
+	readline.c, funmap.c: no longer define STATIC_MALLOC.  However,
+	update both version of xrealloc () to handle a null pointer.
+
+Thu Apr 25 12:03:49 1991  Brian Fox  (bfox at gnuwest.fsf.org)
+
+	* vi_mode.c (rl_vi_fword, fWord, etc.  All functions use
+	the macro `isident()'.  Fixed movement bug which prevents
+	continious movement through the text.
+
+Fri Jul 27 16:47:01 1990  Brian Fox  (bfox at gnuwest.fsf.org)
+
+	* readline.c (parser_if) Allow "$if term=foo" construct.
+
+Wed May 23 16:10:33 1990  Brian Fox  (bfox at gnuwest.fsf.org)
+
+	* readline.c (rl_dispatch) Correctly remember the last command
+	executed.  Fixed typo in username_completion_function ().
+
+Mon Apr  9 19:55:48 1990  Brian Fox  (bfox at gnuwest.fsf.org)
+
+	* readline.c: username_completion_function (); For text passed in
+	with a leading `~', remember that this could be a filename (after
+	it is completed).
+
+Thu Apr  5 13:44:24 1990  Brian Fox  (bfox at gnuwest.fsf.org)
+
+	* readline.c: rl_search_history (): Correctly handle case of an
+	unfound search string, but a graceful exit (as with ESC).
+
+	* readline.c: rl_restart_output ();  The Apollo passes the address
+	of the file descriptor to TIOCSTART, not the descriptor itself.
+
+Tue Mar 20 05:38:55 1990  Brian Fox  (bfox at gnuwest.fsf.org)
+
+	* readline.c: rl_complete (); second call in a row causes possible
+	completions to be listed.
+
+	* readline.c: rl_redisplay (), added prompt_this_line variable
+	which is the first character character following \n in prompt.
+
+Sun Mar 11 04:32:03 1990  Brian Fox  (bfox at gnuwest.fsf.org)
+
+	* Signals are now supposedly handled inside of SYSV compilation.
+
+Wed Jan 17 19:24:09 1990  Brian Fox  (bfox at sbphy.ucsb.edu)
+
+	* history.c: history_expand (); fixed overwriting memory error,
+	added needed argument to call to get_history_event ().
+
+Thu Jan 11 10:54:04 1990  Brian Fox  (bfox at sbphy.ucsb.edu)
+
+	* readline.c: added mark_modified_lines to control the
+	display of an asterisk on modified history lines.  Also
+	added a user variable called mark-modified-lines to the
+	`set' command.
+
+Thu Jan  4 10:38:05 1990  Brian Fox  (bfox at sbphy.ucsb.edu)
+
+	* readline.c: start_insert ().  Only use IC if we don't have an im
+	capability.
+
+Fri Sep  8 09:00:45 1989  Brian Fox  (bfox at aurel)
+
+	* readline.c: rl_prep_terminal ().  Only turn on 8th bit
+	  as meta-bit iff the terminal is not using parity.
+
+Sun Sep  3 08:57:40 1989  Brian Fox  (bfox at aurel)
+
+	* readline.c: start_insert ().  Uses multiple
+	  insertion call in cases where that makes sense.
+
+	  rl_insert ().  Read type-ahead buffer for additional
+	  keys that are bound to rl_insert, and insert them
+	  all at once.  Make insertion of single keys given
+	  with an argument much more efficient.
+
+Tue Aug  8 18:13:57 1989  Brian Fox  (bfox at aurel)
+
+	* readline.c: Changed handling of EOF.  readline () returns
+	 (char *)EOF or consed string.  The EOF character is read from the
+	 tty, or if the tty doesn't have one, defaults to C-d.
+
+	* readline.c: Added support for event driven programs.
+	  rl_event_hook is the address of a function you want called
+	  while Readline is waiting for input.
+
+	* readline.c: Cleanup time.  Functions without type declarations
+	  do not use return with a value.
+
+	* history.c: history_expand () has new variable which is the
+	  characters to ignore immediately following history_expansion_char.
+
+Sun Jul 16 08:14:00 1989  Brian Fox  (bfox at aurel)
+
+	* rl_prep_terminal ()
+	  BSD version turns off C-s, C-q, C-y, C-v.
+
+	* readline.c -- rl_prep_terminal ()
+	  SYSV version hacks readline_echoing_p.
+	  BSD version turns on passing of the 8th bit for the duration
+	  of reading the line.
+
+Tue Jul 11 06:25:01 1989  Brian Fox  (bfox at aurel)
+
+	* readline.c: new variable rl_tilde_expander.
+	  If non-null, this contains the address of a function to call if
+	  the standard meaning for expanding a tilde fails.  The function is
+	  called with the text sans tilde (as in "foo"), and returns a
+	  malloc()'ed string which is the expansion, or a NULL pointer if
+	  there is no expansion. 
+
+	* readline.h - new file chardefs.h
+	  Separates things that only readline.c needs from the standard
+	  header file publishing interesting things about readline.
+
+	* readline.c:
+	  readline_default_bindings () now looks at terminal chararacters
+	  and binds those as well.
+
+Wed Jun 28 20:20:51 1989  Brian Fox  (bfox at aurel)
+
+	* Made readline and history into independent libraries.
+
