Example #1
0
int curses_character_dialog(const char** choices, const char *prompt)
{
    int count, count2, ret, curletter;
    char used_letters[52];
    anything identifier;
    menu_item *selected = NULL;
    winid wid = curses_get_wid(NHW_MENU);

    identifier.a_void = 0;
    curses_start_menu(wid);

    for (count=0; choices[count]; count++)
    {
        curletter=tolower(choices[count][0]);
        for (count2=0; count2<count; count2++)
        {
            if (curletter==used_letters[count2])
            {
                curletter=toupper(curletter);
            }
        }

        identifier.a_int = (count + 1); /* Must be non-zero */
        curses_add_menu(wid, NO_GLYPH, &identifier, curletter, 0,
         A_NORMAL, choices[count], FALSE);
        used_letters[count] = curletter;
    }

    /* Random Selection */
    identifier.a_int = ROLE_RANDOM;
    curses_add_menu(wid, NO_GLYPH, &identifier, '*', 0, A_NORMAL, "Random",
     FALSE);    
    
    /* Quit prompt */
    identifier.a_int = ROLE_NONE;
    curses_add_menu(wid, NO_GLYPH, &identifier, 'q', 0, A_NORMAL, "Quit",
     FALSE);    
    curses_end_menu(wid, prompt);
    ret = curses_select_menu(wid, PICK_ONE, &selected);
    if (ret == 1)
    {
        ret = (selected->item.a_int);
    }
    else    /* Cancelled selection */
    {
        ret = ROLE_NONE;
    }
    
    if (ret > 0)
    {
        ret--;
    }
    
    free(selected);
    return ret;
}
Example #2
0
/*  Create a window of type "type" which can be 
        NHW_MESSAGE     (top line)
        NHW_STATUS      (bottom lines)
        NHW_MAP         (main dungeon)
        NHW_MENU        (inventory or other "corner" windows)
        NHW_TEXT        (help/text, full screen paged window)
*/
winid curses_create_nhwindow(int type)
{
    winid wid = curses_get_wid(type);

    if (curses_is_menu(wid) || curses_is_text(wid))
    {
        curses_start_menu(wid);
        curses_add_wid(wid);
    }
    
    return wid;
}