Basit bir tuş kullanım örneği

Örnek 5.15. Basit bir tuş kullanım örneği

#include <stdio.h>
#include <ncurses.h>

#define WIDTH 30
#define HEIGHT 10

int startx = 0;
int starty = 0;

char *choices[] = {
  "Choice 1",
  "Choice 2",
  "Choice 3",
  "Choice 4",
  "Exit",
};
int n_choices = sizeof(choices) / sizeof(char *);
void print_menu(WINDOW *menu_win, int highlight);

int main()
{ WINDOW *menu_win;
  int highlight = 1;
  int choice = 0;
  int c;

  initscr();
  clear();
  noecho();
  cbreak();       /* Satır ön belleği etkisiz. Herşeyi bana gönder */
  startx = (80 - WIDTH) / 2;
  starty = (24 - HEIGHT) / 2;

  menu_win = newwin(HEIGHT, WIDTH, starty, startx);
  keypad(menu_win, TRUE);
  mvprintw(0, 0, "Yukarı ve asagı için ok tuslarını kullanın, "
          "Seçmek için enterı kullanın");
  refresh();
  print_menu(menu_win, highlight);
  while(1)
  { c = wgetch(menu_win);
    switch(c)
    { case KEY_UP:
        if(highlight == 1)
          highlight = n_choices;
        else
          --highlight;
        break;
      case KEY_DOWN:
        if(highlight == n_choices)
          highlight = 1;
        else
          ++highlight;
        break;
      case 10:
        choice = highlight;
        break;
      default:
        mvprintw(24, 0,
          "Basılan karakter = %3d Muhtemelen şu şekilde de yazılabilir '%c'",
          c, c);
        refresh();
        break;
    }
    print_menu(menu_win, highlight);
    if(choice != 0) /* Sonsuz döngüden çıkmak için kullanıcı bir seçim yapar */
      break;
  }
  mvprintw(23, 0, "%d'yi %s ile seçtiniz\n",
           choice, choices[choice - 1]);
  clrtoeol();
  refresh();
  endwin();
  return 0;
}


void print_menu(WINDOW *menu_win, int highlight)
{
  int x, y, i;

  x = 2;
  y = 2;
  box(menu_win, 0, 0);
  for(i = 0; i < n_choices; ++i)
  { if(highlight == i + 1) /* O an seçileni parlaklaştır */
    { wattron(menu_win, A_REVERSE);
      mvwprintw(menu_win, y, x, "%s", choices[i]);
      wattroff(menu_win, A_REVERSE);
    }
    else
      mvwprintw(menu_win, y, x, "%s", choices[i]);
    ++y;
  }
  wrefresh(menu_win);
}