Feat: Initital beggining of a CLI

This commit is contained in:
AfonsoCMSousa 2025-11-25 21:03:44 +00:00
parent b619b9ed1d
commit 403face1e6
3 changed files with 41 additions and 14 deletions

View File

@ -6,26 +6,38 @@
// 0xB0000 for monochrome text mode (32 KB)
// 0xB8000 for color text mode and CGA-compatible graphics modes (32 KB)
#include "kernel.h"
#include "stdio.h"
typedef struct user {
int id;
const char *name;
typedef struct {
char user_name[32];
char user_hostname[32];
unsigned int user_id;
} user;
void kmain(void) {
user current_user = {
.user_name = "admin",
.user_hostname = "soraos",
.user_id = 0
};
__clear_screen();
user current_user;
current_user.id = 1;
current_user.name = "admin";
printf("SoraOS Kernel Initialized!\n");
printf("\tWelcome to SoraOS!\n");
printf("\tKernel Version: %s\n", __KERNEL_VERSION);
printf("\tCompiled on: %s at %s\n\n", __DATE__, __TIME__);
printf("\tUser name:\t%s\n", current_user.name);
printf("\tUser id:\t%d\n", current_user.id);
vga_set_cursor(0, 0);
// TODO: CLI IDEA
int _count = printf("%s@%s:>", current_user.user_name, current_user.user_hostname);
scursor(_count, text_pos.line);
// TODO: Enable user input handling
// Infinite loop
while (1) {

7
kernel.h Normal file
View File

@ -0,0 +1,7 @@
#ifndef KERNEL_H
#define KERNEL_H
#define __KERNEL_VERSION "0.1.0-alpha"
#define __KERNEL_NAME "SoraOS"
#endif

16
stdio.h
View File

@ -309,7 +309,7 @@ static inline void outb(unsigned short port, unsigned char val) {
__asm__ volatile ("outb %0, %1" : : "a"(val), "Nd"(port));
}
static inline void __VGA_set_cursor(unsigned int column, unsigned int line) {
static inline void __VGA_set_cursor_internal(unsigned int column, unsigned int line) {
if (column >= VGA_WIDTH) column = VGA_WIDTH - 1;
if (line >= VGA_HEIGHT) line = VGA_HEIGHT - 1;
@ -330,13 +330,21 @@ static inline void __VGA_set_cursor(unsigned int column, unsigned int line) {
text_pos.line = line;
}
static inline void __VGA_set_cursor_VGA_pos(_VGA_screen_space pos) {
__VGA_set_cursor(pos.column, pos.line);
static void __VGA_set_cursor_VGA_pos(_VGA_screen_space pos) {
__VGA_set_cursor_internal(pos.column, pos.line);
}
static inline _VGA_screen_space get_cursor_pos() {
static _VGA_screen_space get_cursor_pos() {
_VGA_screen_space __temp = {cursor_pos.column, cursor_pos.line};
return __temp;
}
void scursor(unsigned int column, unsigned int line) {
__VGA_set_cursor_internal(column, line);
}
#endif