From cacc042a5c414dee3af577c066a4045ec4cdc6b1 Mon Sep 17 00:00:00 2001 From: xamidev <121681048+xamidev@users.noreply.github.com> Date: Fri, 6 Sep 2024 21:16:23 +0200 Subject: [PATCH] Minor fixes + docs --- docs/USERS.md | 4 ++++ src/kernel/initrd.c | 16 +++++++++++++--- src/kernel/initrd.h | 2 +- src/programs/fs.c | 10 ++++++++-- 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/docs/USERS.md b/docs/USERS.md index dfbd61e..5082855 100644 --- a/docs/USERS.md +++ b/docs/USERS.md @@ -114,6 +114,10 @@ Makes a cow speak! Computes Pi up to a couple of digits using the Leibniz series; takes one integer argument, the number of terms of the series to compute. +#### `bmp ` + +Shows information about a 24-bit BMP image and renders it in the terminal. + ### Initrd utilities You can browse the (really) simple TAR filesystem with the following commands: diff --git a/src/kernel/initrd.c b/src/kernel/initrd.c index 45f2e08..70788d6 100644 --- a/src/kernel/initrd.c +++ b/src/kernel/initrd.c @@ -67,15 +67,25 @@ void tar_find_file(uint8_t *tar_start, const char* filename) printf("[tar] file '%s' not found\n", filename); } -void ls_initrd(uint8_t* initrd) +void ls_initrd(uint8_t* initrd, int verbose) { tar_header_t *header = (tar_header_t*)initrd; + if (verbose) + { + puts("Size Type Filename\n"); + } + while (header->filename[0] != '\0') { - printf("%s\n", header->filename); - uint32_t size = tar_parse_size(header->size); + if (!verbose) + { + printf("%s\n", header->filename); + } else { + printf("%7d\t%c\t %s\n", header->size, header->typeflag, header->filename); + } + uint32_t size = tar_parse_size(header->size); uint32_t next_file_offset = ((size+TAR_BLOCK_SIZE-1)/TAR_BLOCK_SIZE)*TAR_BLOCK_SIZE; header = (tar_header_t*)((uint8_t*)header + next_file_offset + TAR_BLOCK_SIZE); } diff --git a/src/kernel/initrd.h b/src/kernel/initrd.h index 4568607..43ffd29 100644 --- a/src/kernel/initrd.h +++ b/src/kernel/initrd.h @@ -31,7 +31,7 @@ typedef struct } tar_header_t; void tar_find_file(uint8_t *tar_start, const char* filename); -void ls_initrd(uint8_t* initrd); +void ls_initrd(uint8_t* initrd, int verbose); void cat_initrd(uint8_t* initrd, const char* filename); int tar_file_to_buffer(uint8_t* initrd, const char* filename, char* buffer); diff --git a/src/programs/fs.c b/src/programs/fs.c index 79785c4..fac6635 100644 --- a/src/programs/fs.c +++ b/src/programs/fs.c @@ -6,10 +6,16 @@ #include "../kernel/initrd.h" #include "../kernel/kmain.h" #include "../libc/stdio.h" +#include "../libc/string.h" -void program_ls() +void program_ls(int argc, char* argv[]) { - ls_initrd((uint8_t*)initrd_addr); + if (argc == 1) + { + ls_initrd((uint8_t*)initrd_addr, 0); + } else if (argc == 2 && strcmp(argv[1], "-l") == 0) { + ls_initrd((uint8_t*)initrd_addr, 1); + } } // Basic cat just to read, no concatenation here -- 2.49.1