void monitor_process_key_press(uint8_t scancode) { struct terminal_position p = terminal_position(); uint8_t code = scancodes[scancode]; const char *command = NULL; terminal_set_position(command_line_position); if (scancode == KEY_BACKSPACE && command_line_position.column > COMMAND_LINE_PROMPT_LEN) { command_line_position.column--; terminal_set_position(command_line_position); terminal_put(' '); } else if (code == '\n') { command = terminal_read_command(COMMAND_LINE_PROMPT_LEN); assert(command != NULL); terminal_clear_line(); } else if (code != 0) { if (command_line_position.column < TERMINAL_COL_COUNT-1) { command_line_position.column++; terminal_put(code); } } if (command != NULL) { // redraw command line prompt terminal_printf("%s", COMMAND_LINE_PROMPT); command_line_position = terminal_position(); } terminal_set_position(p); if (command != NULL) monitor_process_command(command); }
void scroll_up(void) { for(size_t index = 0; index < VGA_TERMINAL_WIDTH * (VGA_TERMINAL_HEIGHT - 1) ; index++) terminal_buffer[index] = terminal_buffer[index + VGA_TERMINAL_WIDTH]; terminal_clear_line(VGA_TERMINAL_HEIGHT - 1); }