#include "tty.h"
#include <signal.h>
#include <unistd.h>
#include <termios.h>
int tty;
static int tty_saved;
static struct termios saved_termios;
void wait_foreground()
{
pid_t pgid, tty_pgid;
void (*func)(int);
pgid = getpgrp();
while ((tty_pgid = tcgetpgrp(tty)) != -1 && tty_pgid != pgid) {
func = signal(SIGTTIN, SIG_DFL);
kill(0, SIGTTIN);
signal(SIGTTIN, func);
}
}
void set_tty_pgid(pid_t pgid)
{
void (*func)(int);
func = signal(SIGTTOU, SIG_IGN);
tcsetpgrp(tty, pgid);
signal(SIGTTOU, func);
}
void save_tty_attributes()
{
tty_saved = 0;
if (tcgetattr(tty, &saved_termios) == -1)
return;
tty_saved = 1;
}
void restore_tty_attributes()
{
if (tty_saved)
tcsetattr(tty, TCSANOW, &saved_termios);
}
void disable_tty_signals()
{
struct termios termios;
if (tcgetattr(tty, &termios) == -1)
return;
termios.c_lflag &= ~ISIG;
tcsetattr(tty, TCSANOW, &termios);
}
void enable_tty_signals()
{
struct termios termios;
if (tcgetattr(tty, &termios) == -1)
return;
termios.c_lflag |= ISIG;
tcsetattr(tty, TCSANOW, &termios);
}