The menu library uses the curses libraries, and a curses initialization routine such as initscr must be called before using any of these functions. To use the menu library, link with the options -lmenu -lcurses.
| curses Routine Name | Manual Page Name |
| current_item | mitem_current(3X) |
| free_item | mitem_new(3X) |
| free_menu | menu_new(3X) |
| item_count | menu_items(3X) |
| item_description | mitem_name(3X) |
| item_index | mitem_current(3X) |
| item_init | menu_hook(3X) |
| item_name | mitem_name(3X) |
| item_opts | mitem_opts(3X) |
| item_opts_off | mitem_opts(3X) |
| item_opts_on | mitem_opts(3X) |
| item_term | menu_hook(3X) |
| item_userptr | mitem_userptr(3X) |
| item_value | mitem_value(3X) |
| item_visible | mitem_visible(3X) |
| menu_back | menu_attributes(3X) |
| menu_driver | menu_driver(3X) |
| menu_fore | menu_attributes(3X) |
| menu_format | menu_format(3X) |
| menu_grey | menu_attributes(3X) |
| menu_init | menu_hook(3X) |
| menu_items | menu_items(3X) |
| menu_mark | menu_mark(3X) |
| menu_opts | menu_opts(3X) |
| menu_opts_off | menu_opts(3X) |
| menu_opts_on | menu_opts(3X) |
| menu_pad | menu_attributes(3X) |
| menu_pattern | menu_pattern(3X) |
| menu_request_by_name | menu_requestname(3X) |
| menu_request_name | menu_requestname(3X) |
| menu_spacing | menu_spacing(3X) |
| menu_sub | menu_win(3X) |
| menu_term | menu_hook(3X) |
| menu_userptr | menu_userptr(3X) |
| menu_win | menu_win(3X) |
| new_item | mitem_new(3X) |
| new_menu | menu_new(3X) |
| pos_menu_cursor | menu_cursor(3X) |
| post_menu | menu_post(3X) |
| scale_menu | menu_win(3X) |
| set_current_item | mitem_current(3X) |
| set_item_init | menu_hook(3X) |
| set_item_opts | mitem_opts(3X) |
| set_item_term | menu_hook(3X) |
| set_item_userptr | mitem_userptr(3X) |
| set_item_value | mitem_value(3X) |
| set_menu_back | menu_attributes(3X) |
| set_menu_fore | menu_attributes(3X) |
| set_menu_format | menu_format(3X) |
| set_menu_grey | menu_attributes(3X) |
| set_menu_init | menu_hook(3X) |
| set_menu_items | menu_items(3X) |
| set_menu_mark | menu_mark(3X) |
| set_menu_opts | mitem_opts(3X) |
| set_menu_pad | menu_attributes(3X) |
| set_menu_pattern | menu_pattern(3X) |
| set_menu_spacing | menu_spacing(3X) |
| set_menu_sub | menu_win(3X) |
| set_menu_term | menu_hook(3X) |
| set_menu_userptr | menu_userptr(3X) |
| set_menu_win | menu_win(3X) |
| set_top_row | mitem_current(3X) |
| top_row | mitem_current(3X) |
| unpost_menu | menu_post(3X) |
In your library list, libmenu.a should be before libncurses.a; that is, you should say ``-lmenu -lncurses'', not the other way around (which would give a link-error when using static libraries).
The menu facility was documented in SVr4.2 in Character User Interface Programming (UNIX SVR4.2).
It is not part of X/Open Curses.
Aside from ncurses, there are few implementations:
.IP • 4
systems based on SVr4 source code, e.g., Solaris.
.IP • 4
NetBSD curses.
This describes ncurses version 6.1 (patch 20180923).