UserInputUtils.cpp revision baa3858d3f5d128a5c8466b700098109edcad5f2
1// UserInputUtils.cpp 2 3#include "StdAfx.h" 4 5#include "Common/StdInStream.h" 6#include "Common/StringConvert.h" 7 8#include "UserInputUtils.h" 9 10static const char kYes = 'Y'; 11static const char kNo = 'N'; 12static const char kYesAll = 'A'; 13static const char kNoAll = 'S'; 14static const char kAutoRenameAll = 'U'; 15static const char kQuit = 'Q'; 16 17static const char *kFirstQuestionMessage = "?\n"; 18static const char *kHelpQuestionMessage = 19 "(Y)es / (N)o / (A)lways / (S)kip all / A(u)to rename all / (Q)uit? "; 20 21// return true if pressed Quite; 22 23NUserAnswerMode::EEnum ScanUserYesNoAllQuit(CStdOutStream *outStream) 24{ 25 (*outStream) << kFirstQuestionMessage; 26 for (;;) 27 { 28 (*outStream) << kHelpQuestionMessage; 29 outStream->Flush(); 30 AString scannedString = g_StdIn.ScanStringUntilNewLine(); 31 scannedString.Trim(); 32 if (!scannedString.IsEmpty()) 33 switch( 34 ::MyCharUpper( 35 #ifdef UNDER_CE 36 (wchar_t) 37 #endif 38 scannedString[0])) 39 { 40 case kYes: 41 return NUserAnswerMode::kYes; 42 case kNo: 43 return NUserAnswerMode::kNo; 44 case kYesAll: 45 return NUserAnswerMode::kYesAll; 46 case kNoAll: 47 return NUserAnswerMode::kNoAll; 48 case kAutoRenameAll: 49 return NUserAnswerMode::kAutoRenameAll; 50 case kQuit: 51 return NUserAnswerMode::kQuit; 52 } 53 } 54} 55 56#ifdef _WIN32 57#ifndef UNDER_CE 58#define MY_DISABLE_ECHO 59#endif 60#endif 61 62UString GetPassword(CStdOutStream *outStream) 63{ 64 (*outStream) << "\nEnter password" 65 #ifdef MY_DISABLE_ECHO 66 " (will not be echoed)" 67 #endif 68 ":"; 69 outStream->Flush(); 70 71 #ifdef MY_DISABLE_ECHO 72 HANDLE console = GetStdHandle(STD_INPUT_HANDLE); 73 bool wasChanged = false; 74 DWORD mode = 0; 75 if (console != INVALID_HANDLE_VALUE && console != 0) 76 if (GetConsoleMode(console, &mode)) 77 wasChanged = (SetConsoleMode(console, mode & ~ENABLE_ECHO_INPUT) != 0); 78 UString res = g_StdIn.ScanUStringUntilNewLine(); 79 if (wasChanged) 80 SetConsoleMode(console, mode); 81 (*outStream) << "\n"; 82 outStream->Flush(); 83 return res; 84 #else 85 return g_StdIn.ScanUStringUntilNewLine(); 86 #endif 87} 88