diff options
author | Jesse Luehrs <doy@tozt.net> | 2016-04-26 02:40:23 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2016-04-26 02:40:23 -0400 |
commit | 88e064a448756bb4a9045a9260702f60ba492990 (patch) | |
tree | 88edf10c96d95dc3eb83f7a3f3d0dfc57ab27f83 /src | |
parent | 0c22a51ab36f1c6b84796400a2c85dbb23b956fc (diff) | |
download | vt100-rust-88e064a448756bb4a9045a9260702f60ba492990.tar.gz vt100-rust-88e064a448756bb4a9045a9260702f60ba492990.zip |
get ffi framework in place
Diffstat (limited to 'src')
-rw-r--r-- | src/lib.rs | 11 | ||||
-rw-r--r-- | src/screen.rs | 35 |
2 files changed, 40 insertions, 6 deletions
@@ -1,6 +1,5 @@ -#[cfg(test)] -mod tests { - #[test] - fn it_works() { - } -} +extern crate libc; + +mod screen; + +pub use screen::Screen; diff --git a/src/screen.rs b/src/screen.rs new file mode 100644 index 0000000..b448a20 --- /dev/null +++ b/src/screen.rs @@ -0,0 +1,35 @@ +use libc; + +enum ScreenImpl {} +pub struct Screen(*mut ScreenImpl); + +impl Screen { + pub fn new(rows: u32, cols: u32) -> Screen { + let screen_impl = unsafe { + vt100_screen_new(rows as libc::c_int, cols as libc::c_int) + }; + Screen(screen_impl) + } +} + +impl Drop for Screen { + fn drop(&mut self) { + let &mut Screen(screen_impl) = self; + unsafe { vt100_screen_delete(screen_impl) }; + } +} + +extern "C" { + fn vt100_screen_new(rows: libc::c_int, cols: libc::c_int) -> *mut ScreenImpl; + fn vt100_screen_delete(screen: *mut ScreenImpl); +} + +#[cfg(test)] +mod tests { + #[test] + fn ffi() { + let ptr = unsafe { super::vt100_screen_new(24, 80) }; + assert!(!ptr.is_null()); + unsafe { super::vt100_screen_delete(ptr) }; + } +} |