1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
use super::*; struct StdOut; impl core::fmt::Write for StdOut { fn write_str(&mut self, string: &str) -> core::fmt::Result { let mut con_out = efi::SystemTable::get().con_out(); ucs2::encode_with(string, |ch| { let mut buffer: [u16; 2] = [0, 0]; buffer[0] = ch; unsafe { con_out.output_string(&buffer[0] as *const u16 as _).map_err(|_| ucs2::Error::InvalidData) } }).unwrap(); Ok(()) } } #[doc(hidden)] pub fn _print_stdout(args: core::fmt::Arguments) { use core::fmt::Write; StdOut.write_fmt(args).unwrap(); } #[macro_export] macro_rules! print { ($($arg:tt)*) => ($crate::_print_stdout(format_args!($($arg)*))); } #[macro_export] macro_rules! println { () => (print!("\r\n")); ($($arg:tt)*) => (print!("{}\r\n", format_args!($($arg)*))); }