1#![no_std]
2extern crate libw;
3use libw::*;
4extern crate alloc;
5use alloc::string::ToString;
6
7const XTERM_ESCAPE: &'static str = "\u{001b}";
8
9pub fn clear() {
10 print("\u{001b}c");
11}
12
13pub fn dimensions() -> (u32, u32) {
14 let mut rows = 0;
15 let mut cols = 0;
16 let vars = environment_variables();
17 for v in vars {
18 if v.name == "LINES" {
19 rows = v.value.parse::<u32>().unwrap()
20 }
21 if v.name == "COLUMNS" {
22 cols = v.value.parse::<u32>().unwrap()
23 }
24 }
25 (rows, cols)
26}
27
28pub fn set_cursor_position(row: u32, col: u32) {
29 let mut cmd = XTERM_ESCAPE.to_string();
30 cmd.push_str("[");
31 cmd.push_str(&row.to_string());
32 cmd.push_str(";");
33 cmd.push_str(&col.to_string());
34 cmd.push_str("f");
35 print(&cmd);
36}
37
38pub fn save_cursor_position() {
39 print("\u{001b}[s");
40}
41
42pub fn restore_cursor_position() {
43 print("\u{001b}[u");
44}
45
46pub fn set_foreground_color(r: u8, g: u8, b: u8) {
47 let mut cmd = XTERM_ESCAPE.to_string();
48 cmd.push_str("[38;2;");
49 cmd.push_str(&r.to_string());
50 cmd.push_str(";");
51 cmd.push_str(&g.to_string());
52 cmd.push_str(";");
53 cmd.push_str(&b.to_string());
54 cmd.push_str("m");
55 print(&cmd);
56}
57
58pub fn set_background_color(r: u8, g: u8, b: u8) {
59 let mut cmd = XTERM_ESCAPE.to_string();
60 cmd.push_str("[48;2;");
61 cmd.push_str(&r.to_string());
62 cmd.push_str(";");
63 cmd.push_str(&g.to_string());
64 cmd.push_str(";");
65 cmd.push_str(&b.to_string());
66 cmd.push_str("m");
67 print(&cmd);
68}
69
70pub fn reset_color() {
71 print("\u{001b}[0m");
72}
73
74pub fn bold() {
75 print("\u{001b}[1m");
76}
77
78pub fn italic() {
79 print("\u{001b}[3m");
80}
81
82pub fn slow_blink() {
83 print("\u{001b}[5m");
84}
85
86pub fn fast_blink() {
87 print("\u{001b}[6m");
88}
89
90pub fn underline() {
91 print("\u{001b}[4m");
92}