good_os_framework/console/
mod.rs

1use 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
22/// Sets the font of the terminal on TTY0.
23pub 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}