Add IND, NEL and RI
These controls always operate on the buffer, in keeping with LF.
This commit is contained in:
parent
0c2f9b314e
commit
eb997019c1
77
ANSI.c
77
ANSI.c
@ -152,7 +152,7 @@
|
||||
remove wcstok, avoiding potential interference with the host;
|
||||
similarly, use a private heap instead of malloc.
|
||||
|
||||
v1.80, 26 October to 30 November, 2017:
|
||||
v1.80, 26 October to 3 December, 2017:
|
||||
fix unloading;
|
||||
revert back to (re)storing buffer cursor position;
|
||||
increase cache to five handles;
|
||||
@ -165,7 +165,8 @@
|
||||
use intermediate byte '+' to use buffer, not window;
|
||||
ESC followed by a control character will display that character;
|
||||
added palette sequences;
|
||||
change the scan lines in the graphics set to their actual Unicode chars.
|
||||
change the scan lines in the graphics set to their actual Unicode chars;
|
||||
added IND, NEL & RI (using buffer, in keeping with LF).
|
||||
*/
|
||||
|
||||
#include "ansicon.h"
|
||||
@ -1418,6 +1419,61 @@ void InterpretEscSeq( void )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ScrollDown( void )
|
||||
{
|
||||
CONSOLE_SCREEN_BUFFER_INFO Info;
|
||||
SMALL_RECT Rect;
|
||||
COORD Pos;
|
||||
CHAR_INFO CharInfo;
|
||||
|
||||
GetConsoleScreenBufferInfo( hConOut, &Info );
|
||||
if (CUR.Y == LAST)
|
||||
{
|
||||
Rect.Left = LEFT;
|
||||
Rect.Right = RIGHT;
|
||||
Rect.Top = 1;
|
||||
Rect.Bottom = LAST;
|
||||
Pos.X = Pos.Y = 0;
|
||||
CharInfo.Char.UnicodeChar = ' ';
|
||||
CharInfo.Attributes = Info.wAttributes;
|
||||
ScrollConsoleScreenBuffer( hConOut, &Rect, NULL, Pos, &CharInfo );
|
||||
}
|
||||
else
|
||||
{
|
||||
++CUR.Y;
|
||||
SetConsoleCursorPosition( hConOut, CUR );
|
||||
}
|
||||
}
|
||||
|
||||
void ScrollUp( void )
|
||||
{
|
||||
CONSOLE_SCREEN_BUFFER_INFO Info;
|
||||
SMALL_RECT Rect;
|
||||
COORD Pos;
|
||||
CHAR_INFO CharInfo;
|
||||
|
||||
GetConsoleScreenBufferInfo( hConOut, &Info );
|
||||
if (CUR.Y == 0)
|
||||
{
|
||||
Rect.Left = LEFT;
|
||||
Rect.Right = RIGHT;
|
||||
Rect.Top = 0;
|
||||
Rect.Bottom = LAST - 1;
|
||||
Pos.X = 0;
|
||||
Pos.Y = 1;
|
||||
CharInfo.Char.UnicodeChar = ' ';
|
||||
CharInfo.Attributes = Info.wAttributes;
|
||||
ScrollConsoleScreenBuffer( hConOut, &Rect, NULL, Pos, &CharInfo );
|
||||
}
|
||||
else
|
||||
{
|
||||
--CUR.Y;
|
||||
SetConsoleCursorPosition( hConOut, CUR );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DWORD WINAPI BellThread( LPVOID param )
|
||||
{
|
||||
// XP doesn't support SND_SENTRY, so if it fails, try without.
|
||||
@ -1491,6 +1547,23 @@ ParseAndPrintString( HANDLE hDev,
|
||||
suffix2 = c;
|
||||
else if (suffix2 != 0)
|
||||
state = 1;
|
||||
else if (c == 'E') // NEL Next Line
|
||||
{
|
||||
PushBuffer( '\n' );
|
||||
state = 1;
|
||||
}
|
||||
else if (c == 'D') // IND Index
|
||||
{
|
||||
FlushBuffer();
|
||||
ScrollDown();
|
||||
state = 1;
|
||||
}
|
||||
else if (c == 'M') // RI Reverse Index
|
||||
{
|
||||
FlushBuffer();
|
||||
ScrollUp();
|
||||
state = 1;
|
||||
}
|
||||
else if (c == '[' || // CSI Control Sequence Introducer
|
||||
c == ']') // OSC Operating System Command
|
||||
{
|
||||
|
@ -91,7 +91,7 @@
|
||||
use -pu to unload from the parent.
|
||||
*/
|
||||
|
||||
#define PDATE L"30 November, 2017"
|
||||
#define PDATE L"3 December, 2017"
|
||||
|
||||
#include "ansicon.h"
|
||||
#include "version.h"
|
||||
|
12
readme.txt
12
readme.txt
@ -189,9 +189,12 @@ Sequences Recognised
|
||||
\e[#;#f HVP Character And Line Position
|
||||
\e[#@ ICH Insert Character
|
||||
\e[#L IL Insert Line
|
||||
\eD IND Index
|
||||
SI LS0 Locking-shift Zero (see below)
|
||||
SO LS1 Locking-shift One
|
||||
\eE NEL Next Line
|
||||
\e[#b REP Repeat
|
||||
\eM RI Reverse Index
|
||||
\e[#;#;#m SGR Select Graphic Rendition
|
||||
\e[#d VPA Line Position Absolute
|
||||
\e[#k VPB Line Position Backward
|
||||
@ -304,7 +307,7 @@ Version History
|
||||
|
||||
Legend: + added, - bug-fixed, * changed.
|
||||
|
||||
1.80 - 30 November, 2017:
|
||||
1.80 - 3 December, 2017:
|
||||
- fix unloading;
|
||||
- fix -e et al when redirecting to CON;
|
||||
- hook CreateFile and CreateConsoleScreenBuffer to force read/write access
|
||||
@ -319,7 +322,8 @@ Version History
|
||||
+ added Play Sound DECPS;
|
||||
+ added '+' intermediate byte to use the buffer, rather than the window;
|
||||
+ added palette sequences;
|
||||
+ added -pu to unload from the parent.
|
||||
+ added -pu to unload from the parent;
|
||||
+ added IND, NEL and RI.
|
||||
|
||||
1.72 - 24 December, 2015:
|
||||
- handle STD_OUTPUT_HANDLE & STD_ERROR_HANDLE in WriteFile;
|
||||
@ -547,5 +551,5 @@ Distribution
|
||||
in LICENSE.txt.
|
||||
|
||||
|
||||
=============================
|
||||
Jason Hood, 30 November, 2017.
|
||||
============================
|
||||
Jason Hood, 3 December, 2017.
|
||||
|
@ -71,6 +71,10 @@ the Windows default beep (but only if it's not already playing).
|
||||
[b repeat the previous character
|
||||
[#b repeat the previous character # times
|
||||
|
||||
D move cursor down one line (scroll if necessary; always uses buffer)
|
||||
E same as LF
|
||||
M move cursor up one line (scroll if necessary; always uses buffer)
|
||||
|
||||
[A move cursor up one line
|
||||
[#A move cursor up # lines
|
||||
[B move cursor down one line
|
||||
|
Loading…
x
Reference in New Issue
Block a user