From 3524fdc760d85c17792c09c336a0e01dda3f7b6c Mon Sep 17 00:00:00 2001 From: xamidev Date: Fri, 9 Aug 2024 11:09:15 +0200 Subject: [PATCH] Add: better dynamic command management --- iso/boot/kernel.elf | Bin 26216 -> 26400 bytes makefile | 2 +- src/kernel/shell.c | 95 ++++++++++++++++++++++------------------ src/libc/string.c | 6 +-- src/libc/string.h | 4 +- src/programs/misc.c | 12 +++++ src/programs/programs.h | 3 +- 7 files changed, 72 insertions(+), 50 deletions(-) diff --git a/iso/boot/kernel.elf b/iso/boot/kernel.elf index 58988fc2044cb503ad0553329ab21de0647b2d6c..519ef6b899c1ab9da65771391d3ba676e56a2254 100755 GIT binary patch delta 7421 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 Wl=qsS;u=+k>80kaeP9}@*Z%-!r&NXj delta 7136 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 ", 9); get_input(input_buffer, BUFFER_SIZE); puts("\n"); - - // Childish shell - if (strcmp(input_buffer, "") == 0) - { - continue; + + if (strcmp(input_buffer, "") == 0) { + continue; } - else if (strcmp(input_buffer, "help") == 0) + + command_func_t command = find_command(input_buffer); + if (command) { - printf("help\tpanic\twords\tprimes\trainbow\tclear\nmath\tbf\tuptime\n"); - } - else if (strcmp(input_buffer, "panic") == 0) - { - printf("%d", 4/0); - } - else if (strcmp(input_buffer, "words") == 0) - { - program_words(); - } - else if (strcmp(input_buffer, "primes") == 0) - { - program_primes(); - } - else if (strcmp(input_buffer, "rainbow") == 0) - { - program_rainbow(); - } - else if (strcmp(input_buffer, "clear") == 0) - { - program_clear(); - } - else if (strcmp(input_buffer, "math") == 0) - { - program_math(); - } - else if (strcmp(input_buffer, "bf") == 0) - { - program_bf(); - } - else if (strcmp(input_buffer, "uptime") == 0) - { - program_uptime(); - } - else { - printf("Unknown command %s\n", input_buffer); + command(); + } else { + printf("Unknown command %s\n", input_buffer); } } } diff --git a/src/libc/string.c b/src/libc/string.c index 54fedc9..3e2de92 100644 --- a/src/libc/string.c +++ b/src/libc/string.c @@ -1,4 +1,4 @@ -int strlen(char* str) +int strlen(const char* str) { int len = 0; while (*str++) @@ -8,7 +8,7 @@ int strlen(char* str) return len; } -int strcmp(char* str1, char* str2) +int strcmp(const char* str1, const char* str2) { while (*str1 && (*str1 == *str2)) { @@ -16,4 +16,4 @@ int strcmp(char* str1, char* str2) str2++; } return *(const unsigned char*)str1 - *(const unsigned char*)str2; -} \ No newline at end of file +} diff --git a/src/libc/string.h b/src/libc/string.h index 7e406bd..0f64804 100644 --- a/src/libc/string.h +++ b/src/libc/string.h @@ -1,7 +1,7 @@ #ifndef INCLUDE_STRING_H #define INCLUDE_STRING_H -int strlen(char* str); -int strcmp(char* str1, char* str2); +int strlen(const char* str); +int strcmp(const char* str1, const char* str2); #endif diff --git a/src/programs/misc.c b/src/programs/misc.c index c255492..7b3c959 100644 --- a/src/programs/misc.c +++ b/src/programs/misc.c @@ -39,3 +39,15 @@ void program_uptime() double seconds = ticks/18.2065; // PIC channel 0 freq printf("%d ticks\t%f seconds\n", ticks, seconds); } + +// Get help + +void program_help() +{ + printf("help\tpanic\twords\tprimes\trainbow\tclear\nmath\tbf\tuptime\n"); +} + +void program_panic() +{ + asm volatile("int $0x13"); +} diff --git a/src/programs/programs.h b/src/programs/programs.h index c533b3b..568c570 100644 --- a/src/programs/programs.h +++ b/src/programs/programs.h @@ -10,5 +10,6 @@ void program_bf(); void program_rainbow(); void program_clear(); void program_uptime(); - +void program_panic(); +void program_help(); #endif