diff options
Diffstat (limited to 'os')
| -rw-r--r-- | os/main.c | 42 | ||||
| -rw-r--r-- | os/main.h | 13 | ||||
| -rw-r--r-- | os/shell/shell.c | 23 | ||||
| -rw-r--r-- | os/shell/shell.h | 3 |
4 files changed, 81 insertions, 0 deletions
diff --git a/os/main.c b/os/main.c new file mode 100644 index 0000000..905b0f7 --- /dev/null +++ b/os/main.c @@ -0,0 +1,42 @@ +#include "../kernel/gpu/text_mode/display.h" +#include "../kernel/gpu/text_mode/colours.h" +#include "main.h" +#include "./shell/shell.h" + +Program_t focused_program; + +void os_show_splash() +{ + scrn_enable_cursor(10, 12); + scrn_clear(); + scrn_set_text_colour(COLOUR_LIGHT_GREEN, COLOUR_BLACK); + + scrn_println(" _ _ ____ _____ "); + scrn_println(" | | (_) / __ \\ / ____|"); + scrn_println(" | |_ _ _ __ _ _| | | | (___ "); + scrn_println(" | __| | '_ \\| | | | | | |\\___ \\ "); + scrn_println(" | |_| | | | | |_| | |__| |____) |"); + scrn_println(" \\__|_|_| |_|\\__, |\\____/|_____/ "); + scrn_println(" __/ | "); + scrn_println(" |___/ "); + + scrn_set_text_colour(COLOUR_WHITE, COLOUR_BLACK); + scrn_newline(); +} + +void os_start() +{ + os_show_splash(); +} + +// TODO keep a stack of running programs +void os_update_focused_program(Program_t program) { + focused_program = shell_run(); +} + +// Send keypress from kernel to the currently focused programs keypress handler +void os_proxy_keypress(unsigned char key) { + (focused_program.keypress_handler)(key); +} + +// TODO display handling
\ No newline at end of file diff --git a/os/main.h b/os/main.h new file mode 100644 index 0000000..a632750 --- /dev/null +++ b/os/main.h @@ -0,0 +1,13 @@ +#ifndef MAIN_H +#define MAIN_H + +typedef struct +{ + char *name; + void (*keypress_handler)(unsigned char); +} Program_t; + +void os_start(); +void os_proxy_keypress(unsigned char key); + +#endif
\ No newline at end of file diff --git a/os/shell/shell.c b/os/shell/shell.c new file mode 100644 index 0000000..933b19c --- /dev/null +++ b/os/shell/shell.c @@ -0,0 +1,23 @@ +#include "../../os/main.h" +#include "../../kernel/gpu/text_mode/display.h" + +void keypress_handler(unsigned char key) { + switch(key) + { + case '\b': + scrn_backspace(); + break; + case '\n': + scrn_newline(); + break; + default: + scrn_putchar(key); + } +} + +Program_t shell_run() { + Program_t this; + this.keypress_handler = keypress_handler; + this.name = "shell"; + return this; +}
\ No newline at end of file diff --git a/os/shell/shell.h b/os/shell/shell.h new file mode 100644 index 0000000..2a8f508 --- /dev/null +++ b/os/shell/shell.h @@ -0,0 +1,3 @@ +#include "../../os/main.h" + +Program_t shell_run();
\ No newline at end of file |