The form library uses the curses libraries. To use the form library, link with the options -lform -lcurses.
Your program should set up the locale, e.g.,
setlocale(LC_ALL, "");
so that input/output processing will work.
A curses initialization routine such as initscr must be called before using any of these functions.
| curses Routine Name | Manual Page Name |
| current_field | form_page(3X) |
| data_ahead | form_data(3X) |
| data_behind | form_data(3X) |
| dup_field | form_field_new(3X) |
| dynamic_field_info | form_field_info(3X) |
| field_arg | form_field_validation(3X) |
| field_back | form_field_attributes(3X) |
| field_buffer | form_field_buffer(3X) |
| field_count | form_field(3X) |
| field_fore | form_field_attributes(3X) |
| field_index | form_page(3X) |
| field_info | form_field_info(3X) |
| field_init | form_hook(3X) |
| field_just | form_field_just(3X) |
| field_opts | form_field_opts(3X) |
| field_opts_off | form_field_opts(3X) |
| field_opts_on | form_field_opts(3X) |
| field_pad | form_field_attributes(3X) |
| field_status | form_field_buffer(3X) |
| field_term | form_hook(3X) |
| field_type | form_field_validation(3X) |
| field_userptr | form_field_userptr(3X) |
| form_driver | form_driver(3X) |
| form_driver_w | form_driver(3X)* |
| form_fields | form_field(3X) |
| form_init | form_hook(3X) |
| form_opts | form_opts(3X) |
| form_opts_off | form_opts(3X) |
| form_opts_on | form_opts(3X) |
| form_page | form_page(3X) |
| form_request_by_name | form_requestname(3X) |
| form_request_name | form_requestname(3X) |
| form_sub | form_win(3X) |
| form_term | form_hook(3X) |
| form_userptr | form_userptr(3X) |
| form_win | form_win(3X) |
| free_field | form_field_new(3X) |
| free_fieldtype | form_fieldtype(3X) |
| free_form | form_new(3X) |
| link_field | form_field_new(3X) |
| link_fieldtype | form_fieldtype(3X) |
| move_field | form_field(3X) |
| new_field | form_field_new(3X) |
| new_fieldtype | form_fieldtype(3X) |
| new_form | form_new(3X) |
| new_page | form_new_page(3X) |
| pos_form_cursor | form_cursor(3X) |
| post_form | form_post(3X) |
| scale_form | form_win(3X) |
| set_current_field | form_page(3X) |
| set_field_back | form_field_attributes(3X) |
| set_field_buffer | form_field_buffer(3X) |
| set_field_fore | form_field_attributes(3X) |
| set_field_init | form_hook(3X) |
| set_field_just | form_field_just(3X) |
| set_field_opts | form_field_opts(3X) |
| set_field_pad | form_field_attributes(3X) |
| set_field_status | form_field_buffer(3X) |
| set_field_term | form_hook(3X) |
| set_field_type | form_field_validation(3X) |
| set_field_userptr | form_field_userptr(3X) |
| set_fieldtype_arg | form_fieldtype(3X) |
| set_fieldtype_choice | form_fieldtype(3X) |
| set_form_fields | form_field(3X) |
| set_form_init | form_hook(3X) |
| set_form_opts | form_field_opts(3X) |
| set_form_page | form_page(3X) |
| set_form_sub | form_win(3X) |
| set_form_term | form_hook(3X) |
| set_form_userptr | form_userptr(3X) |
| set_form_win | form_win(3X) |
| set_max_field | form_field_buffer(3X) |
| set_new_page | form_new_page(3X) |
| unfocus_current_field | form_page(3X) |
| unpost_form | form_post(3X) |
In your library list, libform.a should be before libncurses.a; that is, you want to say ``-lform -lncurses'', not the other way around (which would give you 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.
A few functions in this implementation are extensions added for ncurses, but not provided by other implementations, e.g., form_driver_w, unfocus_current_field.
This describes ncurses version 6.2 (patch 20200222).