Чтение онлайн

на главную - закладки

Жанры

Основы программирования в Linux
Шрифт:

 "update track information",

 "quit",

 0,

};

На этом инициализация закончена. Теперь можно переходить к функциям программы, но сначала необходимо составить общее представление о взаимосвязях всех 16 функций. Функции разделены на три программных секции:

отображение меню;

добавление компакт-дисков в базу данных;

извлечение и отображение данных компакт-диска.

Визуальное представление дано на рис. 6.9.

Рис. 6.9

Взгляд

на функцию main

Функция

main
позволяет выбирать пункты меню, пока не выбран вариант выхода из меню (quit). Далее приведен соответствующий код.

int main {

 int choice;

 initscr;

 do {

choice = getchoice("Options:", current_cd[0] ? extended_menu : main_menu);

switch (choice) {

case 'q':

break;

case 'a':

add_record;

break;

case 'c':

count_cds;

break;

case 'f':

find_cd;

break;

case 'l':

list_tracks;

break;

case 'r':

remove_cd;

break;

case 'u':

update_cd;

break;

}

 } while (choice != 'q');

 endwin;

 exit(EXIT_SUCCESS);

}

Теперь давайте подробно рассмотрим функции, связанные с тремя секциями программы.

Формирование меню

В этой секции рассматриваются три функции, относящиеся к пользовательскому интерфейсу программы.

1. Функция

getchoice
, вызываемая из функции
main
, — это основная функция данной секции. В функцию
getchoice
передается приглашение
greet
и указатель
choices
на базовое или расширенное меню (в зависимости от того, выбран ли компакт-диск). Вы также увидите, как
main_menu
или
extended_menu
передаются как параметры в описанную ранее функцию
main
.

int get_choice(char *greet, char* choises[]) {

 static int selected_row = 0;

 int max_row = 0;

 int start_screenrow = MESSAGE_LINE, start_screencol = 10;

 char **option;

 int selected;

 int key = 0;

 option = choices;

 while (*option) {

max_row++;

option++;

 }

 if (selected_row >= max_row)

selected_row = 0;

 clear_all_screen;

 mvprintw(start_screenrow - 2, start_screencol, greet);

 keypad(stdscr, TRUE);

 cbreak;

 noecho;

 key = 0;

 while (key != 'q' && key != KEY_ENTER && key != '\n') {

if (key == KEY_UP) {

if (selected_row == 0) selected_row = max_row - 1;

else selected_row--;

}

if (key == KEY_DOWN) {

if (selected_row == (max_row - 1)) selected_row = 0;

else selected_row++;

}

selected = *choices[selected_row];

draw_menu(choices, selected_row, start_screen_row, start_screencol);

key = getch;

 }

 keypad(stdscr, FALSE);

 nocbreak;

 echo;

 if (key == 'q') selected = 'q';

 return(selected);

}

2. Обратите

внимание на то, как две локальные функции
clear_all_screen
и
draw_menu
вызываются внутри функции
getchoice
. Первой рассмотрим функцию
draw_menu
:

void draw_menu(char* options[], int current_highlight, int start_row, int start_col) {

 int current_row = 0;

 char **option_ptr;

 char *txt_ptr;

 option_ptr = options;

 while (*option_ptr) {

if (current_row == current_highlight) attron(A_STANDOUT);

txt_ptr = options[current_row];

txt_ptr++;

Поделиться:
Популярные книги

Американская трагедия

Драйзер Теодор
150. Библиотека всемирной литературы
Проза:
классическая проза
8.00
рейтинг книги
Американская трагедия

Вечный Герой (сборник)

Муркок Майкл Джон
Шедевры фантастики
Фантастика:
эпическая фантастика
6.25
рейтинг книги
Вечный Герой (сборник)

Магический спецкурс

Летняя Лена
Фантастика:
фэнтези
5.75
рейтинг книги
Магический спецкурс

Бастард Императора

Орлов Андрей Юрьевич
1. Бастард Императора
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Бастард Императора

Дважды одаренный. Том V

Тарс Элиан
5. Дважды одаренный
Фантастика:
аниме
альтернативная история
городское фэнтези
5.25
рейтинг книги
Дважды одаренный. Том V

Дом скитальцев (изд.1976)

Мирер Александр Исаакович
Библиотека приключений и научной фантастики
Фантастика:
научная фантастика
8.33
рейтинг книги
Дом скитальцев (изд.1976)

Иоанна Хмелевская (Избранное)

Хмелевская Иоанна
Детективы:
исторические детективы
5.00
рейтинг книги
Иоанна Хмелевская (Избранное)

Подходящие условия для выживания 1

Косов Сергей Михайлович
1. Начальная итерация
Фантастика:
боевая фантастика
космическая фантастика
рпг
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Подходящие условия для выживания 1

"Современная зарубежная фантастика-2". Компиляция. Книги 1-24

Уэллс Марта
Современная зарубежная фантастика
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
альтернативная история
постапокалипсис
5.00
рейтинг книги
Современная зарубежная фантастика-2. Компиляция. Книги 1-24

Темный ангел

Боумен Салли
Любовные романы:
современные любовные романы
5.75
рейтинг книги
Темный ангел

Наедине с собой

Сухомозский Николай Михайлович
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Наедине с собой

Конан Дойл

Чертанов Максим
1132. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Конан Дойл

Родовая магия

Layna
Проект «Поттер-Фанфикшн»
Фантастика:
фэнтези
5.00
рейтинг книги
Родовая магия

"Фантастика 2023-203", Компиляция. Книги 1-22

Романовский Борис Владимирович
Фантастика 2023. Компиляция
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Фантастика 2023-203, Компиляция. Книги 1-22