Итак, я возился с form.h из ncurses, это здорово, меню работает. Но чего-то не хватает. Что именно я делаю с данными, которые были введены? Я искал Интернет в поисках какой-либо формы примера, и ни в одной из ссылок я не могу найти никого, кто использует данные формы для чего-либо. Конечно, у нас есть отличный способ ввода текста в поля формы, но затем мы уничтожаем данные, освобождая форму, а затем поля, а затем мы даже не трогаем. Мы определенно не используем его ни для чего.
Как именно я могу использовать поля? Мы говорим field_buffer?
#include <form.h>
int main() {
FIELD *field[4];
FORM *my_form;
int ch;
/* Initialize curses */
initscr();
cbreak();
noecho();
keypad(stdscr, TRUE);
/* Initialize the fields */
field[0] = new_field(1, 30, 1, 25, 0, 0);
field[1] = new_field(1, 30, 3, 25, 0, 0);
field[2] = new_field(1, 30, 4, 25, 0, 0);
field[3] = new_field(1, 30, 5, 25, 0, 0);
/* Set field options */
for (int i = 0; i < 4; i++)
{
set_field_back(field[i], A_UNDERLINE);
field_opts_off(field[i], O_AUTOSKIP);
}
/* Create the form and post it */
my_form = new_form(field);
post_form(my_form);
refresh();
mvprintw(0, 20, "");
mvprintw(1, 10, "1:");
mvprintw(2, 20, "");
mvprintw(3, 10, "2:");
mvprintw(4, 10, "3:");
mvprintw(5, 10, "4:");
mvprintw(6, 10, "Send (F1)");
refresh();
form_driver(my_form, REQ_FIRST_FIELD);
/* Loop through to get user requests */
while((ch = getch()) != KEY_F(1))
{ switch(ch)
{ case KEY_DOWN:
/* Go to next field */
form_driver(my_form, REQ_NEXT_FIELD);
form_driver(my_form, REQ_END_LINE);
break;
case KEY_UP:
/* Go to previous field */
form_driver(my_form, REQ_PREV_FIELD);
form_driver(my_form, REQ_END_LINE);
break;
case KEY_BACKSPACE:
/* Delete last character */
form_driver(my_form, REQ_DEL_PREV);
break;
case KEY_DC:
/* Delete contents of field */
form_driver(my_form, REQ_CLR_FIELD);
break;
case KEY_ENTER:
form_driver(my_form, REQ_NEXT_FIELD);
form_driver(my_form, REQ_END_LINE);
break;
default:
/* If this is a normal character, it gets */
/* Printed */
form_driver(my_form, ch);
break;
}
}
form_driver(my_form, REQ_VALIDATION);
for (int i = 0; i < 4; i++)
{
mvprintw(7+i, 20, field_buffer(field[i], 0)); // is this even workable?
}
/* Un post form and free the memory */
unpost_form(my_form);
free_form(my_form);
for (int i = 0; i < 4; i++)
{
free_field(field[i]);
}
endwin();
return 0;
}