tsm-sys 0.1.0

FFI bindings to libtsm
Documentation
#![feature(libc)]
extern crate libc;
extern crate regex;
extern crate tsm_sys;

use libc::c_char;
use libc::c_int;
use libc::c_uint;
use libc::c_void;
use libc::size_t;
use libc::uint32_t;
use std::char::from_u32;
use std::default;
use std::fmt;
use std::ptr;
use std::slice;
use std::char;

use tsm_sys::*;

#[test]
fn tsm_vte_stuff_works() {
    let mut screen = ptr::null_mut();
    let err = unsafe { tsm::tsm_screen_new(&mut screen, None, ptr::null_mut()) };
    assert_eq!(0, err);

    let mut vte = ptr::null_mut();

    extern "C" fn write_cb(_: *mut tsm::tsm_vte, input_ptr: *const c_char, input_size: size_t, output: *mut c_void) {
        let output: &mut Output = unsafe { &mut *(output as *mut Output) };
        let input = unsafe { slice::from_raw_parts(input_ptr, input_size as usize) };
        for c in input {
            output.string.push(*c as u8 as char);
        }
    }

    struct Output { string: String }
    let mut output = Output { string: "".to_string() };
    let output_ptr: *mut c_void = &mut output as *mut _ as *mut c_void;

    unsafe { tsm::tsm_vte_new(&mut vte, screen, write_cb, output_ptr, None, ptr::null_mut() ) };

    unsafe { tsm::tsm_vte_reset(vte) }
    unsafe { tsm::tsm_vte_hard_reset(vte) }

    for c in "hello world".chars() {
        unsafe { tsm::tsm_vte_handle_keyboard(vte, 0, 0, 0, c as u32); }
    }

    assert_eq!(&output.string, "hello world");
}