Actually start using the new physical sector stuff.

This commit is contained in:
David Given
2022-09-10 20:43:24 +02:00
parent e40e6bd07f
commit 085ad5f2a4
25 changed files with 80 additions and 95 deletions

View File

@@ -206,7 +206,7 @@ public:
std::set<unsigned> requiredSectors(const Location& location) const override std::set<unsigned> requiredSectors(const Location& location) const override
{ {
auto trackLayout = Layout::getLayoutOfTrack(location.logicalTrack, location.head); auto& trackLayout = Layout::getLayoutOfTrack(location.logicalTrack, location.head);
return std::set<unsigned>(trackLayout.logicalSectors.begin(), trackLayout.logicalSectors.end()); return std::set<unsigned>(trackLayout.logicalSectors.begin(), trackLayout.logicalSectors.end());
} }

View File

@@ -115,7 +115,7 @@ public:
IbmEncoderProto::TrackdataProto trackdata; IbmEncoderProto::TrackdataProto trackdata;
getEncoderTrackData(trackdata, location.logicalTrack, location.head); getEncoderTrackData(trackdata, location.logicalTrack, location.head);
auto trackLayout = auto& trackLayout =
Layout::getLayoutOfTrack(location.logicalTrack, location.head); Layout::getLayoutOfTrack(location.logicalTrack, location.head);
int logicalSide = location.head ^ trackdata.swap_sides(); int logicalSide = location.head ^ trackdata.swap_sides();
@@ -138,7 +138,7 @@ public:
IbmEncoderProto::TrackdataProto trackdata; IbmEncoderProto::TrackdataProto trackdata;
getEncoderTrackData(trackdata, location.logicalTrack, location.head); getEncoderTrackData(trackdata, location.logicalTrack, location.head);
auto trackLayout = auto& trackLayout =
Layout::getLayoutOfTrack(location.logicalTrack, location.head); Layout::getLayoutOfTrack(location.logicalTrack, location.head);
auto writeBytes = [&](const Bytes& bytes) auto writeBytes = [&](const Bytes& bytes)

View File

@@ -26,6 +26,7 @@
#include "sector.h" #include "sector.h"
#include "image.h" #include "image.h"
#include "lib/decoders/decoders.pb.h" #include "lib/decoders/decoders.pb.h"
#include "lib/layout.h"
#include "fmt/format.h" #include "fmt/format.h"
#include <numeric> #include <numeric>
@@ -72,6 +73,8 @@ std::shared_ptr<const TrackDataFlux> AbstractDecoder::decodeToSectors(
auto newSector = [&] { auto newSector = [&] {
_sector = std::make_shared<Sector>(); _sector = std::make_shared<Sector>();
_sector->status = Sector::MISSING; _sector->status = Sector::MISSING;
_sector->logicalTrack = location.logicalTrack;
_sector->logicalSide = location.head;
_sector->physicalTrack = location.physicalTrack; _sector->physicalTrack = location.physicalTrack;
_sector->physicalHead = location.head; _sector->physicalHead = location.head;
}; };
@@ -132,7 +135,11 @@ std::shared_ptr<const TrackDataFlux> AbstractDecoder::decodeToSectors(
} }
if (_sector->status != Sector::MISSING) if (_sector->status != Sector::MISSING)
{
auto& trackLayout = Layout::getLayoutOfTrack(_sector->logicalTrack, _sector->logicalSide);
_sector->logicalSector = trackLayout.physicalSectorToLogical(_sector->physicalSector);
_trackdata->sectors.push_back(_sector); _trackdata->sectors.push_back(_sector);
}
} }
} }

View File

@@ -1,7 +1,8 @@
#include "globals.h" #include "lib/globals.h"
#include "sector.h" #include "lib/sector.h"
#include "image.h" #include "lib/image.h"
#include "layout.h" #include "lib/layout.h"
#include "lib/mapper.h"
Image::Image() {} Image::Image() {}
@@ -10,7 +11,7 @@ Image::Image(std::set<std::shared_ptr<const Sector>>& sectors)
for (auto& sector : sectors) for (auto& sector : sectors)
{ {
key_t key = std::make_tuple( key_t key = std::make_tuple(
sector->logicalTrack, sector->logicalSide, sector->physicalSector); sector->logicalTrack, sector->logicalSide, sector->logicalSector);
_sectors[key] = sector; _sectors[key] = sector;
} }
calculateSize(); calculateSize();
@@ -29,7 +30,7 @@ void Image::createBlankImage()
{ {
unsigned track = trackAndHead.first; unsigned track = trackAndHead.first;
unsigned side = trackAndHead.second; unsigned side = trackAndHead.second;
auto trackLayout = Layout::getLayoutOfTrack(track, side); auto& trackLayout = Layout::getLayoutOfTrack(track, side);
Bytes blank(trackLayout.sectorSize); Bytes blank(trackLayout.sectorSize);
for (unsigned sectorId : trackLayout.logicalSectors) for (unsigned sectorId : trackLayout.logicalSectors)
put(track, side, sectorId)->data = blank; put(track, side, sectorId)->data = blank;
@@ -62,11 +63,15 @@ std::shared_ptr<const Sector> Image::get(
std::shared_ptr<Sector> Image::put( std::shared_ptr<Sector> Image::put(
unsigned track, unsigned side, unsigned sectorid) unsigned track, unsigned side, unsigned sectorid)
{ {
auto& trackLayout = Layout::getLayoutOfTrack(track, side);
key_t key = std::make_tuple(track, side, sectorid); key_t key = std::make_tuple(track, side, sectorid);
std::shared_ptr<Sector> sector = std::make_shared<Sector>(); std::shared_ptr<Sector> sector = std::make_shared<Sector>();
sector->logicalTrack = track; sector->logicalTrack = track;
sector->logicalSide = side; sector->logicalSide = side;
sector->physicalSector = sectorid; sector->logicalSector = sectorid;
sector->physicalTrack = Mapper::remapTrackLogicalToPhysical(track);
sector->physicalHead = side;
sector->physicalSector = trackLayout.logicalSectorToPhysical(sectorid);
_sectors[key] = sector; _sectors[key] = sector;
return sector; return sector;
} }
@@ -100,8 +105,8 @@ void Image::calculateSize()
_geometry.numSides = _geometry.numSides =
std::max(_geometry.numSides, (unsigned)sector->logicalSide + 1); std::max(_geometry.numSides, (unsigned)sector->logicalSide + 1);
_geometry.firstSector = std::min( _geometry.firstSector = std::min(
_geometry.firstSector, (unsigned)sector->physicalSector); _geometry.firstSector, (unsigned)sector->logicalSector);
maxSector = std::max(maxSector, (unsigned)sector->physicalSector); maxSector = std::max(maxSector, (unsigned)sector->logicalSector);
_geometry.sectorSize = _geometry.sectorSize =
std::max(_geometry.sectorSize, (unsigned)sector->data.size()); std::max(_geometry.sectorSize, (unsigned)sector->data.size());
} }

View File

@@ -69,20 +69,14 @@ public:
offset += 256; offset += 256;
sector->status = Sector::OK; sector->status = Sector::OK;
sector->logicalTrack = track;
sector->physicalTrack = physicalTrack; sector->physicalTrack = physicalTrack;
sector->logicalSide = sector->physicalHead = head;
sector->physicalSector = sectorId;
sector->data.writer().append(payload); sector->data.writer().append(payload);
} }
else else
{ // no more data in input file. Write sectors with status: { // no more data in input file. Write sectors with status:
// DATA_MISSING // DATA_MISSING
sector->status = Sector::DATA_MISSING; sector->status = Sector::DATA_MISSING;
sector->logicalTrack = track;
sector->physicalTrack = physicalTrack; sector->physicalTrack = physicalTrack;
sector->logicalSide = sector->physicalHead = head;
sector->physicalSector = sectorId;
} }
} }
} }

View File

@@ -197,10 +197,6 @@ public:
inputFile.read((char*)data.begin(), data.size()); inputFile.read((char*)data.begin(), data.size());
const auto& sector = image->put(track, head, sectorId); const auto& sector = image->put(track, head, sectorId);
sector->status = Sector::OK; sector->status = Sector::OK;
sector->logicalTrack = track;
sector->physicalTrack = Mapper::remapTrackLogicalToPhysical(track);
sector->logicalSide = sector->physicalHead = head;
sector->physicalSector = sectorId;
sector->data = data; sector->data = data;
physical->add_sector(sectorId); physical->add_sector(sectorId);

View File

@@ -86,10 +86,6 @@ public:
const auto& sector = image->put(track, side, sectorId); const auto& sector = image->put(track, side, sectorId);
sector->status = Sector::OK; sector->status = Sector::OK;
sector->logicalTrack = track;
sector->physicalTrack = Mapper::remapTrackLogicalToPhysical(track);
sector->logicalSide = sector->physicalHead = side;
sector->physicalSector = sectorId;
sector->data = data; sector->data = data;
} }
} }

View File

@@ -110,10 +110,6 @@ public:
const auto& sector = image->put(track, head, sectorId); const auto& sector = image->put(track, head, sectorId);
sector->status = Sector::OK; sector->status = Sector::OK;
sector->logicalTrack = track;
sector->physicalTrack = Mapper::remapTrackLogicalToPhysical(track);
sector->logicalSide = sector->physicalHead = head;
sector->physicalSector = sectorId;
sector->data.writer().append(payload).append(tag); sector->data.writer().append(payload).append(tag);
} }
} }

View File

@@ -66,10 +66,6 @@ public:
const auto& sector = const auto& sector =
image->put(track, side, sectorId); image->put(track, side, sectorId);
sector->status = Sector::OK; sector->status = Sector::OK;
sector->logicalTrack = track;
sector->physicalTrack = Mapper::remapTrackLogicalToPhysical(track);
sector->logicalSide = sector->physicalHead = side;
sector->physicalSector = sectorId;
sector->data = data; sector->data = data;
} }
} }

View File

@@ -264,7 +264,6 @@ public:
int SectorID; int SectorID;
SectorID = sector_skew[s]; SectorID = sector_skew[s];
const auto& sector = image->put(header.track, header.Head, SectorID); const auto& sector = image->put(header.track, header.Head, SectorID);
sector->physicalSector = SectorID;
//read the status of the sector //read the status of the sector
unsigned int Status_Sector = br.read_8(); unsigned int Status_Sector = br.read_8();
headerPtr++; headerPtr++;

View File

@@ -40,7 +40,7 @@ public:
if (inputFile.eof()) if (inputFile.eof())
break; break;
auto trackLayout = Layout::getLayoutOfTrack(track, side); auto& trackLayout = Layout::getLayoutOfTrack(track, side);
for (int sectorId : trackLayout.logicalSectors) for (int sectorId : trackLayout.logicalSectors)
{ {
Bytes data(trackLayout.sectorSize); Bytes data(trackLayout.sectorSize);
@@ -48,11 +48,6 @@ public:
const auto& sector = image->put(track, side, sectorId); const auto& sector = image->put(track, side, sectorId);
sector->status = Sector::OK; sector->status = Sector::OK;
sector->logicalTrack = track;
sector->physicalTrack =
Mapper::remapTrackLogicalToPhysical(track);
sector->logicalSide = sector->physicalHead = side;
sector->physicalSector = sectorId;
sector->data = data; sector->data = data;
} }
} }

View File

@@ -124,10 +124,6 @@ public:
const auto& sector = const auto& sector =
image->put(header.track, head, header.sector); image->put(header.track, head, header.sector);
sector->status = Sector::OK; sector->status = Sector::OK;
sector->logicalTrack = header.track;
sector->physicalTrack = Mapper::remapTrackLogicalToPhysical(header.track);
sector->logicalSide = sector->physicalHead = head;
sector->physicalSector = header.sector;
sector->data = data; sector->data = data;
} }

View File

@@ -147,10 +147,6 @@ public:
inputFile.read((char*)data.begin(), data.size()); inputFile.read((char*)data.begin(), data.size());
const auto& sector = image->put(track, head, sectorId); const auto& sector = image->put(track, head, sectorId);
sector->status = Sector::OK; sector->status = Sector::OK;
sector->logicalTrack = track;
sector->physicalTrack = Mapper::remapTrackLogicalToPhysical(track);
sector->logicalSide = sector->physicalHead = head;
sector->physicalSector = sectorId;
sector->data = data; sector->data = data;
physical->add_sector(sectorId); physical->add_sector(sectorId);

View File

@@ -100,10 +100,6 @@ public:
const auto& sector = image->put(track, head, sectorId); const auto& sector = image->put(track, head, sectorId);
sector->status = Sector::OK; sector->status = Sector::OK;
sector->logicalTrack = track;
sector->physicalTrack = Mapper::remapTrackLogicalToPhysical(track);
sector->logicalSide = sector->physicalHead = head;
sector->physicalSector = sectorId;
sector->data = data; sector->data = data;
} }
} }

View File

@@ -82,7 +82,7 @@ public:
ByteWriter sectorWriter(sectorBytes); ByteWriter sectorWriter(sectorBytes);
sectorWriter.write_8(sector->logicalTrack); sectorWriter.write_8(sector->logicalTrack);
sectorWriter.write_8(sector->logicalSide); sectorWriter.write_8(sector->logicalSide);
sectorWriter.write_8(sector->physicalSector); sectorWriter.write_8(sector->logicalSector);
sectorWriter.write_8(24 - countl_zero(uint32_t(sector->data.size()))); sectorWriter.write_8(24 - countl_zero(uint32_t(sector->data.size())));
sectorWriter.write_le16(sectors.size()); sectorWriter.write_le16(sectors.size());
sectorWriter.write_8(0x00); // always write mfm sectorWriter.write_8(0x00); // always write mfm

View File

@@ -89,6 +89,7 @@ void ImageWriter::writeCsv(const Image& image, const std::string& filename)
f << "\"Physical track\"," f << "\"Physical track\","
"\"Physical side\"," "\"Physical side\","
"\"Physical sector\","
"\"Logical track\"," "\"Logical track\","
"\"Logical side\"," "\"Logical side\","
"\"Logical sector\"," "\"Logical sector\","
@@ -104,12 +105,13 @@ void ImageWriter::writeCsv(const Image& image, const std::string& filename)
for (const auto& sector : image) for (const auto& sector : image)
{ {
f << fmt::format("{},{},{},{},{},{},{},{},{},{},{},{},{}\n", f << fmt::format("{},{},{},{},{},{},{},{},{},{},{},{},{},{}\n",
sector->physicalTrack, sector->physicalTrack,
sector->physicalHead, sector->physicalHead,
sector->physicalSector,
sector->logicalTrack, sector->logicalTrack,
sector->logicalSide, sector->logicalSide,
sector->physicalSector, sector->logicalSector,
sector->clock, sector->clock,
sector->headerStartTime, sector->headerStartTime,
sector->headerEndTime, sector->headerEndTime,

View File

@@ -36,7 +36,7 @@ public:
int track = p.first; int track = p.first;
int side = p.second; int side = p.second;
auto trackLayout = Layout::getLayoutOfTrack(track, side); auto& trackLayout = Layout::getLayoutOfTrack(track, side);
for (int sectorId : trackLayout.logicalSectors) for (int sectorId : trackLayout.logicalSectors)
{ {
const auto& sector = image.get(track, side, sectorId); const auto& sector = image.get(track, side, sectorId);

View File

@@ -69,7 +69,7 @@ const Layout& Layout::getLayoutOfTrack(unsigned track, unsigned side)
auto& layout = layoutCache[std::make_pair(track, side)]; auto& layout = layoutCache[std::make_pair(track, side)];
if (!layout) if (!layout)
{ {
layout.reset(new Layout); layout.reset(new Layout());
LayoutProto::LayoutdataProto layoutdata; LayoutProto::LayoutdataProto layoutdata;
for (const auto& f : config.layout().layoutdata()) for (const auto& f : config.layout().layoutdata())
@@ -105,20 +105,22 @@ const Layout& Layout::getLayoutOfTrack(unsigned track, unsigned side)
return *layout; return *layout;
} }
unsigned Layout::physicalSectorToLogical(unsigned physicalSectorId) unsigned Layout::physicalSectorToLogical(unsigned physicalSectorId) const
{ {
for (int i=0; i<physicalSectors.size(); i++) for (int i = 0; i < physicalSectors.size(); i++)
if (physicalSectors[i] == physicalSectorId) if (physicalSectors[i] == physicalSectorId)
return logicalSectors[i]; return logicalSectors[i];
Error() << fmt::format("LAYOUT: physical sector {} not recognised", physicalSectorId); Error() << fmt::format(
"LAYOUT: physical sector {} not recognised", physicalSectorId);
throw nullptr;
} }
unsigned Layout::logicalSectorToPhysical(unsigned logicalSectorId) unsigned Layout::logicalSectorToPhysical(unsigned logicalSectorId) const
{ {
for (int i=0; i<logicalSectors.size(); i++) for (int i = 0; i < logicalSectors.size(); i++)
if (logicalSectors[i] == logicalSectorId) if (logicalSectors[i] == logicalSectorId)
return physicalSectors[i]; return physicalSectors[i];
Error() << fmt::format("LAYOUT: logical sector {} not recognised", logicalSectorId); Error() << fmt::format(
"LAYOUT: logical sector {} not recognised", logicalSectorId);
throw nullptr;
} }

View File

@@ -5,6 +5,14 @@
class Layout class Layout
{ {
public:
Layout() {}
private:
/* Can't copy. */
Layout(const Layout&);
Layout& operator=(const Layout&);
public: public:
static std::vector<std::pair<int, int>> getTrackOrdering( static std::vector<std::pair<int, int>> getTrackOrdering(
unsigned guessedTracks = 0, unsigned guessedSides = 0); unsigned guessedTracks = 0, unsigned guessedSides = 0);
@@ -19,8 +27,8 @@ public:
std::vector<unsigned> physicalSectors; std::vector<unsigned> physicalSectors;
std::vector<unsigned> logicalSectors; std::vector<unsigned> logicalSectors;
unsigned physicalSectorToLogical(unsigned sectorId); unsigned physicalSectorToLogical(unsigned sectorId) const;
unsigned logicalSectorToPhysical(unsigned sectorId); unsigned logicalSectorToPhysical(unsigned sectorId) const;
}; };
#endif #endif

View File

@@ -120,7 +120,7 @@ std::string Logger::toString(const AnyLogMessage& message)
stream << fmt::format(" {}.{}.{}{}", stream << fmt::format(" {}.{}.{}{}",
sector->logicalTrack, sector->logicalTrack,
sector->logicalSide, sector->logicalSide,
sector->physicalSector, sector->logicalSector,
Sector::statusToChar(sector->status)); Sector::statusToChar(sector->status));
stream << '\n'; stream << '\n';

View File

@@ -109,7 +109,7 @@ static std::set<std::shared_ptr<const Sector>> collectSectors(
for (const auto& sector : track_sectors) for (const auto& sector : track_sectors)
{ {
key_t sectorid = { key_t sectorid = {
sector->logicalTrack, sector->logicalSide, sector->physicalSector}; sector->logicalTrack, sector->logicalSide, sector->logicalSector};
sectors.insert({sectorid, sector}); sectors.insert({sectorid, sector});
} }
@@ -166,7 +166,7 @@ BadSectorsState combineRecordAndSectors(
for (unsigned logical_sector : decoder.requiredSectors(trackFlux.location)) for (unsigned logical_sector : decoder.requiredSectors(trackFlux.location))
{ {
auto sector = std::make_shared<Sector>(location); auto sector = std::make_shared<Sector>(location);
sector->physicalSector = logical_sector; sector->logicalSector = logical_sector;
sector->status = Sector::MISSING; sector->status = Sector::MISSING;
track_sectors.insert(sector); track_sectors.insert(sector);
} }
@@ -344,14 +344,14 @@ void writeTracksAndVerify(FluxSink& fluxSink,
wanted wanted
.put(sector->logicalTrack, .put(sector->logicalTrack,
sector->logicalSide, sector->logicalSide,
sector->physicalSector) sector->logicalSector)
->data = sector->data; ->data = sector->data;
for (const auto& sector : trackFlux->sectors) for (const auto& sector : trackFlux->sectors)
{ {
const auto s = wanted.get(sector->logicalTrack, const auto s = wanted.get(sector->logicalTrack,
sector->logicalSide, sector->logicalSide,
sector->physicalSector); sector->logicalSector);
if (!s) if (!s)
{ {
Logger() << "spurious sector on verify"; Logger() << "spurious sector on verify";
@@ -364,7 +364,7 @@ void writeTracksAndVerify(FluxSink& fluxSink,
} }
wanted.erase(sector->logicalTrack, wanted.erase(sector->logicalTrack,
sector->logicalSide, sector->logicalSide,
sector->physicalSector); sector->logicalSector);
} }
if (!wanted.empty()) if (!wanted.empty())
{ {
@@ -524,7 +524,7 @@ std::shared_ptr<const DiskFlux> readDiskCommand(
"status {}\n", "status {}\n",
sector->logicalTrack, sector->logicalTrack,
sector->logicalSide, sector->logicalSide,
sector->physicalSector, sector->logicalSector,
sector->headerStartTime / 1000.0, sector->headerStartTime / 1000.0,
sector->clock / 1000.0, sector->clock / 1000.0,
Sector::statusToString(sector->status)); Sector::statusToString(sector->status));

View File

@@ -63,7 +63,7 @@ public:
{ {
unsigned track = trackid.first; unsigned track = trackid.first;
unsigned side = trackid.second; unsigned side = trackid.second;
auto trackLayout = Layout::getLayoutOfTrack(track, side); auto& trackLayout = Layout::getLayoutOfTrack(track, side);
locations.insert(Mapper::computeLocationFor(track, side)); locations.insert(Mapper::computeLocationFor(track, side));
/* If we don't have all the sectors of this track, we may need to /* If we don't have all the sectors of this track, we may need to
@@ -131,7 +131,7 @@ private:
auto trackdata = readAndDecodeTrack(*_fluxSource, *_decoder, location); auto trackdata = readAndDecodeTrack(*_fluxSource, *_decoder, location);
for (const auto& sector : trackdata->sectors) for (const auto& sector : trackdata->sectors)
*_loadedSectors.put(track, side, sector->physicalSector) = *sector; *_loadedSectors.put(track, side, sector->logicalSector) = *sector;
_loadedTracks.insert(trackid_t(track, side)); _loadedTracks.insert(trackid_t(track, side));
} }

View File

@@ -164,7 +164,7 @@ Filesystem::Filesystem(std::shared_ptr<SectorInterface> sectors):
int track = p.first; int track = p.first;
int side = p.second; int side = p.second;
auto trackLayout = Layout::getLayoutOfTrack(track, side); auto& trackLayout = Layout::getLayoutOfTrack(track, side);
if (trackLayout.logicalSectors.empty()) if (trackLayout.logicalSectors.empty())
Error() << "FS: filesystem support cannot be used without concrete " Error() << "FS: filesystem support cannot be used without concrete "
"layout information"; "layout information";
@@ -268,7 +268,7 @@ Bytes Filesystem::getLogicalSector(uint32_t number, uint32_t count)
int track = std::get<0>(it); int track = std::get<0>(it);
int side = std::get<1>(it); int side = std::get<1>(it);
int sector = std::get<2>(it); int sector = std::get<2>(it);
auto trackLayout = Layout::getLayoutOfTrack(track, side); auto& trackLayout = Layout::getLayoutOfTrack(track, side);
bw += _sectors->get(track, side, sector) bw += _sectors->get(track, side, sector)
->data.slice(0, trackLayout.sectorSize); ->data.slice(0, trackLayout.sectorSize);
} }

View File

@@ -187,21 +187,22 @@ static void readRow(const std::vector<std::string>& row, Image& image)
if (status == Sector::Status::MISSING) if (status == Sector::Status::MISSING)
return; return;
int logicalTrack = std::stoi(row[2]); int logicalTrack = std::stoi(row[3]);
int logicalSide = std::stoi(row[3]); int logicalSide = std::stoi(row[4]);
int logicalSector = std::stoi(row[4]); int logicalSector = std::stoi(row[5]);
const auto& sector = image.put(logicalTrack, logicalSide, logicalSector); const auto& sector = image.put(logicalTrack, logicalSide, logicalSector);
sector->physicalTrack = std::stoi(row[0]); sector->physicalTrack = std::stoi(row[0]);
sector->physicalHead = std::stoi(row[1]); sector->physicalHead = std::stoi(row[1]);
sector->physicalSector = std::stoi(row[2]);
sector->logicalTrack = logicalTrack; sector->logicalTrack = logicalTrack;
sector->logicalSide = logicalSide; sector->logicalSide = logicalSide;
sector->physicalSector = logicalSector; sector->logicalSector = logicalSector;
sector->clock = std::stod(row[5]); sector->clock = std::stod(row[6]);
sector->headerStartTime = std::stod(row[6]); sector->headerStartTime = std::stod(row[7]);
sector->headerEndTime = std::stod(row[7]); sector->headerEndTime = std::stod(row[8]);
sector->dataStartTime = std::stod(row[8]); sector->dataStartTime = std::stod(row[9]);
sector->dataEndTime = std::stod(row[9]); sector->dataEndTime = std::stod(row[10]);
sector->status = status; sector->status = status;
} }
catch (const std::invalid_argument& e) catch (const std::invalid_argument& e)

View File

@@ -237,7 +237,7 @@ void FluxViewerControl::OnPaint(wxPaintEvent&)
wxDCClipper clipper(dc, rect); wxDCClipper clipper(dc, rect);
auto text = fmt::format("c{}.h{}.s{} {}", auto text = fmt::format("c{}.h{}.s{} {}",
sector->logicalTrack, sector->logicalSide, sector->physicalSector, sector->logicalTrack, sector->logicalSide, sector->logicalSector,
Sector::statusToString(sector->status)); Sector::statusToString(sector->status));
auto size = dc.GetTextExtent(text); auto size = dc.GetTextExtent(text);
dc.DrawText(text, { x+sp+BORDER, t1y - size.GetHeight()/2 }); dc.DrawText(text, { x+sp+BORDER, t1y - size.GetHeight()/2 });
@@ -438,7 +438,7 @@ void FluxViewerControl::DisplayDecodedData(std::shared_ptr<const Sector> sector)
std::stringstream s; std::stringstream s;
auto title = fmt::format("User data for c{}.h{}.s{}", auto title = fmt::format("User data for c{}.h{}.s{}",
sector->logicalTrack, sector->logicalSide, sector->physicalSector); sector->logicalTrack, sector->logicalSide, sector->logicalSector);
s << title << '\n'; s << title << '\n';
dumpSectorMetadata(s, sector); dumpSectorMetadata(s, sector);
s << '\n'; s << '\n';
@@ -453,7 +453,7 @@ void FluxViewerControl::DisplayRawData(std::shared_ptr<const Sector> sector)
std::stringstream s; std::stringstream s;
auto title = fmt::format("Raw data for c{}.h{}.s{}", auto title = fmt::format("Raw data for c{}.h{}.s{}",
sector->logicalTrack, sector->logicalSide, sector->physicalSector); sector->logicalTrack, sector->logicalSide, sector->logicalSector);
s << title << '\n'; s << title << '\n';
dumpSectorMetadata(s, sector); dumpSectorMetadata(s, sector);
s << fmt::format("Number of records: {}\n", sector->records.size()); s << fmt::format("Number of records: {}\n", sector->records.size());