// Common/StdOutStream.cpp #include "StdAfx.h" #include <tchar.h> #include "IntToString.h" #include "StdOutStream.h" #include "StringConvert.h" #include "UTFConvert.h" #ifdef _MSC_VER // "was declared deprecated" disabling #pragma warning(disable : 4996 ) #endif static const char kNewLineChar = '\n'; static const char *kFileOpenMode = "wt"; extern int g_CodePage; CStdOutStream g_StdOut(stdout); CStdOutStream g_StdErr(stderr); bool CStdOutStream::Open(const char *fileName) { Close(); _stream = fopen(fileName, kFileOpenMode); _streamIsOpen = (_stream != 0); return _streamIsOpen; } bool CStdOutStream::Close() { if (!_streamIsOpen) return true; if (fclose(_stream) != 0) return false; _stream = 0; _streamIsOpen = false; return true; } bool CStdOutStream::Flush() { return (fflush(_stream) == 0); } CStdOutStream::~CStdOutStream () { Close(); } CStdOutStream & CStdOutStream::operator<<(CStdOutStream & (*aFunction)(CStdOutStream &)) { (*aFunction)(*this); return *this; } CStdOutStream & endl(CStdOutStream & outStream) { return outStream << kNewLineChar; } CStdOutStream & CStdOutStream::operator<<(const char *s) { fputs(s, _stream); return *this; } CStdOutStream & CStdOutStream::operator<<(const wchar_t *s) { int codePage = g_CodePage; if (codePage == -1) codePage = CP_OEMCP; AString dest; if (codePage == CP_UTF8) ConvertUnicodeToUTF8(s, dest); else dest = UnicodeStringToMultiByte(s, (UINT)codePage); *this << (const char *)dest; return *this; } CStdOutStream & CStdOutStream::operator<<(char c) { fputc(c, _stream); return *this; } CStdOutStream & CStdOutStream::operator<<(int number) { char textString[32]; ConvertInt64ToString(number, textString); return operator<<(textString); } CStdOutStream & CStdOutStream::operator<<(UInt64 number) { char textString[32]; ConvertUInt64ToString(number, textString); return operator<<(textString); }