--- cwcbm/readcbm.c 2004/01/07 16:53:58 1.2 +++ cwcbm/readcbm.c 2004/01/10 14:05:59 1.3 @@ -154,12 +154,12 @@ static int decode_header(int track, int fprintf(stderr, "Track %d: header checksum incorrect\n", track); // we'll try to continue anyways } - if (header[2] >= num_sectors[track]) { + if (header[2] >= format->num_sectors[track]) { fprintf(stderr, "Track %d: invalid sector number in header\n", track); return 0; } if (header[3] != track) { - fprintf(stderr, "Track %d: invalid track number in header (seek error?)\n", track); + fprintf(stderr, "Track %d: invalid track number (%d) in header (seek error?)\n", track, header[3]); return 0; } @@ -207,7 +207,7 @@ static void decode_sectors(int track) // No sector read yet unsigned long sector_found = 0; - unsigned long all_sectors = (1 << num_sectors[track]) - 1; + unsigned long all_sectors = (1 << format->num_sectors[track]) - 1; // Reset buffer pointer buf_ptr = 0; @@ -243,7 +243,7 @@ static void decode_sectors(int track) // Check if all sectors of the track were found if (sector_found != all_sectors) { - for (sector = 0; sector < num_sectors[track]; sector++) + for (sector = 0; sector < format->num_sectors[track]; sector++) if (!(sector_found & (1 << sector))) fprintf(stderr, "Track %d: sector %d not found\n", track, sector); } @@ -259,10 +259,10 @@ static int read_track(int drive, int tra seek_to(drive, track); // Clear buffer - memset(track_buf, 0, num_sectors[track] * SECTOR_SIZE); + memset(track_buf, 0, format->num_sectors[track] * SECTOR_SIZE); // Read track (1 revolution + 10%) - if (!catweasel_read(c.drives + drive, 0, 1, 1100 * 60 / drive_rpm)) { + if (!catweasel_read(c.drives + drive, track > format->tracks_per_side ? 1 : 0, 1, 1100 * 60 / drive_rpm)) { fprintf(stderr, "Error reading track %d\n", track); return 0; } @@ -318,11 +318,11 @@ int main(int argc, char **argv) start_drive(drive_num); // Read all tracks - for (track = 1; track <= NUM_TRACKS; track++) { + for (track = 1; track <= format->sides * format->tracks_per_side; track++) { printf("Track %d...\n", track); if (!read_track(drive_num, track)) break; - fwrite(track_buf, 256, num_sectors[track], f); + fwrite(track_buf, 256, format->num_sectors[track], f); } // Stop drive