Diff for /embedaddon/readline/rltty.c between versions 1.1.1.1 and 1.1.1.2

version 1.1.1.1, 2014/07/30 08:16:45 version 1.1.1.2, 2021/03/17 01:01:01
Line 1 Line 1
 /* rltty.c -- functions to prepare and restore the terminal for readline's  /* rltty.c -- functions to prepare and restore the terminal for readline's
    use. */     use. */
   
/* Copyright (C) 1992-2005 Free Software Foundation, Inc./* Copyright (C) 1992-2017 Free Software Foundation, Inc.
   
    This file is part of the GNU Readline Library (Readline), a library     This file is part of the GNU Readline Library (Readline), a library
   for reading lines of text with interactive input and history editing.         for reading lines of text with interactive input and history editing.
   
    Readline is free software: you can redistribute it and/or modify     Readline is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by     it under the terms of the GNU General Public License as published by
Line 37 Line 37
   
 #include "rldefs.h"  #include "rldefs.h"
   
 #if defined (GWINSZ_IN_SYS_IOCTL)  
 #  include <sys/ioctl.h>  
 #endif /* GWINSZ_IN_SYS_IOCTL */  
   
 #include "rltty.h"  #include "rltty.h"
   #if defined (HAVE_SYS_IOCTL_H)
   #  include <sys/ioctl.h>                /* include for declaration of ioctl */
   #endif
   
 #include "readline.h"  #include "readline.h"
 #include "rlprivate.h"  #include "rlprivate.h"
   
Line 60  static void set_winsize PARAMS((int)); Line 60  static void set_winsize PARAMS((int));
 /*                                                                  */  /*                                                                  */
 /* **************************************************************** */  /* **************************************************************** */
   
/* Non-zero means that the terminal is in a prepped state. *//* Non-zero means that the terminal is in a prepped state.  There are several
    flags that are OR'd in to denote whether or not we have sent various
    init strings to the terminal. */
 #define TPX_PREPPED     0x01
 #define TPX_BRACKPASTE  0x02
 #define TPX_METAKEY     0x04
 
 static int terminal_prepped;  static int terminal_prepped;
   
 static _RL_TTY_CHARS _rl_tty_chars, _rl_last_tty_chars;  static _RL_TTY_CHARS _rl_tty_chars, _rl_last_tty_chars;
Line 124  static void prepare_terminal_settings PARAMS((int, TIO Line 130  static void prepare_terminal_settings PARAMS((int, TIO
 static void set_special_char PARAMS((Keymap, TIOTYPE *, int, rl_command_func_t *));  static void set_special_char PARAMS((Keymap, TIOTYPE *, int, rl_command_func_t *));
   
 static void  static void
save_tty_chars (tiop)save_tty_chars (TIOTYPE *tiop)
     TIOTYPE *tiop; 
 {  {
   _rl_last_tty_chars = _rl_tty_chars;    _rl_last_tty_chars = _rl_tty_chars;
   
Line 162  save_tty_chars (tiop) Line 167  save_tty_chars (tiop)
 }  }
   
 static int  static int
get_tty_settings (tty, tiop)get_tty_settings (int tty, TIOTYPE *tiop)
     int tty; 
     TIOTYPE *tiop; 
 {  {
   set_winsize (tty);    set_winsize (tty);
   
Line 194  get_tty_settings (tty, tiop) Line 197  get_tty_settings (tty, tiop)
 }  }
   
 static int  static int
set_tty_settings (tty, tiop)set_tty_settings (int tty, TIOTYPE *tiop)
     int tty; 
     TIOTYPE *tiop; 
 {  {
   if (tiop->flags & SGTTY_SET)    if (tiop->flags & SGTTY_SET)
     {      {
Line 233  set_tty_settings (tty, tiop) Line 234  set_tty_settings (tty, tiop)
 }  }
   
 static void  static void
prepare_terminal_settings (meta_flag, oldtio, tiop)prepare_terminal_settings (int meta_flag, TIOTYPE oldtio, TIOTYPE *tiop)
     int meta_flag; 
     TIOTYPE oldtio, *tiop; 
 {  {
   _rl_echoing_p = (oldtio.sgttyb.sg_flags & ECHO);    _rl_echoing_p = (oldtio.sgttyb.sg_flags & ECHO);
   _rl_echoctl = (oldtio.sgttyb.sg_flags & ECHOCTL);    _rl_echoctl = (oldtio.sgttyb.sg_flags & ECHOCTL);
Line 351  static void _rl_bind_tty_special_chars PARAMS((Keymap, Line 350  static void _rl_bind_tty_special_chars PARAMS((Keymap,
 #endif  #endif
   
 static void  static void
save_tty_chars (tiop)save_tty_chars (TIOTYPE *tiop)
     TIOTYPE *tiop; 
 {  {
   _rl_last_tty_chars = _rl_tty_chars;    _rl_last_tty_chars = _rl_tty_chars;
   
Line 397  save_tty_chars (tiop) Line 395  save_tty_chars (tiop)
 #if defined (_AIX) || defined (_AIX41)  #if defined (_AIX) || defined (_AIX41)
 /* Currently this is only used on AIX */  /* Currently this is only used on AIX */
 static void  static void
rltty_warning (msg)rltty_warning (char *msg)
     char *msg; 
 {  {
   _rl_errmsg ("warning: %s", msg);    _rl_errmsg ("warning: %s", msg);
 }  }
Line 406  rltty_warning (msg) Line 403  rltty_warning (msg)
   
 #if defined (_AIX)  #if defined (_AIX)
 void  void
setopost(tp)setopost (TIOTYPE *tp)
TIOTYPE *tp; 
 {  {
   if ((tp->c_oflag & OPOST) == 0)    if ((tp->c_oflag & OPOST) == 0)
     {      {
Line 418  TIOTYPE *tp; Line 414  TIOTYPE *tp;
 #endif  #endif
   
 static int  static int
_get_tty_settings (tty, tiop)_get_tty_settings (int tty, TIOTYPE *tiop)
     int tty; 
     TIOTYPE *tiop; 
 {  {
   int ioctl_ret;    int ioctl_ret;
   
Line 451  _get_tty_settings (tty, tiop) Line 445  _get_tty_settings (tty, tiop)
 }  }
   
 static int  static int
get_tty_settings (tty, tiop)get_tty_settings (int tty, TIOTYPE *tiop)
     int tty; 
     TIOTYPE *tiop; 
 {  {
   set_winsize (tty);    set_winsize (tty);
   
Line 469  get_tty_settings (tty, tiop) Line 461  get_tty_settings (tty, tiop)
 }  }
   
 static int  static int
_set_tty_settings (tty, tiop)_set_tty_settings (int tty, TIOTYPE *tiop)
     int tty; 
     TIOTYPE *tiop; 
 {  {
   while (SETATTR (tty, tiop) < 0)    while (SETATTR (tty, tiop) < 0)
     {      {
Line 483  _set_tty_settings (tty, tiop) Line 473  _set_tty_settings (tty, tiop)
 }  }
   
 static int  static int
set_tty_settings (tty, tiop)set_tty_settings (int tty, TIOTYPE *tiop)
     int tty; 
     TIOTYPE *tiop; 
 {  {
   if (_set_tty_settings (tty, tiop) < 0)    if (_set_tty_settings (tty, tiop) < 0)
     return -1;      return -1;
Line 512  set_tty_settings (tty, tiop) Line 500  set_tty_settings (tty, tiop)
 }  }
   
 static void  static void
prepare_terminal_settings (meta_flag, oldtio, tiop)prepare_terminal_settings (int meta_flag, TIOTYPE oldtio, TIOTYPE *tiop)
     int meta_flag; 
     TIOTYPE oldtio, *tiop; 
 {  {
     int sc;
     Keymap kmap;
   
   _rl_echoing_p = (oldtio.c_lflag & ECHO);    _rl_echoing_p = (oldtio.c_lflag & ECHO);
 #if defined (ECHOCTL)  #if defined (ECHOCTL)
   _rl_echoctl = (oldtio.c_lflag & ECHOCTL);    _rl_echoctl = (oldtio.c_lflag & ECHOCTL);
Line 572  prepare_terminal_settings (meta_flag, oldtio, tiop) Line 561  prepare_terminal_settings (meta_flag, oldtio, tiop)
   tiop->c_cc[VDSUSP] = _POSIX_VDISABLE;    tiop->c_cc[VDSUSP] = _POSIX_VDISABLE;
 #endif  #endif
   
     /* Conditionally disable some other tty special characters if there is a
        key binding for them in the current keymap.  Readline ordinarily doesn't
        bind these characters, but an application or user might. */
   #if defined (VI_MODE)
         kmap = (rl_editing_mode == vi_mode) ? vi_insertion_keymap : _rl_keymap;
   #else
         kmap = _rl_keymap;
   #endif
   #if defined (VDISCARD)
     sc = tiop->c_cc[VDISCARD];
     if (sc != _POSIX_VDISABLE && kmap[(unsigned char)sc].type == ISFUNC)
       tiop->c_cc[VDISCARD] = _POSIX_VDISABLE;
   #endif /* VDISCARD */
   
 #endif /* TERMIOS_TTY_DRIVER && _POSIX_VDISABLE */  #endif /* TERMIOS_TTY_DRIVER && _POSIX_VDISABLE */
 }  }
 #endif  /* !NEW_TTY_DRIVER */  #endif  /* !NEW_TTY_DRIVER */
Line 579  prepare_terminal_settings (meta_flag, oldtio, tiop) Line 582  prepare_terminal_settings (meta_flag, oldtio, tiop)
 /* Put the terminal in CBREAK mode so that we can detect key presses. */  /* Put the terminal in CBREAK mode so that we can detect key presses. */
 #if defined (NO_TTY_DRIVER)  #if defined (NO_TTY_DRIVER)
 void  void
rl_prep_terminal (meta_flag)rl_prep_terminal (int meta_flag)
     int meta_flag; 
 {  {
   _rl_echoing_p = 1;    _rl_echoing_p = 1;
 }  }
   
 void  void
rl_deprep_terminal ()rl_deprep_terminal (void)
 {  {
 }  }
   
 #else /* ! NO_TTY_DRIVER */  #else /* ! NO_TTY_DRIVER */
 void  void
rl_prep_terminal (meta_flag)rl_prep_terminal (int meta_flag)
     int meta_flag; 
 {  {
  int tty;  int tty, nprep;
   TIOTYPE tio;    TIOTYPE tio;
   
   if (terminal_prepped)    if (terminal_prepped)
Line 642  rl_prep_terminal (meta_flag) Line 643  rl_prep_terminal (meta_flag)
       /* If editing in vi mode, make sure we set the bindings in the        /* If editing in vi mode, make sure we set the bindings in the
          insertion keymap no matter what keymap we ended up in. */           insertion keymap no matter what keymap we ended up in. */
       if (rl_editing_mode == vi_mode)        if (rl_editing_mode == vi_mode)
        _rl_bind_tty_special_chars (vi_insertion_keymap, tio);          _rl_bind_tty_special_chars (vi_insertion_keymap, tio);
       else        else
 #endif  #endif
         _rl_bind_tty_special_chars (_rl_keymap, tio);          _rl_bind_tty_special_chars (_rl_keymap, tio);
Line 659  rl_prep_terminal (meta_flag) Line 660  rl_prep_terminal (meta_flag)
   if (_rl_enable_keypad)    if (_rl_enable_keypad)
     _rl_control_keypad (1);      _rl_control_keypad (1);
   
     nprep = TPX_PREPPED;
   
     if (_rl_enable_bracketed_paste)
       {
         fprintf (rl_outstream, BRACK_PASTE_INIT);
         nprep |= TPX_BRACKPASTE;
       }
   
   fflush (rl_outstream);    fflush (rl_outstream);
  terminal_prepped = 1;  terminal_prepped = nprep;
   RL_SETSTATE(RL_STATE_TERMPREPPED);    RL_SETSTATE(RL_STATE_TERMPREPPED);
   
   _rl_release_sigint ();    _rl_release_sigint ();
Line 668  rl_prep_terminal (meta_flag) Line 677  rl_prep_terminal (meta_flag)
   
 /* Restore the terminal's normal settings and modes. */  /* Restore the terminal's normal settings and modes. */
 void  void
rl_deprep_terminal ()rl_deprep_terminal (void)
 {  {
   int tty;    int tty;
   
  if (!terminal_prepped)  if (terminal_prepped == 0)
     return;      return;
   
   /* Try to keep this function from being interrupted. */    /* Try to keep this function from being interrupted. */
Line 680  rl_deprep_terminal () Line 689  rl_deprep_terminal ()
   
   tty = rl_instream ? fileno (rl_instream) : fileno (stdin);    tty = rl_instream ? fileno (rl_instream) : fileno (stdin);
   
     if (terminal_prepped & TPX_BRACKPASTE)
       {
         fprintf (rl_outstream, BRACK_PASTE_FINI);
         if (_rl_eof_found)
           fprintf (rl_outstream, "\n");
       }
   
   if (_rl_enable_keypad)    if (_rl_enable_keypad)
     _rl_control_keypad (0);      _rl_control_keypad (0);
   
Line 697  rl_deprep_terminal () Line 713  rl_deprep_terminal ()
   _rl_release_sigint ();    _rl_release_sigint ();
 }  }
 #endif /* !NO_TTY_DRIVER */  #endif /* !NO_TTY_DRIVER */
   
   /* Set readline's idea of whether or not it is echoing output to the terminal,
      returning the old value. */
   int
   rl_tty_set_echoing (int u)
   {
     int o;
   
     o = _rl_echoing_p;
     _rl_echoing_p = u;
     return o;
   }
   
 /* **************************************************************** */  /* **************************************************************** */
 /*                                                                  */  /*                                                                  */
Line 705  rl_deprep_terminal () Line 733  rl_deprep_terminal ()
 /* **************************************************************** */  /* **************************************************************** */
   
 int  int
rl_restart_output (count, key)rl_restart_output (int count, int key)
     int count, key; 
 {  {
 #if defined (__MINGW32__)  #if defined (__MINGW32__)
   return 0;    return 0;
Line 743  rl_restart_output (count, key) Line 770  rl_restart_output (count, key)
 }  }
   
 int  int
rl_stop_output (count, key)rl_stop_output (int count, int key)
     int count, key; 
 {  {
 #if defined (__MINGW32__)  #if defined (__MINGW32__)
   return 0;    return 0;
Line 792  rl_stop_output (count, key) Line 818  rl_stop_output (count, key)
   
 #elif defined (NEW_TTY_DRIVER)  #elif defined (NEW_TTY_DRIVER)
 static void  static void
set_special_char (kmap, tiop, sc, func)set_special_char (Keymap kmap, TIOTYPE *tiop, int sc, rl_command_func_t *func)
     Keymap kmap; 
     TIOTYPE *tiop; 
     int sc; 
     rl_command_func_t *func; 
 {  {
   if (sc != -1 && kmap[(unsigned char)sc].type == ISFUNC)    if (sc != -1 && kmap[(unsigned char)sc].type == ISFUNC)
     kmap[(unsigned char)sc].function = func;      kmap[(unsigned char)sc].function = func;
Line 807  set_special_char (kmap, tiop, sc, func) Line 829  set_special_char (kmap, tiop, sc, func)
     kmap[(unsigned char)c].function = rl_insert;      kmap[(unsigned char)c].function = rl_insert;
   
 static void  static void
_rl_bind_tty_special_chars (kmap, ttybuff)_rl_bind_tty_special_chars (Keymap kmap, TIOTYPE ttybuff)
     Keymap kmap; 
     TIOTYPE ttybuff; 
 {  {
   if (ttybuff.flags & SGTTY_SET)    if (ttybuff.flags & SGTTY_SET)
     {      {
Line 828  _rl_bind_tty_special_chars (kmap, ttybuff) Line 848  _rl_bind_tty_special_chars (kmap, ttybuff)
   
 #else /* !NEW_TTY_DRIVER */  #else /* !NEW_TTY_DRIVER */
 static void  static void
set_special_char (kmap, tiop, sc, func)set_special_char (Keymap kmap, TIOTYPE *tiop, int sc, rl_command_func_t *func)
     Keymap kmap; 
     TIOTYPE *tiop; 
     int sc; 
     rl_command_func_t *func; 
 {  {
   unsigned char uc;    unsigned char uc;
   
Line 847  set_special_char (kmap, tiop, sc, func) Line 863  set_special_char (kmap, tiop, sc, func)
     kmap[uc].function = rl_insert;      kmap[uc].function = rl_insert;
   
 static void  static void
_rl_bind_tty_special_chars (kmap, ttybuff)_rl_bind_tty_special_chars (Keymap kmap, TIOTYPE ttybuff)
     Keymap kmap; 
     TIOTYPE ttybuff; 
 {  {
   SET_SPECIAL (VERASE, rl_rubout);    SET_SPECIAL (VERASE, rl_rubout);
   SET_SPECIAL (VKILL, rl_unix_line_discard);    SET_SPECIAL (VKILL, rl_unix_line_discard);
Line 859  _rl_bind_tty_special_chars (kmap, ttybuff) Line 873  _rl_bind_tty_special_chars (kmap, ttybuff)
 #  endif /* VLNEXT && TERMIOS_TTY_DRIVER */  #  endif /* VLNEXT && TERMIOS_TTY_DRIVER */
   
 #  if defined (VWERASE) && defined (TERMIOS_TTY_DRIVER)  #  if defined (VWERASE) && defined (TERMIOS_TTY_DRIVER)
   #    if defined (VI_MODE)
     if (rl_editing_mode == vi_mode)
       SET_SPECIAL (VWERASE, rl_vi_unix_word_rubout);
     else
   #    endif
   SET_SPECIAL (VWERASE, rl_unix_word_rubout);    SET_SPECIAL (VWERASE, rl_unix_word_rubout);
 #  endif /* VWERASE && TERMIOS_TTY_DRIVER */  #  endif /* VWERASE && TERMIOS_TTY_DRIVER */
 }  }
Line 868  _rl_bind_tty_special_chars (kmap, ttybuff) Line 887  _rl_bind_tty_special_chars (kmap, ttybuff)
 /* Set the system's default editing characters to their readline equivalents  /* Set the system's default editing characters to their readline equivalents
    in KMAP.  Should be static, now that we have rl_tty_set_default_bindings. */     in KMAP.  Should be static, now that we have rl_tty_set_default_bindings. */
 void  void
rltty_set_default_bindings (kmap)rltty_set_default_bindings (Keymap kmap)
     Keymap kmap; 
 {  {
 #if !defined (NO_TTY_DRIVER)  #if !defined (NO_TTY_DRIVER)
   TIOTYPE ttybuff;    TIOTYPE ttybuff;
Line 885  rltty_set_default_bindings (kmap) Line 903  rltty_set_default_bindings (kmap)
 /* New public way to set the system default editing chars to their readline  /* New public way to set the system default editing chars to their readline
    equivalents. */     equivalents. */
 void  void
rl_tty_set_default_bindings (kmap)rl_tty_set_default_bindings (Keymap kmap)
     Keymap kmap; 
 {  {
   rltty_set_default_bindings (kmap);    rltty_set_default_bindings (kmap);
 }  }
Line 896  rl_tty_set_default_bindings (kmap) Line 913  rl_tty_set_default_bindings (kmap)
    chars with save_tty_chars().  This only works on POSIX termios or termio     chars with save_tty_chars().  This only works on POSIX termios or termio
    systems. */     systems. */
 void  void
rl_tty_unset_default_bindings (kmap)rl_tty_unset_default_bindings (Keymap kmap)
     Keymap kmap; 
 {  {
   /* Don't bother before we've saved the tty special chars at least once. */    /* Don't bother before we've saved the tty special chars at least once. */
   if (RL_ISSTATE(RL_STATE_TTYCSAVED) == 0)    if (RL_ISSTATE(RL_STATE_TTYCSAVED) == 0)
Line 919  rl_tty_unset_default_bindings (kmap) Line 935  rl_tty_unset_default_bindings (kmap)
   
 #if defined (NEW_TTY_DRIVER) || defined (NO_TTY_DRIVER)  #if defined (NEW_TTY_DRIVER) || defined (NO_TTY_DRIVER)
 int  int
_rl_disable_tty_signals ()_rl_disable_tty_signals (void)
 {  {
   return 0;    return 0;
 }  }
   
 int  int
_rl_restore_tty_signals ()_rl_restore_tty_signals (void)
 {  {
   return 0;    return 0;
 }  }
Line 935  static TIOTYPE sigstty, nosigstty; Line 951  static TIOTYPE sigstty, nosigstty;
 static int tty_sigs_disabled = 0;  static int tty_sigs_disabled = 0;
   
 int  int
_rl_disable_tty_signals ()_rl_disable_tty_signals (void)
 {  {
   if (tty_sigs_disabled)    if (tty_sigs_disabled)
     return 0;      return 0;
Line 956  _rl_disable_tty_signals () Line 972  _rl_disable_tty_signals ()
 }  }
   
 int  int
_rl_restore_tty_signals ()_rl_restore_tty_signals (void)
 {  {
   int r;    int r;
   

Removed from v.1.1.1.1  
changed lines
  Added in v.1.1.1.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>