Skip to content

Instantly share code, notes, and snippets.

@delta4d
Created March 16, 2017 01:50
Show Gist options
  • Save delta4d/97ccaf7ccc440f9a177109708c1cc44b to your computer and use it in GitHub Desktop.
Save delta4d/97ccaf7ccc440f9a177109708c1cc44b to your computer and use it in GitHub Desktop.

Revisions

  1. delta4d created this gist Mar 16, 2017.
    56 changes: 56 additions & 0 deletions menu.c
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,56 @@
    #include <ncurses.h>
    #include <string.h>

    char menus[10][100];

    int read_menu() {
    int n = 0;
    char *p = NULL;
    while (fgets(menus[n], sizeof(*menus), stdin)) {
    if (p = strchr(menus[n], '\n')) *p = '\0';
    ++n;
    }
    return n;
    }

    void print_menu(int cur, int const n) {
    int i = 0;
    for (i=0; i<n; ++i) {
    if (i == cur) attron(A_REVERSE);
    mvaddstr(i, 0, menus[i]);
    if (i == cur) attroff(A_REVERSE);
    }
    refresh();
    }

    int main(int argc, char **argv) {
    int n = read_menu();
    int cur = 0;
    int ch = 'A';

    initscr();
    noecho();
    cbreak();
    keypad(stdscr, TRUE);

    print_menu(cur, n);

    mvprintw(n, 0, "First: %d\n", ch); // 65

    while (true) {
    ch = getch();

    if (ch == KEY_UP || ch == 'k') --cur;
    else if (ch == KEY_DOWN || ch == 'j') ++cur;

    cur = (cur + n) % n;

    print_menu(cur, n);

    mvprintw(n+1, 0, "%d\n", ch); // -1
    }

    endwin();

    return 0;
    }