提交 20c450ef 编写于 作者: A Anatolij Gustschin 提交者: Rodolfo Giometti

Fix video console newline and carriage return handling

Lines of the lenght CONSOLE_COLS or greater than CONSOLE_COLS
are not displayed correctly. This is an attempt to fix
this issue. Also add carriage return handling.
Signed-off-by: NAnatolij Gustschin <agust@denx.de>
Signed-off-by: NRodolfo Giometti <giometti@linux.it>
上级 422b1a01
......@@ -647,7 +647,14 @@ static void console_back (void)
static void console_newline (void)
{
CURSOR_OFF console_row++;
/* Check if last character in the line was just drawn. If so, cursor was
overwriten and need not to be cleared. Cursor clearing without this
check causes overwriting the 1st character of the line if line lenght
is >= CONSOLE_COLS
*/
if (console_col < CONSOLE_COLS)
CURSOR_OFF
console_row++;
console_col = 0;
/* Check if we need to scroll the terminal */
......@@ -660,16 +667,26 @@ static void console_newline (void)
}
}
static void console_cr (void)
{
CURSOR_OFF console_col = 0;
}
/*****************************************************************************/
void video_putc (const char c)
{
static int nl = 1;
switch (c) {
case 13: /* ignore */
case 13: /* back to first column */
console_cr ();
break;
case '\n': /* next line */
console_newline ();
if (console_col || (!console_col && nl))
console_newline ();
nl = 1;
break;
case 9: /* tab 8 */
......@@ -691,8 +708,10 @@ void video_putc (const char c)
console_col++;
/* check for newline */
if (console_col >= CONSOLE_COLS)
if (console_col >= CONSOLE_COLS) {
console_newline ();
nl = 0;
}
}
CURSOR_SET}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册