?? shtty.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 + -