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

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

Жанры

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

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

Тактика победы

Кутузов Михаил Илларионович
Великие полководцы
Документальная литература:
биографии и мемуары
6.25
рейтинг книги
Тактика победы

Простолюдин

Рокотов Алексей
1. Путь князя
Фантастика:
боевая фантастика
рпг
5.25
рейтинг книги
Простолюдин

Русский романс

Пушкин Александр Сергеевич
Поэзия:
песенная поэзия
лирика
5.25
рейтинг книги
Русский романс

Леди Малиновой пустоши

Шах Ольга
Любовные романы:
любовно-фантастические романы
6.20
рейтинг книги
Леди Малиновой пустоши

Фауст

фон Гёте Иоганн Вольфганг
50. Библиотека всемирной литературы
Поэзия:
драматургия
8.33
рейтинг книги
Фауст

Старплекс. Конец эры (сборник)

Сойер Роберт Джеймс
Шедевры фантастики
Фантастика:
научная фантастика
6.25
рейтинг книги
Старплекс. Конец эры (сборник)

Том 2. Рассказы 1889-1903

Короленко Владимир Галактионович
2. Собрание сочинений в пяти томах
Проза:
русская классическая проза
5.00
рейтинг книги
Том 2. Рассказы 1889-1903

"Фантастика 2024-65". Компиляция. Книги 1-23

Призывающий Оро
Фантастика 2024. Компиляция
Фантастика:
фэнтези
боевая фантастика
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Фантастика 2024-65. Компиляция. Книги 1-23

Прохоровское побоище. Правда о Величайшем танковом сражении

Замулин Валерий Николаевич
Мифы Великой Отечественной
Документальная литература:
прочая документальная литература
5.00
рейтинг книги
Прохоровское побоище. Правда о Величайшем танковом сражении

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

Тарс Элиан
8. Дважды одаренный
Фантастика:
боевая фантастика
альтернативная история
аниме
попаданцы
5.00
рейтинг книги
Дважды одаренный. Том VIII

Жребий брошен

Прозоров Александр Дмитриевич
10. Ведун
Фантастика:
фэнтези
8.90
рейтинг книги
Жребий брошен

Королева Солнца (сборник)

Нортон Андрэ
Фантастика:
фэнтези
8.76
рейтинг книги
Королева Солнца (сборник)

Американские боги. Король горной долины. Сыновья Ананси

Гейман Нил
Фантастика:
научная фантастика
8.30
рейтинг книги
Американские боги. Король горной долины. Сыновья Ананси

Книгоедство

Етоев Александр Васильевич
Проза:
современная проза
5.00
рейтинг книги
Книгоедство