Fix CUP (cursor position) escape code
This commit is contained in:
parent
31ca6f5c53
commit
5d245e5cc8
@ -178,6 +178,30 @@ static void consoleClearLine(char mode) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------
|
||||||
|
static inline void consolePosition(int x, int y) {
|
||||||
|
//---------------------------------------------------------------------------------
|
||||||
|
// invalid position
|
||||||
|
if(x < 0 || y < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// 1-based, but we'll take a 0
|
||||||
|
if(x < 1)
|
||||||
|
x = 1;
|
||||||
|
if(y < 1)
|
||||||
|
y = 1;
|
||||||
|
|
||||||
|
// clip to console edge
|
||||||
|
if(x > currentConsole->windowWidth)
|
||||||
|
x = currentConsole->windowWidth;
|
||||||
|
if(y > currentConsole->windowHeight)
|
||||||
|
y = currentConsole->windowHeight;
|
||||||
|
|
||||||
|
// 1-based adjustment
|
||||||
|
currentConsole->cursorX = x - 1;
|
||||||
|
currentConsole->cursorY = y - 1;
|
||||||
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------
|
||||||
ssize_t con_write(struct _reent *r,void *fd,const char *ptr, size_t len) {
|
ssize_t con_write(struct _reent *r,void *fd,const char *ptr, size_t len) {
|
||||||
//---------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------
|
||||||
@ -256,32 +280,28 @@ ssize_t con_write(struct _reent *r,void *fd,const char *ptr, size_t len) {
|
|||||||
int x, y;
|
int x, y;
|
||||||
char c;
|
char c;
|
||||||
if(sscanf(escapeseq,"[%d;%d%c", &y, &x, &c) == 3 && (c == 'f' || c == 'H')) {
|
if(sscanf(escapeseq,"[%d;%d%c", &y, &x, &c) == 3 && (c == 'f' || c == 'H')) {
|
||||||
currentConsole->cursorX = x;
|
consolePosition(x, y);
|
||||||
currentConsole->cursorY = y;
|
|
||||||
escaping = false;
|
escaping = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
x = y = 1;
|
x = y = 1;
|
||||||
if(sscanf(escapeseq,"[%d;%c", &y, &c) == 2 && (c == 'f' || c == 'H')) {
|
if(sscanf(escapeseq,"[%d;%c", &y, &c) == 2 && (c == 'f' || c == 'H')) {
|
||||||
currentConsole->cursorX = x;
|
consolePosition(x, y);
|
||||||
currentConsole->cursorY = y;
|
|
||||||
escaping = false;
|
escaping = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
x = y = 1;
|
x = y = 1;
|
||||||
if(sscanf(escapeseq,"[;%d%c", &x, &c) == 2 && (c == 'f' || c == 'H')) {
|
if(sscanf(escapeseq,"[;%d%c", &x, &c) == 2 && (c == 'f' || c == 'H')) {
|
||||||
currentConsole->cursorX = x;
|
consolePosition(x, y);
|
||||||
currentConsole->cursorY = y;
|
|
||||||
escaping = false;
|
escaping = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
x = y = 1;
|
x = y = 1;
|
||||||
if(sscanf(escapeseq,"[;%c", &c) == 1 && (c == 'f' || c == 'H')) {
|
if(sscanf(escapeseq,"[;%c", &c) == 1 && (c == 'f' || c == 'H')) {
|
||||||
currentConsole->cursorX = x;
|
consolePosition(x, y);
|
||||||
currentConsole->cursorY = y;
|
|
||||||
escaping = false;
|
escaping = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user