#include <stdio.h>
#include <curses.h>
#include <menu.h>


static ITEM *items[30];


static int menu_virtualize(int c)
{
       if (c == '\n' || c == KEY_EXIT)
               return(MAX_COMMAND + 1);
       else if (c == 'n' || c == KEY_DOWN)
               return(REQ_NEXT_ITEM);
       else if (c == 'p' || c == KEY_UP)
               return(REQ_PREV_ITEM);
       else
               return(c);
}


int popup_menu(char *names[], int menu_y, int menu_x)
{
       MENU    *m;
       ITEM    **ip = items;
       char    **ap;
       int     mrows, mcols, n;
       WINDOW  *menuwin, *subwin;
       int i;

       for (ap = names; *ap; ap++)
               *ip++ = new_item(*ap, "");
       *ip = (ITEM *)NULL;

       m = new_menu(items);

       scale_menu(m, &mrows, &mcols);

       menuwin = newwin(mrows + 2, mcols +  2, menu_y, menu_x);
       set_menu_win(m, menuwin);
       keypad(menuwin, TRUE);
       box(menuwin, 0, 0);

       subwin = derwin(menuwin, mrows, mcols, 1, 1);
       set_menu_sub(m, subwin);

       post_menu(m);

       while (menu_driver(m, menu_virtualize(wgetch(menuwin))) != E_UNKNOWN_COMMAND);
       n = item_index(current_item(m));

       unpost_menu(m);
       delwin(subwin);
       delwin(menuwin);

       for (ip = items; *ip; ip++)
               free_item(*ip);
       free_menu(m);

       return(n);
}