mirror of
https://github.com/BoredDevNL/BoredOS.git
synced 2026-05-15 18:58:40 +00:00
bug fix
This commit is contained in:
parent
74bdb89ad3
commit
4c0d9886aa
6 changed files with 73 additions and 21 deletions
BIN
boredos.iso
BIN
boredos.iso
Binary file not shown.
BIN
build/cmd.o
BIN
build/cmd.o
Binary file not shown.
|
|
@ -417,9 +417,7 @@ void cmd_load_config(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// System Call Helper
|
// System Call Helper
|
||||||
uint64_t cmd_get_config_value(const char *key) {
|
uint32_t cmd_get_config_value(const char *key) {
|
||||||
if (cmd_strcmp(key, "prompt_drive_color") == 0) return shell_config.prompt_drive_color;
|
|
||||||
if (cmd_strcmp(key, "prompt_colon_color") == 0) return shell_config.prompt_colon_color;
|
|
||||||
if (cmd_strcmp(key, "prompt_drive_color") == 0) return shell_config.prompt_drive_color;
|
if (cmd_strcmp(key, "prompt_drive_color") == 0) return shell_config.prompt_drive_color;
|
||||||
if (cmd_strcmp(key, "prompt_colon_color") == 0) return shell_config.prompt_colon_color;
|
if (cmd_strcmp(key, "prompt_colon_color") == 0) return shell_config.prompt_colon_color;
|
||||||
if (cmd_strcmp(key, "prompt_dir_color") == 0) return shell_config.prompt_dir_color;
|
if (cmd_strcmp(key, "prompt_dir_color") == 0) return shell_config.prompt_dir_color;
|
||||||
|
|
@ -427,8 +425,6 @@ uint64_t cmd_get_config_value(const char *key) {
|
||||||
if (cmd_strcmp(key, "default_text_color") == 0) return shell_config.default_text_color;
|
if (cmd_strcmp(key, "default_text_color") == 0) return shell_config.default_text_color;
|
||||||
if (cmd_strcmp(key, "bg_color") == 0) return shell_config.bg_color;
|
if (cmd_strcmp(key, "bg_color") == 0) return shell_config.bg_color;
|
||||||
if (cmd_strcmp(key, "cursor_color") == 0) return shell_config.cursor_color;
|
if (cmd_strcmp(key, "cursor_color") == 0) return shell_config.cursor_color;
|
||||||
if (cmd_strcmp(key, "show_drive") == 0) return shell_config.show_drive;
|
|
||||||
if (cmd_strcmp(key, "show_dir") == 0) return shell_config.show_dir;
|
|
||||||
if (cmd_strcmp(key, "dir_color") == 0) return shell_config.dir_color;
|
if (cmd_strcmp(key, "dir_color") == 0) return shell_config.dir_color;
|
||||||
if (cmd_strcmp(key, "file_color") == 0) return shell_config.file_color;
|
if (cmd_strcmp(key, "file_color") == 0) return shell_config.file_color;
|
||||||
if (cmd_strcmp(key, "size_color") == 0) return shell_config.size_color;
|
if (cmd_strcmp(key, "size_color") == 0) return shell_config.size_color;
|
||||||
|
|
@ -436,8 +432,13 @@ uint64_t cmd_get_config_value(const char *key) {
|
||||||
if (cmd_strcmp(key, "success_color") == 0) return shell_config.success_color;
|
if (cmd_strcmp(key, "success_color") == 0) return shell_config.success_color;
|
||||||
if (cmd_strcmp(key, "help_color") == 0) return shell_config.help_color;
|
if (cmd_strcmp(key, "help_color") == 0) return shell_config.help_color;
|
||||||
if (cmd_strcmp(key, "command_color") == 0) return shell_config.command_color;
|
if (cmd_strcmp(key, "command_color") == 0) return shell_config.command_color;
|
||||||
|
|
||||||
|
// Return 1 for boolean true values
|
||||||
|
if (cmd_strcmp(key, "show_drive") == 0) return shell_config.show_drive;
|
||||||
|
if (cmd_strcmp(key, "show_dir") == 0) return shell_config.show_dir;
|
||||||
if (cmd_strcmp(key, "welcome_msg") == 0) return shell_config.welcome_msg;
|
if (cmd_strcmp(key, "welcome_msg") == 0) return shell_config.welcome_msg;
|
||||||
if (cmd_strcmp(key, "history_save_prompt") == 0) return shell_config.history_save_prompt;
|
if (cmd_strcmp(key, "history_save_prompt") == 0) return shell_config.history_save_prompt;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -515,7 +516,6 @@ static void cmd_set_line_content(const char *str) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- Terminal Emulation ---
|
|
||||||
|
|
||||||
static void cmd_scroll_up() {
|
static void cmd_scroll_up() {
|
||||||
for (int r = 1; r < CMD_ROWS; r++) {
|
for (int r = 1; r < CMD_ROWS; r++) {
|
||||||
|
|
@ -1038,6 +1038,49 @@ static void cmd_exec_single(char *cmd) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *args_ptr = cmd;
|
||||||
|
while (*args_ptr && *args_ptr != ' ') {
|
||||||
|
args_ptr++;
|
||||||
|
}
|
||||||
|
char old_char = *args_ptr;
|
||||||
|
*args_ptr = '\0'; // Temporarily terminate to get just the command
|
||||||
|
|
||||||
|
bool is_path = false;
|
||||||
|
char *p = cmd;
|
||||||
|
while(*p) {
|
||||||
|
if (*p == '/' || *p == ':') {
|
||||||
|
is_path = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_path) {
|
||||||
|
FAT32_FileHandle *fh = fat32_open(cmd, "r");
|
||||||
|
if (fh) {
|
||||||
|
fat32_close(fh);
|
||||||
|
*args_ptr = old_char; // Restore command string
|
||||||
|
|
||||||
|
// Now properly split command and args
|
||||||
|
char *args = cmd;
|
||||||
|
while (*args && *args != ' ') args++;
|
||||||
|
if (*args) {
|
||||||
|
*args = 0; // Null terminate cmd
|
||||||
|
args++; // Point to start of args
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd_is_waiting_for_process = true;
|
||||||
|
process_t *proc = process_create_elf(cmd, args);
|
||||||
|
if (proc) {
|
||||||
|
proc->is_terminal_proc = true;
|
||||||
|
proc->ui_window = &win_cmd;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*args_ptr = old_char; // Restore command string if not found or not a path
|
||||||
|
|
||||||
if (cmd[0] == '.' && cmd[1] == '/') {
|
if (cmd[0] == '.' && cmd[1] == '/') {
|
||||||
char *filename = cmd + 2;
|
char *filename = cmd + 2;
|
||||||
|
|
||||||
|
|
@ -1384,9 +1427,8 @@ static void cmd_exec_single(char *cmd) {
|
||||||
cmd_write(cmd);
|
cmd_write(cmd);
|
||||||
cmd_write("\n");
|
cmd_write("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Execute command with redirection and pipe support
|
// Execute command with redirection and pipe support
|
||||||
static void cmd_exec(char *cmd) {
|
static void cmd_exec(char *cmd, bool print_prompt) {
|
||||||
// Check for pipe operator first
|
// Check for pipe operator first
|
||||||
const char* pipe_pos = find_pipe(cmd);
|
const char* pipe_pos = find_pipe(cmd);
|
||||||
if (pipe_pos) {
|
if (pipe_pos) {
|
||||||
|
|
@ -1606,6 +1648,10 @@ static void cmd_exec(char *cmd) {
|
||||||
cmd_write(output_file);
|
cmd_write(output_file);
|
||||||
cmd_write("\n");
|
cmd_write("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (print_prompt) {
|
||||||
|
cmd_print_prompt();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1685,10 +1731,10 @@ static void cmd_key(Window *target, char c) {
|
||||||
if (len > 0) cmd_history_add(cmd_buf);
|
if (len > 0) cmd_history_add(cmd_buf);
|
||||||
history_pos = -1;
|
history_pos = -1;
|
||||||
|
|
||||||
cmd_exec(cmd_buf);
|
cmd_exec(cmd_buf, true);
|
||||||
|
|
||||||
if (!cmd_is_waiting_for_process) {
|
if (!cmd_is_waiting_for_process) {
|
||||||
cmd_print_prompt();
|
// cmd_print_prompt(); // This is now handled by cmd_exec
|
||||||
}
|
}
|
||||||
} else if (c == 17) { // UP
|
} else if (c == 17) { // UP
|
||||||
if (history_len > 0) {
|
if (history_len > 0) {
|
||||||
|
|
@ -1756,8 +1802,11 @@ static void cmd_key(Window *target, char c) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void cmd_exec(char *cmd, bool print_prompt);
|
||||||
|
|
||||||
void cmd_reset(void) {
|
void cmd_reset(void) {
|
||||||
// Reset terminal to fresh state
|
// Reset terminal to fresh state
|
||||||
|
cmd_screen_clear();
|
||||||
cmd_load_config();
|
cmd_load_config();
|
||||||
|
|
||||||
cursor_row = 0;
|
cursor_row = 0;
|
||||||
|
|
@ -1775,12 +1824,15 @@ void cmd_reset(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shell_config.startup_cmd[0]) {
|
if (shell_config.startup_cmd[0]) {
|
||||||
// Run startup command without prompt prefix
|
cmd_exec(shell_config.startup_cmd, false);
|
||||||
cmd_exec(shell_config.startup_cmd);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If a startup command is running, it will print the prompt when it's done.
|
||||||
|
// Otherwise, we print it now.
|
||||||
|
if (!cmd_is_waiting_for_process) {
|
||||||
cmd_print_prompt();
|
cmd_print_prompt();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void create_ramfs_files(void) {
|
static void create_ramfs_files(void) {
|
||||||
if (!fat32_exists("Documents")) fat32_mkdir("Documents");
|
if (!fat32_exists("Documents")) fat32_mkdir("Documents");
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ void cmd_screen_clear(void);
|
||||||
void cmd_increment_msg_count(void);
|
void cmd_increment_msg_count(void);
|
||||||
void cmd_reset_msg_count(void);
|
void cmd_reset_msg_count(void);
|
||||||
|
|
||||||
uint64_t cmd_get_config_value(const char *key);
|
uint32_t cmd_get_config_value(const char *key);
|
||||||
void cmd_set_current_color(uint32_t color);
|
void cmd_set_current_color(uint32_t color);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
(void)argc; (void)argv;
|
(void)argc; (void)argv;
|
||||||
uint32_t help_color = sys_get_shell_config("help_color");
|
uint64_t help_color = sys_get_shell_config("help_color");
|
||||||
if (help_color != 0) sys_set_text_color(help_color);
|
if (help_color != 0) sys_set_text_color(help_color);
|
||||||
|
|
||||||
printf("BoredOS CLI Help\n");
|
printf("BoredOS CLI Help\n");
|
||||||
|
|
|
||||||
|
|
@ -5,11 +5,11 @@
|
||||||
#include <syscall.h>
|
#include <syscall.h>
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
uint32_t dir_color = (uint32_t)sys_get_shell_config("dir_color");
|
uint64_t dir_color = sys_get_shell_config("dir_color");
|
||||||
uint32_t file_color = (uint32_t)sys_get_shell_config("file_color");
|
uint64_t file_color = sys_get_shell_config("file_color");
|
||||||
uint32_t size_color = (uint32_t)sys_get_shell_config("size_color");
|
uint64_t size_color = sys_get_shell_config("size_color");
|
||||||
uint32_t error_color = (uint32_t)sys_get_shell_config("error_color");
|
uint64_t error_color = sys_get_shell_config("error_color");
|
||||||
uint32_t default_color = (uint32_t)sys_get_shell_config("default_text_color");
|
uint64_t default_color = sys_get_shell_config("default_text_color");
|
||||||
|
|
||||||
char path[256];
|
char path[256];
|
||||||
if (argc > 1) {
|
if (argc > 1) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue