/* Terminal de controle */ /* Copyright (C) 2008 Emmanuel Varoquaux This file is part of XOS. This program 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 3 of the License, or (at your option) any later version. This program 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 this program. If not, see . */ #include "tty.h" #include #include #include int tty; static int tty_saved; static struct termios saved_termios; /* Groupe d'avant-plan */ 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); } /* Attributs */ 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); } /* Signaux */ 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); }