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