55 static const int COLOUR_BRIGHT_ADDEND = 8;
76 VgaColour adjustColour(
int colour,
bool up) {
78 return static_cast<VgaColour
>(colour + COLOUR_BRIGHT_ADDEND);
80 return static_cast<VgaColour
>(colour - COLOUR_BRIGHT_ADDEND);
85 LineFeedNewLine = 0x1,
105 CharacterSetG0 = 0x1000000,
106 CharacterSetG1 = 0x2000000,
124 bool initialise(
bool bClear =
true);
131 void writeStr(
const char* s,
size_t len);
136 virtual uint64_t
readBytewise(uint64_t location, uint64_t size, uintptr_t buffer,
137 bool bCanBlock =
true);
138 virtual uint64_t
writeBytewise(uint64_t location, uint64_t size, uintptr_t buffer,
139 bool bCanBlock =
true);
140 virtual int select(
bool bWriting =
false,
int timeout = 0);
146 virtual void flipThread();
161 void unmarkPrimary();
166 bool isPrimary()
const;
171 void setMode(InputMode mode);
176 InputMode getMode()
const;
179 static const ssize_t BACKBUFFER_COLS_WIDE = 132;
180 static const ssize_t BACKBUFFER_COLS_NORMAL = 80;
181 static const ssize_t BACKBUFFER_ROWS = 25;
183 static const ssize_t BACKBUFFER_STRIDE = BACKBUFFER_COLS_WIDE;
189 void setColour(VgaColour* which,
size_t param,
bool bBright =
false);
193 void doCarriageReturn();
194 void doHorizontalTab();
205 void eraseScreen(uint8_t character);
207 void goHome(ssize_t xmove = 0, ssize_t ymove = 0);
210 void clearBackbuffer();
215 void flip(
bool timer =
false,
bool hideState =
false);
217 void initialiseVterm();
219 void syncVtermRect(VTermRect rect);
220 void syncVtermCell(VTermPos pos);
221 void markVtermRect(VTermRect rect);
222 void markVtermCell(VTermPos pos);
223 void storeVtermScrollback(
const VTermScreenCell* cells,
int cols);
224 int popVtermScrollback(VTermScreenCell* cells,
int cols);
225 VgaColour vtermColour(VTermColor colour,
bool foreground)
const;
227 static void vtermOutput(
const char* bytes,
size_t length,
void* user);
228 static int vtermDamage(VTermRect rect,
void* user);
229 static int vtermMoveRect(VTermRect dest, VTermRect src,
void* user);
230 static int vtermMoveCursor(VTermPos pos, VTermPos oldPos,
int visible,
void* user);
231 static int vtermSetTermProp(VTermProp prop, VTermValue* value,
void* user);
232 static int vtermBell(
void* user);
233 static int vtermResize(
int rows,
int cols,
void* user);
234 static int vtermScrollbackPush(
int cols,
const VTermScreenCell* cells,
void* user);
235 static int vtermScrollbackPop(
int cols, VTermScreenCell* cells,
void* user);
236 static int vtermScrollbackClear(
void* user);
239 uint8_t translate(uint32_t codepoint);
251 void copyVtermCell(
const VTermScreenCell& source,
VgaCell& destination);
253 static const size_t VTERM_SCROLLBACK_LINES = 64;
260 bool m_bQuestionMark;
261 ssize_t m_CursorX, m_CursorY;
262 ssize_t m_SavedCursorX, m_SavedCursorY;
263 ssize_t m_ScrollStart, m_ScrollEnd;
264 ssize_t m_LeftMargin, m_RightMargin;
265 size_t m_CurrentParam;
266 size_t m_Params[MAX_TEXTIO_PARAMS];
269 VgaColour m_Fore, m_Back;
273 uint16_t* m_pFramebuffer;
278 VTermScreen* m_pVtermScreen;
279 VTermState* m_pVtermState;
280 uint8_t m_VtermDirty[BACKBUFFER_STRIDE * BACKBUFFER_ROWS];
281 VgaCell m_VtermScrollback[VTERM_SCROLLBACK_LINES][BACKBUFFER_STRIDE];
282 size_t m_VtermScrollbackLines;
284 char m_TabStops[BACKBUFFER_STRIDE];
334 InputMode m_InputMode;
Buffer< char > m_OutBuffer
virtual bool isBytewise() const
virtual bool isSeekable() const