1// Common/StdOutStream.cpp 2 3#include "StdAfx.h" 4 5#include <tchar.h> 6 7#include "IntToString.h" 8#include "StdOutStream.h" 9#include "StringConvert.h" 10#include "UTFConvert.h" 11 12static const char kNewLineChar = '\n'; 13 14static const char *kFileOpenMode = "wt"; 15 16extern int g_CodePage; 17 18CStdOutStream g_StdOut(stdout); 19CStdOutStream g_StdErr(stderr); 20 21bool CStdOutStream::Open(const char *fileName) throw() 22{ 23 Close(); 24 _stream = fopen(fileName, kFileOpenMode); 25 _streamIsOpen = (_stream != 0); 26 return _streamIsOpen; 27} 28 29bool CStdOutStream::Close() throw() 30{ 31 if (!_streamIsOpen) 32 return true; 33 if (fclose(_stream) != 0) 34 return false; 35 _stream = 0; 36 _streamIsOpen = false; 37 return true; 38} 39 40bool CStdOutStream::Flush() throw() 41{ 42 return (fflush(_stream) == 0); 43} 44 45CStdOutStream & endl(CStdOutStream & outStream) throw() 46{ 47 return outStream << kNewLineChar; 48} 49 50CStdOutStream & CStdOutStream::operator<<(const wchar_t *s) 51{ 52 int codePage = g_CodePage; 53 if (codePage == -1) 54 codePage = CP_OEMCP; 55 AString dest; 56 if (codePage == CP_UTF8) 57 ConvertUnicodeToUTF8(s, dest); 58 else 59 UnicodeStringToMultiByte2(dest, s, (UINT)codePage); 60 return operator<<((const char *)dest); 61} 62 63void StdOut_Convert_UString_to_AString(const UString &s, AString &temp) 64{ 65 int codePage = g_CodePage; 66 if (codePage == -1) 67 codePage = CP_OEMCP; 68 if (codePage == CP_UTF8) 69 ConvertUnicodeToUTF8(s, temp); 70 else 71 UnicodeStringToMultiByte2(temp, s, (UINT)codePage); 72} 73 74void CStdOutStream::PrintUString(const UString &s, AString &temp) 75{ 76 StdOut_Convert_UString_to_AString(s, temp); 77 *this << (const char *)temp; 78} 79 80CStdOutStream & CStdOutStream::operator<<(Int32 number) throw() 81{ 82 char s[32]; 83 ConvertInt64ToString(number, s); 84 return operator<<(s); 85} 86 87CStdOutStream & CStdOutStream::operator<<(Int64 number) throw() 88{ 89 char s[32]; 90 ConvertInt64ToString(number, s); 91 return operator<<(s); 92} 93 94CStdOutStream & CStdOutStream::operator<<(UInt32 number) throw() 95{ 96 char s[16]; 97 ConvertUInt32ToString(number, s); 98 return operator<<(s); 99} 100 101CStdOutStream & CStdOutStream::operator<<(UInt64 number) throw() 102{ 103 char s[32]; 104 ConvertUInt64ToString(number, s); 105 return operator<<(s); 106} 107