From: <ny...@us...> - 2007-09-30 15:57:52
|
Revision: 418 http://pmplib.svn.sourceforge.net/pmplib/?rev=418&view=rev Author: nyaochi Date: 2007-09-30 08:57:53 -0700 (Sun, 30 Sep 2007) Log Message: ----------- - PMPlib now works with iPod nano 3rd gen. Setting dbid and/or dbid2 fields in "mhit" chunk made this magic. - Sync with the latest fields in "mhit" chunk although I'm not sure these new fields are necessary to the latest iPods. - Generating prefix indices ("mhod" chunk type 53). Modified Paths: -------------- trunk/pmplib/lib/pmp_ipod/ipod.c trunk/pmplib/lib/pmp_ipod/itunesdb.c trunk/pmplib/lib/pmp_ipod/itunesdb.h trunk/pmplib/lib/pmp_ipod/pmp_ipod.vcproj Modified: trunk/pmplib/lib/pmp_ipod/ipod.c =================================================================== --- trunk/pmplib/lib/pmp_ipod/ipod.c 2007-09-25 16:23:32 UTC (rev 417) +++ trunk/pmplib/lib/pmp_ipod/ipod.c 2007-09-30 15:57:53 UTC (rev 418) @@ -294,10 +294,11 @@ ) { int ret = 0; + const ucs2char_t* value = NULL; itunesdb_chunk_t* mhod = NULL; itunesdb_mhit_t* mhit_data = (itunesdb_mhit_t*)mhit->data; - mhit_data->uid = uid; + mhit_data->uid = 1008 + uid * 2; mhit_data->visible = 1; switch (rec->codec) { case PMPCODEC_MPEGLAYER3: @@ -306,12 +307,12 @@ mhit_data->type2 = rec->is_vbr ? 0x01 : 0x00; break; default: - mhit_data->type1 = 0x01; + mhit_data->type1 = 0x00; mhit_data->type2 = 0x01; break; } mhit_data->compilation = rec->is_compilation ? 1 : 0; - mhit_data->rating = rec->rating * 20; + mhit_data->rating = rec->rating + 1; mhit_data->last_modified = (uint32_t)from_time((time_t)rec->ts_update); mhit_data->filesize = rec->filesize; mhit_data->duration = rec->duration; @@ -323,7 +324,7 @@ mhit_data->disc_number = rec->disc_number; mhit_data->total_discs = rec->total_discs; mhit_data->date_added = (uint32_t)from_time((time_t)rec->ts_import); - mhit_data->dbid = 0; + mhit_data->dbid = 0xFA14A98319EB2BBD + uid; mhit_data->unk9 = 0xFFFF; switch (rec->codec) { case PMPCODEC_MPEGLAYER3: @@ -338,10 +339,16 @@ break; } mhit_data->unk14_1 = 12; - mhit_data->is_played = 2; + mhit_data->is_played = 1; mhit_data->unk27 = 1; mhit_data->media_type = 1; mhit_data->num_samples = rec->num_samples; + mhit_data->dbid2 = 0xC6EEB59E19650E3C + uid; + mhit_data->unk40 = 1011; + mhit_data->newunk3 = 0xBCD054CD8C063208; + mhit_data->unk43 = 0x0000808080808080; + mhit_data->newunk5 = 106; + mhit_data->newunk7 = 32; /* Construct an "mhod" chunk for title. */ if (rec->title && *rec->title) { @@ -362,11 +369,12 @@ } /* Construct an "mhod" chunk for album artist. */ - if (rec->album_artist && *rec->album_artist) { + value = (rec->album_artist && *rec->album_artist) ? rec->album_artist : rec->artist; + if (value && *value) { mhod = itunesdb_new_child(mhit); if (mhod) { if (ret = itunesdb_init(mhod, "mhod", "album_artist")) return ret; - if (ret = itunesdb_set_mhod_string(mhod, rec->album_artist)) return ret; + if (ret = itunesdb_set_mhod_string(mhod, value)) return ret; } } @@ -520,8 +528,8 @@ static int comp_title(const void *_x, const void *_y) { - const sorted_index_t *xi = (const sorted_index_t*)_x; - const sorted_index_t *yi = (const sorted_index_t*)_y; + const itunesdb_playlist_entry_t *xi = (const itunesdb_playlist_entry_t*)_x; + const itunesdb_playlist_entry_t *yi = (const itunesdb_playlist_entry_t*)_y; const pmp_music_record_t* base = (const pmp_music_record_t*)xi->base; const pmp_music_record_t* x = &base[xi->index]; const pmp_music_record_t* y = &base[yi->index]; @@ -529,11 +537,16 @@ return comp_string(x->title, y->title); } +static uint32_t prefix_title(const pmp_music_record_t* record) +{ + return ((record->title != NULL) ? record->title[0] : 0); +} + static int comp_album(const void *_x, const void *_y) { int ret = 0; - const sorted_index_t *xi = (const sorted_index_t*)_x; - const sorted_index_t *yi = (const sorted_index_t*)_y; + const itunesdb_playlist_entry_t *xi = (const itunesdb_playlist_entry_t*)_x; + const itunesdb_playlist_entry_t *yi = (const itunesdb_playlist_entry_t*)_y; const pmp_music_record_t* base = (const pmp_music_record_t*)xi->base; const pmp_music_record_t* x = &base[xi->index]; const pmp_music_record_t* y = &base[yi->index]; @@ -551,11 +564,16 @@ return ret; } +static uint32_t prefix_album(const pmp_music_record_t* record) +{ + return ((record->album != NULL) ? record->album[0] : 0); +} + static int comp_album_for_list(const void *_x, const void *_y) { int ret = 0; - const sorted_index_t *xi = (const sorted_index_t*)_x; - const sorted_index_t *yi = (const sorted_index_t*)_y; + const itunesdb_playlist_entry_t *xi = (const itunesdb_playlist_entry_t*)_x; + const itunesdb_playlist_entry_t *yi = (const itunesdb_playlist_entry_t*)_y; const pmp_music_record_t* base = (const pmp_music_record_t*)xi->base; const pmp_music_record_t* x = &base[xi->index]; const pmp_music_record_t* y = &base[yi->index]; @@ -570,8 +588,8 @@ static int comp_sortartist(const void *_x, const void *_y) { int ret = 0; - const sorted_index_t *xi = (const sorted_index_t*)_x; - const sorted_index_t *yi = (const sorted_index_t*)_y; + const itunesdb_playlist_entry_t *xi = (const itunesdb_playlist_entry_t*)_x; + const itunesdb_playlist_entry_t *yi = (const itunesdb_playlist_entry_t*)_y; const pmp_music_record_t* base = (const pmp_music_record_t*)xi->base; const pmp_music_record_t* x = &base[xi->index]; const pmp_music_record_t* y = &base[yi->index]; @@ -583,11 +601,16 @@ return ret; } +static uint32_t prefix_sortartist(const pmp_music_record_t* record) +{ + return ((record->artist != NULL) ? record->artist[0] : 0); +} + static int comp_albumartist(const void *_x, const void *_y) { int ret = 0; - const sorted_index_t *xi = (const sorted_index_t*)_x; - const sorted_index_t *yi = (const sorted_index_t*)_y; + const itunesdb_playlist_entry_t *xi = (const itunesdb_playlist_entry_t*)_x; + const itunesdb_playlist_entry_t *yi = (const itunesdb_playlist_entry_t*)_y; const pmp_music_record_t* base = (const pmp_music_record_t*)xi->base; const pmp_music_record_t* x = &base[xi->index]; const pmp_music_record_t* y = &base[yi->index]; @@ -602,8 +625,8 @@ static int comp_albumartist_sortartist(const void *_x, const void *_y) { int ret = 0; - const sorted_index_t *xi = (const sorted_index_t*)_x; - const sorted_index_t *yi = (const sorted_index_t*)_y; + const itunesdb_playlist_entry_t *xi = (const itunesdb_playlist_entry_t*)_x; + const itunesdb_playlist_entry_t *yi = (const itunesdb_playlist_entry_t*)_y; const pmp_music_record_t* base = (const pmp_music_record_t*)xi->base; const pmp_music_record_t* x = &base[xi->index]; const pmp_music_record_t* y = &base[yi->index]; @@ -621,8 +644,8 @@ static int comp_genre(const void *_x, const void *_y) { int ret = 0; - const sorted_index_t *xi = (const sorted_index_t*)_x; - const sorted_index_t *yi = (const sorted_index_t*)_y; + const itunesdb_playlist_entry_t *xi = (const itunesdb_playlist_entry_t*)_x; + const itunesdb_playlist_entry_t *yi = (const itunesdb_playlist_entry_t*)_y; const pmp_music_record_t* base = (const pmp_music_record_t*)xi->base; const pmp_music_record_t* x = &base[xi->index]; const pmp_music_record_t* y = &base[yi->index]; @@ -634,11 +657,16 @@ return ret; } +static uint32_t prefix_genre(const pmp_music_record_t* record) +{ + return ((record->genre != NULL) ? record->genre[0] : 0); +} + static int comp_composer(const void *_x, const void *_y) { int ret = 0; - const sorted_index_t *xi = (const sorted_index_t*)_x; - const sorted_index_t *yi = (const sorted_index_t*)_y; + const itunesdb_playlist_entry_t *xi = (const itunesdb_playlist_entry_t*)_x; + const itunesdb_playlist_entry_t *yi = (const itunesdb_playlist_entry_t*)_y; const pmp_music_record_t* base = (const pmp_music_record_t*)xi->base; const pmp_music_record_t* x = &base[xi->index]; const pmp_music_record_t* y = &base[yi->index]; @@ -650,6 +678,25 @@ return ret; } +static uint32_t prefix_composer(const pmp_music_record_t* record) +{ + return ((record->composer != NULL) ? record->composer[0] : 0); +} + + +typedef uint32_t (*prefix_func)(const pmp_music_record_t* record); + +static void set_prefix(itunesdb_playlist_entry_t* array, size_t n, prefix_func func) +{ + size_t i; + + for (i = 0;i < n;++i) { + itunesdb_playlist_entry_t *x = &array[i]; + const pmp_music_record_t* base = (const pmp_music_record_t*)x->base; + x->prefix = func(&base[x->index]); + } +} + static int set_album_list(itunesdb_chunk_t* mhla, const pmp_music_record_t* records, int num_records) { int i; @@ -658,7 +705,7 @@ const ucs2char_t* prev_artist = NULL; itunesdb_chunk_t *mhod = NULL, *mhia = NULL; itunesdb_mhia_t *mhia_data = NULL; - sorted_index_t* si = (sorted_index_t*)calloc(num_records, sizeof(sorted_index_t)); + itunesdb_playlist_entry_t* si = (itunesdb_playlist_entry_t*)calloc(num_records, sizeof(itunesdb_playlist_entry_t)); if (!si) { return IPODE_OUTOFMEMORY; @@ -715,7 +762,8 @@ int ret = 0; itunesdb_chunk_t *mhod = NULL, *mhip = NULL; itunesdb_mhyp_t* mhyp_data = (itunesdb_mhyp_t*)mhyp->data; - sorted_index_t* si = (sorted_index_t*)calloc(num_records, sizeof(sorted_index_t)); + itunesdb_playlist_entry_t* si = + (itunesdb_playlist_entry_t*)calloc(num_records, sizeof(itunesdb_playlist_entry_t)); const static ucs2char_t ucs2cs_master[] = {'M','a','s','t','e','r',0}; if (!si) { @@ -744,7 +792,14 @@ if (mhod) { if (ret = itunesdb_init(mhod, "mhod", "index")) return ret; qsort(si, num_records, sizeof(si[0]), comp_title); - if (ret = itunesdb_set_mhod_index(mhod, 0x03, si, num_records)) return ret; + if (ret = itunesdb_set_mhod_order(mhod, 0x03, si, num_records)) return ret; + + mhod = itunesdb_new_child(mhyp); + if (mhod) { + if (ret = itunesdb_init(mhod, "mhod", "library_playlist_index")) return ret; + set_prefix(si, num_records, prefix_title); + if (ret = itunesdb_set_mhod_index(mhod, 0x03, si, num_records)) return ret; + } } /* Construct an "mhod" chunk for index: sortartist, disc/tracknumber, title. */ @@ -752,7 +807,14 @@ if (mhod) { if (ret = itunesdb_init(mhod, "mhod", "index")) return ret; qsort(si, num_records, sizeof(si[0]), comp_sortartist); - if (ret = itunesdb_set_mhod_index(mhod, 0x05, si, num_records)) return ret; + if (ret = itunesdb_set_mhod_order(mhod, 0x05, si, num_records)) return ret; + + mhod = itunesdb_new_child(mhyp); + if (mhod) { + if (ret = itunesdb_init(mhod, "mhod", "library_playlist_index")) return ret; + set_prefix(si, num_records, prefix_sortartist); + if (ret = itunesdb_set_mhod_index(mhod, 0x05, si, num_records)) return ret; + } } /* Construct an "mhod" chunk for index: album, disc/tracknumber, title. */ @@ -760,7 +822,14 @@ if (mhod) { if (ret = itunesdb_init(mhod, "mhod", "index")) return ret; qsort(si, num_records, sizeof(si[0]), comp_album); - if (ret = itunesdb_set_mhod_index(mhod, 0x04, si, num_records)) return ret; + if (ret = itunesdb_set_mhod_order(mhod, 0x04, si, num_records)) return ret; + + mhod = itunesdb_new_child(mhyp); + if (mhod) { + if (ret = itunesdb_init(mhod, "mhod", "library_playlist_index")) return ret; + set_prefix(si, num_records, prefix_album); + if (ret = itunesdb_set_mhod_index(mhod, 0x04, si, num_records)) return ret; + } } /* Construct an "mhod" chunk for index: genre, sortartist, album, disc/tracknumber, title */ @@ -768,7 +837,14 @@ if (mhod) { if (ret = itunesdb_init(mhod, "mhod", "index")) return ret; qsort(si, num_records, sizeof(si[0]), comp_genre); - if (ret = itunesdb_set_mhod_index(mhod, 0x07, si, num_records)) return ret; + if (ret = itunesdb_set_mhod_order(mhod, 0x07, si, num_records)) return ret; + + mhod = itunesdb_new_child(mhyp); + if (mhod) { + if (ret = itunesdb_init(mhod, "mhod", "library_playlist_index")) return ret; + set_prefix(si, num_records, prefix_genre); + if (ret = itunesdb_set_mhod_index(mhod, 0x07, si, num_records)) return ret; + } } /* Construct an "mhod" chunk for index: composer, title. */ @@ -776,7 +852,14 @@ if (mhod) { if (ret = itunesdb_init(mhod, "mhod", "index")) return ret; qsort(si, num_records, sizeof(si[0]), comp_composer); - if (ret = itunesdb_set_mhod_index(mhod, 0x12, si, num_records)) return ret; + if (ret = itunesdb_set_mhod_order(mhod, 0x12, si, num_records)) return ret; + + mhod = itunesdb_new_child(mhyp); + if (mhod) { + if (ret = itunesdb_init(mhod, "mhod", "library_playlist_index")) return ret; + set_prefix(si, num_records, prefix_composer); + if (ret = itunesdb_set_mhod_index(mhod, 0x12, si, num_records)) return ret; + } } /* Construct an "mhod" chunk for index: albumartist, sortartist, disc/tracknumber, title. */ @@ -784,7 +867,7 @@ if (mhod) { if (ret = itunesdb_init(mhod, "mhod", "index")) return ret; qsort(si, num_records, sizeof(si[0]), comp_albumartist_sortartist); - if (ret = itunesdb_set_mhod_index(mhod, 0x23, si, num_records)) return ret; + if (ret = itunesdb_set_mhod_order(mhod, 0x23, si, num_records)) return ret; } /* Construct an "mhod" chunk for index: albumartist, album, disc/tracknumber, title*/ @@ -792,7 +875,7 @@ if (mhod) { if (ret = itunesdb_init(mhod, "mhod", "index")) return ret; qsort(si, num_records, sizeof(si[0]), comp_albumartist); - if (ret = itunesdb_set_mhod_index(mhod, 0x24, si, num_records)) return ret; + if (ret = itunesdb_set_mhod_order(mhod, 0x24, si, num_records)) return ret; } /* Construct an "mhod" chunk for index: title?. */ @@ -800,7 +883,14 @@ if (mhod) { if (ret = itunesdb_init(mhod, "mhod", "index")) return ret; qsort(si, num_records, sizeof(si[0]), comp_title); - if (ret = itunesdb_set_mhod_index(mhod, 0x1D, si, num_records)) return ret; + if (ret = itunesdb_set_mhod_order(mhod, 0x1D, si, num_records)) return ret; + + mhod = itunesdb_new_child(mhyp); + if (mhod) { + if (ret = itunesdb_init(mhod, "mhod", "library_playlist_index")) return ret; + set_prefix(si, num_records, prefix_title); + if (ret = itunesdb_set_mhod_index(mhod, 0x1D, si, num_records)) return ret; + } } /* Construct an "mhod" chunk for index: title?. */ @@ -808,7 +898,7 @@ if (mhod) { if (ret = itunesdb_init(mhod, "mhod", "index")) return ret; qsort(si, num_records, sizeof(si[0]), comp_title); - if (ret = itunesdb_set_mhod_index(mhod, 0x1E, si, num_records)) return ret; + if (ret = itunesdb_set_mhod_order(mhod, 0x1E, si, num_records)) return ret; } /* Construct an "mhod" chunk for index: title?. */ @@ -816,7 +906,7 @@ if (mhod) { if (ret = itunesdb_init(mhod, "mhod", "index")) return ret; qsort(si, num_records, sizeof(si[0]), comp_title); - if (ret = itunesdb_set_mhod_index(mhod, 0x1F, si, num_records)) return ret; + if (ret = itunesdb_set_mhod_order(mhod, 0x1F, si, num_records)) return ret; } /* End of the series of "mhod" chunks. */ @@ -831,13 +921,13 @@ mhip_data = (itunesdb_mhip_t*)mhip->data; mhip_data->flag_podcast_group = 0; - mhip_data->track_id = i; - mhip_data->group_id = i + num_records; + mhip_data->track_id = 1008 + i * 2; + mhip_data->group_id = 1008 + i * 2 + 1; mhod = itunesdb_new_child(mhip); if (mhod) { if (ret = itunesdb_init(mhod, "mhod", "playlist_order")) return ret; - if (ret = itunesdb_set_mhod_playlist_order(mhod, i+1)) return ret; + if (ret = itunesdb_set_mhod_playlist_order(mhod, 1008 + i * 2 + 1)) return ret; } else { return IPODE_OUTOFMEMORY; } @@ -946,6 +1036,7 @@ if (ret = itunesdb_init(mhbd, "mhbd", NULL)) return ret; mhbd_data = (itunesdb_mhbd_t*)mhbd->data; +#if 0 /* Construct "mhsd" chunk with album_list type (type = 4). */ mhsd = itunesdb_new_child(mhbd); if (mhsd) { @@ -965,6 +1056,7 @@ } else { return IPODE_FAILEDNEWCHUNK; } +#endif /* Construct "mhsd" chunk with track type (type = 1). */ mhsd = itunesdb_new_child(mhbd); Modified: trunk/pmplib/lib/pmp_ipod/itunesdb.c =================================================================== --- trunk/pmplib/lib/pmp_ipod/itunesdb.c 2007-09-25 16:23:32 UTC (rev 417) +++ trunk/pmplib/lib/pmp_ipod/itunesdb.c 2007-09-30 15:57:53 UTC (rev 418) @@ -332,6 +332,17 @@ if (ret = serialize_uint16le(sio, "gapless_track", "%u", &mhit->gapless_track)) return ret; if (ret = serialize_uint16le(sio, "gapless_album", "%u", &mhit->gapless_album)) return ret; if (ret = serialize_uint8_array(sio, "unknown_hash", "%02X ", mhit->unknown_hash, sizeof(mhit->unknown_hash))) return ret; + if (ret = serialize_uint32le(sio, "newunk1", "%u", &mhit->newunk1)) return ret; + if (ret = serialize_uint32le(sio, "newunk2", "%u", &mhit->newunk2)) return ret; + if (ret = serialize_uint32le(sio, "unk40", "%u", &mhit->unk40)) return ret; + if (ret = serialize_uint64le(sio, "newunk3", "%016llX", &mhit->newunk3)) return ret; + if (ret = serialize_uint32le(sio, "unk41", "%u", &mhit->unk41)) return ret; + if (ret = serialize_uint32le(sio, "unk42", "%u", &mhit->unk42)) return ret; + if (ret = serialize_uint64le(sio, "unk43", "%016llX", &mhit->unk43)) return ret; + if (ret = serialize_uint8_array(sio, "newunk4", "%02X ", mhit->newunk4, sizeof(mhit->newunk4))) return ret; + if (ret = serialize_uint32le(sio, "newunk5", "%u", &mhit->newunk5)) return ret; + if (ret = serialize_uint32le(sio, "newunk6", "%u", &mhit->newunk6)) return ret; + if (ret = serialize_uint32le(sio, "newunk7", "%u", &mhit->newunk7)) return ret; return 0; } @@ -1099,7 +1110,7 @@ } -int itunesdb_set_mhod_index(itunesdb_chunk_t* chunk, uint32_t type, sorted_index_t* si, uint32_t n) +int itunesdb_set_mhod_order(itunesdb_chunk_t* chunk, uint32_t type, itunesdb_playlist_entry_t* si, uint32_t n) { uint32_t i; itunesdb_mhod_t* mhod = (itunesdb_mhod_t*)chunk->data; @@ -1123,6 +1134,51 @@ return 0; } +int itunesdb_set_mhod_index(itunesdb_chunk_t* chunk, uint32_t type, itunesdb_playlist_entry_t* si, uint32_t n) +{ + uint32_t i, m = 0, prev = 0; + itunesdb_mhod_t* mhod = (itunesdb_mhod_t*)chunk->data; + itunesdb_mhod_library_playlist_index_t* index = &mhod->data.lp_index; + + /* Make sure this is an "mhod" chunk. */ + if (strncmp(chunk->id, "mhod", 4) != 0) { + return IPODE_INCOMPATIBLECHUNK; + } + + /* Store the index type. */ + index->type = type; + /* Initialize the number of entries as zero. */ + index->num_entries = 0; + + /* Does nothing for an empty array. */ + if (n <= 0) { + return 0; + } + + /* Allocate the entry array with the maximum size. */ + index->entries = (itunesdb_mhod_library_playlist_entry_t*)calloc( + n, sizeof(itunesdb_mhod_library_playlist_entry_t)); + if (!index->entries) { + return IPODE_OUTOFMEMORY; + } + + prev = si[0].prefix + 1; + for (i = 0;i < n;++i) { + if (prev != si[i].prefix) { + index->entries[m].value = si[i].prefix; + index->entries[m].begin = i; + index->entries[m].num = 1; + ++m; + } else { + ++index->entries[m-1].num; + } + prev = si[i].prefix; + } + + index->num_entries = m; + return 0; +} + int itunesdb_set_mhod_playlist_order(itunesdb_chunk_t* chunk, uint32_t order) { itunesdb_mhod_t* mhod = (itunesdb_mhod_t*)chunk->data; Modified: trunk/pmplib/lib/pmp_ipod/itunesdb.h =================================================================== --- trunk/pmplib/lib/pmp_ipod/itunesdb.h 2007-09-25 16:23:32 UTC (rev 417) +++ trunk/pmplib/lib/pmp_ipod/itunesdb.h 2007-09-30 15:57:53 UTC (rev 418) @@ -138,6 +138,17 @@ uint16_t gapless_track; uint16_t gapless_album; uint8_t unknown_hash[20]; + uint32_t newunk1; + uint32_t newunk2; + uint32_t unk40; + uint64_t newunk3; + uint32_t unk41; + uint32_t unk42; + uint64_t unk43; + uint8_t newunk4[36]; + uint32_t newunk5; + uint32_t newunk6; + uint32_t newunk7; } itunesdb_mhit_t; typedef struct { @@ -289,9 +300,10 @@ } itunesdb_chunkdecl_t; typedef struct { - uint32_t index; - const void* base; -} sorted_index_t; + uint32_t index; + uint32_t prefix; + const void* base; +} itunesdb_playlist_entry_t; /** * Initialize a chunk with identifier and subtype (for "mhod" chunk) @@ -335,7 +347,8 @@ * @param n The number of entries in the sorted index. * @retval int zero if succeeded, otherwise nonzero. */ -int itunesdb_set_mhod_index(itunesdb_chunk_t* chunk, uint32_t sort_order, sorted_index_t* si, uint32_t n); +int itunesdb_set_mhod_order(itunesdb_chunk_t* chunk, uint32_t sort_order, itunesdb_playlist_entry_t* si, uint32_t n); +int itunesdb_set_mhod_index(itunesdb_chunk_t* chunk, uint32_t sort_order, itunesdb_playlist_entry_t* si, uint32_t n); /** * Set ordinal value to "mhod" chunk. Modified: trunk/pmplib/lib/pmp_ipod/pmp_ipod.vcproj =================================================================== --- trunk/pmplib/lib/pmp_ipod/pmp_ipod.vcproj 2007-09-25 16:23:32 UTC (rev 417) +++ trunk/pmplib/lib/pmp_ipod/pmp_ipod.vcproj 2007-09-30 15:57:53 UTC (rev 418) @@ -40,7 +40,7 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="$(SolutionDir)include" + AdditionalIncludeDirectories="$(SolutionDir)include;win32" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;PMP_IPOD_EXPORTS" MinimalRebuild="true" BasicRuntimeChecks="3" @@ -61,7 +61,7 @@ /> <Tool Name="VCLinkerTool" - AdditionalDependencies=".\win32spti\ipodprop_win32spti.lib shlwapi.lib" + AdditionalDependencies=".\win32\usbinfo_win32.lib .\win32spti\ipodprop_win32spti.lib shlwapi.lib" LinkIncremental="2" GenerateDebugInformation="true" SubSystem="2" @@ -117,7 +117,7 @@ /> <Tool Name="VCCLCompilerTool" - AdditionalIncludeDirectories="$(SolutionDir)include" + AdditionalIncludeDirectories="$(SolutionDir)include;win32" PreprocessorDefinitions="WIN32;_WINDOWS;_USRDLL;PMP_IPOD_EXPORTS" RuntimeLibrary="2" UsePrecompiledHeader="0" @@ -136,7 +136,7 @@ /> <Tool Name="VCLinkerTool" - AdditionalDependencies=".\win32spti\ipodprop_win32spti.lib shlwapi.lib" + AdditionalDependencies=".\win32\usbinfo_win32.lib .\win32spti\ipodprop_win32spti.lib shlwapi.lib" LinkIncremental="1" GenerateDebugInformation="true" SubSystem="2" @@ -187,6 +187,10 @@ > </File> <File + RelativePath=".\ipodserial_win32.c" + > + </File> + <File RelativePath=".\itunesdb.c" > </File> @@ -229,6 +233,10 @@ > </File> <File + RelativePath=".\ipodserial.h" + > + </File> + <File RelativePath=".\itunesdb.h" > </File> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |