|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef LARGE_CONSOLE_READ_H |
|
#define LARGE_CONSOLE_READ_H |
|
|
|
#include <windows.h> |
|
#include <stdlib.h> |
|
|
|
#include <vector> |
|
|
|
#include "SmallRect.h" |
|
#include "../shared/DebugClient.h" |
|
#include "../shared/WinptyAssert.h" |
|
|
|
class Win32ConsoleBuffer; |
|
|
|
class LargeConsoleReadBuffer { |
|
public: |
|
LargeConsoleReadBuffer(); |
|
const SmallRect &rect() const { return m_rect; } |
|
const CHAR_INFO *lineData(int line) const { |
|
validateLineNumber(line); |
|
return &m_data[(line - m_rect.Top) * m_rectWidth]; |
|
} |
|
|
|
private: |
|
CHAR_INFO *lineDataMut(int line) { |
|
validateLineNumber(line); |
|
return &m_data[(line - m_rect.Top) * m_rectWidth]; |
|
} |
|
|
|
void validateLineNumber(int line) const { |
|
if (line < m_rect.Top || line > m_rect.Bottom) { |
|
trace("Fatal error: LargeConsoleReadBuffer: invalid line %d for " |
|
"read rect %s", line, m_rect.toString().c_str()); |
|
abort(); |
|
} |
|
} |
|
|
|
SmallRect m_rect; |
|
int m_rectWidth; |
|
std::vector<CHAR_INFO> m_data; |
|
|
|
friend void largeConsoleRead(LargeConsoleReadBuffer &out, |
|
Win32ConsoleBuffer &buffer, |
|
const SmallRect &readArea, |
|
WORD attributesMask); |
|
}; |
|
|
|
#endif |
|
|