good_os_framework/console/
mod.rs1use core::fmt::{self, Write};
2use alloc::boxed::Box;
3use spin::{Lazy, Mutex};
4use tty::TTYDrawTarget;
5use x86_64::instructions::interrupts;
6
7use crate::drivers::display::Display;
8use os_terminal::{font::{BitmapFont, TrueTypeFont}, Terminal};
9
10mod log;
11pub mod tty;
12
13pub static CONSOLE: Lazy<Mutex<Terminal<TTYDrawTarget>>> =
14 Lazy::new(|| Mutex::new(Terminal::new(TTYDrawTarget::new(0))));
15
16pub fn init() {
17 tty::init();
18 log::init();
19 CONSOLE.lock().set_font_manager(Box::new(BitmapFont{}));
20}
21
22pub fn set_font(size: f32,font: &'static [u8]) {
24 CONSOLE.lock().set_font_manager(Box::new(TrueTypeFont::new(size, font)));
25}
26
27#[inline]
28pub fn _print(args: fmt::Arguments) {
29 interrupts::without_interrupts(|| {
30 CONSOLE.lock().write_fmt(args).unwrap();
31 });
32}
33
34#[macro_export]
35macro_rules! print {
36 ($($arg:tt)*) => (
37 $crate::console::_print(
38 format_args!($($arg)*)
39 )
40 )
41}
42
43#[macro_export]
44macro_rules! println {
45 () => ($crate::print!("\n"));
46 ($($arg:tt)*) => ($crate::print!("{}\n", format_args!($($arg)*)))
47}