Kniga-Online.club
» » » » Основы программирования в Linux - Мэтью Нейл

Основы программирования в Linux - Мэтью Нейл

Читать бесплатно Основы программирования в Linux - Мэтью Нейл. Жанр: Интернет год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

 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>

 }

}

Хотя переменная catalog указывает на массив, больший чем current_cat, и могла бы переписать память, проверка в функции fgets препятствует этому.

3. Вам также нужно иметь возможность перечислить на экране дорожки выбранного компакт-диска. Для вложенных окон можно использовать директивы #define, применявшиеся в функции update_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, &quot;You must select a CD first. &quot;);

<i>  get_return();</i>

  return;

 }

<i> clear_all_screen();</i>

 cat_length = strlen(current_cat);

 /* Сначала считает количество дорожек у текущего CD */

 tracks_fp = fopen(tracks_file, &quot;r&quot;);

 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, &quot;r&quot;);

 if (!tracks_fp) return;

 mvprintw(4, 0, &quot;CD Track Listingn&quot;);

 /* Записывает сведения о дорожке на панель */

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

  /* Сравнивает номер каталога и оставшийся вывод элемента */

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

   mvwprintw(track_pad_ptr, lines_op++, 0, &quot;%s&quot;, entry + cat_length + 1);

  }

 }

 fclose(tracks_fp);

 if (lines_op &gt; BOXED_LINES) {

  mvprintw(MESSAGE_LINE, 0,

   &quot;Cursor keys to scroll, RETURN or q to exit&quot;);

 } else {

  mvprintw(MESSAGE_LINE, 0, &quot;RETURN or q to exit&quot;);

 }

 wrefresh(stdscr);

 keypad(stdscr, TRUE);

 cbreak();

 noecho();

 key = 0;

 while (key != &quot;q&quot; &amp;&amp; key != KEY_ENTER &amp;&amp; key != 'n') {

  if (key == KEY_UP) {

   if (first_line &gt; 0) first_line--;

  }

  if (key == KEY_DOWN) {

   if (first_line + BOXED_LINES + 1 &lt; 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);

Перейти на страницу:

Мэтью Нейл читать все книги автора по порядку

Мэтью Нейл - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


Основы программирования в Linux отзывы

Отзывы читателей о книге Основы программирования в Linux, автор: Мэтью Нейл. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*