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