tinf 0.14.0

A library for using terminfo capabilities.
Documentation
extern crate tinf;

use tinf::{Desc, cap};

fn main() {
    let desc = Desc::current();
    let names = desc.names();
    if names.len() > 0 {
        println!("{}", names[0]);
    }
    for b in cap::Boolean::iter() {
        if desc[b] {
            println!("{}", b.short_name());
        }
    }
    for b in desc.bool_exts() {
        if desc.get_bool_ext(b) {
            println!("* {}", b.name());
        }
    }
    for n in cap::Number::iter() {
        if desc[n] != 0xffff {
            println!("{}#{}", n.short_name(), desc[n]);
        }
    }
    for n in desc.num_exts() {
        if desc.get_num_ext(n) != 0xffff {
            println!("* {}#{}", n.name(), desc.get_num_ext(n));
        }
    }
    for s in cap::String::iter() {
        if &desc[s] != b"" {
            println!("{}={}", s.short_name(), show(&desc[s]));
        }
    }
    for s in desc.str_exts() {
        if desc.get_str_ext(s) != b"" {
            println!("* {}={}", s.name(), show(desc.get_str_ext(s)));
        }
    }
}

fn show(val: &[u8]) -> String {
    let mut s = String::new();
    for &b in val {
        if b == 27 {
            s.push_str("\\E");
            continue;
        }
        if b < 32 {
            s.push('^');
            s.push((b + 64) as char);
            continue;
        }
        if b > 126 {
            s.push('\\');
            s.push_str(&format!("{:03o}", b));
            continue;
        }
        s.push(b as char);
    }
    s
}