Mercurial > repos > blastem
comparison cdimage.c @ 2143:67f20f9188b0
Fix support for CUE sheets that refer to multiple files
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 25 Mar 2022 21:41:33 -0700 |
parents | d9151d0894c7 |
children | 9209858b2f74 |
comparison
equal
deleted
inserted
replaced
2142:d9151d0894c7 | 2143:67f20f9188b0 |
---|---|
316 } else { | 316 } else { |
317 line = NULL; | 317 line = NULL; |
318 } | 318 } |
319 } while (line); | 319 } while (line); |
320 if (media->num_tracks > 0 && media->tracks[0].f) { | 320 if (media->num_tracks > 0 && media->tracks[0].f) { |
321 //end of last track is implicitly defined by file size | 321 //end of last track in a file is implictly based on the size |
322 if (tracks[media->num_tracks-1].f) { | 322 f = tracks[0].f; |
323 uint32_t start_lba =tracks[media->num_tracks-1].pregap_lba ? tracks[media->num_tracks-1].pregap_lba : tracks[media->num_tracks-1].start_lba; | 323 uint32_t offset = 0; |
324 tracks[media->num_tracks-1].end_lba = start_lba + (file_size(tracks[media->num_tracks-1].f) - tracks[media->num_tracks-1].file_offset)/ tracks[media->num_tracks-1].sector_bytes; | 324 for (int track = 0; track < media->num_tracks; track++) { |
325 if (track == media->num_tracks - 1 && tracks[track].f) { | |
326 uint32_t start_lba =tracks[track].fake_pregap ? tracks[track].start_lba : tracks[track].pregap_lba; | |
327 tracks[track].end_lba = start_lba + (file_size(tracks[track].f) - tracks[track].file_offset)/ tracks[track].sector_bytes; | |
328 } else if (tracks[track].f != f) { | |
329 uint32_t start_lba =tracks[track-1].fake_pregap ? tracks[track-1].start_lba : tracks[track-1].pregap_lba; | |
330 tracks[track-1].end_lba = start_lba + (file_size(tracks[track-1].f) - tracks[track-1].file_offset)/ tracks[track-1].sector_bytes; | |
331 offset = tracks[track-1].end_lba; | |
332 } | |
333 if (!tracks[track].fake_pregap) { | |
334 tracks[track].pregap_lba += offset; | |
335 } | |
336 tracks[track].start_lba += offset; | |
337 tracks[track].end_lba += offset; | |
325 } | 338 } |
326 //replace cue sheet with first sector | 339 //replace cue sheet with first sector |
327 free(media->buffer); | 340 free(media->buffer); |
328 media->buffer = calloc(2048, 1); | 341 media->buffer = calloc(2048, 1); |
329 if (tracks[0].type == TRACK_DATA && tracks[0].sector_bytes == 2352) { | 342 if (tracks[0].type == TRACK_DATA && tracks[0].sector_bytes == 2352) { |