Advertisement
Guest User

Ncurses

a guest
Apr 17th, 2015
316
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.68 KB | None | 0 0
  1. #include <ncurses.h>
  2.  
  3. typedef struct _win_border_struct {
  4.     chtype  ls, rs, ts, bs,
  5.         tl, tr, bl, br;
  6. }WIN_BORDER;
  7.  
  8. typedef struct _WIN_struct {
  9.  
  10.     int startx, starty;
  11.     int height, width;
  12.     WIN_BORDER border;
  13. }WIN;
  14.  
  15. void init_win_params(WIN *p_win);
  16. void print_win_params(WIN *p_win);
  17. void create_box(WIN *win, bool flag);
  18.  
  19. int main(int argc, char *argv[])
  20. {   WIN win;
  21.     int ch;
  22.     int x=40,y=12;
  23.  
  24.     initscr();             
  25.     start_color();         
  26.     cbreak();              
  27.                            
  28.     keypad(stdscr, TRUE);  
  29.     noecho();
  30.     curs_set(FALSE);
  31.     init_pair(1, COLOR_CYAN, COLOR_BLACK);
  32.     init_win_params(&win);
  33.     print_win_params(&win);
  34.  
  35.     attron(COLOR_PAIR(1));
  36.     refresh();
  37.     attroff(COLOR_PAIR(1));
  38.    
  39.     create_box(&win, TRUE);
  40.     while((ch = getch()) != KEY_F(1))
  41.     {   switch(ch)
  42.         {   case KEY_LEFT:
  43.             if(win.startx>1){
  44.                 create_box(&win, FALSE);
  45.                 --win.startx;
  46.                 create_box(&win, TRUE);
  47.                 mvaddch(y,x+1,'*');
  48.                 x--;
  49.             }
  50.                 break;
  51.             case KEY_RIGHT:
  52.             if(win.startx<122){
  53.                 create_box(&win, FALSE);
  54.                 ++win.startx;
  55.                 create_box(&win, TRUE);
  56.                 mvaddch(y,x-1,'*');
  57.                 x++;
  58.             }
  59.                 break;
  60.             case KEY_UP:
  61.             if(win.starty>1){
  62.                 create_box(&win, FALSE);
  63.                 --win.starty;
  64.                 create_box(&win, TRUE);
  65.                 mvaddch(y+1,x,'*');
  66.                 y--;
  67.             }
  68.                 break;
  69.             case KEY_DOWN:
  70.             if(win.starty<44){
  71.                 create_box(&win, FALSE);
  72.                 ++win.starty;
  73.                 create_box(&win, TRUE);
  74.                 mvaddch(y-1,x,'*');
  75.                 y++;
  76.                
  77.             }
  78.                 break; 
  79.         }
  80.     }
  81.     endwin();
  82.     return 0;
  83. }
  84. void init_win_params(WIN *p_win)
  85. {
  86.     p_win->height = 2;
  87.     p_win->width = 2;
  88.     p_win->starty = (LINES - p_win->height)/2; 
  89.     p_win->startx = (COLS - p_win->width)/2;
  90.  
  91.     p_win->border.ls = '|';
  92.     p_win->border.rs = '|';
  93.     p_win->border.ts = '-';
  94.     p_win->border.bs = '-';
  95.     p_win->border.tl = '+';
  96.     p_win->border.tr = '+';
  97.     p_win->border.bl = '+';
  98.     p_win->border.br = '+';
  99.  
  100. }
  101. void print_win_params(WIN *p_win)
  102. {
  103. #ifdef _DEBUG
  104.     mvprintw(25, 0, "%d %d %d %d", p_win->startx, p_win->starty,
  105.                 p_win->width, p_win->height);
  106.     refresh();
  107. #endif
  108. }
  109. void create_box(WIN *p_win, bool flag)
  110. {   int i, j;
  111.     int x, y, w, h;
  112.  
  113.     x = p_win->startx;
  114.     y = p_win->starty;
  115.     w = p_win->width;
  116.     h = p_win->height;
  117.     mvprintw(y+1,x+1,"0");
  118.     if(flag == TRUE)
  119.     {   mvaddch(y, x, p_win->border.tl);
  120.         mvaddch(y, x + w, p_win->border.tr);
  121.         mvaddch(y + h, x, p_win->border.bl);
  122.         mvaddch(y + h, x + w, p_win->border.br);
  123.         mvhline(y, x + 1, p_win->border.ts, w - 1);
  124.         mvhline(y + h, x + 1, p_win->border.bs, w - 1);
  125.         mvvline(y + 1, x, p_win->border.ls, h - 1);
  126.         mvvline(y + 1, x + w, p_win->border.rs, h - 1);
  127.  
  128.     }
  129.     else
  130.         for(j = y; j <= y + h; ++j)
  131.             for(i = x; i <= x + w; ++i)
  132.                 mvaddch(j, i, ' ');
  133.                
  134.     refresh();
  135.  
  136. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement