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

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

Жанры

Основы программирования в 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++;

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

Большая Гонка

Кораблев Родион
16. Другая сторона
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Большая Гонка

Магнат

Шимохин Дмитрий
4. Подкидыш
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Магнат

Воронцов. Перезагрузка. Книга 2

Тарасов Ник
2. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Воронцов. Перезагрузка. Книга 2

Кай из рода красных драконов 2

Бэд Кристиан
2. Красная кость
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Кай из рода красных драконов 2

На границе империй. Том 7

INDIGO
7. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
6.75
рейтинг книги
На границе империй. Том 7

Чужак из ниоткуда 4

Евтушенко Алексей Анатольевич
4. Чужак из ниоткуда
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Чужак из ниоткуда 4

Студент из прошлого тысячелетия

Еслер Андрей
2. Соприкосновение миров
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Студент из прошлого тысячелетия

Страж Кодекса

Романов Илья Николаевич
1. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса

Наследник

Майерс Александр
3. Династия
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Наследник

Наследник Теней

Лазарь
3. Хозяин Теней
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Наследник Теней

Афганский рубеж 2

Дорин Михаил
2. Рубеж
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Афганский рубеж 2

Чужак из ниоткуда 3

Евтушенко Алексей Анатольевич
3. Чужак из ниоткуда
Фантастика:
космическая фантастика
альтернативная история
5.00
рейтинг книги
Чужак из ниоткуда 3

Моров. Том 1 и Том 2

Кощеев Владимир
1. Моров
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Моров. Том 1 и Том 2

Эволюционер из трущоб. Том 3

Панарин Антон
3. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
6.00
рейтинг книги
Эволюционер из трущоб. Том 3