Основы программирования в Linux - Страница 92
Изменить размер шрифта:
Имейте в виду, что в некоторых старых дистрибутивах Linux последний параметр функции
tputsint (*putfunc)(char)char_to_terminalПримечание
Если вы обратитесь к страницам интерактивного справочного руководства за информацией о функции
tparmtgotoВы почти готовы добавить обработку экрана в вашу функцию выбора пункта меню. Единственно, что осталось, — очистить экран просто с помощью свойства
clearclearedДля того чтобы собрать всю полученную информацию вместе, напишем окончательную версию примера программы выбора пункта меню screenmenu.c, в которой вы "нарисуете" варианты пунктов меню на экране для того, чтобы пользователь выбрал нужный пункт (упражнение 5.6).
Упражнение 5.6. Полное управление терминалом
Вы можете переписать функцию
getchoicemain#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <termios.h>#include <term.h>#include <curses.h>static FILE* output_stream = (FILE *)0;char *menu[] = { "a — add new record", "d — delete record", "q - quit", NULL,};int getchoice(char *greet, char *choices[], FILE *in, FILE *out);int char_to_terminal(int_char_to_write);int main() { ...}int getchoice(char *greet, char* choices[], FILE[]* in, FILE* out) { int chosen = 0; int selected; int screenrow, screencol = 10; char **option; char* cursor, *clear; output_stream = out; setupterm(NULL, fileno(out), (int*)0); cursor = tigetstr("cup"); clear = tigetstr("clear"); screenrow =4; tputs(clear, 1, (int*)char_to_terminal); tputs(tparm(cursor, screenrow, screencol), 1, char_to_terminal); fprintf(out, "Choice: %s", greet); screenrow += 2; option = choices; while (*option) { ftputs(tparm(cursor, screenrow, screencol), 1, char_to_terminal); fprintf(out, "%s", *option); screenrow++; option++ } fprintf(out, "n"); do { fflush(out); selected = fgetc(in); option = choices; while (*option) { if (selected == *option[0]) { chosen = 1; break; } option++; } if (!chosen) { tputs(tparm(cursor, screenrow, screencol), 1, char_to_terminal); fprintf(out, "Incorrect choice, select againn"); } } while (!chosen); tputs(clear, 1, char_to_terminal); return selected;}int char_to_terminal(int char_to_write) { if (output_stream) putc(char_to_write, output_stream); return 0;