diff --git a/src/modules/graphics.rs b/src/modules/graphics.rs index 1df1c47..49dad4a 100644 --- a/src/modules/graphics.rs +++ b/src/modules/graphics.rs @@ -47,6 +47,23 @@ pub fn display_message<'a>(start: Dot, color: Color, text: &'a CStr, bg_color: O start.x << 16 | start.y, color.as_rgb_val() | BG_FLAG * bg_color.is_some() as u32 | UTF8_FLAG | ASCIIZ_FLAG, text.as_ptr() as u32, + 0, + bg_color.unwrap_or(Color(0, 0, 0)).as_rgb_val(), + ); + } +} + +pub fn display_message_str<'a>(start: Dot, color: Color, text: &'a str, bg_color: Option) { + // XX=ABFFCSSS + const UTF8_FLAG: u32 = (3 << 4) << 24; // FF + const BG_FLAG: u32 = (1 << 6) << 24; // B + + unsafe { + sys::display_message( + start.x << 16 | start.y, + color.as_rgb_val() | BG_FLAG * bg_color.is_some() as u32 | UTF8_FLAG, + text.as_ptr() as u32, + text.len() as u32, bg_color.unwrap_or(Color(0, 0, 0)).as_rgb_val(), ); } diff --git a/src/sys.rs b/src/sys.rs index 2a71f2e..86a3209 100644 --- a/src/sys.rs +++ b/src/sys.rs @@ -14,7 +14,7 @@ extern "C" { // 4 #[link_name = "_display_message"] - pub fn display_message(ebx: u32, ecx: u32, edx: u32, edi: u32); + pub fn display_message(ebx: u32, ecx: u32, edx: u32, esi: u32, edi: u32); // 8 #[link_name = "_define_button"] diff --git a/src/syscalls.S b/src/syscalls.S index 79d4369..2dcb106 100644 --- a/src/syscalls.S +++ b/src/syscalls.S @@ -55,7 +55,8 @@ _display_message: mov ebx, dword [esp + 4 * 3] mov ecx, dword [esp + 4 * 4] mov edx, dword [esp + 4 * 5] - mov edi, dword [esp + 4 * 6] + mov esi, dword [esp + 4 * 6] + mov edi, dword [esp + 4 * 7] int 0x40 pop edi esi ret