cpp-terminal 1.0.0
Small C++ library for writing multiplatform terminal applications
Loading...
Searching...
No Matches
iostream_initializer.cpp
Go to the documentation of this file.
1/*
2* cpp-terminal
3* C++ library for writing multi-platform terminal applications.
4*
5* SPDX-FileCopyrightText: 2019-2025 cpp-terminal
6*
7* SPDX-License-Identifier: MIT
8*/
9
11
16#include "cpp-terminal/tty.hpp"
17
18#include <cstddef>
19#include <iostream>
20
22
23#ifdef _WIN32
24 #pragma warning(push)
25 #pragma warning(disable : 4297)
26#endif
27
29try
30{
31 if(0 == m_counter)
32 {
33 static const std::ios_base::Init iostreams_init; // Init std::cout etc...
34 static const Term::TerminalInitializer terminal_init; // Make sure terminal is set up.
39 if(is_stdin_a_tty()) { std::cin.rdbuf(Term::cin.rdbuf()); }
40 }
41 ++m_counter;
42}
43catch(...)
44{
46}
47
49try
50{
51 --m_counter;
52 if(0 == m_counter)
53 {
54 (&Term::cout)->~TOstream();
55 (&Term::cerr)->~TOstream();
56 (&Term::clog)->~TOstream();
57 (&Term::cin)->~TIstream();
58 }
59}
60catch(...)
61{
63}
64
65#ifdef _WIN32
66 #pragma warning(pop)
67#endif
TOstream & clog
Definition iostream.cpp:23
TOstream & cout
Definition iostream.cpp:22
TOstream & cerr
Definition iostream.cpp:24
TIstream & cin
Definition iostream.cpp:25
bool is_stdin_a_tty()
Check if stdin is a tty.
Definition tty.cpp:32