git: b38c8d4c6d69 - stable/12 - boot2: need to expand tab output and mask getchar

From: Kyle Evans <kevans_at_FreeBSD.org>
Date: Fri, 08 Oct 2021 06:10:49 UTC
The branch stable/12 has been updated by kevans:

URL: https://cgit.FreeBSD.org/src/commit/?id=b38c8d4c6d691a3a65f90a7023c99bf64790caa4

commit b38c8d4c6d691a3a65f90a7023c99bf64790caa4
Author:     Toomas Soome <tsoome@FreeBSD.org>
AuthorDate: 2020-06-16 20:35:00 +0000
Commit:     Kyle Evans <kevans@FreeBSD.org>
CommitDate: 2021-10-08 02:42:54 +0000

    boot2: need to expand tab output and mask getchar
    
    The BIOS ouput char function does not expand tab.
    Mask getchar with 0xFF.
    
    (cherry picked from commit 6469d2b422960de4b1253cc63b11fa67f896604f)
---
 stand/i386/common/cons.c | 30 ++++++++++++++++++++++++++++--
 1 file changed, 28 insertions(+), 2 deletions(-)

diff --git a/stand/i386/common/cons.c b/stand/i386/common/cons.c
index 96e782fda5c9..25dda1ce7405 100644
--- a/stand/i386/common/cons.c
+++ b/stand/i386/common/cons.c
@@ -53,12 +53,38 @@ xputc(int c)
 		sio_putc(c);
 }
 
+static void
+getcursor(int *row, int *col)
+{
+	v86.ctl = V86_FLAGS;
+	v86.addr = 0x10;
+	v86.eax = 0x300;
+	v86.ebx = 0x7;
+	v86int();
+
+	if (row != NULL)
+		*row = v86.edx >> 8;
+	if (col != NULL)
+		*col = v86.edx & 0xff;
+}
+
 void
 putchar(int c)
 {
+	int i, col;
 
-	if (c == '\n')
+	switch (c) {
+	case '\n':
 		xputc('\r');
+		break;
+	case '\t':
+		col = 0;
+		getcursor(NULL, &col);
+		col = 8 - (col % 8);
+		for (i = 0; i < col; i++)
+			xputc(' ');
+		return;
+	}
 	xputc(c);
 }
 
@@ -100,7 +126,7 @@ int
 getchar(void)
 {
 
-	return (xgetc(0));
+	return (xgetc(0) & 0xff);
 }
 
 int