diff --git a/utils/terminal/terminal.cpp b/utils/terminal/terminal.cpp index f153d026..1bb8d371 100644 --- a/utils/terminal/terminal.cpp +++ b/utils/terminal/terminal.cpp @@ -4,6 +4,10 @@ Terminal::Terminal() : Console() { char_scale = 2; + put_string("> "); + prompt_length = 2; + draw_cursor(); + flush(dctx); } void Terminal::update(){ @@ -17,6 +21,8 @@ void Terminal::end_command(){ command_running = false; put_char('\r'); put_char('\n'); + put_string("> "); + prompt_length = 2; draw_cursor(); flush(dctx); set_text_color(default_text_color); @@ -72,6 +78,24 @@ const char** Terminal::parse_arguments(char *args, int *count){ void Terminal::run_command(){ const char* fullcmd = get_current_line(); + + if (fullcmd[0] == '>' && fullcmd[1] == ' ') { + fullcmd += 2; + } + + const char* check = fullcmd; + while (*check == ' ' || *check == '\t') check++; + if (*check == '\0') { + put_char('\r'); + put_char('\n'); + put_string("> "); + prompt_length = 2; + draw_cursor(); + flush(dctx); + command_running = true; + return; + } + const char* args = seek_to(fullcmd, ' '); string cmd; @@ -102,10 +126,10 @@ void Terminal::run_command(){ free(s.data, s.mem_length); } } - + free(cmd.data, cmd.mem_length); if (args_copy.mem_length) free(args_copy.data, args_copy.mem_length); - + draw_cursor(); flush(dctx); command_running = true; @@ -135,7 +159,9 @@ void Terminal::handle_input(){ draw_cursor(); flush(dctx); } else if (key == KEY_BACKSPACE){ - delete_last_char(); + if (strlen(get_current_line(), 1024) > (uint32_t)prompt_length) { + delete_last_char(); + } } } } diff --git a/utils/terminal/terminal.hpp b/utils/terminal/terminal.hpp index 0f90d1d2..097fca76 100644 --- a/utils/terminal/terminal.hpp +++ b/utils/terminal/terminal.hpp @@ -9,6 +9,7 @@ class Terminal: public Console { protected: void handle_input(); void end_command(); + int prompt_length; void run_command(); const char** parse_arguments(char *args, int *count); @@ -20,4 +21,4 @@ class Terminal: public Console { bool screen_ready() override; bool command_running; -}; \ No newline at end of file +};