mirror of
https://github.com/davidgiven/fluxengine.git
synced 2025-10-31 11:17:01 -07:00
Actually start using the new physical sector stuff.
This commit is contained in:
@@ -206,7 +206,7 @@ public:
|
||||
|
||||
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());
|
||||
}
|
||||
|
||||
|
||||
@@ -115,7 +115,7 @@ public:
|
||||
IbmEncoderProto::TrackdataProto trackdata;
|
||||
getEncoderTrackData(trackdata, location.logicalTrack, location.head);
|
||||
|
||||
auto trackLayout =
|
||||
auto& trackLayout =
|
||||
Layout::getLayoutOfTrack(location.logicalTrack, location.head);
|
||||
|
||||
int logicalSide = location.head ^ trackdata.swap_sides();
|
||||
@@ -138,7 +138,7 @@ public:
|
||||
IbmEncoderProto::TrackdataProto trackdata;
|
||||
getEncoderTrackData(trackdata, location.logicalTrack, location.head);
|
||||
|
||||
auto trackLayout =
|
||||
auto& trackLayout =
|
||||
Layout::getLayoutOfTrack(location.logicalTrack, location.head);
|
||||
|
||||
auto writeBytes = [&](const Bytes& bytes)
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include "sector.h"
|
||||
#include "image.h"
|
||||
#include "lib/decoders/decoders.pb.h"
|
||||
#include "lib/layout.h"
|
||||
#include "fmt/format.h"
|
||||
#include <numeric>
|
||||
|
||||
@@ -72,6 +73,8 @@ std::shared_ptr<const TrackDataFlux> AbstractDecoder::decodeToSectors(
|
||||
auto newSector = [&] {
|
||||
_sector = std::make_shared<Sector>();
|
||||
_sector->status = Sector::MISSING;
|
||||
_sector->logicalTrack = location.logicalTrack;
|
||||
_sector->logicalSide = location.head;
|
||||
_sector->physicalTrack = location.physicalTrack;
|
||||
_sector->physicalHead = location.head;
|
||||
};
|
||||
@@ -132,7 +135,11 @@ std::shared_ptr<const TrackDataFlux> AbstractDecoder::decodeToSectors(
|
||||
}
|
||||
|
||||
if (_sector->status != Sector::MISSING)
|
||||
{
|
||||
auto& trackLayout = Layout::getLayoutOfTrack(_sector->logicalTrack, _sector->logicalSide);
|
||||
_sector->logicalSector = trackLayout.physicalSectorToLogical(_sector->physicalSector);
|
||||
_trackdata->sectors.push_back(_sector);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
23
lib/image.cc
23
lib/image.cc
@@ -1,7 +1,8 @@
|
||||
#include "globals.h"
|
||||
#include "sector.h"
|
||||
#include "image.h"
|
||||
#include "layout.h"
|
||||
#include "lib/globals.h"
|
||||
#include "lib/sector.h"
|
||||
#include "lib/image.h"
|
||||
#include "lib/layout.h"
|
||||
#include "lib/mapper.h"
|
||||
|
||||
Image::Image() {}
|
||||
|
||||
@@ -10,7 +11,7 @@ Image::Image(std::set<std::shared_ptr<const Sector>>& sectors)
|
||||
for (auto& sector : sectors)
|
||||
{
|
||||
key_t key = std::make_tuple(
|
||||
sector->logicalTrack, sector->logicalSide, sector->physicalSector);
|
||||
sector->logicalTrack, sector->logicalSide, sector->logicalSector);
|
||||
_sectors[key] = sector;
|
||||
}
|
||||
calculateSize();
|
||||
@@ -29,7 +30,7 @@ void Image::createBlankImage()
|
||||
{
|
||||
unsigned track = trackAndHead.first;
|
||||
unsigned side = trackAndHead.second;
|
||||
auto trackLayout = Layout::getLayoutOfTrack(track, side);
|
||||
auto& trackLayout = Layout::getLayoutOfTrack(track, side);
|
||||
Bytes blank(trackLayout.sectorSize);
|
||||
for (unsigned sectorId : trackLayout.logicalSectors)
|
||||
put(track, side, sectorId)->data = blank;
|
||||
@@ -62,11 +63,15 @@ std::shared_ptr<const Sector> Image::get(
|
||||
std::shared_ptr<Sector> Image::put(
|
||||
unsigned track, unsigned side, unsigned sectorid)
|
||||
{
|
||||
auto& trackLayout = Layout::getLayoutOfTrack(track, side);
|
||||
key_t key = std::make_tuple(track, side, sectorid);
|
||||
std::shared_ptr<Sector> sector = std::make_shared<Sector>();
|
||||
sector->logicalTrack = track;
|
||||
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;
|
||||
return sector;
|
||||
}
|
||||
@@ -100,8 +105,8 @@ void Image::calculateSize()
|
||||
_geometry.numSides =
|
||||
std::max(_geometry.numSides, (unsigned)sector->logicalSide + 1);
|
||||
_geometry.firstSector = std::min(
|
||||
_geometry.firstSector, (unsigned)sector->physicalSector);
|
||||
maxSector = std::max(maxSector, (unsigned)sector->physicalSector);
|
||||
_geometry.firstSector, (unsigned)sector->logicalSector);
|
||||
maxSector = std::max(maxSector, (unsigned)sector->logicalSector);
|
||||
_geometry.sectorSize =
|
||||
std::max(_geometry.sectorSize, (unsigned)sector->data.size());
|
||||
}
|
||||
|
||||
@@ -69,20 +69,14 @@ public:
|
||||
offset += 256;
|
||||
|
||||
sector->status = Sector::OK;
|
||||
sector->logicalTrack = track;
|
||||
sector->physicalTrack = physicalTrack;
|
||||
sector->logicalSide = sector->physicalHead = head;
|
||||
sector->physicalSector = sectorId;
|
||||
sector->data.writer().append(payload);
|
||||
}
|
||||
else
|
||||
{ // no more data in input file. Write sectors with status:
|
||||
// DATA_MISSING
|
||||
sector->status = Sector::DATA_MISSING;
|
||||
sector->logicalTrack = track;
|
||||
sector->physicalTrack = physicalTrack;
|
||||
sector->logicalSide = sector->physicalHead = head;
|
||||
sector->physicalSector = sectorId;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -197,10 +197,6 @@ public:
|
||||
inputFile.read((char*)data.begin(), data.size());
|
||||
const auto& sector = image->put(track, head, sectorId);
|
||||
sector->status = Sector::OK;
|
||||
sector->logicalTrack = track;
|
||||
sector->physicalTrack = Mapper::remapTrackLogicalToPhysical(track);
|
||||
sector->logicalSide = sector->physicalHead = head;
|
||||
sector->physicalSector = sectorId;
|
||||
sector->data = data;
|
||||
|
||||
physical->add_sector(sectorId);
|
||||
|
||||
@@ -86,10 +86,6 @@ public:
|
||||
|
||||
const auto& sector = image->put(track, side, sectorId);
|
||||
sector->status = Sector::OK;
|
||||
sector->logicalTrack = track;
|
||||
sector->physicalTrack = Mapper::remapTrackLogicalToPhysical(track);
|
||||
sector->logicalSide = sector->physicalHead = side;
|
||||
sector->physicalSector = sectorId;
|
||||
sector->data = data;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,10 +110,6 @@ public:
|
||||
|
||||
const auto& sector = image->put(track, head, sectorId);
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,10 +66,6 @@ public:
|
||||
const auto& sector =
|
||||
image->put(track, side, sectorId);
|
||||
sector->status = Sector::OK;
|
||||
sector->logicalTrack = track;
|
||||
sector->physicalTrack = Mapper::remapTrackLogicalToPhysical(track);
|
||||
sector->logicalSide = sector->physicalHead = side;
|
||||
sector->physicalSector = sectorId;
|
||||
sector->data = data;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -264,7 +264,6 @@ public:
|
||||
int SectorID;
|
||||
SectorID = sector_skew[s];
|
||||
const auto& sector = image->put(header.track, header.Head, SectorID);
|
||||
sector->physicalSector = SectorID;
|
||||
//read the status of the sector
|
||||
unsigned int Status_Sector = br.read_8();
|
||||
headerPtr++;
|
||||
|
||||
@@ -40,7 +40,7 @@ public:
|
||||
if (inputFile.eof())
|
||||
break;
|
||||
|
||||
auto trackLayout = Layout::getLayoutOfTrack(track, side);
|
||||
auto& trackLayout = Layout::getLayoutOfTrack(track, side);
|
||||
for (int sectorId : trackLayout.logicalSectors)
|
||||
{
|
||||
Bytes data(trackLayout.sectorSize);
|
||||
@@ -48,11 +48,6 @@ public:
|
||||
|
||||
const auto& sector = image->put(track, side, sectorId);
|
||||
sector->status = Sector::OK;
|
||||
sector->logicalTrack = track;
|
||||
sector->physicalTrack =
|
||||
Mapper::remapTrackLogicalToPhysical(track);
|
||||
sector->logicalSide = sector->physicalHead = side;
|
||||
sector->physicalSector = sectorId;
|
||||
sector->data = data;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -124,10 +124,6 @@ public:
|
||||
const auto& sector =
|
||||
image->put(header.track, head, header.sector);
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@@ -147,10 +147,6 @@ public:
|
||||
inputFile.read((char*)data.begin(), data.size());
|
||||
const auto& sector = image->put(track, head, sectorId);
|
||||
sector->status = Sector::OK;
|
||||
sector->logicalTrack = track;
|
||||
sector->physicalTrack = Mapper::remapTrackLogicalToPhysical(track);
|
||||
sector->logicalSide = sector->physicalHead = head;
|
||||
sector->physicalSector = sectorId;
|
||||
sector->data = data;
|
||||
|
||||
physical->add_sector(sectorId);
|
||||
|
||||
@@ -100,10 +100,6 @@ public:
|
||||
|
||||
const auto& sector = image->put(track, head, sectorId);
|
||||
sector->status = Sector::OK;
|
||||
sector->logicalTrack = track;
|
||||
sector->physicalTrack = Mapper::remapTrackLogicalToPhysical(track);
|
||||
sector->logicalSide = sector->physicalHead = head;
|
||||
sector->physicalSector = sectorId;
|
||||
sector->data = data;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,7 +82,7 @@ public:
|
||||
ByteWriter sectorWriter(sectorBytes);
|
||||
sectorWriter.write_8(sector->logicalTrack);
|
||||
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_le16(sectors.size());
|
||||
sectorWriter.write_8(0x00); // always write mfm
|
||||
|
||||
@@ -89,6 +89,7 @@ void ImageWriter::writeCsv(const Image& image, const std::string& filename)
|
||||
|
||||
f << "\"Physical track\","
|
||||
"\"Physical side\","
|
||||
"\"Physical sector\","
|
||||
"\"Logical track\","
|
||||
"\"Logical side\","
|
||||
"\"Logical sector\","
|
||||
@@ -104,12 +105,13 @@ void ImageWriter::writeCsv(const Image& image, const std::string& filename)
|
||||
|
||||
for (const auto& sector : image)
|
||||
{
|
||||
f << fmt::format("{},{},{},{},{},{},{},{},{},{},{},{},{}\n",
|
||||
f << fmt::format("{},{},{},{},{},{},{},{},{},{},{},{},{},{}\n",
|
||||
sector->physicalTrack,
|
||||
sector->physicalHead,
|
||||
sector->physicalSector,
|
||||
sector->logicalTrack,
|
||||
sector->logicalSide,
|
||||
sector->physicalSector,
|
||||
sector->logicalSector,
|
||||
sector->clock,
|
||||
sector->headerStartTime,
|
||||
sector->headerEndTime,
|
||||
|
||||
@@ -36,7 +36,7 @@ public:
|
||||
int track = p.first;
|
||||
int side = p.second;
|
||||
|
||||
auto trackLayout = Layout::getLayoutOfTrack(track, side);
|
||||
auto& trackLayout = Layout::getLayoutOfTrack(track, side);
|
||||
for (int sectorId : trackLayout.logicalSectors)
|
||||
{
|
||||
const auto& sector = image.get(track, side, sectorId);
|
||||
|
||||
@@ -69,7 +69,7 @@ const Layout& Layout::getLayoutOfTrack(unsigned track, unsigned side)
|
||||
auto& layout = layoutCache[std::make_pair(track, side)];
|
||||
if (!layout)
|
||||
{
|
||||
layout.reset(new Layout);
|
||||
layout.reset(new Layout());
|
||||
|
||||
LayoutProto::LayoutdataProto layoutdata;
|
||||
for (const auto& f : config.layout().layoutdata())
|
||||
@@ -105,20 +105,22 @@ const Layout& Layout::getLayoutOfTrack(unsigned track, unsigned side)
|
||||
return *layout;
|
||||
}
|
||||
|
||||
unsigned Layout::physicalSectorToLogical(unsigned physicalSectorId)
|
||||
unsigned Layout::physicalSectorToLogical(unsigned physicalSectorId) const
|
||||
{
|
||||
for (int i=0; i<physicalSectors.size(); i++)
|
||||
if (physicalSectors[i] == physicalSectorId)
|
||||
return logicalSectors[i];
|
||||
Error() << fmt::format("LAYOUT: physical sector {} not recognised", physicalSectorId);
|
||||
for (int i = 0; i < physicalSectors.size(); i++)
|
||||
if (physicalSectors[i] == physicalSectorId)
|
||||
return logicalSectors[i];
|
||||
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++)
|
||||
if (logicalSectors[i] == logicalSectorId)
|
||||
return physicalSectors[i];
|
||||
Error() << fmt::format("LAYOUT: logical sector {} not recognised", logicalSectorId);
|
||||
for (int i = 0; i < logicalSectors.size(); i++)
|
||||
if (logicalSectors[i] == logicalSectorId)
|
||||
return physicalSectors[i];
|
||||
Error() << fmt::format(
|
||||
"LAYOUT: logical sector {} not recognised", logicalSectorId);
|
||||
throw nullptr;
|
||||
}
|
||||
|
||||
|
||||
|
||||
12
lib/layout.h
12
lib/layout.h
@@ -5,6 +5,14 @@
|
||||
|
||||
class Layout
|
||||
{
|
||||
public:
|
||||
Layout() {}
|
||||
|
||||
private:
|
||||
/* Can't copy. */
|
||||
Layout(const Layout&);
|
||||
Layout& operator=(const Layout&);
|
||||
|
||||
public:
|
||||
static std::vector<std::pair<int, int>> getTrackOrdering(
|
||||
unsigned guessedTracks = 0, unsigned guessedSides = 0);
|
||||
@@ -19,8 +27,8 @@ public:
|
||||
std::vector<unsigned> physicalSectors;
|
||||
std::vector<unsigned> logicalSectors;
|
||||
|
||||
unsigned physicalSectorToLogical(unsigned sectorId);
|
||||
unsigned logicalSectorToPhysical(unsigned sectorId);
|
||||
unsigned physicalSectorToLogical(unsigned sectorId) const;
|
||||
unsigned logicalSectorToPhysical(unsigned sectorId) const;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -120,7 +120,7 @@ std::string Logger::toString(const AnyLogMessage& message)
|
||||
stream << fmt::format(" {}.{}.{}{}",
|
||||
sector->logicalTrack,
|
||||
sector->logicalSide,
|
||||
sector->physicalSector,
|
||||
sector->logicalSector,
|
||||
Sector::statusToChar(sector->status));
|
||||
|
||||
stream << '\n';
|
||||
|
||||
@@ -109,7 +109,7 @@ static std::set<std::shared_ptr<const Sector>> collectSectors(
|
||||
for (const auto& sector : track_sectors)
|
||||
{
|
||||
key_t sectorid = {
|
||||
sector->logicalTrack, sector->logicalSide, sector->physicalSector};
|
||||
sector->logicalTrack, sector->logicalSide, sector->logicalSector};
|
||||
sectors.insert({sectorid, sector});
|
||||
}
|
||||
|
||||
@@ -166,7 +166,7 @@ BadSectorsState combineRecordAndSectors(
|
||||
for (unsigned logical_sector : decoder.requiredSectors(trackFlux.location))
|
||||
{
|
||||
auto sector = std::make_shared<Sector>(location);
|
||||
sector->physicalSector = logical_sector;
|
||||
sector->logicalSector = logical_sector;
|
||||
sector->status = Sector::MISSING;
|
||||
track_sectors.insert(sector);
|
||||
}
|
||||
@@ -344,14 +344,14 @@ void writeTracksAndVerify(FluxSink& fluxSink,
|
||||
wanted
|
||||
.put(sector->logicalTrack,
|
||||
sector->logicalSide,
|
||||
sector->physicalSector)
|
||||
sector->logicalSector)
|
||||
->data = sector->data;
|
||||
|
||||
for (const auto& sector : trackFlux->sectors)
|
||||
{
|
||||
const auto s = wanted.get(sector->logicalTrack,
|
||||
sector->logicalSide,
|
||||
sector->physicalSector);
|
||||
sector->logicalSector);
|
||||
if (!s)
|
||||
{
|
||||
Logger() << "spurious sector on verify";
|
||||
@@ -364,7 +364,7 @@ void writeTracksAndVerify(FluxSink& fluxSink,
|
||||
}
|
||||
wanted.erase(sector->logicalTrack,
|
||||
sector->logicalSide,
|
||||
sector->physicalSector);
|
||||
sector->logicalSector);
|
||||
}
|
||||
if (!wanted.empty())
|
||||
{
|
||||
@@ -524,7 +524,7 @@ std::shared_ptr<const DiskFlux> readDiskCommand(
|
||||
"status {}\n",
|
||||
sector->logicalTrack,
|
||||
sector->logicalSide,
|
||||
sector->physicalSector,
|
||||
sector->logicalSector,
|
||||
sector->headerStartTime / 1000.0,
|
||||
sector->clock / 1000.0,
|
||||
Sector::statusToString(sector->status));
|
||||
|
||||
@@ -63,7 +63,7 @@ public:
|
||||
{
|
||||
unsigned track = trackid.first;
|
||||
unsigned side = trackid.second;
|
||||
auto trackLayout = Layout::getLayoutOfTrack(track, side);
|
||||
auto& trackLayout = Layout::getLayoutOfTrack(track, side);
|
||||
locations.insert(Mapper::computeLocationFor(track, side));
|
||||
|
||||
/* 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);
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
|
||||
@@ -164,7 +164,7 @@ Filesystem::Filesystem(std::shared_ptr<SectorInterface> sectors):
|
||||
int track = p.first;
|
||||
int side = p.second;
|
||||
|
||||
auto trackLayout = Layout::getLayoutOfTrack(track, side);
|
||||
auto& trackLayout = Layout::getLayoutOfTrack(track, side);
|
||||
if (trackLayout.logicalSectors.empty())
|
||||
Error() << "FS: filesystem support cannot be used without concrete "
|
||||
"layout information";
|
||||
@@ -268,7 +268,7 @@ Bytes Filesystem::getLogicalSector(uint32_t number, uint32_t count)
|
||||
int track = std::get<0>(it);
|
||||
int side = std::get<1>(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)
|
||||
->data.slice(0, trackLayout.sectorSize);
|
||||
}
|
||||
|
||||
@@ -187,21 +187,22 @@ static void readRow(const std::vector<std::string>& row, Image& image)
|
||||
if (status == Sector::Status::MISSING)
|
||||
return;
|
||||
|
||||
int logicalTrack = std::stoi(row[2]);
|
||||
int logicalSide = std::stoi(row[3]);
|
||||
int logicalSector = std::stoi(row[4]);
|
||||
int logicalTrack = std::stoi(row[3]);
|
||||
int logicalSide = std::stoi(row[4]);
|
||||
int logicalSector = std::stoi(row[5]);
|
||||
|
||||
const auto& sector = image.put(logicalTrack, logicalSide, logicalSector);
|
||||
sector->physicalTrack = std::stoi(row[0]);
|
||||
sector->physicalHead = std::stoi(row[1]);
|
||||
sector->physicalSector = std::stoi(row[2]);
|
||||
sector->logicalTrack = logicalTrack;
|
||||
sector->logicalSide = logicalSide;
|
||||
sector->physicalSector = logicalSector;
|
||||
sector->clock = std::stod(row[5]);
|
||||
sector->headerStartTime = std::stod(row[6]);
|
||||
sector->headerEndTime = std::stod(row[7]);
|
||||
sector->dataStartTime = std::stod(row[8]);
|
||||
sector->dataEndTime = std::stod(row[9]);
|
||||
sector->logicalSector = logicalSector;
|
||||
sector->clock = std::stod(row[6]);
|
||||
sector->headerStartTime = std::stod(row[7]);
|
||||
sector->headerEndTime = std::stod(row[8]);
|
||||
sector->dataStartTime = std::stod(row[9]);
|
||||
sector->dataEndTime = std::stod(row[10]);
|
||||
sector->status = status;
|
||||
}
|
||||
catch (const std::invalid_argument& e)
|
||||
|
||||
@@ -237,7 +237,7 @@ void FluxViewerControl::OnPaint(wxPaintEvent&)
|
||||
wxDCClipper clipper(dc, rect);
|
||||
|
||||
auto text = fmt::format("c{}.h{}.s{} {}",
|
||||
sector->logicalTrack, sector->logicalSide, sector->physicalSector,
|
||||
sector->logicalTrack, sector->logicalSide, sector->logicalSector,
|
||||
Sector::statusToString(sector->status));
|
||||
auto size = dc.GetTextExtent(text);
|
||||
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;
|
||||
|
||||
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';
|
||||
dumpSectorMetadata(s, sector);
|
||||
s << '\n';
|
||||
@@ -453,7 +453,7 @@ void FluxViewerControl::DisplayRawData(std::shared_ptr<const Sector> sector)
|
||||
std::stringstream 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';
|
||||
dumpSectorMetadata(s, sector);
|
||||
s << fmt::format("Number of records: {}\n", sector->records.size());
|
||||
|
||||
Reference in New Issue
Block a user