Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
11. Сначала вы должны проверить, существует ли уже дорожка с текущим номером дорожки. В зависимости от результатов проверки меняется строка приглашения:
memset(&new_track, ' ', sizeof(new_track)); existing_track = get_cdt_entry(entry_to_add_to->catalog, track_no); if (existing_track.catalog[0]) { printf("tTrack %d: %sn", track_no, existing_track.track_txt); printf("tNew text: "); } else { printf("tTrack %d description: ", track_no); } fgets(tmp_str, TMP_STRING_LEN, stdin); strip_return(tmp_str);12. Если для данной дорожки не существует элемент и пользователь его не добавил, предположите, что больше нет дорожек, которые надо добавить:
if (strlen(tmp_str) == 0) { if (existing_track.catalog[0] == ' ') { /* Нет в наличии элемента, поэтому вставка завершается */ break; } else { /* Оставляем существующий элемент, переходам к следующей дорожке */ track_no++; continue; } }13. Если пользователь введет единичный символ
ddel_cdt_entryfalse if ((strlen(tmp_str) == 1) && tmp_str[0] == 'd') { /* Удаляет эту и оставшиеся дорожки */ while (del_cdt_entry(entry_to_add_to->catalog, track_no)) { track_no++; } break; }14. В этом пункте приводится код для вставки новой дорожки или обновления существующей. Вы формируете элемент
cdt_entrynew_trackadd_cdt_entry strncpy(new_track. track_txt, tmp_str, TRACK_TTEXT_LEN - 1); strcpy(new_track.catalog, entry_to_add_to->catalog); new_track.track_no = track_no; if (!add_cdt_entry(new_track)) { fprintf(stderr, "Failed to add new trackn"); break; } track_no++; } /* while */}15. Функция
del_cat_entrystatic void del_cat_entry(const cdc_entry *entry_to_delete) { int track_no = 1; int delete_ok; display_cdc(entry_to_delete); if (get_confirm("Delete this entry and all it's tracks? ")) { do { delete_ok = del_cdt_entry(entry_to_delete->catalog, track_no); track_no++; } while(delete_ok); if (!del_cdc_entry(entry_to_delete->catalog)) { fprintf(stderr, "Failed to delete entryn"); } }}16. Следующая функция — утилита для удаления всех дорожек элемента каталога:
static void del_track_entries(const cdc_entry *entry_to_delete) { int track_no = 1; int delete_ok; display_cdc(entry_to_delete); if (get_confirm("Delete tracks for this entry? ")) { do { delete_ok = del_cdt_entry(entry_to_delete->catalog, track_no); track_no++; } while(delete_ok); }}17. Создайте очень простое средство поиска, в котором разрешите пользователю ввести строку и затем поищите элементы каталога, содержащие строку. Поскольку может быть несколько элементов с такой строкой, просто по очереди предлагаются пользователю все найденные:
static cdc_entry find_cat(void) { cdc_entry item_found; char tmp_str[TMP_STRING_LEN + 1]; int first_call = 1; int any_entry_found = 0; int string ok; int entry_selected = 0; do { string_ok = 1; printf("Enter string to search for in catalog entry: "); fgets(tmp_str, TMP_STRING_LEN, stdin); strip_return(tmp_str); if (strlen(tmp_str) > CAT_CAT_LEN) { fprintf(stderr, "Sorry, string too long, maximum %d charactersn", CAT_CAT_LEN); string_ok = 0; } } while (!string_ok); while (!entry_selected) {
