diff options
-rw-r--r-- | Kernel/Console.cpp | 16 | ||||
-rw-r--r-- | Kernel/Console.h | 8 | ||||
-rwxr-xr-x | Kernel/sync-sh | 1 | ||||
-rw-r--r-- | Userland/.gitignore | 1 | ||||
-rw-r--r-- | Userland/Makefile | 9 | ||||
-rw-r--r-- | Userland/tst.cpp | 11 |
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; +} |