From 62cce51eff15b648179a3ad8c77a0885e9394a10 Mon Sep 17 00:00:00 2001 From: natrixaeria Date: Sat, 26 Oct 2019 00:54:05 +0200 Subject: Create a kernel panic screen --- kernel/src/vga_text.rs | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) (limited to 'kernel/src/vga_text.rs') diff --git a/kernel/src/vga_text.rs b/kernel/src/vga_text.rs index 5298da7..a292c8c 100644 --- a/kernel/src/vga_text.rs +++ b/kernel/src/vga_text.rs @@ -128,13 +128,40 @@ impl OStream { pub fn set_state(&mut self, state: CharState) { self.state = state } + + pub fn print(&mut self, s: &[u8]) { + for &b in s { + self.put_byte(b) + } + } + + pub fn print_centered(&mut self, s: &[u8]) { + let mut line = &s[..]; + let mut n = 0; + let slast = s.len() - 1; + for (i, &b) in s.iter().enumerate() { + if n >= 80 { + self.set_col(0); + self.print(&line[..80]); + line = &line[80..]; + n = 0; + } + if b == b'\n' || i == slast { + if b != b'\n' { n += 1 } + self.set_col(((80 - n) / 2) as u8); + self.print(&line[..n]); + self.new_line(); + if i == slast { return; } + line = &line[(n+1)..]; + n = 0; + } + n += 1; + } + } } impl core::fmt::Write for OStream { fn write_str(&mut self, s: &str) -> core::fmt::Result { - for &b in s.as_bytes() { - self.put_byte(b) - } - Ok(()) + Ok(self.print(s.as_bytes())) } } -- cgit v1.2.3-54-g00ecf