#![allow(dead_code)]
use core:: {
fmt,
result::Result::{Ok, Err},
};
pub struct __Kout<'a> {
buf: &'a mut [u8],
pos: usize,
}
impl<'a> __Kout<'a> {
fn new(buf: &'a mut [u8]) -> Self {
__Kout { buf, pos: 0 }
}
fn as_bytes(&self) -> &[u8] {
&self.buf[..self.pos]
}
fn as_str(&self) -> &str {
core::str::from_utf8(self.as_bytes()).unwrap_or("")
}
fn len(&self) -> usize {
self.pos
}
}
impl<'a> fmt::Write for __Kout<'a> {
fn write_str(&mut self, s: &str) -> fmt::Result {
for b in s.bytes() {
if self.pos == self.buf.len() {
return Err(fmt::Error);
}
if b == '\0' as u8 {
break;
}
self.buf[self.pos] = b;
self.pos += 1;
}
Ok(())
}
}
pub fn initialize(uart_base_address: u64, uart_read_offset: u64, uart_write_offset: u64, uart_put_bit: u64, uart_get_bit: u64)
{
crate::getc_putc::set_uart(uart_base_address, uart_read_offset, uart_write_offset, uart_put_bit, uart_get_bit);
}
pub fn kprint(args: fmt::Arguments<'_>)
{
let mut __buffer = [0u8; 512];
let mut __kout = __Kout::new(&mut __buffer);
let __result = fmt::write(&mut __kout, args); crate::getc_putc::puts(__kout.as_str()); }
#[macro_export]
macro_rules! _kprint {
($($args:tt)*) => {{
#[allow(unused_imports)]
{
use crate::kprint::kprint;
use crate::rich_text::*;
kprint(format_args!($($args)*));
}
}};
}
#[macro_export]
macro_rules! _kdebug {
($($args:tt)*) => {{
#[cfg(debug_assertions)]
#[allow(unused_imports)]
{
use crate::kprint::kprint;
use crate::rich_text::*;
kprint(format_args!("[DEBUG] [{}] {}", core::intrinsics::caller_location(), format_args!($($args)*)));
}
}};
}
#[macro_export]
macro_rules! kprint {
($($args:tt)*) => {{
#[allow(unused_imports)]
{
use tail_core::kprint::kprint;
use tail_core::rich_text::*;
kprint(format_args!($($args)*));
}
}};
}
#[macro_export]
macro_rules! kdebug {
($($args:tt)*) => {{
#[cfg(debug_assertions)]
#[allow(unused_imports)]
{
use tail_core::kprint::kprint;
use tail_core::rich_text::*;
kprint(format_args!("[DEBUG] [{}] {}", core::intrinsics::caller_location(), format_args!($($args)*)));
}
}};
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_kprint() {
_kprint!("Hello, World\n");
}
}