44
55#ifdef _WIN32
66 #include < io.h>
7- #include < share.h>
87 #include < windows.h>
98 #ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING
109 #define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
2221#endif
2322
2423#include " cpp-terminal/exception.hpp"
25-
24+ # include " cpp-terminal/platforms/file.hpp "
2625#include < fstream>
2726
2827void Term::Terminal::store_and_restore ()
@@ -42,38 +41,24 @@ void Term::Terminal::store_and_restore()
4241 if (!SetConsoleOutputCP (CP_UTF8)) throw Term::Exception (" SetConsoleOutputCP(CP_UTF8) failed" );
4342 if (!SetConsoleCP (CP_UTF8)) throw Term::Exception (" SetConsoleCP(CP_UTF8) failed" );
4443
45- HANDLE hConOut{CreateFile (" CONOUT$" , GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL , OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL )};
46- if (hConOut == INVALID_HANDLE_VALUE) throw Term::Exception (" CreateFile failed" );
47- if (!GetConsoleMode (hConOut, &dwOriginalOutMode)) { throw Term::Exception (" GetConsoleMode() failed" ); }
44+ if (!GetConsoleMode (Private::std_cout.getHandler (), &dwOriginalOutMode)) { throw Term::Exception (" GetConsoleMode() failed" ); }
4845 if (m_terminfo.hasANSIEscapeCode ())
4946 {
50- if (!SetConsoleMode (hConOut , dwOriginalOutMode | ENABLE_VIRTUAL_TERMINAL_PROCESSING | DISABLE_NEWLINE_AUTO_RETURN)) { throw Term::Exception (" SetConsoleMode() failed in destructor" ); }
47+ if (!SetConsoleMode (Private::std_cout. getHandler () , dwOriginalOutMode | ENABLE_VIRTUAL_TERMINAL_PROCESSING | DISABLE_NEWLINE_AUTO_RETURN)) { throw Term::Exception (" SetConsoleMode() failed in destructor" ); }
5148 }
52- CloseHandle (hConOut);
53-
54- HANDLE hConIn{CreateFile (" CONIN$" , GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL , OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL )};
55- if (hConIn == INVALID_HANDLE_VALUE) throw Term::Exception (" CreateFile failed" );
56- if (!GetConsoleMode (hConIn, &dwOriginalInMode)) { throw Term::Exception (" GetConsoleMode() failed" ); }
49+ if (!GetConsoleMode (Private::std_cin.getHandler (), &dwOriginalInMode)) { throw Term::Exception (" GetConsoleMode() failed" ); }
5750 if (m_terminfo.hasANSIEscapeCode ())
5851 {
59- if (!SetConsoleMode (hConIn , dwOriginalInMode | ENABLE_VIRTUAL_TERMINAL_INPUT)) { throw Term::Exception (" SetConsoleMode() failed" ); }
52+ if (!SetConsoleMode (Private::std_cin. getHandler () , dwOriginalInMode | ENABLE_VIRTUAL_TERMINAL_INPUT)) { throw Term::Exception (" SetConsoleMode() failed" ); }
6053 }
61- CloseHandle (hConIn);
62-
6354 enabled = true ;
6455 }
6556 else
6657 {
6758 if (!SetConsoleOutputCP (out_code_page)) throw Term::Exception (" SetConsoleOutputCP(out_code_page) failed" );
6859 if (!SetConsoleCP (in_code_page)) throw Term::Exception (" SetConsoleCP(in_code_page) failed" );
69- HANDLE hConOut{CreateFile (" CONOUT$" , GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL , OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL )};
70- if (hConOut == INVALID_HANDLE_VALUE) throw Term::Exception (" CreateFile failed" );
71- if (!SetConsoleMode (hConOut, dwOriginalOutMode)) { throw Term::Exception (" SetConsoleMode() failed in destructor" ); }
72- CloseHandle (hConOut);
73- HANDLE hConIn{CreateFile (" CONIN$" , GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL , OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL )};
74- if (hConIn == INVALID_HANDLE_VALUE) throw Term::Exception (" CreateFile failed" );
75- if (!SetConsoleMode (hConIn, dwOriginalInMode)) { throw Term::Exception (" SetConsoleMode() failed in destructor" ); }
76- CloseHandle (hConIn);
60+ if (!SetConsoleMode (Private::std_cout.getHandler (), dwOriginalOutMode)) { throw Term::Exception (" SetConsoleMode() failed in destructor" ); }
61+ if (!SetConsoleMode (Private::std_cin.getHandler (), dwOriginalInMode)) { throw Term::Exception (" SetConsoleMode() failed in destructor" ); }
7762 enabled = false ;
7863 }
7964#else
@@ -104,13 +89,11 @@ void Term::Terminal::store_and_restore()
10489void Term::Terminal::setRawMode ()
10590{
10691#ifdef _WIN32
107- HANDLE hConIn{CreateFile (" CONIN$" , GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL , OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL )};
10892 DWORD flags = {0 };
109- if (!GetConsoleMode (hConIn , &flags)) { throw Term::Exception (" GetConsoleMode() failed" ); }
93+ if (!GetConsoleMode (Private::std_cin. getHandler () , &flags)) { throw Term::Exception (" GetConsoleMode() failed" ); }
11094 if (m_options.has (Option::NoSignalKeys)) { flags &= ~ENABLE_PROCESSED_INPUT; }
11195 flags &= ~(ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT);
112- if (!SetConsoleMode (hConIn, flags)) { throw Term::Exception (" SetConsoleMode() failed" ); }
113- CloseHandle (hConIn);
96+ if (!SetConsoleMode (Private::std_cin.getHandler (), flags)) { throw Term::Exception (" SetConsoleMode() failed" ); }
11497#else
11598 int fd{open (" /dev/tty" , O_RDWR, O_NOCTTY)};
11699 if (fd >= 0 )
@@ -184,10 +167,10 @@ void Term::Terminal::attachStreams()
184167 this ->cin .open (in.c_str (), std::ofstream::in);
185168 if (!this ->cin .is_open ()) this ->cin .open (blackHole.c_str (), std::ofstream::in);
186169 this ->cin .clear ();
187- cout.clear ();
188- cerr.clear ();
189- clog.clear ();
190- cin.clear ();
170+ // cout.clear();
171+ // cerr.clear();
172+ // clog.clear();
173+ // cin.clear();
191174}
192175
193176void Term::Terminal::detachStreams ()
0 commit comments