diff options
author | Jesse Luehrs <doy@tozt.net> | 2016-04-27 03:31:44 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2016-04-27 03:31:44 -0400 |
commit | 94dd516e13898d6a193acf5cce34a751187fe28b (patch) | |
tree | 7bfae58f155154977b3f7428250651daedcbf4f1 | |
parent | bec239655c3d23db8a19b55cf08b232c5026a5f2 (diff) | |
download | vt100-rust-94dd516e13898d6a193acf5cce34a751187fe28b.tar.gz vt100-rust-94dd516e13898d6a193acf5cce34a751187fe28b.zip |
cursor_position, title, icon_name
-rw-r--r-- | src/screen.rs | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/screen.rs b/src/screen.rs index 074feff..417fbc5 100644 --- a/src/screen.rs +++ b/src/screen.rs @@ -16,6 +16,12 @@ struct ScreenGridPrefix { #[repr(C)] struct ScreenImplPrefix { grid: *mut ScreenGridPrefix, + alternate: *mut ScreenGridPrefix, + + title: *mut libc::c_char, + title_len: libc::size_t, + icon_name: *mut libc::c_char, + icon_name_len: libc::size_t, } impl Screen { @@ -120,6 +126,54 @@ impl Screen { }; Some(cell::Cell::new(cell_impl)) } + + pub fn cursor_position(&self) -> (i32, i32) { + let Screen(screen_impl) = *self; + let prefix: *mut ScreenImplPrefix = unsafe { + std::mem::transmute(screen_impl) + }; + unsafe { + ((*(*prefix).grid).cur.col, (*(*prefix).grid).cur.col) + } + } + + pub fn title(&self) -> Option<&str> { + let Screen(screen_impl) = *self; + let prefix: *mut ScreenImplPrefix = unsafe { + std::mem::transmute(screen_impl) + }; + if unsafe { (*prefix).title }.is_null() { + None + } + else { + let slice: &mut [u8] = unsafe { + std::slice::from_raw_parts_mut( + (*prefix).title as *mut u8, + (*prefix).title_len + ) + }; + Some(std::str::from_utf8(slice).unwrap()) + } + } + + pub fn icon_name(&self) -> Option<&str> { + let Screen(screen_impl) = *self; + let prefix: *mut ScreenImplPrefix = unsafe { + std::mem::transmute(screen_impl) + }; + if unsafe { (*prefix).icon_name }.is_null() { + None + } + else { + let slice: &mut [u8] = unsafe { + std::slice::from_raw_parts_mut( + (*prefix).icon_name as *mut u8, + (*prefix).icon_name_len + ) + }; + Some(std::str::from_utf8(slice).unwrap()) + } + } } impl Drop for Screen { |