| // UserInputUtils.cpp | |
| #include "StdAfx.h" | |
| #include "../../../Common/StdInStream.h" | |
| #include "../../../Common/StringConvert.h" | |
| #include "UserInputUtils.h" | |
| static const char kYes = 'y'; | |
| static const char kNo = 'n'; | |
| static const char kYesAll = 'a'; | |
| static const char kNoAll = 's'; | |
| static const char kAutoRenameAll = 'u'; | |
| static const char kQuit = 'q'; | |
| static const char *kFirstQuestionMessage = "?\n"; | |
| static const char *kHelpQuestionMessage = | |
| "(Y)es / (N)o / (A)lways / (S)kip all / A(u)to rename all / (Q)uit? "; | |
| // return true if pressed Quite; | |
| NUserAnswerMode::EEnum ScanUserYesNoAllQuit(CStdOutStream *outStream) | |
| { | |
| (*outStream) << kFirstQuestionMessage; | |
| for (;;) | |
| { | |
| (*outStream) << kHelpQuestionMessage; | |
| outStream->Flush(); | |
| AString scannedString = g_StdIn.ScanStringUntilNewLine(); | |
| scannedString.Trim(); | |
| if (!scannedString.IsEmpty()) | |
| switch(::MyCharLower_Ascii(scannedString[0])) | |
| { | |
| case kYes: return NUserAnswerMode::kYes; | |
| case kNo: return NUserAnswerMode::kNo; | |
| case kYesAll: return NUserAnswerMode::kYesAll; | |
| case kNoAll: return NUserAnswerMode::kNoAll; | |
| case kAutoRenameAll: return NUserAnswerMode::kAutoRenameAll; | |
| case kQuit: return NUserAnswerMode::kQuit; | |
| } | |
| } | |
| } | |
| #ifdef _WIN32 | |
| #ifndef UNDER_CE | |
| #define MY_DISABLE_ECHO | |
| #endif | |
| #endif | |
| UString GetPassword(CStdOutStream *outStream) | |
| { | |
| (*outStream) << "\nEnter password" | |
| #ifdef MY_DISABLE_ECHO | |
| " (will not be echoed)" | |
| #endif | |
| ":"; | |
| outStream->Flush(); | |
| #ifdef MY_DISABLE_ECHO | |
| HANDLE console = GetStdHandle(STD_INPUT_HANDLE); | |
| bool wasChanged = false; | |
| DWORD mode = 0; | |
| if (console != INVALID_HANDLE_VALUE && console != 0) | |
| if (GetConsoleMode(console, &mode)) | |
| wasChanged = (SetConsoleMode(console, mode & ~ENABLE_ECHO_INPUT) != 0); | |
| UString res = g_StdIn.ScanUStringUntilNewLine(); | |
| if (wasChanged) | |
| SetConsoleMode(console, mode); | |
| (*outStream) << "\n"; | |
| outStream->Flush(); | |
| return res; | |
| #else | |
| return g_StdIn.ScanUStringUntilNewLine(); | |
| #endif | |
| } |