String ReadSecret() { DisableEcho(); String s = ReadStdIn(); EnableEcho(); return s; }
void EnableEcho(bool b) { #ifdef PLATFORM_POSIX termios t; tcgetattr(STDIN_FILENO, &t); if(b) t.c_lflag |= ECHO; else t.c_lflag &= ~ECHO; tcsetattr(STDIN_FILENO, TCSANOW, &t); #elif PLATFORM_WIN32 HANDLE h = GetStdHandle(STD_INPUT_HANDLE); DWORD mode = 0; GetConsoleMode(h, &mode); if(b) mode |= ENABLE_ECHO_INPUT; else mode &= ~ENABLE_ECHO_INPUT; SetConsoleMode(h, mode); #endif }
void DisableEcho() { EnableEcho(false); }
String ReadSecret() { DisableEcho(); String s = ReadStdIn(); EnableEcho(); Cout().PutEol(); return s; } void EnableEcho(bool b) { #ifdef PLATFORM_POSIX termios t; tcgetattr(STDIN_FILENO, &t); if(b) t.c_lflag |= ECHO; else t.c_lflag &= ~ECHO; tcsetattr(STDIN_FILENO, TCSADRAIN, &t); #elif PLATFORM_WIN32 HANDLE h = GetStdHandle(STD_INPUT_HANDLE); DWORD mode = 0; GetConsoleMode(h, &mode); if(b) mode |= ENABLE_ECHO_INPUT; else mode &= ~ENABLE_ECHO_INPUT; SetConsoleMode(h, mode); #endif }