Browse Source

Add a /bin/clear that prints the clear terminal escape sequence.

It doesn't work yet, but it will!
Andreas Kling 6 years ago
parent
commit
cc7e3519a6
6 changed files with 25 additions and 8 deletions
  1. 8 6
      AK/printf.cpp
  2. BIN
      Kernel/_fs_contents
  3. 1 0
      Kernel/sync-sh
  4. 1 0
      Userland/.gitignore
  5. 7 2
      Userland/Makefile
  6. 8 0
      Userland/clear.cpp

+ 8 - 6
AK/printf.cpp

@@ -1,8 +1,10 @@
+#define ALWAYS_INLINE inline __attribute__ ((always_inline))
+
 typedef unsigned char byte;
 typedef unsigned short word;
 typedef unsigned int dword;
 
-inline size_t strlen(const char* str)
+ALWAYS_INLINE size_t strlen(const char* str)
 {
     size_t len = 0;
     while (*(str++))
@@ -13,7 +15,7 @@ inline size_t strlen(const char* str)
 static constexpr const char* h = "0123456789abcdef";
 
 template<typename PutChFunc>
-int printHex(PutChFunc putch, char*& bufptr, dword number, byte fields)
+ALWAYS_INLINE int printHex(PutChFunc putch, char*& bufptr, dword number, byte fields)
 {
     int ret = 0;
     byte shr_count = fields * 4;
@@ -26,7 +28,7 @@ int printHex(PutChFunc putch, char*& bufptr, dword number, byte fields)
 }
 
 template<typename PutChFunc>
-int printNumber(PutChFunc putch, char*& bufptr, dword number, bool leftPad, bool zeroPad, dword fieldWidth)
+ALWAYS_INLINE int printNumber(PutChFunc putch, char*& bufptr, dword number, bool leftPad, bool zeroPad, dword fieldWidth)
 {
     dword divisor = 1000000000;
     char ch;
@@ -67,7 +69,7 @@ int printNumber(PutChFunc putch, char*& bufptr, dword number, bool leftPad, bool
 }
 
 template<typename PutChFunc>
-int printString(PutChFunc putch, char*& bufptr, const char* str, bool leftPad, dword fieldWidth)
+ALWAYS_INLINE int printString(PutChFunc putch, char*& bufptr, const char* str, bool leftPad, dword fieldWidth)
 {
     size_t len = strlen(str);
     if (!fieldWidth)
@@ -88,7 +90,7 @@ int printString(PutChFunc putch, char*& bufptr, const char* str, bool leftPad, d
 
 
 template<typename PutChFunc>
-int printSignedNumber(PutChFunc putch, char*& bufptr, int number, bool leftPad, bool zeroPad, dword fieldWidth)
+ALWAYS_INLINE int printSignedNumber(PutChFunc putch, char*& bufptr, int number, bool leftPad, bool zeroPad, dword fieldWidth)
 {
     if (number < 0) {
         putch(bufptr, '-');
@@ -98,7 +100,7 @@ int printSignedNumber(PutChFunc putch, char*& bufptr, int number, bool leftPad,
 }
 
 template<typename PutChFunc>
-int printfInternal(PutChFunc putch, char* buffer, const char*& fmt, char*& ap)
+ALWAYS_INLINE int printfInternal(PutChFunc putch, char* buffer, const char*& fmt, char*& ap)
 {
     const char *p;
 

BIN
Kernel/_fs_contents


+ 1 - 0
Kernel/sync-sh

@@ -12,6 +12,7 @@ cp ../Userland/false mnt/bin/false
 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 kernel.map mnt/
 umount mnt
 sync

+ 1 - 0
Userland/.gitignore

@@ -11,3 +11,4 @@ true
 hostname
 cat
 uname
+clear

+ 7 - 2
Userland/Makefile

@@ -10,7 +10,8 @@ OBJS = \
        false.o \
        hostname.o \
        cat.o \
-       uname.o
+       uname.o \
+       clear.o
 
 APPS = \
        id \
@@ -24,7 +25,8 @@ APPS = \
        false \
        hostname \
        cat \
-       uname
+       uname \
+       clear
 
 ARCH_FLAGS =
 STANDARD_FLAGS = -std=c++17 -nostdinc++ -nostdlib
@@ -80,6 +82,9 @@ cat: cat.o
 uname: uname.o
 	$(LD) -o $@ $(LDFLAGS) $< ../LibC/LibC.a
 
+clear: clear.o
+	$(LD) -o $@ $(LDFLAGS) $< ../LibC/LibC.a
+
 .cpp.o:
 	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
 

+ 8 - 0
Userland/clear.cpp

@@ -0,0 +1,8 @@
+#include <LibC/stdio.h>
+
+int main(int, char**)
+{
+    printf("\033[3J\033[H\033[2J");
+    return 0;
+}
+