| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #ifndef AGENT_WIN32_CONSOLE_BUFFER_H |
| | #define AGENT_WIN32_CONSOLE_BUFFER_H |
| |
|
| | #include <windows.h> |
| |
|
| | #include <string.h> |
| |
|
| | #include <memory> |
| |
|
| | #include "Coord.h" |
| | #include "SmallRect.h" |
| |
|
| | class ConsoleScreenBufferInfo : public CONSOLE_SCREEN_BUFFER_INFO { |
| | public: |
| | ConsoleScreenBufferInfo() |
| | { |
| | memset(this, 0, sizeof(*this)); |
| | } |
| |
|
| | Coord bufferSize() const { return dwSize; } |
| | SmallRect windowRect() const { return srWindow; } |
| | Coord cursorPosition() const { return dwCursorPosition; } |
| | }; |
| |
|
| | class Win32ConsoleBuffer { |
| | private: |
| | Win32ConsoleBuffer(HANDLE conout, bool owned) : |
| | m_conout(conout), m_owned(owned) |
| | { |
| | } |
| |
|
| | public: |
| | static const int kDefaultAttributes = 7; |
| |
|
| | ~Win32ConsoleBuffer() { |
| | if (m_owned) { |
| | CloseHandle(m_conout); |
| | } |
| | } |
| |
|
| | static std::unique_ptr<Win32ConsoleBuffer> openStdout(); |
| | static std::unique_ptr<Win32ConsoleBuffer> openConout(); |
| | static std::unique_ptr<Win32ConsoleBuffer> createErrorBuffer(); |
| |
|
| | Win32ConsoleBuffer(const Win32ConsoleBuffer &other) = delete; |
| | Win32ConsoleBuffer &operator=(const Win32ConsoleBuffer &other) = delete; |
| |
|
| | HANDLE conout(); |
| | void clearLines(int row, int count, const ConsoleScreenBufferInfo &info); |
| | void clearAllLines(const ConsoleScreenBufferInfo &info); |
| |
|
| | |
| | ConsoleScreenBufferInfo bufferInfo(); |
| | Coord bufferSize(); |
| | SmallRect windowRect(); |
| | void resizeBuffer(const Coord &size); |
| | bool resizeBufferRange(const Coord &initialSize, Coord &finalSize); |
| | bool resizeBufferRange(const Coord &initialSize) { |
| | Coord dummy; |
| | return resizeBufferRange(initialSize, dummy); |
| | } |
| | void moveWindow(const SmallRect &rect); |
| |
|
| | |
| | Coord cursorPosition(); |
| | void setCursorPosition(const Coord &point); |
| |
|
| | |
| | void read(const SmallRect &rect, CHAR_INFO *data); |
| | void write(const SmallRect &rect, const CHAR_INFO *data); |
| |
|
| | void setTextAttribute(WORD attributes); |
| |
|
| | private: |
| | HANDLE m_conout = nullptr; |
| | bool m_owned = false; |
| | }; |
| |
|
| | #endif |
| |
|