From 1257ecc1cc510bb64deedde03cf82bb032a12ce9 Mon Sep 17 00:00:00 2001 From: Tom-on64 Date: Fri, 16 Aug 2024 08:19:01 +0200 Subject: [PATCH] Made 'ls' real and not just a bunch of hardcoded printf calls --- kern.iso | Bin 1470464 -> 1470464 bytes src/kernel.c | 33 +++++++++++++++++++++++---------- todo.txt | 4 +++- 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/kern.iso b/kern.iso index 420efe498b8e7a52fdffff05670e583877d56ffc..f151c92e18bfa7e25e118508704ce2329d22333b 100644 GIT binary patch delta 1766 zcmZuxZA=_h6n(S1z_4t)3(^1vWJJju(EuKsDWf?nh3~36H0br zc4Mbo4LG#MR2!htAAS^cjZz!zkXArxtu-cXG?X<`JKMpO1R_+C@!lCAkT}W7JLlf> z?t63JoAHIKec|enyq0~GlSr&Q9Ye@qse?$9`Ie;_g-qttNpTdBYs`d9n)bf+2$5tH zaQ>2w<)-EQuS(A%xq2Jfhr9)g%&DDXZ3I&a~|AR$L!8f@k#V zYTki}OTKDc-@C^wAIu~qGWL(ELMu*d+0Qn!u_J4LG(-mUzA9f-RrT*BnEYnrQdLcL-PH==7C)cJ^*Tc1ofoJ*{hF(A zO;xvh%F0=OZh@aqKf!|`qh4(Gd%;!xaEQi%6VZKl;` zi`r~bvkx*d^RKFE*H6ti<$Nd5%Kkjsb3l)5GcK>HYH%0S`Jv~G7wZHorm|R5WH+3I zW(Q4yj^CoQY!Sm2N!cQc(7Fw`V2jLckxDw>HKix5{rM@8sVzCd7Oc1|K=qK;dXoie zh)aA{JZ?l_ElMZ9LVMaV>hxzYdX!d5F@%%i^f#HF^4a1Gw z>jtvT(AZaotBm%Yq`j4H7eCJo5^N)z$q|W=V+9H0VWag+i47L)1jfq0FKcyj{t_0( z!_mG`bdfe=iE?)$>gT74#Eim~BQ~ zU`ZZSiXz?-LWJVE@^Uwqh~_`TswzCbSN{B_HtB*5yjhbuQb27>{+~sjAEA^vztk49 zzK>w>+_8KU1a_`XdD8Lvr$SX_2g^c6ZI0rSaFL_12wY%(B0u6i1Xmtzd+kg0br-eU zZWAPy+k>`OaW6M&s#z`vr3>X0%6%w{Q2vPW0LomH3n*(*W};j{*@Q9)cq*BG;kC9`4l(uyGqJx;>&-1?L z^!D6y>J629L*^mr3?UrH4~xqVM|uFN;aN2yN00I& zN@rx-dgo2ZOH29h0v|ZD7*9|s4?;#4>iU=f&guAZC`e(L1`jiXe4Fw^EY{jQa^~?2Y%;lB4HQ|0*yrdM*t{1h^Od3q>q}8v)f8B?6 zT~T^WYd!H@|EzA!Pa=0*Vy`P@1MIu9b8ao}+6@RJ8jiE_%VJsUQ_Lp@(cAhi<28sY zt;0;v5EwqOz_8Qs+LxszhmB=M8}$+kQ|zxu|p%t;q7$ zp5oUy-<^5iTneujFSZ+1nStr{*eGVmApYt79EZ~#MjXEFIEBNDoi7#PIg^_;aYX zeuTV-a*_!+5g1O*)iLEv>4hN2?>7-oPp|O(R$2KB+FrClZ2kysC)!M9>Ce!&fEPko9zk1!Rzf?D zwj?CR^;x2CAny!`NBWY}RPetONx?f7hm?r43rT~NiT_G7;;FvW!xqG^|AJGyTc1zh z39NiEMuQmT>L98tE9L7jdLN=PTgHNw_oMZKrC06P8rzIwK z>*rWay|V)1|K+Q3i>s>6o@08mzLCz#&a>ndYRTJnXQRDgBR1#c=2#$i*;`z-O^q&7 zZKDe(WM>_~c9;DH=R0Og<669yS64MuZ!E&H=7ZS>pxs_m?`m>x6wKLqS%rbU=kG`P z*uj(RpbEr*qCjfUW1wxIXpjaJ1JZ(GK|0Xmpg2%GNDoQ?C4!y+C5^Cy+e6p>1EE;l AWB>pF diff --git a/src/kernel.c b/src/kernel.c index 87f447b..80ab92b 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -316,16 +316,29 @@ void main() { } void listFiles() { - // TODO: Make this real - printf("Total 8\n"); - printf(". [dir]\n"); - printf(".. [dir]\n"); - printf("stage3.bin 2868B\n"); - printf("kernel.bin 13536B\n"); - printf("testfont.fnt 2048B\n"); - printf("term16n.fnt 2048B\n"); - printf("calc.bin 1724B\n"); - printf("editor.bin 1280B\n"); + inode_t* root = (inode_t*)impl_superblock->rootInodePtr; + diskRead(root->extent[0].block * 8, root->extent[0].length * 8, (void*)SCRATCH_BLOCK_LOC); + dirEntry_t* dentry = (dirEntry_t*)SCRATCH_BLOCK_LOC; + + uint32_t total = 0; + while ((dentry + total)->name[0] != '\0') { total++; } + + putc(' '); // TODO + printf("\bTotal %d\n", total); + + while (dentry->name[0] != '\0') { + inode_t* inode = (inode_t*)BOOT_FIRST_INODE_LOC + dentry->id; + + printf("%s", dentry->name); + for (uint32_t pad = (16 - strlen(dentry->name)); pad > 0; pad--) { putc(' '); } + + switch (inode->type) { + case FT_FILE: printf("%dB\n", inode->sizeBytes); break; + case FT_DIR: printf("[dir]\n"); break; + } + + dentry++; + } } void printRegs() { diff --git a/todo.txt b/todo.txt index 31d652e..a9db908 100644 --- a/todo.txt +++ b/todo.txt @@ -100,6 +100,8 @@ Legend: - [x] Malloc() - [x] Free() - [ ] Seek() + - [ ] Tell() + - [ ] Exit() - [ ] Shell - [ ] Separate file/program - [ ] ';' separated commands @@ -122,7 +124,7 @@ Legend: - [ ] cd - [ ] Standard I/O stuff - [ ] stdin - - [ ] stdout + - [x] stdout - [ ] stderr - [x] Memory manager - [x] Memory map