Основы программирования в Linux - Мэтью Нейл
На этом ресурсе Вы можете бесплатно читать книгу онлайн Основы программирования в Linux - Мэтью Нейл. Жанр: Программирование . На сайте e-Knigi.com Вы можете онлайн читать полную версию книги без регистрации и sms. Так же Вы можете ознакомится с содержанием, описанием, предисловием о произведении
if (titles_fp) { while (fgets(entry, MAX_ENTRY, titles_fp)) { /* Пропускает прежний номер в каталоге */ catalog = entry; if (found == strstr(catalog, ", ")) { *found = ' '; title = found + 1; /* Стирает следующую запятую в элементе, укорачивая его только до заголовка */ if (found == strstr(title, ", ")) { *found = ' '; /* Теперь проверяет, есть ли совпадающая строка */ if (found == strstr(title, match)) { count++; strcpy(current_cd, title); strcpy(current_cat, catalog); } } } } fclose(titles_fp); } if (count != 1) { if (count == 0) { mvprintw(ERROR_LINE, 0, "Sorry, no matching CD found. "); } if (count > 1) { mvprintw(ERROR_LINE, 0, "Sorry, match is ambiguous: CDs found. ", count); } current_cd[0] = ' ';<i> get_return();</i> }}Хотя переменная
catalogcurrent_catfgets3. Вам также нужно иметь возможность перечислить на экране дорожки выбранного компакт-диска. Для вложенных окон можно использовать директивы
#defineupdate_cd<i>void list_tracks() {</i> FILE *tracks_fp; char entry[MAX_ENTRY]; int cat_length; int lines_op = 0; WINDOW *track_pad_ptr; int tracks = 0; int key; int first_line = 0; if (current_cd[0] == ' ') { mvprintw(ERROR_LINE, 0, "You must select a CD first. ");<i> get_return();</i> return; }<i> clear_all_screen();</i> cat_length = strlen(current_cat); /* Сначала считает количество дорожек у текущего CD */ tracks_fp = fopen(tracks_file, "r"); if (!tracks_fp) return; while (fgets(entry, MAX_ENTRY, tracks_fp)) { if (strncmp(current_cat, entry, cat_length) == 0) tracks++; } fclose(tracks_fp); /* Создает новую панель, гарантируя, что даже при наличии одной дорожки панель достаточна большая, поэтому последующий вызов prefresh() всегда будет допустим. */ track_pad_ptr = newpad(tracks + 1 + ВОХЕD_LINES, BOXED_ROWS + 1); if (!track_pad_ptr) return; tracks_fp = fopen(tracks_file, "r"); if (!tracks_fp) return; mvprintw(4, 0, "CD Track Listingn"); /* Записывает сведения о дорожке на панель */ while (fgets(entry, MAX_ENTRY, tracks_fp)) { /* Сравнивает номер каталога и оставшийся вывод элемента */ if (strncmp(current_cat, entry, cat_length) == 0) { mvwprintw(track_pad_ptr, lines_op++, 0, "%s", entry + cat_length + 1); } } fclose(tracks_fp); if (lines_op > BOXED_LINES) { mvprintw(MESSAGE_LINE, 0, "Cursor keys to scroll, RETURN or q to exit"); } else { mvprintw(MESSAGE_LINE, 0, "RETURN or q to exit"); } wrefresh(stdscr); keypad(stdscr, TRUE); cbreak(); noecho(); key = 0; while (key != "q" && key != KEY_ENTER && key != 'n') { if (key == KEY_UP) { if (first_line > 0) first_line--; } if (key == KEY_DOWN) { if (first_line + BOXED_LINES + 1 < tracks) first_line++; } /* Теперь рисует соответствующую часть панели на экране */ prefresh(track_pad_ptr, first_line, 0, BOX_LINE_POS, BOX_ROW_POS, BOX_LINE_POS + BOXED_LINES, BOX_ROW_POS + BOXED_ROWS);