亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? term.c

?? linux下telnet服務端的源碼實現
?? C
字號:
/* Copyright (C) 1998,2001 Free Software Foundation, Inc.   This file is part of GNU Inetutils.   GNU Inetutils 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.   GNU Inetutils is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR 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 GNU Inetutils; see the file COPYING.  If not, write   to the Free Software Foundation, Inc., 51 Franklin Street,   Fifth Floor, Boston, MA 02110-1301 USA. */#include <telnetd.h>#if defined(HAVE_TERMIOS_H)typedef struct termios TERMDESC;# define _term_getattr tcgetattr# define _term_setattr(fd, tp) tcsetattr (fd, TCSANOW, tp)#elif defined(HAVE_TERMIO_H)typedef struct termio TERMDESC;# define _term_getattr tcgetattr# define _term_setattr(fd, tp) tcsetattr (fd, TCSANOW, tp)#else#define IOCTL_INTERFACEtypedef struct {  struct sgttyb sg;  struct tchars tc;  struct ltchars ltc;  int state;  int lflags;#define termdesc_eofc   tc.t_eofc#define termdesc_erase  tc.sg.sg_erase#define termdesc_kill   sg.sg_kill#define termdesc_ip     tc.t_intrc#define termdesc_abort  tc.t_quitc#define termdesc_xon    tc.t_startc#define termdesc_xoff   tc.t_stopc#define termdesc_ao     ltc.t_flushc#define termdesc_susp   ltc.t_suspc#define termdesc_ew     ltc.t_werasc#define termdesc_rp     ltc.t_rprntc#define termdesc_lnext  ltc.t_lnextc#define termdesc_forw1  tc.t_brkc} TERMDESC;# define cfsetospeed(tp, val) (tp)->sg.sg_ospeed = (val)# define cfsetispeed(tp, val) (tp)->sg.sg_ispeed = (val)# define cfgetospeed(tp)      (tp)->sg.sg_ospeed# define cfgetispeed(tp)      (tp)->sg.sg_ispeedint_term_getattr (int fd, TERMDESC *tp){  ioctl (fd, TIOCGETP, (char *)&tp->sg);  ioctl (fd, TIOCGETC, (char *)&tp->tc);  ioctl (fd, TIOCGLTC, (char *)&tp->ltc);# ifdef	TIOCGSTATE  ioctl (fd, TIOCGSTATE, (char *)&tp->state);# endif  return 0;}#endifTERMDESC termbuf, termbuf2;#ifdef IOCTL_INTERFACEvoid_term_setattr (int fd, TERMDESC *tp){  ioctl (fd, TIOCSETN, (char *)&tp->sg);  ioctl (fd, TIOCSETC, (char *)&tp->tc);  ioctl (fd, TIOCSLTC, (char *)&tp->ltc);  ioctl (fd, TIOCLSET, &tp->lflags);}voidterm_send_eof (){  /*nothing*/}intterm_change_eof (){  return 0;}inttty_linemode(){  return termbuf.state & TS_EXTPROC;}voidtty_setlinemode (int on){#ifdef	TIOCEXT  set_termbuf ();  ioctl (pty, TIOCEXT, (char *)&on);  init_termbuf ();#else	/* !TIOCEXT */# ifdef	EXTPROC  if (on)    termbuf.c_lflag |= EXTPROC;  else    termbuf.c_lflag &= ~EXTPROC;# endif#endif	/* TIOCEXT */}inttty_isecho (){  return termbuf.sg.sg_flags & ECHO;}inttty_flowmode (){  return ((termbuf.tc.t_startc) > 0 && (termbuf.tc.t_stopc) > 0) ? 1 : 0;}inttty_restartany (){# ifdef	DECCTQ  return (termbuf.lflags & DECCTQ) ? 0 : 1;# else  return -1;# endif}voidtty_setecho(int on){  if (on)    termbuf.sg.sg_flags |= ECHO|CRMOD;  else    termbuf.sg.sg_flags &= ~(ECHO|CRMOD);}inttty_israw (){  return termbuf.sg.sg_flags & RAW;}#if defined (AUTHENTICATION) && defined(NO_LOGIN_F) && defined(LOGIN_R)inttty_setraw(int on){  if (on)    termbuf.sg.sg_flags |= RAW;  else    termbuf.sg.sg_flags &= ~RAW;}#endifvoidtty_binaryin (int on){  if (on)    termbuf.lflags |= LPASS8;  else    termbuf.lflags &= ~LPASS8;}voidtty_binaryout (int on){  if (on)    termbuf.lflags |= LLITOUT;  else    termbuf.lflags &= ~LLITOUT;}inttty_isbinaryin (){  return termbuf.lflags & LPASS8;}inttty_isbinaryout (){  return termbuf.lflags & LLITOUT;}inttty_isediting (){  return !(termbuf.sg.sg_flags & (CBREAK|RAW));}inttty_istrapsig(){  return !(termbuf.sg.sg_flags&RAW);}voidtty_setedit (int on){  if (on)    termbuf.sg.sg_flags &= ~CBREAK;  else    termbuf.sg.sg_flags |= CBREAK;}voidtty_setsig (int on){}inttty_issofttab (){  return termbuf.sg.sg_flags & XTABS;}voidtty_setsofttab (int on){  if (on)    termbuf.sg.sg_flags |= XTABS;  else    termbuf.sg.sg_flags &= ~XTABS;}inttty_islitecho (){  return !(termbuf.lflags & LCTLECH);}voidtty_setlitecho (int on){  if (on)    termbuf.lflags &= ~LCTLECH;  else    termbuf.lflags |= LCTLECH;}inttty_iscrnl (){  return termbuf.sg.sg_flags & CRMOD;}#else# define termdesc_eofc    c_cc[VEOF]# define termdesc_erase   c_cc[VERASE]# define termdesc_kill    c_cc[VKILL]# define termdesc_ip      c_cc[VINTR]# define termdesc_abort   c_cc[VQUIT]# ifdef	VSTART#  define termdesc_xon    c_cc[VSTART]# endif# ifdef	VSTOP#  define termdesc_xoff   c_cc[VSTOP]# endif# if !defined(VDISCARD) && defined(VFLUSHO)#  define VDISCARD VFLUSHO# endif# ifdef	VDISCARD#  define termdesc_ao     c_cc[VDISCARD]# endif# ifdef VSUSP#  define termdesc_susp   c_cc[VSUSP]# endif# ifdef	VWERASE#  define termdesc_ew     c_cc[VWERASE]# endif# ifdef	VREPRINT#  define termdesc_rp     c_cc[VREPRINT]# endif# ifdef	VLNEXT#  define termdesc_lnext  c_cc[VLNEXT]# endif# ifdef	VEOL#  define termdesc_forw1  c_cc[VEOL]# endif# ifdef	VEOL2#  define termdesc_forw2  c_cc[VEOL2]# endif# ifdef	VSTATUS#  define termdesc_status c_cc[VSTATUS]# endifstatic cc_t oldeofc = '\004';voidterm_send_eof (){#if VEOF == VMIN  if (!tty_isediting())    pty_output_byte (oldeofc);#endif}intterm_change_eof (){#if VEOF == VMIN  if (!tty_isediting())    return 1;  if (slctab[SLC_EOF].sptr)    oldeofc = *slctab[SLC_EOF].sptr;  return 0;#endif}inttty_linemode(){#ifdef EXTPROC  return (termbuf.c_lflag & EXTPROC);#else  return 0;		/* Can't ever set it either. */#endif /* EXTPROC */}voidtty_setlinemode (int on){#ifdef	TIOCEXT  set_termbuf ();  ioctl (pty, TIOCEXT, (char *)&on);  init_termbuf ();#else	/* !TIOCEXT */# ifdef	EXTPROC  if (on)    termbuf.c_lflag |= EXTPROC;  else    termbuf.c_lflag &= ~EXTPROC;# endif#endif	/* TIOCEXT */}inttty_isecho (){  return termbuf.c_lflag & ECHO;}inttty_flowmode (){  return (termbuf.c_iflag & IXON) ? 1 : 0;}inttty_restartany (){  return (termbuf.c_iflag & IXANY) ? 1 : 0;}voidtty_setecho(int on){  if (on)    termbuf.c_lflag |= ECHO;  else    termbuf.c_lflag &= ~ECHO;}inttty_israw (){  return !(termbuf.c_lflag & ICANON);}#if defined (AUTHENTICATION) && defined(NO_LOGIN_F) && defined(LOGIN_R)inttty_setraw(int on){  if (on)    termbuf.c_lflag &= ~ICANON;  else    termbuf.c_lflag |= ICANON;}#endifvoidtty_binaryin (int on){  if (on)    termbuf.c_iflag &= ~ISTRIP;  else     termbuf.c_iflag |= ISTRIP;}voidtty_binaryout (int on){  if (on)    {      termbuf.c_cflag &= ~(CSIZE|PARENB);      termbuf.c_cflag |= CS8;      termbuf.c_oflag &= ~OPOST;    }  else    {      termbuf.c_cflag &= ~CSIZE;      termbuf.c_cflag |= CS7|PARENB;      termbuf.c_oflag |= OPOST;    }}inttty_isbinaryin (){  return !(termbuf.c_iflag & ISTRIP);}inttty_isbinaryout (){  return !(termbuf.c_oflag&OPOST);}inttty_isediting (){  return termbuf.c_lflag & ICANON;}inttty_istrapsig(){  return termbuf.c_lflag & ISIG;}voidtty_setedit (int on){  if (on)    termbuf.c_lflag |= ICANON;  else    termbuf.c_lflag &= ~ICANON;}voidtty_setsig (int on){  if (on)    termbuf.c_lflag |= ISIG;  else    termbuf.c_lflag &= ~ISIG;}inttty_issofttab (){# ifdef	OXTABS  return termbuf.c_oflag & OXTABS;# endif# ifdef	TABDLY  return (termbuf.c_oflag & TABDLY) == TAB3;# endif}voidtty_setsofttab (int on){  if (on)    {# ifdef	OXTABS      termbuf.c_oflag |= OXTABS;# endif# ifdef	TABDLY      termbuf.c_oflag &= ~TABDLY;      termbuf.c_oflag |= TAB3;# endif    }  else    {# ifdef	OXTABS      termbuf.c_oflag &= ~OXTABS;# endif# ifdef	TABDLY      termbuf.c_oflag &= ~TABDLY;      termbuf.c_oflag |= TAB0;# endif    }}inttty_islitecho (){# ifdef	ECHOCTL  return !(termbuf.c_lflag & ECHOCTL);# endif# ifdef	TCTLECH  return !(termbuf.c_lflag & TCTLECH);# endif# if!defined(ECHOCTL) && !defined(TCTLECH)  return 0;	/* assumes ctl chars are echoed '^x' */#endif}voidtty_setlitecho (int on){# ifdef	ECHOCTL  if (on)    termbuf.c_lflag &= ~ECHOCTL;  else    termbuf.c_lflag |= ECHOCTL;# endif# ifdef	TCTLECH  if (on)    termbuf.c_lflag &= ~TCTLECH;  else    termbuf.c_lflag |= TCTLECH;# endif}inttty_iscrnl (){  return termbuf.c_iflag & ICRNL;}#endifvoidinit_termbuf (){  _term_getattr (pty, &termbuf);  termbuf2 = termbuf;}#if defined(TIOCPKT_IOCTL)/*FIXME: Hardly needed*/voidcopy_termbuf (){  int len = 0;  char *cp = (char*) &termbuf;    while (pty_input_level () > 0)    {      if (len >= sizeof (termbuf))	break;      *cp++ = pty_get_char (0);    }  termbuf2 = termbuf;}#endifvoidset_termbuf (){  if (memcmp (&termbuf, &termbuf2, sizeof (termbuf)))    _term_setattr (pty, &termbuf);}/* spcset(func, valp, valpp)    This function takes various special characters (func), and   sets *valp to the current value of that character, and   *valpp to point to where in the "termbuf" structure that   value is kept.    It returns the SLC_ level of support for this function. */#define	setval(a, b)	*valp = termbuf.a ; \			*valpp = &termbuf.a ; \			return b;#define	defval(a)       *valp = ((cc_t)a); \                        *valpp = (cc_t *)0; \			return SLC_DEFAULT;intspcset (int func, cc_t *valp, cc_t **valpp){  switch (func)    {    case SLC_EOF:      setval (termdesc_eofc, SLC_VARIABLE);          case SLC_EC:      setval (termdesc_erase, SLC_VARIABLE);          case SLC_EL:      setval (termdesc_kill, SLC_VARIABLE);          case SLC_IP:      setval (termdesc_ip, SLC_VARIABLE|SLC_FLUSHIN|SLC_FLUSHOUT);          case SLC_ABORT:      setval (termdesc_abort, SLC_VARIABLE|SLC_FLUSHIN|SLC_FLUSHOUT);    case SLC_XON:#ifdef termdesc_xon      setval (termdesc_xon, SLC_VARIABLE);#else      defval (0x13);#endif          case SLC_XOFF:#ifdef termdesc_xoff      setval (termdesc_xoff, SLC_VARIABLE);#else      defval (0x11);#endif          case SLC_EW:#ifdef termdesc_ew      setval (termdesc_ew, SLC_VARIABLE);#else      defval (0);#endif          case SLC_RP:#ifdef termdesc_rp      setval (termdesc_rp, SLC_VARIABLE);#else      defval(0);#endif          case SLC_LNEXT:#ifdef termdesc_lnext      setval (termdesc_lnext, SLC_VARIABLE);#else      defval (0);#endif          case SLC_AO:#ifdef termdesc_ao            setval (termdesc_ao, SLC_VARIABLE|SLC_FLUSHOUT);#else      defval (0);#endif          case SLC_SUSP:#ifdef termdesc_susp      setval (termdesc_susp, SLC_VARIABLE|SLC_FLUSHIN);#else      defval (0);#endif      #ifdef termdesc_forw1    case SLC_FORW1:      setval (termdesc_forw1, SLC_VARIABLE);#endif      #ifdef termdesc_forw2    case SLC_FORW2:      setval (termdesc_forw2, SLC_VARIABLE);#endif          case SLC_AYT:#ifdef termdesc_status      setval (termdesc_status, SLC_VARIABLE);#else      defval (0);#endif    case SLC_BRK:    case SLC_SYNCH:    case SLC_EOR:      defval (0);    default:      *valp = 0;      *valpp = 0;      return SLC_NOSUPPORT;    }}#if B4800 != 4800#define	DECODE_BAUD#endif#ifdef	DECODE_BAUD/* * A table of available terminal speeds */struct termspeeds {  int	speed;  int	value;} termspeeds[] = {  { 0,     B0 },    { 50,    B50 },   { 75,    B75 },  { 110,   B110 },  { 134,   B134 },  { 150,   B150 },  { 200,   B200 },  { 300,   B300 },  { 600,   B600 },  { 1200,  B1200 }, { 1800,  B1800 }, { 2400,  B2400 },  { 4800,   B4800 },#ifdef	B7200  { 7200,  B7200 },#endif  { 9600,   B9600 },#ifdef	B14400  { 14400,  B14400 },#endif#ifdef	B19200  { 19200,  B19200 },#endif#ifdef	B28800  { 28800,  B28800 },#endif#ifdef	B38400  { 38400,  B38400 },#endif#ifdef	B57600  { 57600,  B57600 },#endif#ifdef	B115200  { 115200, B115200 },#endif#ifdef	B230400  { 230400, B230400 },#endif  { -1,     0 }};#endif	/* DECODE_BAUD */voidtty_tspeed (int val){#ifdef	DECODE_BAUD  struct termspeeds *tp;  for (tp = termspeeds; (tp->speed != -1) && (val > tp->speed); tp++)    ;  if (tp->speed == -1)	/* back up to last valid value */    --tp;  val = tp->value;#endif	  cfsetospeed (&termbuf, val);}voidtty_rspeed (int val){#ifdef	DECODE_BAUD  struct termspeeds *tp;  for (tp = termspeeds; (tp->speed != -1) && (val > tp->speed); tp++)    ;  if (tp->speed == -1)	/* back up to last valid value */    --tp;  val = tp->value;#endif  cfsetispeed (&termbuf, val);} 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久66热re国产| 色天天综合色天天久久| 美女在线一区二区| 亚洲高清视频的网址| 日韩毛片高清在线播放| 国产精品水嫩水嫩| 亚洲国产精品v| 中文在线一区二区| 欧美国产一区在线| 中文字幕av一区二区三区| 日本一区二区三区久久久久久久久不 | 精品国产免费久久| 精品久久久久香蕉网| 亚洲精品在线观| 久久精品视频免费| 国产精品丝袜黑色高跟| 亚洲三级在线免费| 亚洲高清在线视频| 日韩制服丝袜先锋影音| 老司机精品视频导航| 国产一二三精品| 国产成人精品一区二| 94-欧美-setu| 精品视频一区 二区 三区| 91.com视频| 精品国产伦理网| 亚洲国产激情av| 一区二区三区日韩在线观看| 亚洲电影在线免费观看| 久久成人羞羞网站| 成人午夜av电影| 91久久免费观看| 日韩精品专区在线影院观看| 国产日韩在线不卡| 一区二区三区在线免费视频 | 精品国产青草久久久久福利| 国产精品久久久久久亚洲伦 | 久久国产精品色| 国产成人啪午夜精品网站男同| 99久久国产综合精品麻豆 | 一区二区三区在线观看网站| 日本在线不卡一区| 成人一区二区三区视频在线观看| 在线观看视频91| 精品国产欧美一区二区| 亚洲女女做受ⅹxx高潮| 免费不卡在线视频| 99久久伊人精品| 欧美一区二区视频观看视频 | 国产在线乱码一区二区三区| 91亚洲精品一区二区乱码| 91精品国产aⅴ一区二区| 亚洲国产精品成人综合色在线婷婷| 亚洲综合999| 国产河南妇女毛片精品久久久| 欧洲亚洲精品在线| 国产亚洲精品福利| 亚洲午夜久久久久久久久电影院| 国产一本一道久久香蕉| 欧美三区在线观看| 国产亚洲欧洲一区高清在线观看| 亚洲综合一区二区三区| 国产二区国产一区在线观看| 欧美日韩卡一卡二| 国产精品久久久一本精品 | 成人在线综合网| 宅男噜噜噜66一区二区66| 国产精品二三区| 久久99久久久久久久久久久| 欧美综合在线视频| 亚洲国产精品国自产拍av| 美腿丝袜在线亚洲一区| 欧美午夜精品一区二区三区| 中文字幕不卡在线播放| 久久精品国产网站| 欧美日韩mp4| 亚洲三级久久久| 国产成人精品在线看| 日韩午夜在线观看| 亚洲成人午夜电影| 91美女在线看| 国产精品久久久久久久久快鸭 | 国产成人综合精品三级| 日韩欧美国产高清| 三级不卡在线观看| 欧洲国内综合视频| 亚洲欧美精品午睡沙发| 成人毛片老司机大片| 精品国产乱子伦一区| 久久99精品国产麻豆婷婷洗澡| 欧美日韩国产成人在线免费| 亚洲免费观看高清| 91网页版在线| 亚洲免费观看视频| 91在线观看污| 亚洲图片激情小说| 不卡一区二区中文字幕| 中文字幕欧美三区| 成人综合婷婷国产精品久久蜜臀| 精品国产伦理网| 国产麻豆午夜三级精品| 精品国产一区二区精华| 麻豆成人免费电影| 日韩欧美一区在线| 另类小说视频一区二区| 欧美一级日韩一级| 蜜桃精品视频在线观看| 精品日韩在线观看| 国产黑丝在线一区二区三区| 国产无一区二区| www.成人在线| 国产日韩精品一区二区三区| 国产精品一区在线| 国产日韩av一区| 成人激情图片网| 亚洲男人天堂av| 欧美日韩一卡二卡三卡| 五月天亚洲婷婷| 日韩一区二区三区视频在线| 久久精品国产色蜜蜜麻豆| 久久久国产综合精品女国产盗摄| 国产精品影音先锋| 国产精品剧情在线亚洲| 一本一本久久a久久精品综合麻豆| 亚洲精品一卡二卡| 欧美日韩电影一区| 亚洲精品在线观看网站| 成人一区二区三区视频在线观看| 欧美激情艳妇裸体舞| 99国产精品久久久久| 一区二区三区加勒比av| 欧美蜜桃一区二区三区| 久久66热偷产精品| 国产精品二三区| 欧美色精品在线视频| 青青草91视频| 国产精品天天看| 欧美日韩视频专区在线播放| 另类中文字幕网| ㊣最新国产の精品bt伙计久久| 在线精品视频小说1| 美女被吸乳得到大胸91| 亚洲国产成人一区二区三区| 欧美日韩一级大片网址| 精品一区二区三区免费| 1024亚洲合集| 欧美一区二区免费观在线| 国产传媒欧美日韩成人| 亚洲午夜三级在线| 久久久亚洲高清| 精品视频在线免费观看| 国产激情一区二区三区四区| 亚洲最大的成人av| 久久老女人爱爱| 精品视频资源站| 99视频有精品| 麻豆91免费观看| 一区二区三区久久久| 久久婷婷综合激情| 欧美色网站导航| 国产99久久久国产精品潘金网站| 亚洲一二三区视频在线观看| 国产视频一区不卡| 9191久久久久久久久久久| 成人一区二区三区中文字幕| 日本大胆欧美人术艺术动态| 国产精品久久99| 日韩精品一区二区三区四区视频| 色综合久久88色综合天天免费| 久久99久国产精品黄毛片色诱| 亚洲精品国产一区二区精华液| 久久影音资源网| 91精品国产一区二区三区| 在线观看免费视频综合| 丁香六月综合激情| 久久97超碰国产精品超碰| 亚洲午夜电影网| 亚洲欧美在线另类| 国产午夜精品久久久久久免费视| 欧美日韩成人在线| 在线观看亚洲精品视频| 成人黄页毛片网站| 国产曰批免费观看久久久| 午夜久久久久久久久| 亚洲免费电影在线| 国产精品麻豆欧美日韩ww| 久久综合网色—综合色88| 91精品欧美一区二区三区综合在 | 欧美日韩在线播放三区四区| 成人av网站在线观看| 国产一区三区三区| 麻豆精品在线看| 免费一级片91| 热久久国产精品| 日本 国产 欧美色综合| 天堂av在线一区| 亚洲一二三四在线| 一区二区三区产品免费精品久久75| 中文字幕免费不卡| 欧美国产激情一区二区三区蜜月|