63 lines
1.4 KiB
C++
63 lines
1.4 KiB
C++
// wiostream -- initialize standard wide streams
|
|
#include <locale>
|
|
#include <fstream>
|
|
#include <iostream>
|
|
#include <new>
|
|
_STD_BEGIN
|
|
|
|
// OBJECT DECLARATIONS
|
|
int _Winit::_Init_cnt = -1;
|
|
static wfilebuf wfin(_Noinit);
|
|
static wfilebuf wfout(_Noinit);
|
|
static wfilebuf wferr(_Noinit);
|
|
_CRTIMP2 wistream wcin(_Noinit);
|
|
_CRTIMP2 wostream wcout(_Noinit);
|
|
_CRTIMP2 wostream wcerr(_Noinit);
|
|
_CRTIMP2 wostream wclog(_Noinit);
|
|
|
|
_CRTIMP2 _Winit::_Winit()
|
|
{ // initialize standard wide streams first time
|
|
bool doinit;
|
|
{_Lockit _Lk;
|
|
if (0 <= _Init_cnt)
|
|
++_Init_cnt, doinit = false;
|
|
else
|
|
_Init_cnt = 1, doinit = true; }
|
|
if (doinit)
|
|
{ // initialize standard wide streams
|
|
new (&wfin) wfilebuf(stdin);
|
|
new (&wfout) wfilebuf(stdout);
|
|
new (&wferr) wfilebuf(stderr);
|
|
new (&wcin) wistream(&wfin, true);
|
|
new (&wcout) wostream(&wfout, true);
|
|
wcin.tie(&wcout);
|
|
new (&wcerr) wostream(&wferr, true);
|
|
wcerr.tie(&wcout);
|
|
wcerr.setf(ios_base::unitbuf);
|
|
new (&wclog) wostream(&wferr, true);
|
|
wclog.tie(&wcout);
|
|
}
|
|
}
|
|
|
|
_CRTIMP2 _Winit::~_Winit()
|
|
{ // flush standard wide streams last time
|
|
bool doflush;
|
|
{_Lockit _Lk;
|
|
if (--_Init_cnt == 0)
|
|
doflush = true;
|
|
else
|
|
doflush = false; }
|
|
if (doflush)
|
|
{ // flush standard wide streams
|
|
wcout.flush();
|
|
wcerr.flush();
|
|
wclog.flush();
|
|
}
|
|
_STD_END
|
|
}
|
|
|
|
/*
|
|
* Copyright (c) 1994 by P.J. Plauger. ALL RIGHTS RESERVED.
|
|
* Consult your license regarding permissions and restrictions.
|
|
*/
|