15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// UserInputUtils.cpp 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "StdAfx.h" 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "Common/StdInStream.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "Common/StringConvert.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "UserInputUtils.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char kYes = 'Y'; 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char kNo = 'N'; 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char kYesAll = 'A'; 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char kNoAll = 'S'; 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char kAutoRenameAll = 'U'; 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char kQuit = 'Q'; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char *kFirstQuestionMessage = "?\n"; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char *kHelpQuestionMessage = 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "(Y)es / (N)o / (A)lways / (S)kip all / A(u)to rename all / (Q)uit? "; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// return true if pressed Quite; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NUserAnswerMode::EEnum ScanUserYesNoAllQuit(CStdOutStream *outStream) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (*outStream) << kFirstQuestionMessage; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (;;) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (*outStream) << kHelpQuestionMessage; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) outStream->Flush(); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AString scannedString = g_StdIn.ScanStringUntilNewLine(); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scannedString.Trim(); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!scannedString.IsEmpty()) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch( 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ::MyCharUpper( 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #ifdef UNDER_CE 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (wchar_t) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #endif 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scannedString[0])) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case kYes: 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NUserAnswerMode::kYes; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case kNo: 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NUserAnswerMode::kNo; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case kYesAll: 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NUserAnswerMode::kYesAll; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case kNoAll: 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NUserAnswerMode::kNoAll; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case kAutoRenameAll: 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NUserAnswerMode::kAutoRenameAll; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case kQuit: 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NUserAnswerMode::kQuit; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef _WIN32 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef UNDER_CE 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MY_DISABLE_ECHO 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)UString GetPassword(CStdOutStream *outStream) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (*outStream) << "\nEnter password" 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #ifdef MY_DISABLE_ECHO 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " (will not be echoed)" 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #endif 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ":"; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) outStream->Flush(); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #ifdef MY_DISABLE_ECHO 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HANDLE console = GetStdHandle(STD_INPUT_HANDLE); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool wasChanged = false; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DWORD mode = 0; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (console != INVALID_HANDLE_VALUE && console != 0) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (GetConsoleMode(console, &mode)) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wasChanged = (SetConsoleMode(console, mode & ~ENABLE_ECHO_INPUT) != 0); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UString res = g_StdIn.ScanUStringUntilNewLine(); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (wasChanged) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetConsoleMode(console, mode); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (*outStream) << "\n"; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) outStream->Flush(); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return res; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #else 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return g_StdIn.ScanUStringUntilNewLine(); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #endif 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)