⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shtty.c

📁 UNIX下SH的实现源码
💻 C
字号:
/* Copyright (C) 1999 Free Software Foundation, Inc.   This file is part of GNU Bash, the Bourne Again SHell.   Bash 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, or (at your option) any later   version.   Bash 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 Bash; see the file COPYING.  If not, write to the Free Software   Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. *//* * shtty.c -- abstract interface to the terminal, focusing on capabilities. */#ifdef HAVE_CONFIG_H#  include <config.h>#endif#ifdef HAVE_UNISTD_H#  include <unistd.h>#endif#include <shtty.h>static TTYSTRUCT ttin, ttout;static int ttsaved = 0;intttgetattr(fd, ttp)int	fd;TTYSTRUCT *ttp;{#ifdef TERMIOS_TTY_DRIVER  return tcgetattr(fd, ttp);#else#  ifdef TERMIO_TTY_DRIVER  return ioctl(fd, TCGETA, ttp);#  else  return ioctl(fd, TIOCGETP, ttp);#  endif#endif}intttsetattr(fd, ttp)int	fd;TTYSTRUCT *ttp;{#ifdef TERMIOS_TTY_DRIVER  return tcsetattr(fd, TCSADRAIN, ttp);#else#  ifdef TERMIO_TTY_DRIVER  return ioctl(fd, TCSETAW, ttp);#  else  return ioctl(fd, TIOCSETN, ttp);#  endif#endif}voidttsave(){  if (ttsaved)   return;  ttgetattr (0, &ttin);  ttgetattr (1, &ttout);  ttsaved = 1;}voidttrestore(){  if (ttsaved == 0)    return;  ttsetattr (0, &ttin);  ttsetattr (1, &ttout);  ttsaved = 0;}/* Retrieve the attributes associated with tty fd FD. */TTYSTRUCT *ttattr (fd)     int fd;{  if (ttsaved == 0)    return ((TTYSTRUCT *)0);  if (fd == 0)    return &ttin;  else if (fd == 1)    return &ttout;  else    return ((TTYSTRUCT *)0);}/* * Change attributes in ttp so that when it is installed using * ttsetattr, the terminal will be in one-char-at-a-time mode. */inttt_setonechar(ttp)     TTYSTRUCT *ttp;{#if defined (TERMIOS_TTY_DRIVER) || defined (TERMIO_TTY_DRIVER)  /* XXX - might not want this -- it disables erase and kill processing. */  ttp->c_lflag &= ~ICANON;  ttp->c_lflag |= ISIG;#  ifdef IEXTEN  ttp->c_lflag |= IEXTEN;#  endif  ttp->c_iflag |= ICRNL;	/* make sure we get CR->NL on input */  ttp->c_iflag &= ~INLCR;	/* but no NL->CR */#  ifdef OPOST  ttp->c_oflag |= OPOST;#  endif#  ifdef ONLCR  ttp->c_oflag |= ONLCR;#  endif#  ifdef OCRNL  ttp->c_oflag &= ~OCRNL;#  endif#  ifdef ONOCR  ttp->c_oflag &= ~ONOCR;#  endif#  ifdef ONLRET  ttp->c_oflag &= ~ONLRET;#  endif  ttp->c_cc[VMIN] = 1;  ttp->c_cc[VTIME] = 0;#else  ttp->sg_flags |= CBREAK;#endif  return 0;}/* Set the terminal into one-character-at-a-time mode */intttonechar (){  TTYSTRUCT tt;  if (ttsaved == 0)    return -1;  tt = ttin;  if (tt_setonechar(&tt) < 0)    return -1;  return (ttsetattr (0, &tt));}/* * Change attributes in ttp so that when it is installed using * ttsetattr, the terminal will be in no-echo mode. */inttt_setnoecho(ttp)     TTYSTRUCT *ttp;{#if defined (TERMIOS_TTY_DRIVER) || defined (TERMIO_TTY_DRIVER)  ttp->c_lflag &= ~(ECHO|ECHOK|ECHONL);#else  ttp->sg_flags &= ~ECHO;#endif  return 0;}/* Set the terminal into no-echo mode */intttnoecho (){  TTYSTRUCT tt;  if (ttsaved == 0)    return -1;  tt = ttin;  if (tt_setnoecho (&tt) < 0)    return -1;  return (ttsetattr (0, &tt));}/* * Change attributes in ttp so that when it is installed using * ttsetattr, the terminal will be in eight-bit mode (pass8). */inttt_seteightbit (ttp)     TTYSTRUCT *ttp;{#if defined (TERMIOS_TTY_DRIVER) || defined (TERMIO_TTY_DRIVER)  ttp->c_iflag &= ~ISTRIP;  ttp->c_cflag |= CS8;  ttp->c_cflag &= ~PARENB;#else  ttp->sg_flags |= ANYP;#endif  return 0;}/* Set the terminal into eight-bit mode */inttteightbit (){  TTYSTRUCT tt;  if (ttsaved == 0)    return -1;  tt = ttin;  if (tt_seteightbit (&tt) < 0)    return -1;  return (ttsetattr (0, &tt));}/* * Change attributes in ttp so that when it is installed using * ttsetattr, the terminal will be in non-canonical input mode. */inttt_setnocanon (ttp)     TTYSTRUCT *ttp;{#if defined (TERMIOS_TTY_DRIVER) || defined (TERMIO_TTY_DRIVER)  ttp->c_lflag &= ~ICANON;#endif  return 0;}/* Set the terminal into non-canonical mode */intttnocanon (){  TTYSTRUCT tt;  if (ttsaved == 0)    return -1;  tt = ttin;  if (tt_setnocanon (&tt) < 0)    return -1;  return (ttsetattr (0, &tt));}/* * Change attributes in ttp so that when it is installed using * ttsetattr, the terminal will be in cbreak, no-echo mode. */inttt_setcbreak(ttp)     TTYSTRUCT *ttp;{  if (tt_setonechar (ttp) < 0)    return -1;  return (tt_setnoecho (ttp));}/* Set the terminal into cbreak (no-echo, one-character-at-a-time) mode */intttcbreak (){  TTYSTRUCT tt;  if (ttsaved == 0)    return -1;  tt = ttin;  if (tt_setcbreak (&tt) < 0)    return -1;  return (ttsetattr (0, &tt));}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -