#include "slc.hh" #include "screen.hh" Screen::Screen() { msg_ = 0; cmd_ = 0; } void Screen::init() { // Init ncurses initscr(); // register end stop ncurses before exit atexit((void (*)(void)) endwin); // Set good parameters cbreak(); noecho(); keypad(stdscr, TRUE); refresh(); //wrefresh(stdscr); // Get term dimension int row, col; getmaxyx(stdscr, row, col); // Create msg window msg_ = newwin(row - 3, col, 0, 0); box(msg_, 0, 0); wrefresh(msg_); // Create cmd window cmd_ = newwin(3, col, row - 3, 0); box(cmd_, 0 , 0); wmove(cmd_, 1, 1); wrefresh(cmd_); } void Screen::run() { int key; int x,y; while (1) { key = getch(); getyx(cmd_, y,x); switch(key) { case KEY_LEFT: wmove(cmd_, y, --x); break; case KEY_RIGHT: wmove(cmd_, y, ++x); break; case 10: werase(cmd_); box(cmd_, 0, 0); wmove(cmd_, 1, 1); // exec command break; case KEY_BACKSPACE: if (x <= 1) break; wmove(cmd_, y, --x); waddch(cmd_, ' '); wmove(cmd_, y, x); break; case KEY_RESIZE: wrefresh(cmd_); wrefresh(msg_); break; default: waddch(cmd_, key | A_BOLD); } wrefresh(cmd_); } }