db_bridge/console.cpp
author Markus Bröker <mbroeker@largo.dyndns.tv>
Thu, 16 Apr 2009 12:50:39 +0200
changeset 69 b5912e5f899f
parent 65 76514757b0d6
permissions -rw-r--r--
Useless cross_getch hack removed cross_getch provides a version of getch for every os. The Windows Part does not work under wine, but it works on the target platform. committer: Markus Bröker <mbroeker@largo.homelinux.org>

/**
 * test/demos/db_bridge/console.cpp
 * Copyright (C) Markus Broeker
 */

#include <console.hpp>
#include <cstdio>

#ifdef WIN32
#include <conio.h>

int Console::getch ()
{
    int ch = -1;

    ch =::getch ();

    return ch;
}
#else
#include <termios.h>

int Console::getch ()
{
    int ch = -1, fd = 0;
    struct termios neu, alt;

    fd = fileno (stdin);
    tcgetattr (fd, &alt);
    neu = alt;
    neu.c_lflag &= ~(ICANON | ECHO);
    tcsetattr (fd, TCSANOW, &neu);
    ch = getchar ();
    tcsetattr (fd, TCSANOW, &alt);
    return ch;
}
#endif

void Console::getpass (std::string & password)
{
    int i = 0;
    int c;
    char buffer[17];

    while (((c = Console::getch ()) != '\n') && i < 17) {
        if (c != BS) {
            buffer[i++] = c;
            std::cout << "*";
        } else if (i > 0) {
            i--;
            std::cout << "\b \b";
        }
    }
    buffer[i] = 0;
    std::cout << std::endl;

    password = std::string (buffer);
}