ableos/ableos/src/print.rs

62 lines
1.6 KiB
Rust
Raw Normal View History

2022-02-07 13:33:40 +00:00
// TODO: refactor this file
// TODO: make STDOUT redirect to a socket owned
// by the process named "stdout"
2022-04-11 22:23:11 +00:00
2021-11-23 11:53:06 +00:00
use core::fmt::{Arguments, Error};
2022-04-11 22:23:11 +00:00
pub struct Stdout;
2021-11-16 06:09:27 +00:00
impl Stdout {
pub fn write_fmt(&mut self, arg: Arguments<'_>) /*-> Result<(), Error> */
{
2021-12-24 13:03:15 +00:00
let _ = core::fmt::Write::write_fmt(self, arg);
2021-11-16 06:09:27 +00:00
// Ok(())
}
}
2022-04-11 22:23:11 +00:00
2021-11-16 06:09:27 +00:00
impl core::fmt::Write for Stdout {
#[cfg(target_arch = "aarch64")]
fn write_str(&mut self, s: &str) -> Result<(), Error> {
// Don't actually print anything yet lmao
Ok(())
}
#[cfg(target_arch = "x86_64")]
fn write_str(&mut self, s: &str) -> Result<(), Error> {
2022-07-31 06:54:01 +00:00
use crate::TERM;
trace!("printing");
x86_64::instructions::interrupts::without_interrupts(|| {
let mut term = TERM.lock();
term.set_dirty(true);
term.print(s.to_string());
drop(term);
});
2021-11-16 06:09:27 +00:00
Ok(())
}
#[cfg(target_arch = "riscv64")]
fn write_str(&mut self, s: &str) -> Result<(), Error> {
Ok(())
}
2021-11-27 15:19:08 +00:00
fn write_char(&mut self, c: char) -> core::fmt::Result {
self.write_str(c.encode_utf8(&mut [0; 4]))
}
fn write_fmt(mut self: &mut Self, args: Arguments<'_>) -> core::fmt::Result {
core::fmt::write(&mut self, args)
}
2021-11-16 06:09:27 +00:00
}
2022-04-11 22:23:11 +00:00
2021-11-16 06:09:27 +00:00
#[macro_export]
macro_rules! print {
() => {
::core::writeln!($crate::print::Stdout, "")
};
($($tt:tt)*) => {
::core::write!($crate::print::Stdout, $($tt)*)
};
}
#[macro_export]
macro_rules! println {
($($tt:tt)*) => {
::core::writeln!($crate::print::Stdout, $($tt)*)
};
}