diff --git a/kern.iso b/kern.iso index 420efe4..f151c92 100644 Binary files a/kern.iso and b/kern.iso differ 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