Grab text from previous line when enter is pressed

This commit is contained in:
Yash Karandikar 2021-09-17 12:51:10 -05:00
parent 136bb8b8d8
commit bd41def541
2 changed files with 20 additions and 6 deletions

View file

@ -6,6 +6,7 @@ use crate::gdt;
use pic8259::ChainedPics;
use spin::Mutex;
lazy_static! {
static ref IDT: InterruptDescriptorTable = {
let mut idt = InterruptDescriptorTable::new();
@ -64,6 +65,19 @@ extern "x86-interrupt" fn keyboard_interrupt_handler(_stack_frame: InterruptStac
crate::vga_buffer::backspace();
} else if character == '\u{9}' {
print!(" ");
} else if character == '\n' {
use arrayvec::ArrayString;
let writer = crate::vga_buffer::WRITER.lock();
let mut builder = ArrayString::<80>::new();
for character in &writer.buffer.chars[crate::vga_buffer::BUFFER_HEIGHT - 1] {
builder.push(character.read().ascii_character as char);
}
unsafe {
crate::vga_buffer::WRITER.force_unlock();
}
crate::shell::evaluate(&builder);
} else {
print!("{}", character)
}

View file

@ -38,23 +38,23 @@ impl ColorCode {
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(C)]
struct ScreenChar {
ascii_character: u8,
pub struct ScreenChar {
pub ascii_character: u8,
color_code: ColorCode
}
pub(crate) const BUFFER_HEIGHT: usize = 25;
const BUFFER_WIDTH: usize = 80;
pub(crate) const BUFFER_WIDTH: usize = 80;
#[repr(transparent)]
struct Buffer {
chars: [[Volatile<ScreenChar>; BUFFER_WIDTH]; BUFFER_HEIGHT]
pub struct Buffer {
pub chars: [[Volatile<ScreenChar>; BUFFER_WIDTH]; BUFFER_HEIGHT]
}
pub struct Writer {
pub column_position: usize,
color_code: ColorCode,
buffer: &'static mut Buffer
pub buffer: &'static mut Buffer
}