extern crate ncurses;
use ncurses::*;
static WINDOW_HEIGHT: i32 = 3;
static WINDOW_WIDTH: i32 = 10;
fn main()
{
initscr();
raw();
keypad(stdscr(), true);
noecho();
curs_set(CURSOR_VISIBILITY::CURSOR_INVISIBLE);
addstr("Use the arrow keys to move").unwrap();
mvprintw(LINES() - 1, 0, "Press F1 to exit").unwrap();
refresh();
let mut max_x = 0;
let mut max_y = 0;
getmaxyx(stdscr(), &mut max_y, &mut max_x);
let mut start_y = (max_y - WINDOW_HEIGHT) / 2;
let mut start_x = (max_x - WINDOW_WIDTH) / 2;
let mut win = create_win(start_y, start_x);
let mut ch = getch();
while ch != KEY_F(1)
{
match ch
{
KEY_LEFT =>
{
start_x -= 1;
destroy_win(win);
win = create_win(start_y, start_x);
},
KEY_RIGHT =>
{
start_x += 1;
destroy_win(win);
win = create_win(start_y, start_x);
},
KEY_UP =>
{
start_y -= 1;
destroy_win(win);
win = create_win(start_y, start_x);
},
KEY_DOWN =>
{
start_y += 1;
destroy_win(win);
win = create_win(start_y, start_x);
},
_ => { }
}
ch = getch();
}
endwin();
}
fn create_win(start_y: i32, start_x: i32) -> WINDOW
{
let win = newwin(WINDOW_HEIGHT, WINDOW_WIDTH, start_y, start_x);
box_(win, 0, 0);
wrefresh(win);
win
}
fn destroy_win(win: WINDOW)
{
let ch = ' ' as chtype;
wborder(win, ch, ch, ch, ch, ch, ch, ch, ch);
wrefresh(win);
delwin(win);
}