* readline.c (_rl_output_character_function), display.c:
authorPer Bothner <per@bothner.com>
Tue, 15 Feb 1994 22:31:19 +0000 (22:31 +0000)
committerPer Bothner <per@bothner.com>
Tue, 15 Feb 1994 22:31:19 +0000 (22:31 +0000)
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.

readline/ChangeLog
readline/chardefs.h
readline/display.c
readline/readline.c
readline/rldefs.h

index 3a6530d..cdd32d2 100644 (file)
@@ -1,3 +1,14 @@
+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
index f7df250..06dbd9f 100644 (file)
@@ -4,37 +4,9 @@
 
 #include <ctype.h>
 
-#if 0
-/* Getting the correct definition of HAVE_STRING_H is harder than just
-   declaring them ourselves.  CYGNUS LOCAL.  */
-#if defined (HAVE_STRING_H)
-#  include <string.h>
-#else
-#  include <strings.h>
-#endif /* HAVE_STRING_H */
-#else /* not 0 */
-/* We don't worry about declaring functions where we don't use the return
-   value (e.g. strcpy) or which return int.  */
-extern char *strrchr ();
-#endif /* not 0 */
-
 #ifndef savestring
-#if 0
-
-/* CYGNUS LOCAL--this declaration loses if xmalloc has already been
-   declared as void *xmalloc (), as in GDB.  The whole concept of
-   readline using xmalloc rather than just returning NULL when it runs
-   out of memory is questionable, but if we do want xmalloc we need a
-   better way to declare it (e.g. the client declares it, or the client
-   calls a rl_register_xmalloc function analagous to the way signal()
-   works.  */
-
-extern char *xmalloc ();
-#endif
-#  ifndef strcpy
-extern char *strcpy ();
-#  endif
-#define savestring(x) strcpy (xmalloc (1 + strlen (x)), (x))
+#define savestring(X) _rl_savestring(X)
+extern char * _rl_savestring ();
 #endif
 
 #ifndef whitespace
index c889318..c627629 100644 (file)
@@ -41,10 +41,10 @@ extern int readline_echoing_p;
 extern char *term_clreol, *term_im, *term_ic,  *term_ei, *term_DC;
 /* Termcap variables. */
 extern char *term_up, *term_dc, *term_cr, *term_IC;
-extern int screenheight, screenwidth, terminal_can_insert;
+extern int screenheight, screenwidth, terminal_can_insert, term_xn;
 
 extern void _rl_output_some_chars ();
-extern void _rl_output_character_function ();
+extern int _rl_output_character_function ();
 
 extern int _rl_convert_meta_chars_to_ascii;
 extern int _rl_horizontal_scroll_mode;
@@ -75,11 +75,7 @@ extern char *xmalloc (), *xrealloc ();
 
    update_line and the code that calls it makes a multiple line,
    automatically wrapping line update.  Carefull attention needs
-   to be paid to the vertical position variables.
-
-   handling of terminals with autowrap on (incl. DEC braindamage)
-   could be improved a bit.  Right now I just cheat and decrement
-   screenwidth by one. */
+   to be paid to the vertical position variables. */
 
 /* Keep two buffers; one which reflects the current contents of the
    screen, and the other to draw what we think the new contents should
@@ -240,7 +236,7 @@ rl_redisplay ()
 
   /* PWP: now is when things get a bit hairy.  The visible and invisible
      line buffers are really multiple lines, which would wrap every
-     (screenwidth - 1) characters.  Go through each in turn, finding
+     screenwidth characters.  Go through each in turn, finding
      the changed region and updating it.  The line order is top to bottom. */
 
   /* If we can move the cursor up and down, then use multiple lines,
@@ -363,6 +359,15 @@ update_line (old, new, current_line)
   register char *ofd, *ols, *oe, *nfd, *nls, *ne;
   int lendiff, wsatend;
 
+  if (_rl_last_c_pos == screenwidth && term_xn && new[0])
+    {
+      putc (new[0], rl_outstream);
+      _rl_last_c_pos = 1;
+      _rl_last_v_pos++;
+      if (old[0])
+       old[0] = new[0];
+    }
+
   /* Find first difference. */
   for (ofd = old, nfd = new;
        (ofd - old < screenwidth) && *ofd && (*ofd == *nfd);
index 00af9d6..c8b19e3 100644 (file)
@@ -88,7 +88,7 @@ extern int rl_complete_with_tilde_expansion;
 /* Forward declarations used in this file. */
 void rl_dispatch ();
 void free_history_entry ();
-void _rl_output_character_function ();
+int _rl_output_character_function ();
 void _rl_set_screen_size ();
 
 #if !defined (_GO32_)
@@ -224,6 +224,8 @@ static int defining_kbd_macro = 0;
    emacs_meta_keymap or vi_escape_keymap. */
 int _rl_convert_meta_chars_to_ascii = 1;
 
+/* Non-zero tells rl_delete_text and rl_insert_text to not add to
+   the undo list. */
 static int doing_an_undo;
 \f
 /* **************************************************************** */
@@ -1235,7 +1237,7 @@ init_terminal_io (terminal_name)
 
   screenwidth = screenheight = 0;
 
-  term_xn = tgetflag ("am", &buffer) && tgetflag ("xn", &buffer);
+  term_xn = tgetflag ("am") && tgetflag ("xn");
 
   _rl_set_screen_size (tty, 0);
 
@@ -1319,11 +1321,11 @@ init_terminal_io (terminal_name)
 }
 
 /* A function for the use of tputs () */
-void
+int
 _rl_output_character_function (c)
      int c;
 {
-  putc (c, out_stream);
+  return putc (c, out_stream);
 }
 
 /* Write COUNT characters from STRING to the output stream. */
@@ -2277,10 +2279,6 @@ rl_transpose_chars (count)
 /*                                                                 */
 /* **************************************************************** */
 
-/* Non-zero tells rl_delete_text and rl_insert_text to not add to
-   the undo list. */
-static int doing_an_undo = 0;
-
 /* The current undo list for THE_LINE. */
 UNDO_LIST *rl_undo_list = (UNDO_LIST *)NULL;
 
@@ -3063,6 +3061,15 @@ rl_getc (stream)
     }
 }
 
+char *
+_rl_savestring (str)
+     char *str;
+{
+  char *copy = (char*) xmalloc (strlen (str) + 1);
+  strcpy (copy, str);
+  return copy;
+}
+
 #if defined (STATIC_MALLOC)
 \f
 /* **************************************************************** */
index 83411bc..cdda2b8 100644 (file)
 #endif /* __linux__ */
 
 /* Some USG machines have BSD signal handling (sigblock, sigsetmask, etc.) */
-#if defined (USG) && !defined (hpux)
+/* CYGNUS LOCAL accept __hpux as well as hpux for HP compiler in ANSI mode.  */
+#if defined (USG) && !(defined (hpux) || defined (__hpux))
 #  undef HAVE_BSD_SIGNALS
 #endif
 
 /* System V machines use termio. */
 #if !defined (_POSIX_VERSION)
-#  if defined (USG) || defined (hpux) || defined (Xenix) || defined (sgi) || defined (DGUX)
+/* CYGNUS LOCAL accept __hpux as well as hpux for HP compiler in ANSI mode.  */
+#  if defined (USG) || defined (hpux) || defined (__hpux) || defined (Xenix) || defined (sgi) || defined (DGUX)
 #    undef NEW_TTY_DRIVER
 #    define TERMIO_TTY_DRIVER
 #    include <termio.h>
 #define S_ISDIR(m) (((m)&S_IFMT) == S_IFDIR)
 #endif
 
-/* Decide which flavor of the header file describing the C library
-   string functions to include and include it. */
-
-#if defined (USG) || defined (NeXT)
-#  if !defined (HAVE_STRING_H)
-#    define HAVE_STRING_H
-#  endif /* !HAVE_STRING_H */
-#endif /* USG || NeXT */
-
-#if defined (HAVE_STRING_H)
-#  include <string.h>
-#else /* !HAVE_STRING_H */
-#  include <strings.h>
-#endif /* !HAVE_STRING_H */
-
 #if !defined (strchr) && !defined (__STDC__)
 extern char *strchr (), *strrchr ();
 #endif /* !strchr && !__STDC__ */