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

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

Жанры

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

static int command_mode(int argc, char *argv[]);

static void announce(void);

static menu_options show_menu(const cdc_entry *current_cdc);

static int get_confirm(const char *question);

static int enter_new_cat_entry(cdc_entry *entry_to_update);

static void enter_new_track_entries(const cdc_entry* entry_to_add_to);

static void del_cat_entry(const cdc_entry *entry_to_delete);

static void del_track_entries(const cdc_entry *entry_to_delete);

static cdc_entry find_cat(void);

static void list_tracks(const cdc_entry *entry_to_use);

static void count_all_entries(void);

static void display_cdc(const cdc_entry *cdc_to_show);

static void display_cdt(const cdt_entry *cdt_to_show);

static void strip_return(char *string_to_strip);

4. И наконец, вы добрались до функции

main
. Она начинается с проверки того, что текущий элемент
current_cdc_entry
, который применяется для сохранения дорожки выбранного в данный момент элемента каталога компакт-дисков, инициализирован. Также проводится грамматический разбор командной строки, выдается оповещение о том, какая программа выполняется, и инициализируется база данных.

void main(int argc, char *argv[]) {

 menu_options current_option;

 cdc_entry current_cdc_entry;

 int command_result;

 memset(&current_cdc_entry, '\0', sizeof(current_cdc_entry));

if (argc >1) {

command_result = command_mode(argc, argv);

exit(command_result);

 }

 announce;

 if (!database_initialize(0)) {

fprintf(stderr, "Sorry, unable to initialize database\n");

fprintf(stderr, "To create a new database use %s -i\n", argv[0]);

exit(EXIT_FAILURE);

 }

5. Теперь вы готовы обрабатывать ввод пользователя. Вы остаетесь в цикле, запрашивая пункт меню и обрабатывая его до тех пор, пока пользователь не выберет выход. Обратите вниманий на то, что вы передаете структуру

current_cdc_entry
в функцию
show_menu
, чтобы разрешить изменять варианты пунктов меню, когда выбран текущий элемент каталога:

 while (current_option != mo_exit) {

current_option = show_menu(&current_cdc_entry);

switch(current_option) {

case mo_add_cat:

if (enter_new_cat_entry(&current_cdc_entry)) {

if (!add_cdc_entry(current_cdc_entry)) {

fprintf(stderr, "Failed to add new entry\n");

memset(&current_cdc_entry, '\0',

sizeof(current_cdc_entry));

}

}

break;

case mo_add_tracks:

enter_new_track_entries(&current_cdc_entry);

break;

case mo_del_cat:

del_cat_entry(&current_cdc_entry);

break;

case mo_find_cat:

current_cdc_entry = find_cat;

break;

case mo_list_cat_tracks:

list_tracks(&current_cdc_entry);

break;

case mo_del_tracks:

del_track_entries(&current_cdc_entry);

break;

case mo_count_entries:

count_all_entries;

break;

case mo_exit:

break;

case mo_invalid:

break;

default:

break;

} /* switch */

 } /* while */

6. Когда цикл в функции

main
завершится, закройте базу данных и вернитесь в окружение. Функция
announce
выводит приглашающее предложение:

 database_close;

 exit(EXIT_SUCCESS);

} /* main */

static void announce(void) {

 printf("\n\nWelcome to the demonstration CD catalog database \

program\n");

}

7. Здесь вы реализуете функцию

show_menu
. Эта функция проверяет, выбран ли текущий элемент каталога, используя первый символ имени в каталоге. Если элемент каталога выбран, становятся доступными дополнительные пункты меню:

static menu_options show_menu(const cdc_entry *cdc_selected) {

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

Петербург - нуар. Рассказы

Кивинов Андрей Владимирович
Проза:
современная проза
5.40
рейтинг книги
Петербург - нуар. Рассказы

Я уже царь. Книга XXIX

Дрейк Сириус
29. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я уже царь. Книга XXIX

Дважды одаренный

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

Газлайтер. Том 23

Володин Григорий Григорьевич
23. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.25
рейтинг книги
Газлайтер. Том 23

Тигриный лог

Чеснокова Юлия Олеговна
Детективы:
прочие детективы
7.00
рейтинг книги
Тигриный лог

Пустоши

Сай Ярослав
1. Медорфенов
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Пустоши

Великое испытание

Imperew
2. Ютрейн
Фантастика:
фэнтези
ненаучная фантастика
рпг
5.00
рейтинг книги
Великое испытание

Кодекс Охотника. Книга XVI

Винокуров Юрий
16. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVI

Маленькая женщина Большого

Зайцева Мария
5. Наша
Любовные романы:
эро литература
современные любовные романы
5.40
рейтинг книги
Маленькая женщина Большого

Бухгалтерский учет

Drongelen Wim Van
Деловая литература:
бухучет и аудит
5.00
рейтинг книги
Бухгалтерский учет

Тайная доктрина. Том II

Блаватская Елена Петровна
4. Теософия
Религия и эзотерика:
эзотерика
6.60
рейтинг книги
Тайная доктрина. Том II

Последний Паладин. Том 10

Саваровский Роман
10. Путь Паладина
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Последний Паладин. Том 10

Егерь. Системный зверолов

Скиба Николай
1. Зверолов
Фантастика:
рпг
уся
фэнтези
фантастика: прочее
попаданцы
6.50
рейтинг книги
Егерь. Системный зверолов

Дневники 1930-1931

Пришвин Михаил Михайлович
Документальная литература:
биографии и мемуары
4.75
рейтинг книги
Дневники 1930-1931