user_term.c
author viric@llimona
Mon, 24 Sep 2007 13:59:40 +0200
changeset 38 f1e581c862d5
parent 28 b73712b8370d
child 49 1cead94cfd99
permissions -rw-r--r--
Improved help. Moving to 0.2.

#include <sys/types.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.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;

    tios.c_lflag &= ~(ECHO | ECHONL | ICANON | IEXTEN);
    /*cfmakeraw(&tios);*/

    res = tcsetattr(1, TCSANOW, &tios);
    if (res == -1)
        error("tcsetatttr");
}

void restore_user_terminal()
{
    int res;
    res = tcsetattr(1, TCSANOW, &saved_tios);
    if (res == -1)
        error("tcsetatttr");
}

void finish(int ret)
{
    if (is_tios_saved)
        restore_user_terminal();
    exit(ret);
}