moros/api/
mod.rs

1#[cfg(not(test))]
2#[macro_export]
3macro_rules! entry_point {
4    ($path:path) => {
5        #[panic_handler]
6        fn panic(_info: &core::panic::PanicInfo) -> ! {
7            let msg = b"\x1b[91mError:\x1b[m Panicked\n";
8            $crate::api::syscall::write(2, msg);
9            let code = $crate::api::process::ExitCode::PanicError;
10            $crate::api::syscall::exit(code);
11            loop {}
12        }
13
14        #[export_name = "_start"]
15        pub unsafe extern "sysv64" fn __impl_start(ptr: u64, len: usize) {
16            let args = core::slice::from_raw_parts(ptr as *const _, len);
17            let f: fn(&[&str]) = $path;
18            f(args);
19            let code = $crate::api::process::ExitCode::Success;
20            $crate::api::syscall::exit(code);
21        }
22    };
23}
24
25#[macro_export]
26macro_rules! print {
27    ($($arg:tt)*) => ({
28        use alloc::format;
29        let s = format!("{}", format_args!($($arg)*));
30        $crate::api::io::stdout().write(&s);
31    });
32}
33
34#[macro_export]
35macro_rules! println {
36    () => ({
37        print!("\n");
38    });
39    ($($arg:tt)*) => ({
40        print!("{}\n", format_args!($($arg)*));
41    });
42}
43
44#[macro_export]
45macro_rules! eprint {
46    ($($arg:tt)*) => ({
47        use alloc::format;
48        let s = format!("{}", format_args!($($arg)*));
49        $crate::api::io::stderr().write(&s);
50    });
51}
52
53#[macro_export]
54macro_rules! eprintln {
55    () => ({
56        eprint!("\n");
57    });
58    ($($arg:tt)*) => ({
59        eprint!("{}\n", format_args!($($arg)*));
60    });
61}
62
63#[macro_export]
64macro_rules! error {
65    ($($arg:tt)*) => ({
66        let csi_color = $crate::api::console::Style::color("red");
67        let csi_reset = $crate::api::console::Style::reset();
68        eprintln!(
69            "{}Error:{} {}", csi_color, csi_reset, format_args!($($arg)*)
70        );
71    });
72}
73
74#[macro_export]
75macro_rules! warning {
76    ($($arg:tt)*) => ({
77        let csi_color = $crate::api::console::Style::color("yellow");
78        let csi_reset = $crate::api::console::Style::reset();
79        eprintln!(
80            "{}Warning:{} {}", csi_color, csi_reset, format_args!($($arg)*)
81        );
82    });
83}
84
85pub mod allocator;
86pub mod base64;
87pub mod clock;
88pub mod console;
89pub mod font;
90pub mod fs;
91pub mod ini;
92pub mod io;
93pub mod power;
94pub mod process;
95pub mod prompt;
96pub mod rng;
97pub mod regex;
98pub mod syscall;
99pub mod time;
100pub mod unit;
101pub mod vga;
102// TODO: add mod wildcard