Skip to content

Commit 9534d1e

Browse files
committed
Use file for windows
1 parent 42de7b4 commit 9534d1e

File tree

17 files changed

+71
-121
lines changed

17 files changed

+71
-121
lines changed

cpp-terminal/cursor.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
#include "cpp-terminal/cursor.hpp"
22

3-
Term::Cursor::Cursor(const std::size_t& row, const std::size_t& column) : m_position({row, column}) {}
3+
Term::Cursor::Cursor(const std::size_t& row, const std::size_t& column) : m_rows(row), m_columns(column) {}
44

5-
std::size_t Term::Cursor::row() const { return m_position.first; }
5+
std::size_t Term::Cursor::row() const { return m_rows; }
66

7-
std::size_t Term::Cursor::column() const { return m_position.second; }
7+
std::size_t Term::Cursor::column() const { return m_columns; }
88

99
bool Term::Cursor::empty() const
1010
{
11-
if(m_position.first == 0 && m_position.second == 0) return true;
11+
if(m_rows == 0 && m_columns == 0) return true;
1212
else
1313
return false;
1414
}
1515

16-
void Term::Cursor::setRow(const std::size_t& row) { m_position.first = row; }
16+
void Term::Cursor::setRow(const std::size_t& row) { m_rows = row; }
1717

18-
void Term::Cursor::setColum(const std::size_t& column) { m_position.second = column; }
18+
void Term::Cursor::setColum(const std::size_t& column) { m_columns = column; }
1919

2020
std::string Term::cursor_off() { return "\x1b[?25l"; }
2121

cpp-terminal/cursor.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
#include <cstddef>
44
#include <string>
5-
#include <utility>
65

76
namespace Term
87
{
@@ -19,7 +18,8 @@ class Cursor
1918
bool empty() const;
2019

2120
private:
22-
std::pair<std::size_t, std::size_t> m_position{0, 0};
21+
std::size_t m_rows{0};
22+
std::size_t m_columns{0};
2323
};
2424

2525
// returns the current cursor position (row, column) (Y, X)

cpp-terminal/platforms/cursor.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#if defined(_WIN32)
44
#include "windows.h"
5+
#include "cpp-terminal/platforms/file.hpp"
56
#else
67
#include "cpp-terminal/input.hpp"
78
#include "cpp-terminal/terminal.hpp"
@@ -10,12 +11,9 @@
1011
Term::Cursor Term::cursor_position()
1112
{
1213
#if defined(_WIN32)
13-
Term::Cursor ret;
14-
HANDLE hConOut{CreateFile("CONOUT$", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)};
1514
CONSOLE_SCREEN_BUFFER_INFO inf;
16-
if(GetConsoleScreenBufferInfo(hConOut, &inf)) { ret = {static_cast<std::size_t>(inf.dwCursorPosition.Y + 1), static_cast<std::size_t>(inf.dwCursorPosition.X + 1)}; }
17-
CloseHandle(hConOut);
18-
return ret;
15+
if(GetConsoleScreenBufferInfo(Private::std_cout.getHandler(), &inf)) return Term::Cursor(inf.dwCursorPosition.Y + 1, inf.dwCursorPosition.X + 1);
16+
else return Term::Cursor(0,0);
1917
#else
2018
Term::terminal << Term::cursor_position_report();
2119
Term::Cursor c;

cpp-terminal/platforms/input.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
#include "cpp-terminal/exception.hpp"
1111
#include "cpp-terminal/input.hpp"
12-
12+
#include "cpp-terminal/platforms/file.hpp"
1313
#include <string>
1414

1515
#if !defined(_WIN32)
@@ -42,12 +42,12 @@ Term::Event Term::Platform::read_raw()
4242
{
4343
#ifdef _WIN32
4444
DWORD nread{0};
45-
GetNumberOfConsoleInputEvents(GetStdHandle(STD_INPUT_HANDLE), &nread);
45+
GetNumberOfConsoleInputEvents(Private::std_cin.getHandler(), &nread);
4646
if(nread >= 1)
4747
{
4848
DWORD nre{0};
4949
std::vector<INPUT_RECORD> buf{nread};
50-
if(!ReadConsoleInput(GetStdHandle(STD_INPUT_HANDLE), &buf[0], buf.size(), &nre)) { Term::Exception("ReadFile() failed"); }
50+
if(!ReadConsoleInput(Private::std_cin.getHandler(), &buf[0], buf.size(), &nre)) { Term::Exception("ReadFile() failed"); }
5151
std::string ret(nre, '\0');
5252
int processed{0};
5353
for(std::size_t i = 0; i != nre; ++i)

cpp-terminal/platforms/screen.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,14 @@
88
#include <unistd.h>
99
#endif
1010

11+
#include "cpp-terminal/platforms/file.hpp"
12+
1113
Term::Screen Term::screen_size()
1214
{
1315
#ifdef _WIN32
14-
Term::Screen ret;
15-
HANDLE hConOut{CreateFile("CONOUT$", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)};
1616
CONSOLE_SCREEN_BUFFER_INFO inf;
17-
if(GetConsoleScreenBufferInfo(hConOut, &inf)) { ret = {static_cast<std::size_t>(inf.srWindow.Bottom - inf.srWindow.Top + 1), static_cast<std::size_t>(inf.srWindow.Right - inf.srWindow.Left + 1)}; }
18-
CloseHandle(hConOut);
19-
return ret;
17+
if(GetConsoleScreenBufferInfo(Private::std_cout.getHandler(), &inf)) return Term::Screen(static_cast<std::size_t>(inf.srWindow.Bottom - inf.srWindow.Top + 1), static_cast<std::size_t>(inf.srWindow.Right - inf.srWindow.Left + 1));
18+
return Term::Screen();
2019
#else
2120
Term::Screen ret;
2221
struct winsize window

cpp-terminal/platforms/terminal.cpp

Lines changed: 13 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
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
@@ -22,7 +21,7 @@
2221
#endif
2322

2423
#include "cpp-terminal/exception.hpp"
25-
24+
#include "cpp-terminal/platforms/file.hpp"
2625
#include <fstream>
2726

2827
void 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()
10489
void 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

193176
void Term::Terminal::detachStreams()

cpp-terminal/terminal.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "cpp-terminal/terminfo.hpp"
66

77
#include <fstream>
8+
#include <ostream> // For std::endl;
89

910
namespace Term
1011
{

cpp-terminal/version.hpp.in

Lines changed: 0 additions & 14 deletions
This file was deleted.

cpp-terminal/window.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ std::size_t Term::Window::get_h() const { return h; }
2525

2626
void Term::Window::set_char(const std::size_t& x, const std::size_t& y, const char32_t& c)
2727
{
28-
//std::cout<<x<<" "<<y<<" "<<w<<" "<<y<<" "<<std::endl;
2928
if(x >= 1 && y >= 1 && x <= w && y <= h) { chars[(y - 1) * w + (x - 1)] = c; }
3029
else { throw Term::Exception("set_char(): (x,y) out of bounds"); }
3130
}

examples/colors.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@
44
#include "cpp-terminal/style.hpp"
55
#include "cpp-terminal/tty.hpp"
66
#include "cpp-terminal/version.hpp"
7+
#include "cpp-terminal/terminal.hpp"
78

89
#include <iostream>
910

1011
int main()
1112
{
12-
std::cout << "Running cpp-terminal version: " << Term::Version << " website : " << Term::Homepage << std::endl << std::endl;
13+
Term::terminal << "Running cpp-terminal version: " << Term::Version << " website : " << Term::Homepage << std::endl << std::endl;
1314

1415
try
1516
{

0 commit comments

Comments
 (0)