From cc7e3519a67c8080c44a104ab1b5d4d61b6b35c5 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sat, 27 Oct 2018 17:39:08 +0200 Subject: [PATCH] Add a /bin/clear that prints the clear terminal escape sequence. It doesn't work yet, but it will! --- AK/printf.cpp | 14 ++++++++------ Kernel/_fs_contents | Bin 1024000 -> 1024000 bytes Kernel/sync-sh | 1 + Userland/.gitignore | 1 + Userland/Makefile | 9 +++++++-- Userland/clear.cpp | 8 ++++++++ 6 files changed, 25 insertions(+), 8 deletions(-) create mode 100644 Userland/clear.cpp diff --git a/AK/printf.cpp b/AK/printf.cpp index 5df39a8cfa..4bdc241fda 100644 --- a/AK/printf.cpp +++ b/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 -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 -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 -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 -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 -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; diff --git a/Kernel/_fs_contents b/Kernel/_fs_contents index 93f5d7a1445af339dd5722edfee57cdc31cab5ee..a705e7a43a29af9af0f54b184a20956b70c1fc0c 100644 GIT binary patch delta 58538 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

oltRa|>IEJiyD)MQt;-D*3A*aFe zO-7ss8w%D0JBG{=qzG~vY&=*3b_`h=m;{;FbQkSzdnV8@X4fc1cnAzKBOfE`1&6U+l0LnaCi zSLkW555dBqW5}*d0iOo@3oHOShKv)e4s;BeKbQqMhRhJm1|35d3ubwjXzi+=ih2y$ z;;AegFQ$I}|9=+)_3z^B1N5=f&Y!*r(Ij3TU{G!Z@h!XrinP%;56A!AyK zbmuG^SpM+#1-lt}7;!Er)9hg3i0WYB@N8w_*xErn&O%bVy9J_;xgA3PX=mZM($2#1 zrH6$>x|fARq>II$BcYdtXsm&xwx<)K?{YVUKHbB@F}G*?x*DcWOhTYe45wX?!U5_uffiY}FfcIG^&%E|cQY_BfV!nn_4N#(rDThd zZmXTaz`(#bkp+JF>|D^TL=zDF#h_hDeTak9K$j$g#tvYszE^@A+=oyPx*~l`FXAlR zEl>x5!bX50gPGv~bXm9=GvuJPqoD0eeJmW((8F`jFfcHjK)TKL3W@>D47V8=7_KaZ ztPljPA_pB;Zp zx!aZ(d_)e91Ovkx@QU*v5}@k%B=;uS_^Inb53AdEb~0^)-%>V2?e zdeRj}uUOEHx-ZuAF)(zt&iMELf9nDM*4c~<3_I>kVBvTn%)`I{zEbIBBNGEdc=&&_ z3^q`Axt<9$Lb2!H|Np8CAHaQeTLuRP2L9GFj0_B*PW2B^zdMp?I_Fi!1MET|Et43h zU%1LBX$mUuUKD|p9T5olzxBkw|NsAQJ@W7W{|sf2GSG$IQIY?*UI2;cfJEFF85pK- zxXGkkKL;dc0umEtWMDYXqH+&(FEuB`tZuOLU)b@2#)4W8@V7i>U|{HV;O=Y%X$uU< zcsqfGqj&C$fB*jnznBdkZP@bf|NqV#FQ#yTec-^~YWVN}f5^?}8@WK^Bf%LTK%uZ4 za>(!W1J@Wu>(eK(aJLDEf zYHeU6dH-5Hc^lY5K%-QSES)YY9Nm(ww@X=fTTUcvn4+G#8`wzRzot97fo*gH8!a}l zIZPyOm;yr`u3-w8Lc}lyOoZfN3M7pqW|(3FsKkN~Q-DjW(P4_wVT#dV3LL`}pfZB^ zVG0!0*oG;<3LwK2U?v&E6kvTM4^yauhAChNq=Q<^FF;2z2L=RZ@PHb&>EFNyq))HB zA@l5RdSyM7%(3;K;a7>^#Bi0 zhP@DzxKm!z-;BbWwP<#aog9a#GOa>27 z@PTDP0~E4g7HEJX8O(wVP`HBGpaF_PFbgz5(LaTS!}d8d14D^i^Ba+XjP0NP>Bfh{d(DaG15TaD?@+aMbp&aFlhja2)Ev zip{Y~bRj8z*8$N8x*Z5)h;9!H$N%ol{~r8ensk+i4b<6wump93oW^vX1}1^&0teYS z>Ou0LQ`SNE0fN{d4C2pbU|>jTMvOjyjwng&MT|ax?gIn`8gw)P)azn+(1SR29dxfv z1k&IFX!K%vKMTi3Xy3k!fq`M$1eSXEXhRzV0|Tg|3>!_TW?*12KpGBdWME(bSqO3< zsI%V-9Xz{g<3|dHo2aC}3gGMW!EKxv=9;{ChlUCNS zF))BI@@N5wzh)W>#~RQ{D^Am$S(t@Emm;?wC>00wR~0~8&{ZMbWAHe^YoVZ^fDA*B zFzDEo<|6`z2fAzjoJ6`8htghaJxjNX3Jd=}36i_5xX$K3QH^;+v$cbihOOP$g~ z;M15H7$EK$J$9u;g{S#|L1&1HK+EmYvxc{O!x%f*nrl>e7)w|>uf0Ce>!Ko|d8qSZ z>;Dp&h8h*-(OxSpdaX7@Zc@ikhpX2LQ;6ub!bI@)TCr_XN76`KuXXx!9Y$GxP?^_x zBN}q;$(m{4Yfl(EK|9nXrU&RUiXzwCF=DMO9PX_w9A-@{9E)0s$Kgn7S2RNOeQ1Wz zFI!kR4z{qsPk#rMw4e$JHq^fcdiwi@8WzL_CvqSaPzD?$!Je^#sS|wI3LD6m z3T)Hs3>cNzKn__0Ic)`03o(G|v+0cT9P+Gd*cliiL6sR3EBLgPQ%u`T7$sOZ4@2uS z6-a&7z{bD;!pQX*h~F@cg`)vnpVbE#9(eJag@FN7X>oumE&5(tQV+Yggu2(3s9+ov z#)G}Ws%I$Sc+J##-VpzKFiLAIoE4TY<8c=i9?+$@FTwXq=`t`dK!_d{AX2 zRnc6$UD*VU-oA@&T3bu*wQ_vKHuoGg)Y5 z1gfk+>Ot0k>LO6(1ggA1l^&?_3SwYjSOz*A4XQpIH0g{~SH*$uk#Ctc{g)l1+;k;- zMk!Xv^`@QnjH-ycA>mEkPDHKq@Ox6(fMCtR}ECFeHO2E5^^D zyG(8~ZHr-&;NX1H4wS0>nac*d^7#z#2Zfa!Od?RdSiF&asVyC zzVU*C6||PQQgIuacBWZ-WpVF9hBKjxys!Enq)g_+^MiwYfjWcB>*EG!HR{M&B-SD72rfxh0^ zv4gCML}+E>_WHHu#}YpNeImwik$2$!0(>EG{Xxr{W&FDo5H*zZ>$i-5yM0tRUgqGe z;HX!>F*6ySoE&&ds{SyAeHwoLeIZ2N0mT5hg1pzA@#PK%1_m30QvJ>KjF9dXs29(( zlZ%0Y!SK@ekDV?mJl!rT0*05qk9NsO?`M(_Cq$lv>Cr*lL?VVdTooKlA)+)b8bZk8W%z=%qyMQl41&^(RuBUJQ0UKK{1SjLCJpGqP*6hv)}#TQZVHkISpaInfQG(7O&HMW+n^>)JOcv*=%RXM zXcHzIbo%LRM0dLg)P(7nJ)N(BNeMKP47o9s19oHR3bX0PrA%T&^Qcq>jLX?MIw@%KjBfFQx9qSr>_(eB0Ac z2fRgs9aKC<$Hh-SeV2nPvlh$-wSR7cS)lgMceM78Jm?Pg$3Oo6-&F%{^nlkEEbam|g&^%8 zP&$CLf9`;9U>BQK!(@YVZ$oV>3&*-v7LK`1EF7F|#A8qk1E!uIsyDm^q94?>(r9Jj z2+hmR%P-GUNG&SbzPpC$DU%SWY6rDjU=1S==nd?k2@3H10BAyD`hx@P3iZYe3=E!) zi2VqlL*K)YE-e8a-rkIK@47eW65Bb5OH4r15ummQtl0!wG2n%CiAfk#J;*trW>gY% z0v|NbF2um-$^cq2018W(0??8HAEbNPiy0UgO4|?<^i>QD3^Hvj9H1d7P&8tzovIK90!N7KS=ptu2^BL~9Es zg15DWZ9_ehM&epq;FWuwhZllM(HEdyZJ?E&XFz49>~HW&&*;O=KZN*OJ~1*d@b`nK zDigtN2@d}HmdA_?4E342Siu5_W>`E*Gwd~@8TJUN83t)V!J1*B;D*a&(2`JNuxYSn zm=~A_ZHBD@b9nh%vOpHso9u$LoM6qcVz43LX4n+4N?0>&9+(Ghh8+WQV9l^yU_Ibw z*iEnmtQqzk%!4+=W`P?nux424E*}uT{s*EN25C~knqj=)CKb3DrUO#>1J(?)2J^%q zdr(Wj99T0f0jvky466f6z?xybU>>L$_7coeEGev4-Lt0Oan9wbp_E3`#o9UfgBGgfk2vK z3+8~=gfJz68)72Udk--S<7|mB$hWa@fYy=OgGQ9vSU6S_i4&02Z3K;IwXtygY=P+i z)XKtfs+EO9wb)8QwU~<`G;cH4!*@(VplTn~uz@wi7C;+f0=dkHl_H>d43Hua1~trd zKny4b@y!?*7=9o%$!tMu8j+f0pvgE;V8BMQKw~od+7OE}K_gp_I}kfKL0eE6I$7*F zU~RTY1_lO@0U$d;ZM0Nq8!d$qvdA(EO&+xVddZy0R!8k3lummoD2*x%+vSDv&gZ5oUnigJlq9pMj1fbVHbEA z7|OuyFt^Ex&$~ChSSPT3-4Z6*(aQ^xM=vknXVe_MykPY5g3-$h%u*7kk6vEDME}bR zn2pU6r@zhT(B=dkiU68{89h)DbaLQ}(E}AZAjdw2$B!PUsKNqTuT;Wf`2ThN-d^Vm zHk{>R*~hthYa}j!HjscMOP9VBU}0crex20tTMT)D(ddDS&Qp&=>V57?48pp!G&|RX!(NI^<$iUwc09q3H?HFh+`!N?4cF>YY z4v;3aO=|3nrB54bRCpLl6&rqom;8U@pK?IqP)CRgPYEAL1E^3cVKMyn8eU)>KG!OCm=PRP4MAT7kG1x+L*yr;Ccf=t%{mCl%m0sQ^?) z5PwnuifU{p6@V2$PAUL1$vCM1tdHcA3Pul9WY{%&pyKF(ig*uK96eBR^gu<@4^*6f nF^*MadhQO^{_Tt3aKwtYv2eAqaJRAWw6XBEvG6Tp;hzHl4SKv* delta 20691 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 diff --git a/Kernel/sync-sh b/Kernel/sync-sh index baa10ce637..11f19741d2 100755 --- a/Kernel/sync-sh +++ b/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 diff --git a/Userland/.gitignore b/Userland/.gitignore index fd9204f785..2021222cef 100644 --- a/Userland/.gitignore +++ b/Userland/.gitignore @@ -11,3 +11,4 @@ true hostname cat uname +clear diff --git a/Userland/Makefile b/Userland/Makefile index d7b2d408b9..12370c4b6f 100644 --- a/Userland/Makefile +++ b/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 $< diff --git a/Userland/clear.cpp b/Userland/clear.cpp new file mode 100644 index 0000000000..c7568b384e --- /dev/null +++ b/Userland/clear.cpp @@ -0,0 +1,8 @@ +#include + +int main(int, char**) +{ + printf("\033[3J\033[H\033[2J"); + return 0; +} +