From 823cd1761f74b924e44022232661eda4eea859cc Mon Sep 17 00:00:00 2001 From: Tom-on64 Date: Fri, 16 Aug 2024 08:40:08 +0200 Subject: [PATCH] OS now displays info about file when it's name is typed in --- include/fs/impl.h | 3 +- kern.iso | Bin 1470464 -> 1470464 bytes src/kernel.c | 73 +++++----------------------------------------- 3 files changed, 8 insertions(+), 68 deletions(-) diff --git a/include/fs/impl.h b/include/fs/impl.h index 3982443..4a6d1e6 100644 --- a/include/fs/impl.h +++ b/include/fs/impl.h @@ -16,8 +16,7 @@ inode_t* getInode(char* path, dirEntry_t* dentries) { if (dentries->name[0] == '\0') return NULL; - inode_t* inode = (inode_t*)BOOT_FIRST_INODE_LOC; - while (inode->id != dentries->id) { inode++; } + inode_t* inode = (inode_t*)BOOT_FIRST_INODE_LOC + dentries->id; return inode; } diff --git a/kern.iso b/kern.iso index f151c92e18bfa7e25e118508704ce2329d22333b..52350e60c942b085b932ac7c72a7b51dad8ddc6b 100644 GIT binary patch delta 3658 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 J%-^I~`M(TMnO^_^ delta 3544 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 + diskRead(root->extent[0].block * 8, root->extent[0].length * 8, (void*)SCRATCH_BLOCK_LOC); + dirEntry_t* dentry = (dirEntry_t*)SCRATCH_BLOCK_LOC; - if (file == NULL) {*/ + inode_t* inode = getInode(argv[0], dentry); + if (inode == NULL) { printf("Command not found: %s\n", argv[0]); continue; - /*} - - uint32_t neededPages = (file->length * 512) / PAGE_SIZE; - if ((file->length * 512) % PAGE_SIZE > 0) { neededPages++; } - - char* entryPoint = (char*)0x400000; // Right after first 4MB - for (uint32_t i = 0; i < neededPages; i++) { - ptEntry_t page = 0; - uint32_t physicalAddress = (uint32_t)allocPage(&page); - - if (mapPage((void*)physicalAddress, (void*)(entryPoint + i * PAGE_SIZE)) != 0) { - printf("\n\x1b[1MNot enough memory to allocate!\n"); - break; - } } - readFile(argv[0], entryPoint); - - if (strcmp(file->filetype, "bin") == 0) { - // Reset malloc - mallocListHead = NULL; - mallocVirtualAddr = (uint32_t)entryPoint + neededPages * PAGE_SIZE; - mallocPhysicalAddr = 0; - mallocPages = 0; - - // Call program - // TODO: Use return value - ((int(*)(int argc, char** argv))entryPoint)(argc, argv); - - for (uint32_t i = 0, virtualAddr = mallocVirtualAddr; i < mallocPages; i++, virtualAddr += PAGE_SIZE) { - ptEntry_t* page = getPage(virtualAddr); - - if (PAGE_PHYS_ADDRESS(page) && TEST_ATTR(page, PTE_PRESENT)) { - freePage(page); - unmapPage((void*)virtualAddr); - flushTlbEntry(virtualAddr); - } - } - - mallocListHead = kernelMallocListHead; - mallocVirtualAddr = kernelMallocVirtualAddr; - mallocPhysicalAddr = kernelMallocPhysicalAddr; - mallocPages = kernelMallocPages; - } else if (strcmp(file->filetype, "fnt") == 0) { - printf("Loading %s...\n", file->filename); - memcpy(entryPoint, (char*)FONT_LOC, file->length * 512); - printf("Font loaded\n"); - } else { - for (size_t i = 0; i < file->length * 512; i++) { - if (entryPoint[i] != '\0') { - putc(entryPoint[i]); - } - } - putc('\n'); - } - - for (uint32_t i = 0, virtualAddr = (uint32_t)entryPoint; i < neededPages; i++, virtualAddr += PAGE_SIZE) { - ptEntry_t* page = getPage(virtualAddr); - if (PAGE_PHYS_ADDRESS(page) && TEST_ATTR(page, PTE_PRESENT)) { // Check if the page is used - freePage(page); - unmapPage((void*)virtualAddr); - flushTlbEntry(virtualAddr); // Invalidate unused page - } - }*/ + printf("%d: %s %dB\n", inode->id, argv[0], inode->sizeBytes); } }