From c201ddd35aaa7ffd842dd9f1a0712dddcabbe883 Mon Sep 17 00:00:00 2001 From: Yash Karandikar Date: Fri, 17 Sep 2021 20:50:57 -0500 Subject: [PATCH] Add clear command --- src/shell.rs | 17 +++++++++++++++++ src/vga_buffer.rs | 6 +++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/shell.rs b/src/shell.rs index 80af286..bf87122 100644 --- a/src/shell.rs +++ b/src/shell.rs @@ -1,5 +1,6 @@ use crate::println; use crate::print; +use crate::vga_buffer::ScreenChar; use crate::vga_buffer::{change_color, Color}; use arrayvec::{ArrayVec, ArrayString}; @@ -14,6 +15,7 @@ pub fn evaluate(command: &str) { "info" => info, "echo" => echo, "shutdown" => shutdown, + "clear" => clear, _ => default }; selected(&parts[..]); @@ -67,3 +69,18 @@ fn shutdown(_arguments: &[&str]) { shutdown_port.write(0x2000); } } + +fn clear(_arguments: &[&str]) { + let mut writer = crate::vga_buffer::WRITER.lock(); + + for row in 0..crate::vga_buffer::BUFFER_HEIGHT { + for col in 0..crate::vga_buffer::BUFFER_WIDTH { + let blank = ScreenChar { + ascii_character: b' ', + color_code: crate::vga_buffer::ColorCode::new(crate::vga_buffer::Color::White, crate::vga_buffer::Color::Black) + }; + + writer.buffer.chars[row][col].write(blank); + } + } +} diff --git a/src/vga_buffer.rs b/src/vga_buffer.rs index 064b9b3..55bc595 100644 --- a/src/vga_buffer.rs +++ b/src/vga_buffer.rs @@ -28,10 +28,10 @@ pub enum Color { #[derive(Debug, Clone, Copy, PartialEq, Eq)] #[repr(transparent)] -struct ColorCode(u8); +pub(crate) struct ColorCode(u8); impl ColorCode { - fn new(foreground: Color, background: Color) -> ColorCode { + pub fn new(foreground: Color, background: Color) -> ColorCode { ColorCode((background as u8) << 4 | (foreground as u8)) } } @@ -40,7 +40,7 @@ impl ColorCode { #[repr(C)] pub struct ScreenChar { pub ascii_character: u8, - color_code: ColorCode + pub(crate) color_code: ColorCode } pub(crate) const BUFFER_HEIGHT: usize = 25;