public WindowsAnsiOutputStream(OutputStream os) throws IOException { // expected diff with WindowsAnsiPrintStream.java super(os); // expected diff with WindowsAnsiPrintStream.java getConsoleInfo(); originalColors = info.attributes; }
@Override protected void processSaveCursorPosition() throws IOException { getConsoleInfo(); savedX = info.cursorPosition.x; savedY = info.cursorPosition.y; }
@Override protected void processCursorUp(int count) throws IOException { getConsoleInfo(); info.cursorPosition.y = (short) Math.max(info.window.top, info.cursorPosition.y - count); applyCursorPosition(); }
@Override protected void processCursorLeft(int count) throws IOException { getConsoleInfo(); info.cursorPosition.x = (short) Math.max(0, info.cursorPosition.x - count); applyCursorPosition(); }
@Override protected void processCursorDown(int count) throws IOException { getConsoleInfo(); info.cursorPosition.y = (short) Math.min(Math.max(0, info.size.y - 1), info.cursorPosition.y + count); applyCursorPosition(); }
@Override protected void processCursorTo(int row, int col) throws IOException { getConsoleInfo(); info.cursorPosition.y = (short) Math.max(info.window.top, Math.min(info.size.y, info.window.top + row - 1)); info.cursorPosition.x = (short) Math.max(0, Math.min(info.window.width(), col - 1)); applyCursorPosition(); }
@Override protected void processCursorToColumn(int x) throws IOException { getConsoleInfo(); info.cursorPosition.x = (short) Math.max(0, Math.min(info.window.width(), x - 1)); applyCursorPosition(); }
@Override protected void processCursorRight(int count) throws IOException { getConsoleInfo(); info.cursorPosition.x = (short) Math.min(info.window.width(), info.cursorPosition.x + count); applyCursorPosition(); }
@Override protected void processDeleteLine(int optionInt) throws IOException { getConsoleInfo(); SMALL_RECT scroll = info.window.copy(); scroll.top = info.cursorPosition.y; COORD org = new COORD(); org.x = 0; org.y = (short)(info.cursorPosition.y - optionInt); CHAR_INFO info = new CHAR_INFO(); info.attributes = originalColors; info.unicodeChar = ' '; if (ScrollConsoleScreenBuffer(console, scroll, scroll, org, info) == 0) { throw new IOException(WindowsSupport.getLastErrorMessage()); } }
@Override protected void processInsertLine(int optionInt) throws IOException { getConsoleInfo(); SMALL_RECT scroll = info.window.copy(); scroll.top = info.cursorPosition.y; COORD org = new COORD(); org.x = 0; org.y = (short)(info.cursorPosition.y + optionInt); CHAR_INFO info = new CHAR_INFO(); info.attributes = originalColors; info.unicodeChar = ' '; if (ScrollConsoleScreenBuffer(console, scroll, scroll, org, info) == 0) { throw new IOException(WindowsSupport.getLastErrorMessage()); } }
@Override protected void processEraseLine(int eraseOption) throws IOException { getConsoleInfo(); int[] written = new int[1]; switch (eraseOption) { case ERASE_LINE: COORD leftColCurrRow = info.cursorPosition.copy(); leftColCurrRow.x = 0; FillConsoleOutputAttribute(console, originalColors, info.size.x, leftColCurrRow, written); FillConsoleOutputCharacterW(console, ' ', info.size.x, leftColCurrRow, written); break; case ERASE_LINE_TO_BEGINING: COORD leftColCurrRow2 = info.cursorPosition.copy(); leftColCurrRow2.x = 0; FillConsoleOutputAttribute(console, originalColors, info.cursorPosition.x, leftColCurrRow2, written); FillConsoleOutputCharacterW(console, ' ', info.cursorPosition.x, leftColCurrRow2, written); break; case ERASE_LINE_TO_END: int lengthToLastCol = info.size.x - info.cursorPosition.x; FillConsoleOutputAttribute(console, originalColors, lengthToLastCol, info.cursorPosition.copy(), written); FillConsoleOutputCharacterW(console, ' ', lengthToLastCol, info.cursorPosition.copy(), written); break; default: break; } }
@Override protected void processEraseScreen(int eraseOption) throws IOException { getConsoleInfo(); int[] written = new int[1]; switch (eraseOption) {