aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2016-04-27 03:15:21 -0400
committerJesse Luehrs <doy@tozt.net>2016-04-27 03:15:21 -0400
commitbec239655c3d23db8a19b55cf08b232c5026a5f2 (patch)
treecd431d6adc40f65c607da54dab219cfd47d75566
parentea0444f2bb0ad94431a597e29f15d61cfa237508 (diff)
downloadvt100-rust-bec239655c3d23db8a19b55cf08b232c5026a5f2.tar.gz
vt100-rust-bec239655c3d23db8a19b55cf08b232c5026a5f2.zip
remove some unnecessary wrappers
-rw-r--r--src/ffi.c10
-rw-r--r--src/ffi.rs2
-rw-r--r--src/screen.rs21
3 files changed, 19 insertions, 14 deletions
diff --git a/src/ffi.c b/src/ffi.c
index fb2a3b3..f3d1ecf 100644
--- a/src/ffi.c
+++ b/src/ffi.c
@@ -1,16 +1,6 @@
#include <stdlib.h>
#include "../libvt100/src/vt100.h"
-int vt100_wrapper_rows(VT100Screen *vt)
-{
- return vt->grid->max.row;
-}
-
-int vt100_wrapper_cols(VT100Screen *vt)
-{
- return vt->grid->max.col;
-}
-
int vt100_wrapper_cell_is_wide(struct vt100_cell *cell)
{
return cell->is_wide;
diff --git a/src/ffi.rs b/src/ffi.rs
index 550e3b0..4586bcd 100644
--- a/src/ffi.rs
+++ b/src/ffi.rs
@@ -38,8 +38,6 @@ extern "C" {
col: libc::c_int,
) -> *mut types::CellImpl;
- pub fn vt100_wrapper_rows(screen: *mut types::ScreenImpl) -> libc::c_int;
- pub fn vt100_wrapper_cols(screen: *mut types::ScreenImpl) -> libc::c_int;
pub fn vt100_wrapper_cell_is_wide(cell: *mut types::CellImpl) -> libc::c_int;
pub fn vt100_wrapper_cell_bold(cell: *mut types::CellImpl) -> libc::c_int;
pub fn vt100_wrapper_cell_italic(cell: *mut types::CellImpl) -> libc::c_int;
diff --git a/src/screen.rs b/src/screen.rs
index d3e026f..074feff 100644
--- a/src/screen.rs
+++ b/src/screen.rs
@@ -7,6 +7,17 @@ use types;
pub struct Screen(*mut types::ScreenImpl);
+#[repr(C)]
+struct ScreenGridPrefix {
+ cur: types::Loc,
+ max: types::Loc,
+}
+
+#[repr(C)]
+struct ScreenImplPrefix {
+ grid: *mut ScreenGridPrefix,
+}
+
impl Screen {
pub fn new(rows: i32, cols: i32) -> Screen {
let screen_impl = unsafe {
@@ -17,12 +28,18 @@ impl Screen {
pub fn rows(&self) -> i32 {
let Screen(screen_impl) = *self;
- unsafe { ffi::vt100_wrapper_rows(screen_impl) }
+ let prefix: *mut ScreenImplPrefix = unsafe {
+ std::mem::transmute(screen_impl)
+ };
+ unsafe { (*(*prefix).grid).max.row }
}
pub fn cols(&self) -> i32 {
let Screen(screen_impl) = *self;
- unsafe { ffi::vt100_wrapper_cols(screen_impl) }
+ let prefix: *mut ScreenImplPrefix = unsafe {
+ std::mem::transmute(screen_impl)
+ };
+ unsafe { (*(*prefix).grid).max.col }
}
pub fn set_window_size(&self, rows: i32, cols: i32) {