summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Kernel/Console.cpp16
-rw-r--r--Kernel/Console.h8
-rwxr-xr-xKernel/sync-sh1
-rw-r--r--Userland/.gitignore1
-rw-r--r--Userland/Makefile9
-rw-r--r--Userland/tst.cpp11
6 files changed, 41 insertions, 5 deletions
diff --git a/Kernel/Console.cpp b/Kernel/Console.cpp
index 0bca851d5b..2ce58760e6 100644
--- a/Kernel/Console.cpp
+++ b/Kernel/Console.cpp
@@ -171,10 +171,22 @@ void Console::escape$m(const Vector<unsigned>& params)
break;
}
}
-
vga_set_attr(m_currentAttribute);
}
+void Console::escape$s(const Vector<unsigned>&)
+{
+ m_savedCursorRow = m_cursorRow;
+ m_savedCursorColumn = m_cursorColumn;
+}
+
+void Console::escape$u(const Vector<unsigned>&)
+{
+ m_cursorRow = m_savedCursorRow;
+ m_cursorColumn = m_savedCursorColumn;
+ vga_set_cursor(m_cursorRow, m_cursorColumn);
+}
+
void Console::escape$H(const Vector<unsigned>& params)
{
unsigned row = 1;
@@ -229,6 +241,8 @@ void Console::executeEscapeSequence(byte final)
case 'H': escape$H(params); break;
case 'J': escape$J(params); break;
case 'm': escape$m(params); break;
+ case 's': escape$s(params); break;
+ case 'u': escape$u(params); break;
default: break;
}
diff --git a/Kernel/Console.h b/Kernel/Console.h
index b7a09e7afc..b10882d2f1 100644
--- a/Kernel/Console.h
+++ b/Kernel/Console.h
@@ -21,12 +21,18 @@ private:
void escape$H(const Vector<unsigned>&);
void escape$J(const Vector<unsigned>&);
void escape$m(const Vector<unsigned>&);
+ void escape$s(const Vector<unsigned>&);
+ void escape$u(const Vector<unsigned>&);
const byte m_rows { 25 };
const byte m_columns { 80 };
+
byte m_cursorRow { 0 };
byte m_cursorColumn { 0 };
+ byte m_savedCursorRow { 0 };
+ byte m_savedCursorColumn { 0 };
+
byte m_currentAttribute { 0x07 };
void executeEscapeSequence(byte final);
@@ -41,7 +47,5 @@ private:
EscapeState m_escState { Normal };
Vector<byte> m_parameters;
Vector<byte> m_intermediates;
-
- const byte* s_vgaMemory { (const byte*)0xb8000 };
};
diff --git a/Kernel/sync-sh b/Kernel/sync-sh
index 7aee136c76..8584eaa626 100755
--- a/Kernel/sync-sh
+++ b/Kernel/sync-sh
@@ -14,6 +14,7 @@ cp ../Userland/hostname mnt/bin/hostname
cp ../Userland/cat mnt/bin/cat
cp ../Userland/uname mnt/bin/uname
cp ../Userland/clear mnt/bin/clear
+cp ../Userland/tst mnt/bin/tst
cp kernel.map mnt/
umount mnt
sync
diff --git a/Userland/.gitignore b/Userland/.gitignore
index 2021222cef..e365fd391b 100644
--- a/Userland/.gitignore
+++ b/Userland/.gitignore
@@ -12,3 +12,4 @@ hostname
cat
uname
clear
+tst
diff --git a/Userland/Makefile b/Userland/Makefile
index 12370c4b6f..7205787970 100644
--- a/Userland/Makefile
+++ b/Userland/Makefile
@@ -11,7 +11,8 @@ OBJS = \
hostname.o \
cat.o \
uname.o \
- clear.o
+ clear.o \
+ tst.o
APPS = \
id \
@@ -26,7 +27,8 @@ APPS = \
hostname \
cat \
uname \
- clear
+ clear \
+ tst
ARCH_FLAGS =
STANDARD_FLAGS = -std=c++17 -nostdinc++ -nostdlib
@@ -85,6 +87,9 @@ uname: uname.o
clear: clear.o
$(LD) -o $@ $(LDFLAGS) $< ../LibC/LibC.a
+tst: tst.o
+ $(LD) -o $@ $(LDFLAGS) $< ../LibC/LibC.a
+
.cpp.o:
@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
diff --git a/Userland/tst.cpp b/Userland/tst.cpp
new file mode 100644
index 0000000000..31a1439e64
--- /dev/null
+++ b/Userland/tst.cpp
@@ -0,0 +1,11 @@
+#include <LibC/stdio.cpp>
+
+int main(int argc, char** argv)
+{
+ printf("Counting to 100000: \033[s");
+ for (unsigned i = 0; i <= 100000; ++i) {
+ printf("\033[u\033[s%u", i);
+ }
+ printf("\n");
+ return 0;
+}