Back to index

tetex-bin  3.0
Functions | Variables
terminal.h File Reference
#include "info.h"
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

void terminal_initialize_terminal (char *terminal_name)
void terminal_get_screen_size (void)
void terminal_prep_terminal (void)
void terminal_unprep_terminal (void)
void terminal_new_terminal (char *terminal_name)
void terminal_goto_xy (int x, int y)
void terminal_put_text (char *string)
void terminal_write_chars (char *string, int nchars)
void terminal_clear_to_eol (void)
void terminal_clear_screen (void)
void terminal_up_line (void)
void terminal_down_line (void)
void terminal_begin_inverse (void)
void terminal_end_inverse (void)
void terminal_scroll_terminal (int start, int end, int amount)
void terminal_ring_bell (void)

Variables

int screenwidth
int screenheight
int terminal_is_dumb_p
int terminal_has_meta_p
int terminal_has_visible_bell_p
int terminal_use_visible_bell_p
int terminal_can_scroll
VFunctionterminal_initialize_terminal_hook
VFunctionterminal_get_screen_size_hook
VFunctionterminal_prep_terminal_hook
VFunctionterminal_unprep_terminal_hook
VFunctionterminal_new_terminal_hook
VFunctionterminal_goto_xy_hook
VFunctionterminal_put_text_hook
VFunctionterminal_write_chars_hook
VFunctionterminal_clear_to_eol_hook
VFunctionterminal_clear_screen_hook
VFunctionterminal_up_line_hook
VFunctionterminal_down_line_hook
VFunctionterminal_begin_inverse_hook
VFunctionterminal_end_inverse_hook
VFunctionterminal_scroll_terminal_hook
VFunctionterminal_ring_bell_hook
char * term_ku
char * term_kd
char * term_kr
char * term_kl
char * term_kP
char * term_kN
char * term_ke
char * term_kh
char * term_kx
char * term_ki
char * term_kD

Function Documentation

Definition at line 315 of file terminal.c.

{
  if (terminal_begin_inverse_hook)
    (*terminal_begin_inverse_hook) ();
  else
    {
      send_to_terminal (term_invbeg);
    }
}

Here is the caller graph for this function:

Definition at line 279 of file terminal.c.

{
  if (terminal_clear_screen_hook)
    (*terminal_clear_screen_hook) ();
  else
    {
      send_to_terminal (term_clrpag);
    }
}

Here is the caller graph for this function:

Definition at line 267 of file terminal.c.

{
  if (terminal_clear_to_eol_hook)
    (*terminal_clear_to_eol_hook) ();
  else
    {
      send_to_terminal (term_clreol);
    }
}

Here is the caller graph for this function:

Definition at line 303 of file terminal.c.

{
  if (terminal_down_line_hook)
    (*terminal_down_line_hook) ();
  else
    {
      send_to_terminal (term_dn);
    }
}

Definition at line 327 of file terminal.c.

{
  if (terminal_end_inverse_hook)
    (*terminal_end_inverse_hook) ();
  else
    {
      send_to_terminal (term_invend);
    }
}

Here is the caller graph for this function:

Definition at line 453 of file terminal.c.

{
  if (terminal_get_screen_size_hook)
    (*terminal_get_screen_size_hook) ();
  else
    {
      screenwidth = screenheight = 0;

#if defined (TIOCGWINSZ)
      {
        struct winsize window_size;

        if (ioctl (fileno (stdout), TIOCGWINSZ, &window_size) == 0)
          {
            screenwidth = (int) window_size.ws_col;
            screenheight = (int) window_size.ws_row;
          }
      }
#endif                          /* TIOCGWINSZ */

      /* Environment variable COLUMNS overrides setting of "co". */
      if (screenwidth <= 0)
        {
          char *sw = getenv ("COLUMNS");

          if (sw)
            screenwidth = atoi (sw);

          if (screenwidth <= 0)
            screenwidth = tgetnum ("co");
        }

      /* Environment variable LINES overrides setting of "li". */
      if (screenheight <= 0)
        {
          char *sh = getenv ("LINES");

          if (sh)
            screenheight = atoi (sh);

          if (screenheight <= 0)
            screenheight = tgetnum ("li");
        }

      /* If all else fails, default to 80x24 terminal. */
      if (screenwidth <= 0)
        screenwidth = 80;

      if (screenheight <= 0)
        screenheight = 24;
    }
}

Here is the call graph for this function:

Here is the caller graph for this function:

void terminal_goto_xy ( int  x,
int  y 
)

Definition at line 229 of file terminal.c.

{
  if (terminal_goto_xy_hook)
    (*terminal_goto_xy_hook) (x, y);
  else
    {
      if (term_goto)
        tputs (tgoto (term_goto, x, y), 1, output_character_function);
    }
}

Here is the call graph for this function:

Here is the caller graph for this function:

void terminal_initialize_terminal ( char *  terminal_name)

Definition at line 513 of file terminal.c.

{
  char *buffer;

  terminal_is_dumb_p = 0;

  if (terminal_initialize_terminal_hook)
    {
      (*terminal_initialize_terminal_hook) (terminal_name);
      return;
    }

  term_name = terminal_name ? terminal_name : getenv ("TERM");
  if (!term_name)
    term_name = "dumb";

  if (!term_string_buffer)
    term_string_buffer = xmalloc (2048);

  if (!term_buffer)
    term_buffer = xmalloc (2048);

  buffer = term_string_buffer;

  term_clrpag = term_cr = term_clreol = NULL;

  /* HP-UX 11.x returns 0 for OK --jeff.hull@state.co.us.  */
  if (tgetent (term_buffer, term_name) < 0)
    {
      terminal_is_dumb_p = 1;
      screenwidth = 80;
      screenheight = 24;
      term_cr = "\r";
      term_up = term_dn = audible_bell = visible_bell = NULL;
      term_ku = term_kd = term_kl = term_kr = NULL;
      term_kP = term_kN = NULL;
      term_kh = term_ke = NULL;
      term_kD = NULL;
      return;
    }

  BC = tgetstr ("pc", &buffer);
  PC = BC ? *BC : 0;

#if defined (HAVE_TERMIOS_H)
  {
    struct termios ti;
    if (tcgetattr (fileno(stdout), &ti) != -1)
      ospeed = cfgetospeed (&ti);
    else
      ospeed = B9600;
  }
#else
# if defined (TIOCGETP)
  {
    struct sgttyb sg;

    if (ioctl (fileno (stdout), TIOCGETP, &sg) != -1)
      ospeed = sg.sg_ospeed;
    else
      ospeed = B9600;
  }
# else
  ospeed = B9600;
# endif /* !TIOCGETP */
#endif

  term_cr = tgetstr ("cr", &buffer);
  term_clreol = tgetstr ("ce", &buffer);
  term_clrpag = tgetstr ("cl", &buffer);
  term_goto = tgetstr ("cm", &buffer);

  /* Find out about this terminal's scrolling capability. */
  term_AL = tgetstr ("AL", &buffer);
  term_DL = tgetstr ("DL", &buffer);
  term_al = tgetstr ("al", &buffer);
  term_dl = tgetstr ("dl", &buffer);

  terminal_can_scroll = ((term_AL || term_al) && (term_DL || term_dl));

  term_invbeg = tgetstr ("mr", &buffer);
  if (term_invbeg)
    term_invend = tgetstr ("me", &buffer);
  else
    term_invend = NULL;

  if (!term_cr)
    term_cr =  "\r";

  terminal_get_screen_size ();

  term_up = tgetstr ("up", &buffer);
  term_dn = tgetstr ("dn", &buffer);
  visible_bell = tgetstr ("vb", &buffer);
  terminal_has_visible_bell_p = (visible_bell != NULL);
  audible_bell = tgetstr ("bl", &buffer);
  if (!audible_bell)
    audible_bell = "\007";
  term_begin_use = tgetstr ("ti", &buffer);
  term_end_use = tgetstr ("te", &buffer);

  term_keypad_on = tgetstr ("ks", &buffer);
  term_keypad_off = tgetstr ("ke", &buffer);

  /* Check to see if this terminal has a meta key. */
  terminal_has_meta_p = (tgetflag ("km") || tgetflag ("MT"));
  if (terminal_has_meta_p)
    {
      term_mm = tgetstr ("mm", &buffer);
    }
  else
    {
      term_mm = NULL;
    }

  /* Attempt to find the arrow keys.  */
  term_ku = tgetstr ("ku", &buffer);
  term_kd = tgetstr ("kd", &buffer);
  term_kr = tgetstr ("kr", &buffer);
  term_kl = tgetstr ("kl", &buffer);

  term_kP = tgetstr ("kP", &buffer);
  term_kN = tgetstr ("kN", &buffer);

#if defined(INFOKEY)
  term_kh = tgetstr ("kh", &buffer);
  term_ke = tgetstr ("@7", &buffer);
  term_ki = tgetstr ("kI", &buffer);
  term_kx = tgetstr ("kD", &buffer);
#endif /* defined(INFOKEY) */

  /* Home and end keys. */
  term_kh = tgetstr ("kh", &buffer);
  term_ke = tgetstr ("@7", &buffer);

  term_kD = tgetstr ("kD", &buffer);

  /* If this terminal is not cursor addressable, then it is really dumb. */
  if (!term_goto)
    terminal_is_dumb_p = 1;
}

Here is the call graph for this function:

Here is the caller graph for this function:

void terminal_new_terminal ( char *  terminal_name)

Definition at line 441 of file terminal.c.

{
  if (terminal_new_terminal_hook)
    (*terminal_new_terminal_hook) (terminal_name);
  else
    {
      terminal_initialize_terminal (terminal_name);
    }
}

Here is the call graph for this function:

Definition at line 692 of file terminal.c.

{
  int tty;

  if (terminal_prep_terminal_hook)
    {
      (*terminal_prep_terminal_hook) ();
      return;
    }

  terminal_begin_using_terminal ();

  tty = fileno (stdin);

#if defined (HAVE_TERMIOS_H)
  tcgetattr (tty, &original_termios);
  tcgetattr (tty, &ttybuff);
#else
#  if defined (HAVE_TERMIO_H)
  ioctl (tty, TCGETA, &original_termio);
  ioctl (tty, TCGETA, &ttybuff);
#  endif
#endif

#if defined (HAVE_TERMIOS_H) || defined (HAVE_TERMIO_H)
  ttybuff.c_iflag &= (~ISTRIP & ~INLCR & ~IGNCR & ~ICRNL & ~IXON);
/* These output flags are not part of POSIX, so only use them if they
   are defined.  */
#ifdef ONLCR
  ttybuff.c_oflag &= ~ONLCR ;
#endif
#ifdef OCRNL
  ttybuff.c_oflag &= ~OCRNL;
#endif
  ttybuff.c_lflag &= (~ICANON & ~ECHO);

  ttybuff.c_cc[VMIN] = 1;
  ttybuff.c_cc[VTIME] = 0;

  if (ttybuff.c_cc[VINTR] == '\177')
    ttybuff.c_cc[VINTR] = -1;

  if (ttybuff.c_cc[VQUIT] == '\177')
    ttybuff.c_cc[VQUIT] = -1;

#ifdef VLNEXT
  if (ttybuff.c_cc[VLNEXT] == '\026')
    ttybuff.c_cc[VLNEXT] = -1;
#endif /* VLNEXT */
#endif /* TERMIOS or TERMIO */

/* cf. emacs/src/sysdep.c for being sure output is on. */
#if defined (HAVE_TERMIOS_H)
  /* linux kernel 2.2.x needs a TCOFF followed by a TCOON to turn output
     back on if the user presses ^S at the very beginning; just a TCOON
     doesn't work.  --Kevin Ryde <user42@zip.com.au>, 16jun2000.  */
  tcsetattr (tty, TCSANOW, &ttybuff);
#  ifdef TCOON
  tcflow (tty, TCOOFF);
  tcflow (tty, TCOON);
#  endif
#else
#  if defined (HAVE_TERMIO_H)
  ioctl (tty, TCSETA, &ttybuff);
#    ifdef TCXONC
  ioctl (tty, TCXONC, 1);
#    endif
#  endif
#endif

#if !defined (HAVE_TERMIOS_H) && !defined (HAVE_TERMIO_H)
  ioctl (tty, TIOCGETP, &ttybuff);

  if (!original_tty_flags)
    original_tty_flags = ttybuff.sg_flags;

  /* Make this terminal pass 8 bits around while we are using it. */
#  if defined (PASS8)
  ttybuff.sg_flags |= PASS8;
#  endif /* PASS8 */

#  if defined (TIOCLGET) && defined (LPASS8)
  {
    int flags;
    ioctl (tty, TIOCLGET, &flags);
    original_lmode = flags;
    flags |= LPASS8;
    ioctl (tty, TIOCLSET, &flags);
  }
#  endif /* TIOCLGET && LPASS8 */

#  if defined (TIOCGETC)
  {
    struct tchars temp;

    ioctl (tty, TIOCGETC, &original_tchars);
    temp = original_tchars;

    /* C-s and C-q. */
    temp.t_startc = temp.t_stopc = -1;

    /* Often set to C-d. */
    temp.t_eofc = -1;

    /* If the a quit or interrupt character conflicts with one of our
       commands, then make it go away. */
    if (temp.t_intrc == '\177')
      temp.t_intrc = -1;

    if (temp.t_quitc == '\177')
      temp.t_quitc = -1;

    ioctl (tty, TIOCSETC, &temp);
  }
#  endif /* TIOCGETC */

#  if defined (TIOCGLTC)
  {
    struct ltchars temp;

    ioctl (tty, TIOCGLTC, &original_ltchars);
    temp = original_ltchars;

    /* Make the interrupt keys go away.  Just enough to make people happy. */
    temp.t_lnextc = -1;         /* C-v. */
    temp.t_dsuspc = -1;         /* C-y. */
    temp.t_flushc = -1;         /* C-o. */
    ioctl (tty, TIOCSLTC, &temp);
  }
#  endif /* TIOCGLTC */

  ttybuff.sg_flags &= ~ECHO;
  ttybuff.sg_flags |= CBREAK;
  ioctl (tty, TIOCSETN, &ttybuff);
#endif /* !HAVE_TERMIOS_H && !HAVE_TERMIO_H */
}

Here is the call graph for this function:

Here is the caller graph for this function:

void terminal_put_text ( char *  string)

Definition at line 242 of file terminal.c.

{
  if (terminal_put_text_hook)
    (*terminal_put_text_hook) (string);
  else
    {
      printf ("%s", string);
    }
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 340 of file terminal.c.

Here is the caller graph for this function:

void terminal_scroll_terminal ( int  start,
int  end,
int  amount 
)

Definition at line 405 of file terminal.c.

{
  if (!terminal_can_scroll)
    return;

  /* Any scrolling at all? */
  if (amount == 0)
    return;

  if (terminal_scroll_terminal_hook)
    (*terminal_scroll_terminal_hook) (start, end, amount);
  else
    {
      /* If we are scrolling down, delete AMOUNT lines at END.  Then insert
         AMOUNT lines at START. */
      if (amount > 0)
        {
          terminal_delete_lines (end, amount);
          terminal_insert_lines (start, amount);
        }

      /* If we are scrolling up, delete AMOUNT lines before START.  This
         actually does the upwards scroll.  Then, insert AMOUNT lines
         after the already scrolled region (i.e., END - AMOUNT). */
      if (amount < 0)
        {
          int abs_amount = -amount;
          terminal_delete_lines (start - abs_amount, abs_amount);
          terminal_insert_lines (end - abs_amount, abs_amount);
        }
    }
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 832 of file terminal.c.

{
  int tty;

  if (terminal_unprep_terminal_hook)
    {
      (*terminal_unprep_terminal_hook) ();
      return;
    }

  tty = fileno (stdin);

#if defined (HAVE_TERMIOS_H)
  tcsetattr (tty, TCSANOW, &original_termios);
#else
#  if defined (HAVE_TERMIO_H)
  ioctl (tty, TCSETA, &original_termio);
#  else /* !HAVE_TERMIO_H */
  ioctl (tty, TIOCGETP, &ttybuff);
  ttybuff.sg_flags = original_tty_flags;
  ioctl (tty, TIOCSETN, &ttybuff);

#  if defined (TIOCGETC)
  ioctl (tty, TIOCSETC, &original_tchars);
#  endif /* TIOCGETC */

#  if defined (TIOCGLTC)
  ioctl (tty, TIOCSLTC, &original_ltchars);
#  endif /* TIOCGLTC */

#  if defined (TIOCLGET) && defined (LPASS8)
  ioctl (tty, TIOCLSET, &original_lmode);
#  endif /* TIOCLGET && LPASS8 */

#  endif /* !HAVE_TERMIO_H */
#endif /* !HAVE_TERMIOS_H */
  terminal_end_using_terminal ();
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 291 of file terminal.c.

{
  if (terminal_up_line_hook)
    (*terminal_up_line_hook) ();
  else
    {
      send_to_terminal (term_up);
    }
}
void terminal_write_chars ( char *  string,
int  nchars 
)

Definition at line 254 of file terminal.c.

{
  if (terminal_write_chars_hook)
    (*terminal_write_chars_hook) (string, nchars);
  else
    {
      if (nchars)
        fwrite (string, 1, nchars, stdout);
    }
}

Here is the call graph for this function:


Variable Documentation

Definition at line 197 of file terminal.c.

Definition at line 197 of file terminal.c.

char * term_kd

Definition at line 216 of file terminal.c.

char* term_kD

Definition at line 223 of file terminal.c.

char* term_ke

Definition at line 222 of file terminal.c.

char * term_kh

Definition at line 221 of file terminal.c.

char * term_ki

Definition at line 224 of file terminal.c.

char * term_kl

Definition at line 218 of file terminal.c.

char * term_kN

Definition at line 220 of file terminal.c.

char* term_kP

Definition at line 219 of file terminal.c.

char * term_kr

Definition at line 217 of file terminal.c.

char* term_ku

Definition at line 215 of file terminal.c.

char* term_kx

Definition at line 225 of file terminal.c.

Definition at line 55 of file terminal.c.

Definition at line 212 of file terminal.c.

Definition at line 61 of file terminal.c.

Definition at line 62 of file terminal.c.

Definition at line 60 of file terminal.c.

Definition at line 56 of file terminal.c.

Definition at line 63 of file terminal.c.

Definition at line 64 of file terminal.c.

Definition at line 203 of file terminal.c.

Definition at line 206 of file terminal.c.

Definition at line 65 of file terminal.c.

Definition at line 200 of file terminal.c.

Definition at line 66 of file terminal.c.

Definition at line 57 of file terminal.c.

Definition at line 67 of file terminal.c.

Definition at line 68 of file terminal.c.

Definition at line 70 of file terminal.c.

Definition at line 58 of file terminal.c.

Definition at line 59 of file terminal.c.

Definition at line 209 of file terminal.c.

Definition at line 69 of file terminal.c.