1370b324cSopenharmony_ci// Common/StdInStream.cpp 2370b324cSopenharmony_ci 3370b324cSopenharmony_ci#include "StdAfx.h" 4370b324cSopenharmony_ci 5370b324cSopenharmony_ci#ifdef _WIN32 6370b324cSopenharmony_ci#include <tchar.h> 7370b324cSopenharmony_ci#endif 8370b324cSopenharmony_ci 9370b324cSopenharmony_ci#include "StdInStream.h" 10370b324cSopenharmony_ci#include "StringConvert.h" 11370b324cSopenharmony_ci#include "UTFConvert.h" 12370b324cSopenharmony_ci 13370b324cSopenharmony_ci// #define kEOFMessage "Unexpected end of input stream" 14370b324cSopenharmony_ci// #define kReadErrorMessage "Error reading input stream" 15370b324cSopenharmony_ci// #define kIllegalCharMessage "Illegal zero character in input stream" 16370b324cSopenharmony_ci 17370b324cSopenharmony_ci 18370b324cSopenharmony_ciCStdInStream g_StdIn(stdin); 19370b324cSopenharmony_ci 20370b324cSopenharmony_ci/* 21370b324cSopenharmony_ci#define kFileOpenMode TEXT("r") 22370b324cSopenharmony_ci 23370b324cSopenharmony_cibool CStdInStream::Open(LPCTSTR fileName) throw() 24370b324cSopenharmony_ci{ 25370b324cSopenharmony_ci Close(); 26370b324cSopenharmony_ci _stream = 27370b324cSopenharmony_ci #ifdef _WIN32 28370b324cSopenharmony_ci _tfopen 29370b324cSopenharmony_ci #else 30370b324cSopenharmony_ci fopen 31370b324cSopenharmony_ci #endif 32370b324cSopenharmony_ci (fileName, kFileOpenMode); 33370b324cSopenharmony_ci _streamIsOpen = (_stream != 0); 34370b324cSopenharmony_ci return _streamIsOpen; 35370b324cSopenharmony_ci} 36370b324cSopenharmony_ci 37370b324cSopenharmony_cibool CStdInStream::Close() throw() 38370b324cSopenharmony_ci{ 39370b324cSopenharmony_ci if (!_streamIsOpen) 40370b324cSopenharmony_ci return true; 41370b324cSopenharmony_ci _streamIsOpen = (fclose(_stream) != 0); 42370b324cSopenharmony_ci return !_streamIsOpen; 43370b324cSopenharmony_ci} 44370b324cSopenharmony_ci*/ 45370b324cSopenharmony_ci 46370b324cSopenharmony_cibool CStdInStream::ScanAStringUntilNewLine(AString &s) 47370b324cSopenharmony_ci{ 48370b324cSopenharmony_ci s.Empty(); 49370b324cSopenharmony_ci for (;;) 50370b324cSopenharmony_ci { 51370b324cSopenharmony_ci int intChar = GetChar(); 52370b324cSopenharmony_ci if (intChar == EOF) 53370b324cSopenharmony_ci return true; 54370b324cSopenharmony_ci char c = (char)intChar; 55370b324cSopenharmony_ci if (c == 0) 56370b324cSopenharmony_ci return false; 57370b324cSopenharmony_ci if (c == '\n') 58370b324cSopenharmony_ci return true; 59370b324cSopenharmony_ci s += c; 60370b324cSopenharmony_ci } 61370b324cSopenharmony_ci} 62370b324cSopenharmony_ci 63370b324cSopenharmony_cibool CStdInStream::ScanUStringUntilNewLine(UString &dest) 64370b324cSopenharmony_ci{ 65370b324cSopenharmony_ci dest.Empty(); 66370b324cSopenharmony_ci AString s; 67370b324cSopenharmony_ci bool res = ScanAStringUntilNewLine(s); 68370b324cSopenharmony_ci int codePage = CodePage; 69370b324cSopenharmony_ci if (codePage == -1) 70370b324cSopenharmony_ci codePage = CP_OEMCP; 71370b324cSopenharmony_ci if (codePage == CP_UTF8) 72370b324cSopenharmony_ci ConvertUTF8ToUnicode(s, dest); 73370b324cSopenharmony_ci else 74370b324cSopenharmony_ci MultiByteToUnicodeString2(dest, s, (UINT)codePage); 75370b324cSopenharmony_ci return res; 76370b324cSopenharmony_ci} 77370b324cSopenharmony_ci 78370b324cSopenharmony_ci/* 79370b324cSopenharmony_cibool CStdInStream::ReadToString(AString &resultString) 80370b324cSopenharmony_ci{ 81370b324cSopenharmony_ci resultString.Empty(); 82370b324cSopenharmony_ci for (;;) 83370b324cSopenharmony_ci { 84370b324cSopenharmony_ci int intChar = GetChar(); 85370b324cSopenharmony_ci if (intChar == EOF) 86370b324cSopenharmony_ci return !Error(); 87370b324cSopenharmony_ci char c = (char)intChar; 88370b324cSopenharmony_ci if (c == 0) 89370b324cSopenharmony_ci return false; 90370b324cSopenharmony_ci resultString += c; 91370b324cSopenharmony_ci } 92370b324cSopenharmony_ci} 93370b324cSopenharmony_ci*/ 94370b324cSopenharmony_ci 95370b324cSopenharmony_ciint CStdInStream::GetChar() 96370b324cSopenharmony_ci{ 97370b324cSopenharmony_ci return fgetc(_stream); // getc() doesn't work in BeOS? 98370b324cSopenharmony_ci} 99