1// Common/StdOutStream.cpp 2 3#include "StdAfx.h" 4 5#ifdef _WIN32 6#include <tchar.h> 7#endif 8 9#include "IntToString.h" 10#include "StdOutStream.h" 11#include "StringConvert.h" 12#include "UTFConvert.h" 13 14CStdOutStream g_StdOut(stdout); 15CStdOutStream g_StdErr(stderr); 16 17/* 18// #define kFileOpenMode "wt" 19 20bool CStdOutStream::Open(const char *fileName) throw() 21{ 22 Close(); 23 _stream = fopen(fileName, kFileOpenMode); 24 _streamIsOpen = (_stream != 0); 25 return _streamIsOpen; 26} 27 28bool CStdOutStream::Close() throw() 29{ 30 if (!_streamIsOpen) 31 return true; 32 if (fclose(_stream) != 0) 33 return false; 34 _stream = 0; 35 _streamIsOpen = false; 36 return true; 37} 38*/ 39 40bool CStdOutStream::Flush() throw() 41{ 42 return (fflush(_stream) == 0); 43} 44 45CStdOutStream & endl(CStdOutStream & outStream) throw() 46{ 47 return outStream << '\n'; 48} 49 50CStdOutStream & CStdOutStream::operator<<(const wchar_t *s) 51{ 52 AString temp; 53 UString s2(s); 54 PrintUString(s2, temp); 55 return *this; 56} 57 58void CStdOutStream::PrintUString(const UString &s, AString &temp) 59{ 60 Convert_UString_to_AString(s, temp); 61 *this << (const char *)temp; 62} 63 64void CStdOutStream::Convert_UString_to_AString(const UString &src, AString &dest) 65{ 66 int codePage = CodePage; 67 if (codePage == -1) 68 codePage = CP_OEMCP; 69 if (codePage == CP_UTF8) 70 ConvertUnicodeToUTF8(src, dest); 71 else 72 UnicodeStringToMultiByte2(dest, src, (UINT)codePage); 73} 74 75 76static const wchar_t kReplaceChar = '_'; 77 78void CStdOutStream::Normalize_UString_LF_Allowed(UString &s) 79{ 80 unsigned len = s.Len(); 81 wchar_t *d = s.GetBuf(); 82 83 if (IsTerminalMode) 84 for (unsigned i = 0; i < len; i++) 85 { 86 wchar_t c = d[i]; 87 if (c <= 13 && c >= 7 && c != '\n') 88 d[i] = kReplaceChar; 89 } 90} 91 92void CStdOutStream::Normalize_UString(UString &s) 93{ 94 unsigned len = s.Len(); 95 wchar_t *d = s.GetBuf(); 96 97 if (IsTerminalMode) 98 for (unsigned i = 0; i < len; i++) 99 { 100 wchar_t c = d[i]; 101 if (c <= 13 && c >= 7) 102 d[i] = kReplaceChar; 103 } 104 else 105 for (unsigned i = 0; i < len; i++) 106 { 107 wchar_t c = d[i]; 108 if (c == '\n') 109 d[i] = kReplaceChar; 110 } 111} 112 113void CStdOutStream::NormalizePrint_UString(const UString &s, UString &tempU, AString &tempA) 114{ 115 tempU = s; 116 Normalize_UString(tempU); 117 PrintUString(tempU, tempA); 118} 119 120void CStdOutStream::NormalizePrint_UString(const UString &s) 121{ 122 NormalizePrint_wstr(s); 123} 124 125void CStdOutStream::NormalizePrint_wstr(const wchar_t *s) 126{ 127 UString tempU = s; 128 Normalize_UString(tempU); 129 AString tempA; 130 PrintUString(tempU, tempA); 131} 132 133 134CStdOutStream & CStdOutStream::operator<<(Int32 number) throw() 135{ 136 char s[32]; 137 ConvertInt64ToString(number, s); 138 return operator<<(s); 139} 140 141CStdOutStream & CStdOutStream::operator<<(Int64 number) throw() 142{ 143 char s[32]; 144 ConvertInt64ToString(number, s); 145 return operator<<(s); 146} 147 148CStdOutStream & CStdOutStream::operator<<(UInt32 number) throw() 149{ 150 char s[16]; 151 ConvertUInt32ToString(number, s); 152 return operator<<(s); 153} 154 155CStdOutStream & CStdOutStream::operator<<(UInt64 number) throw() 156{ 157 char s[32]; 158 ConvertUInt64ToString(number, s); 159 return operator<<(s); 160} 161