Add `print!` and `println!` macros and a `clear_screen` function

master
Philipp Oppermann 8 years ago
parent 40aed4fa0f
commit 59b8133396

@ -8,16 +8,15 @@ extern crate rlibc;
extern crate volatile; extern crate volatile;
extern crate spin; extern crate spin;
#[macro_use]
mod vga_buffer; mod vga_buffer;
#[no_mangle] #[no_mangle]
pub extern fn rust_main() { pub extern fn rust_main() {
// ATTENTION: we have a very small stack and no guard page // ATTENTION: we have a very small stack and no guard page
use core::fmt::Write; vga_buffer::clear_screen();
println!("Hello World{}", "!");
vga_buffer::WRITER.lock().write_str("Hello again");
write!(vga_buffer::WRITER.lock(), ", some numbers: {} {}", 42, 1.337);
loop{} loop{}
} }

@ -123,3 +123,22 @@ impl fmt::Write for Writer {
Ok(()) Ok(())
} }
} }
macro_rules! print {
($($arg:tt)*) => ({
use core::fmt::Write;
let mut writer = $crate::vga_buffer::WRITER.lock();
writer.write_fmt(format_args!($($arg)*)).unwrap();
});
}
macro_rules! println {
($fmt:expr) => (print!(concat!($fmt, "\n")));
($fmt:expr, $($arg:tt)*) => (print!(concat!($fmt, "\n"), $($arg)*));
}
pub fn clear_screen() {
for _ in 0..BUFFER_HEIGHT {
println!("");
}
}

Loading…
Cancel
Save