Fix a horrifying bug which was causing all data from USB to be discarded.

This commit is contained in:
David Given
2018-10-20 19:39:34 +02:00
parent 8244f9ec51
commit 3a0ce92468
3 changed files with 41 additions and 42 deletions

View File

@@ -1,40 +1,40 @@
#include "globals.h"
#include "image.h"
#include "fmt/format.h"
#include <algorithm>
#include <iostream>
#include <fstream>
void writeSectorsToFile(const std::vector<std::unique_ptr<Sector>>& sectors, const std::string& filename)
{
/* Count the tracks, sides and sectors. */
int trackCount = 0;
int sideCount = 0;
int sectorCount = 0;
size_t sectorSize = 0;
for (auto& sector : sectors)
{
trackCount = std::max(sector->track()+1, trackCount);
sideCount = std::max(sector->side()+1, sideCount);
sectorCount = std::max(sector->sector()+1, sectorCount);
sectorSize = std::max(sector->data().size(), sectorSize);
}
size_t sideSize = sectorCount * sectorSize;
size_t trackSize = sideSize * sideCount;
std::cout << fmt::format("{} tracks, {} sides, {} sectors, {} bytes per sector, {} kB total",
trackCount, sideCount, sectorCount, sectorSize,
trackCount * sideCount * sectorCount * sectorSize / 1024);
std::ofstream outputFile(filename, std::ios::out | std::ios::binary);
if (!outputFile.is_open())
Error() << "cannot open output file";
for (auto& sector : sectors)
{
outputFile.seekp(sector->track()*trackSize + sector->side()*sideSize + sector->sector()*sectorSize, std::ios::beg);
outputFile.write((const char*) &sector->data().at(0), sector->data().size());
}
}
#include "globals.h"
#include "image.h"
#include "fmt/format.h"
#include <algorithm>
#include <iostream>
#include <fstream>
void writeSectorsToFile(const std::vector<std::unique_ptr<Sector>>& sectors, const std::string& filename)
{
/* Count the tracks, sides and sectors. */
int trackCount = 0;
int sideCount = 0;
int sectorCount = 0;
size_t sectorSize = 0;
for (auto& sector : sectors)
{
trackCount = std::max(sector->track()+1, trackCount);
sideCount = std::max(sector->side()+1, sideCount);
sectorCount = std::max(sector->sector()+1, sectorCount);
sectorSize = std::max(sector->data().size(), sectorSize);
}
size_t sideSize = sectorCount * sectorSize;
size_t trackSize = sideSize * sideCount;
std::cout << fmt::format("{} tracks, {} sides, {} sectors, {} bytes per sector, {} kB total",
trackCount, sideCount, sectorCount, sectorSize,
trackCount * sideCount * sectorCount * sectorSize / 1024);
std::ofstream outputFile(filename, std::ios::out | std::ios::binary);
if (!outputFile.is_open())
Error() << "cannot open output file";
for (auto& sector : sectors)
{
outputFile.seekp(sector->track()*trackSize + sector->side()*sideSize + sector->sector()*sectorSize, std::ios::beg);
outputFile.write((const char*) &sector->data().at(0), sector->data().size());
}
}