Added filterdes.
/*
Terminal Mixer - multi-point multi-user access to terminal applications
Copyright (C) 2007 LluĂs Batlle i Rossell
Please find the license in the provided COPYING file.
*/
#include <sys/types.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/ioctl.h>
#include <termios.h>
#include "main.h"
static int is_tios_saved = 0;
static struct termios saved_tios;
void prepare_user_terminal()
{
int res;
struct termios tios;
res = tcgetattr(1, &tios);
if (res == -1)
error("tcgetatttr");
memcpy(&saved_tios, &tios, sizeof(struct termios));
is_tios_saved = 1;
cfmakeraw(&tios);
tios.c_lflag &= ~ECHO;
res = tcsetattr(0, TCSANOW, &tios);
if (res == -1)
error("tcsetatttr");
}
void restore_user_terminal()
{
int res;
res = tcsetattr(0, TCSANOW, &saved_tios);
if (res == -1)
{
/* cannot call error(), because it calls finish(), then
* restore_user_terminal() */
fprintf(stderr,"tcsetatttr failed: %s", strerror(errno));
exit(-1);
}
}
void finish(int ret)
{
if (is_tios_saved)
restore_user_terminal();
exit(ret);
}