#![allow(clippy::missing_safety_doc)]
use crate::c;
use core::mem::size_of_val;
pub fn gas() -> u64 {
unsafe { c::gas() }
}
pub unsafe fn alloc(size: u64) -> *mut u8 {
c::alloc(size) as *mut u8
}
pub unsafe fn free(address: *mut u8, size: u64) {
c::free(address as u64, size)
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ConsoleStream {
Stdout = 1,
Stderr = 2,
}
pub fn yield_console_data(stream: ConsoleStream, text: &str) {
let bytes = text.as_bytes();
let len = bytes.len() as u64;
unsafe { c::yield_console_data(stream as u64, bytes.as_ptr() as u64, len) };
}
pub fn yield_video_frame<S: AsRef<[T]>, T: Sized>(frame_number: u64, frame: S) {
let frame = frame.as_ref();
let address = frame.as_ptr() as u64;
let len = size_of_val(frame) as u64;
unsafe { c::yield_video_frame(frame_number, address, len) };
}
pub fn video_mode(mode: &VideoMode) {
unsafe {
c::video_mode(
mode.width as u64,
mode.height as u64,
mode.refresh_rate as u64,
mode.format as u64,
)
}
}
pub struct VideoMode {
pub width: u32,
pub height: u32,
pub refresh_rate: u16,
pub format: VideoFrameFormat,
}
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]
pub enum VideoFrameFormat {
Rgb888Indexed8 = 1,
}