📄 do_echo.c
字号:
/* do_echo.c - do_echo */
#include <sys/types.h>
#include <termios.h>
#include <stdio.h>
#include "telnet.h"
char doecho; /* nonzero, if remote ECHO */
extern u_char option_cmd;
/*------------------------------------------------------------------------
* do_echo - handle TELNET WILL/WON'T ECHO option
*------------------------------------------------------------------------
*/
int
do_echo(rfp, tfp, c)
FILE *rfp, *tfp;
int c;
{
struct termios tio;
static char savec[2];
int ok, tfd = fileno(tfp);
if (doecho) {
if (option_cmd == TCWILL)
return 0; /* already doing ECHO */
} else if (option_cmd == TCWONT)
return 0; /* already NOT doing ECHO */
if (ok = tcgetattr(tfd, &tio) == 0) {
if (option_cmd == TCWILL) {
tio.c_lflag &= ~(ECHO | ICANON);
/* VMIN & VTIME are overloaded with other chars,
* so save and restore them later.
*/
savec[0] = tio.c_cc[VMIN];
savec[1] = tio.c_cc[VTIME];
tio.c_cc[VMIN] = 1;
tio.c_cc[VTIME] = 0;
} else {
tio.c_lflag |= (ECHO | ICANON);
tio.c_cc[VMIN] = savec[0];
tio.c_cc[VTIME] = savec[1];
}
ok &= tcsetattr(tfd, TCSADRAIN, &tio) == 0;
}
if (ok)
doecho = !doecho;
(void) putc(TCIAC, rfp);
if (doecho)
(void) putc(TCDO, rfp);
else
(void) putc(TCDONT, rfp);
(void) putc((char)c, rfp);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -