1*abe3a6eaShanjiezhou use core::fmt::{self, Write}; 26cb769c4Slogin 3*abe3a6eaShanjiezhou use super::lib_ui::textui::{textui_putchar, FontColor}; 46cb769c4Slogin 56cb769c4Slogin #[macro_export] 66cb769c4Slogin macro_rules! print { 76cb769c4Slogin ($($arg:tt)*) => ($crate::libs::printk::__printk(format_args!($($arg)*))); 86cb769c4Slogin } 96cb769c4Slogin 106cb769c4Slogin #[macro_export] 116cb769c4Slogin macro_rules! println { 126cb769c4Slogin () => { 136cb769c4Slogin $crate::print!("\n"); 146cb769c4Slogin }; 156cb769c4Slogin ($($arg:tt)*) => ($crate::print!("{}\n", format_args!($($arg)*))); 166cb769c4Slogin } 176cb769c4Slogin 186cb769c4Slogin /// 指定颜色,彩色输出 196cb769c4Slogin /// @param FRcolor 前景色 206cb769c4Slogin /// @param BKcolor 背景色 216cb769c4Slogin #[macro_export] 226cb769c4Slogin macro_rules! printk_color { 236cb769c4Slogin 246cb769c4Slogin ($FRcolor:expr, $BKcolor:expr, $($arg:tt)*) => { 256cb769c4Slogin use alloc; 266cb769c4Slogin $crate::libs::printk::PrintkWriter.__write_string_color($FRcolor, $BKcolor, alloc::fmt::format(format_args!($($arg)*)).as_str()) 276cb769c4Slogin }; 286cb769c4Slogin } 296cb769c4Slogin 306cb769c4Slogin #[macro_export] 316cb769c4Slogin macro_rules! kdebug { 326cb769c4Slogin ($($arg:tt)*) => { 3340fe15e0SLoGin $crate::libs::printk::PrintkWriter.__write_fmt(format_args!("[ DEBUG ] ({}:{})\t{}\n", file!(), line!(),format_args!($($arg)*))) 3440fe15e0SLoGin 356cb769c4Slogin } 366cb769c4Slogin } 376cb769c4Slogin 386cb769c4Slogin #[macro_export] 396cb769c4Slogin macro_rules! kinfo { 406cb769c4Slogin ($($arg:tt)*) => { 4140fe15e0SLoGin $crate::libs::printk::PrintkWriter.__write_fmt(format_args!("[ INFO ] ({}:{})\t{}\n", file!(), line!(),format_args!($($arg)*))) 426cb769c4Slogin } 436cb769c4Slogin } 446cb769c4Slogin 456cb769c4Slogin #[macro_export] 466cb769c4Slogin macro_rules! kwarn { 476cb769c4Slogin ($($arg:tt)*) => { 48*abe3a6eaShanjiezhou $crate::libs::printk::PrintkWriter.__write_string_color($crate::libs::lib_ui::textui::FontColor::YELLOW, $crate::libs::lib_ui::textui::FontColor::BLACK, "[ WARN ] "); 4940fe15e0SLoGin $crate::libs::printk::PrintkWriter.__write_fmt(format_args!("({}:{})\t{}\n", file!(), line!(),format_args!($($arg)*))); 506cb769c4Slogin } 516cb769c4Slogin } 526cb769c4Slogin 536cb769c4Slogin #[macro_export] 546cb769c4Slogin macro_rules! kerror { 556cb769c4Slogin ($($arg:tt)*) => { 56*abe3a6eaShanjiezhou $crate::libs::printk::PrintkWriter.__write_string_color($crate::libs::lib_ui::textui::FontColor::RED, $crate::libs::lib_ui::textui::FontColor::BLACK, "[ ERROR ] "); 5740fe15e0SLoGin $crate::libs::printk::PrintkWriter.__write_fmt(format_args!("({}:{})\t{}\n", file!(), line!(),format_args!($($arg)*))); 586cb769c4Slogin } 596cb769c4Slogin } 606cb769c4Slogin 616cb769c4Slogin #[macro_export] 626cb769c4Slogin macro_rules! kBUG { 636cb769c4Slogin ($($arg:tt)*) => { 64*abe3a6eaShanjiezhou $crate::libs::printk::PrintkWriter.__write_string_color($crate::libs::lib_ui::textui::FontColor::RED, $crate::libs::lib_ui::textui::FontColor::BLACK, "[ BUG ] "); 6540fe15e0SLoGin $crate::libs::printk::PrintkWriter.__write_fmt(format_args!("({}:{})\t{}\n", file!(), line!(),format_args!($($arg)*))); 666cb769c4Slogin } 676cb769c4Slogin } 686cb769c4Slogin 69fb6c29d0Slogin pub struct PrintkWriter; 70fb6c29d0Slogin 71fb6c29d0Slogin impl PrintkWriter { 7240fe15e0SLoGin #[inline] 7340fe15e0SLoGin pub fn __write_fmt(&mut self, args: fmt::Arguments) { 74*abe3a6eaShanjiezhou self.write_fmt(args).ok(); 7540fe15e0SLoGin } 7640fe15e0SLoGin 77*abe3a6eaShanjiezhou /// 并输出白底黑字 78fb6c29d0Slogin /// @param str: 要写入的字符 79fb6c29d0Slogin pub fn __write_string(&mut self, s: &str) { 80*abe3a6eaShanjiezhou for c in s.chars() { 81*abe3a6eaShanjiezhou textui_putchar(c, FontColor::WHITE, FontColor::BLACK).ok(); 82fb6c29d0Slogin } 83fb6c29d0Slogin } 84fb6c29d0Slogin 85*abe3a6eaShanjiezhou pub fn __write_string_color(&self, fr_color: FontColor, bk_color: FontColor, s: &str) { 86*abe3a6eaShanjiezhou for c in s.chars() { 87*abe3a6eaShanjiezhou textui_putchar(c, fr_color, bk_color).ok(); 8840fe15e0SLoGin } 8940fe15e0SLoGin } 90fb6c29d0Slogin } 91fb6c29d0Slogin 92fb6c29d0Slogin /// 为Printk Writer实现core::fmt::Write, 使得能够借助Rust自带的格式化组件,格式化字符并输出 93fb6c29d0Slogin impl fmt::Write for PrintkWriter { 94fb6c29d0Slogin fn write_str(&mut self, s: &str) -> fmt::Result { 95fb6c29d0Slogin self.__write_string(s); 96fb6c29d0Slogin Ok(()) 97fb6c29d0Slogin } 98fb6c29d0Slogin } 99fb6c29d0Slogin 100fb6c29d0Slogin #[doc(hidden)] 101fb6c29d0Slogin pub fn __printk(args: fmt::Arguments) { 102fb6c29d0Slogin PrintkWriter.write_fmt(args).unwrap(); 103fb6c29d0Slogin } 104