diff options
Diffstat (limited to 'src/info.rs')
-rw-r--r-- | src/info.rs | 44 |
1 files changed, 6 insertions, 38 deletions
diff --git a/src/info.rs b/src/info.rs index d785d1c..b4a5d60 100644 --- a/src/info.rs +++ b/src/info.rs @@ -1,55 +1,23 @@ use core::libc::{c_char,c_int}; -use util::guard; pub fn init () { unsafe { c::setupterm(ptr::null(), 1, ptr::null()) }; } -pub fn clear () { - write_escape("clear"); -} - -pub fn move (col: uint, row: uint) { - if col == 0u && row == 0u { - write_escape("home"); - } - else { - write_escape2("cup", row as int, col as int); - } -} - -pub fn cursor (enabled: bool) { - if enabled { - write_escape("civis"); - } - else { - write_escape("cnorm"); - } -} - -pub fn with_alternate_screen<T> (body: &fn () -> T) -> T { - do guard(|| { write_escape("rmcup") }) { - write_escape("smcup"); - body() - } -} - -fn write_escape (name: &str) { - let output = do str::as_c_str(name) |c_name| { +pub fn escape (name: &str) -> ~str { + do str::as_c_str(name) |c_name| { unsafe { str::raw::from_c_str(tigetstr(c_name)) } - }; - io::print(output); + } } -fn write_escape2 (name: &str, p1: int, p2: int) { - let output = do str::as_c_str(name) |c_name| { +pub fn escape2 (name: &str, p1: int, p2: int) -> ~str { + do str::as_c_str(name) |c_name| { unsafe { str::raw::from_c_str(tiparm2(tigetstr(c_name), p1, p2)) } - }; - io::print(output); + } } unsafe fn tigetstr (name: *c_char) -> *c_char { |