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

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

Жанры

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

#define BOXED_LINES 11

#define BOXED_ROWS 60

#define BOX_LINE_POS 8

#define BOX_ROW_POS 2

2. Функция

update_cd
позволяет пользователю заново ввести сведения о дорожках текущего компакт-диска. Удалив предыдущие записи о дорожках, она приглашает ввести новую информацию.

void update_cd {

 FILE *tracks_fp;

 char track_name[MAX_STRING];

 int len;

 int track = 1;

 int screen_line = 1;

 WINDOW *box_window_ptr;

 WINDOW *sub_window_ptr;

 clear_all_screen;

 mvprintw(PROMPT_LINE, 0, "Re-entering tracks for CD. ");

 if (!get_confirm)

return;

 move(PROMP_TLINE, 0);

 clrtoeol;

 remove_tracks;

 mvprintw(MESSAGE_LINE, 0, "Enter a blank line to finish");

 tracks_fp = fopen(tracks_file, "a");

Примечание

Листинг будет продолжен через минуту; мы хотим сделать краткую паузу, чтобы обратить ваше внимание на ввод данных в обрамленное окно с прокруткой. Хитрость заключается в формировании вложенного окна, рисовании рамки по его краю и создании внутри этого окна нового вложенного окна с прокруткой.

 box_window_ptr = subwin(stdscr, BOXED_LINES + 2, BOXED_ROWS + 2,

BOX_LINE_POS - 1, BOX_ROW_POS - 1);

 if (!box_window_ptr) return;

 box(box_window_ptr, ACS_VLINE, ACS_HLINE);

 sub_window_ptr = subwin(stdscr, BOXED_LINES, BOXED_ROWS,

BOX_LINE_POS, BOX_ROW_POS);

 if (!sub_window_ptr) return;

 scrollok(sub_window_ptr, TRUE);

 werase(sub_window_ptr);

 touchwin(stdscr);

 do {

mvwprintw(sub_window_ptr, screen_line++, BOX_ROW_POS + 2,

"Track %d: ", track);

clrtoeol;

refresh;

wgetnstr(sub_window_ptr, track_name, MAX_STRING);

len = strlen(track_name);

if (len > 0 && track_name[len - 1] = '\n')

track_name[len - 1] = '\0';

if (*track_name)

fprintf(tracks_fp, "%s, %d, %s\n", current_cat, track, track_name);

track++;

if (screen_line > BOXED__LINES - 1) {

/* время начать прокрутку */

scroll(sub_window_ptr);

screen_line--;

}

 } while (*track_name);

 delwin(sub_window_ptr);

 fclose(tracks_fp);

}

Удаление записей

1.

remove_cd
— последняя функция, вызываемая из функции
main
.

void remove_cd {

 FILE *titles_fp, *temp_fp;

 char entry[MAX_ENTRY];

 int cat_length;

 if (current_cd[0] == '\0') return;

 clear_all_screen;

 mvprintw(PROMPT_LINE, 0, "About to remove CD %s: %s. ", current_cat, current_cd);

 if (!get_confirm)

return;

 cat_length = strlen(current_cat);

 /* Файл заголовков копируется во временный, игнорируя данный CD */

 titles_fp = fopen(title_file, "r");

 temp_fp = fopen(temp_flie, "w");

 while(fgets(entry, MAX_ENTRY, titles_fp)) {

/* Сравнивает номер в каталоге и копирует элемент, если не

найдено совпадение */

if (strncmp(current_cat, entry, cat_length) != 0)

fputs(entry, temp_fp);

 }

 fclose(titles_fp);

 fclose(temp_fp);

 /* Удаляет файл заголовков и переименовывает временный файл */

 unlink(title_file);

 rename(temp_file, title_file);

 /* Теперь делает то же самое для файла дорожек */

 remove_tracks;

 /* Устанавливает 'None' для текущего CD */

 current_cd[0] = '\0';

}

2. Теперь вам только нужен программный код функции

remove_tracks
, удаляющей дорожки текущего компакт-диска. Она вызывается двумя функциями —
update_cd
и
remove_cd
.

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

Закрытые Миры

Муравьёв Константин Николаевич
Вселенная EVE Online
Фантастика:
фэнтези
5.86
рейтинг книги
Закрытые Миры

Я С СССР! Том III

Вязовский Алексей
3. Я спас СССР
Фантастика:
альтернативная история
5.86
рейтинг книги
Я С СССР! Том III

Личный аптекарь императора. Том 3

Карелин Сергей Витальевич
3. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Личный аптекарь императора. Том 3

Отмороженный

Гарцевич Евгений Александрович
1. Отмороженный
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Отмороженный

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

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

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

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

Болезни ног и варикозное расширение вен. Лечение и профилактика

Нестерова Дарья Владимировна
Дом и Семья:
здоровье и красота
6.25
рейтинг книги
Болезни ног и варикозное расширение вен. Лечение и профилактика

Адептка второго плана

Мамаева Надежда Николаевна
Попасть в историю
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Адептка второго плана

Матабар. II

Клеванский Кирилл Сергеевич
2. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар. II

Черный Маг Императора 10

Герда Александр
10. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 10

Законы Рода. Том 8

Мельник Андрей
8. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 8

Наследие Маозари 3

Панежин Евгений
3. Наследие Маозари
Фантастика:
рпг
аниме
5.00
рейтинг книги
Наследие Маозари 3

Курс 1. Октябрь

Фокс Гарри
2. Маркатис
Фантастика:
аниме
фэнтези
сказочная фантастика
5.00
рейтинг книги
Курс 1. Октябрь

Слово мастера

Лисина Александра
11. Гибрид
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Слово мастера