/* Parameters: library: Pointer to Start of Library Array song_name: Artist of song */ void search_song_artist(struct song_node* *library, char *song_artist) { if (find_song_by_artist( library[ letter_to_index(song_artist) ], song_artist ) ) { printf("First Song Fond: "); print_song( find_song_by_artist( library[ letter_to_index(song_artist) ], song_artist) ); } else printf ("Artist Not Found\n"); }
/* Parameter: library: Pointer to Start of Library Array artist: Artist to Print */ void print_artist_songs(struct song_node* *library, char* song_artist) { struct song_node* head = library[ letter_to_index(song_artist) ]; int counter = 0; while(head) { if (! strcmp( head->artist, song_artist )) { print_song(head); counter++; } head = head->next; } if (! counter) printf("No Songs by this Artist Found.\n"); }
/* This function produces a mask for each drive letter that isn't * currently used. Each bit of the long result represents a letter, * with A being the least significant bit, and Z being the most * significant. * * To calculate this, we loop over each letter, and see if we can get * a drive entry for it. If so, we set the appropriate bit. At the * end, we flip each bit, to give the desired result. * * The letter parameter is always marked as being available. This is * so the edit dialog can display the currently used drive letter * alongside the available ones. */ ULONG drive_available_mask(char letter) { ULONG result = 0; int i; WINE_TRACE("\n"); for(i = 0; i < 26; i++) { if (!drives[i].in_use) continue; result |= (1 << (letter_to_index(drives[i].letter))); } result = ~result; if (letter) result |= DRIVE_MASK_BIT(letter); WINE_TRACE("finished drive letter loop with %x\n", result); return result; }
BOOL add_drive(char letter, const char *targetpath, const char *device, const WCHAR *label, DWORD serial, DWORD type) { int driveIndex = letter_to_index(letter); if(drives[driveIndex].in_use) return FALSE; WINE_TRACE("letter == '%c', unixpath == %s, device == %s, label == %s, serial == %08x, type == %d\n", letter, wine_dbgstr_a(targetpath), wine_dbgstr_a(device), wine_dbgstr_w(label), serial, type); drives[driveIndex].letter = toupper(letter); drives[driveIndex].unixpath = targetpath ? strdupA(targetpath) : NULL; drives[driveIndex].device = device ? strdupA(device) : NULL; drives[driveIndex].label = label ? strdupW(label) : NULL; drives[driveIndex].serial = serial; drives[driveIndex].type = type; drives[driveIndex].in_use = TRUE; drives[driveIndex].modified = TRUE; return TRUE; }
/* Parameters: library: Pointer to Start of Library Array song_artist: Song Artist song_name: Song Name */ void delete_song_from_library(struct song_node* *library, char *song_artist, char *song_name) { library[ letter_to_index(song_artist) ] = delete_song( library[letter_to_index(song_artist)], song_artist, song_name); }
/* Paramter: library; Pointer to STart of Library Array letter: Letter to Print Songs */ void print_letter_songs(struct song_node* *library, char letter) { print_list( library[ letter_to_index((char *) &letter) ] ); }
/* Parameters library: Pointer to start of library array song_artist: Song Artist song_name: Song Name */ void add_song(struct song_node* *library, char *song_artist, char *song_name) { library[ letter_to_index(song_artist) ] = insert_in_order( library[ letter_to_index(song_artist) ], song_artist, song_name ); }