Rename Sector.logicalSector to Sector.physicalSector.

This commit is contained in:
David Given
2022-09-10 18:59:06 +02:00
parent 7f1017ebd9
commit 1a4caccd07
46 changed files with 72 additions and 72 deletions

View File

@@ -47,7 +47,7 @@ public:
_sector->logicalTrack = reversed[1];
_sector->logicalSide = 0;
_sector->logicalSector = reversed[2];
_sector->physicalSector = reversed[2];
/* Check header 'checksum' (which seems far too simple to mean much). */

View File

@@ -66,7 +66,7 @@ public:
return;
_sector->logicalTrack = bytes[1] >> 1;
_sector->logicalSector = bytes[2];
_sector->physicalSector = bytes[2];
_sector->logicalSide = bytes[1] & 1;
_sector->status = Sector::DATA_MISSING; /* unintuitive but correct */
}

View File

@@ -52,7 +52,7 @@ public:
_sector->logicalTrack = header[1] >> 1;
_sector->logicalSide = header[1] & 1;
_sector->logicalSector = header[2];
_sector->physicalSector = header[2];
uint32_t wantedheaderchecksum = amigaDeinterleave(ptr, 4).reader().read_be32();
uint32_t gotheaderchecksum = amigaChecksum(rawbytes.slice(0, 40));

View File

@@ -86,8 +86,8 @@ static void write_sector(std::vector<bool>& bits,
checksum = 0;
Bytes header = {0xff, /* Amiga 1.0 format byte */
(uint8_t)((sector->logicalTrack << 1) | sector->logicalSide),
(uint8_t)sector->logicalSector,
(uint8_t)(AMIGA_SECTORS_PER_TRACK - sector->logicalSector)};
(uint8_t)sector->physicalSector,
(uint8_t)(AMIGA_SECTORS_PER_TRACK - sector->physicalSector)};
write_interleaved_bytes(header);
Bytes recoveryInfo(16);
if (sector->data.size() == 528)

View File

@@ -88,12 +88,12 @@ public:
uint8_t volume = combine(br.read_be16());
_sector->logicalTrack = combine(br.read_be16());
_sector->logicalSector = combine(br.read_be16());
_sector->physicalSector = combine(br.read_be16());
uint8_t checksum = combine(br.read_be16());
// If the checksum is correct, upgrade the sector from MISSING
// to DATA_MISSING in anticipation of its data record
if (checksum == (volume ^ _sector->logicalTrack ^ _sector->logicalSector))
if (checksum == (volume ^ _sector->logicalTrack ^ _sector->physicalSector))
_sector->status = Sector::DATA_MISSING; /* unintuitive but correct */
}

View File

@@ -149,15 +149,15 @@ private:
//
// In standard formatting, the first logical sector apparently gets
// extra padding.
write_ff40(sector.logicalSector == 0 ? 32 : 8);
write_ff40(sector.physicalSector == 0 ? 32 : 8);
// Write address field: APPLE2_SECTOR_RECORD + sector identifier +
// DE AA EB
write_bits(APPLE2_SECTOR_RECORD, 24);
write_gcr44(volume_id);
write_gcr44(sector.logicalTrack);
write_gcr44(sector.logicalSector);
write_gcr44(volume_id ^ sector.logicalTrack ^ sector.logicalSector);
write_gcr44(sector.physicalSector);
write_gcr44(volume_id ^ sector.logicalTrack ^ sector.physicalSector);
write_bits(0xDEAAEB, 24);
// Write data syncing leader: FF40 + APPLE2_DATA_RECORD + sector

View File

@@ -74,11 +74,11 @@ public:
ByteReader br(bytes);
_sector->logicalTrack = decode_header_gcr(br.read_be16());
_sector->logicalSector = decode_header_gcr(br.read_be16());
_sector->physicalSector = decode_header_gcr(br.read_be16());
/* Sanity check the values read; there's no header checksum and
* occasionally we get garbage due to bit errors. */
if (_sector->logicalSector > 11)
if (_sector->physicalSector > 11)
return;
if (_sector->logicalTrack > 79)
return;

View File

@@ -169,7 +169,7 @@ public:
fillBitmapTo(bits, cursor, headerCursor, {true, false});
write_sector_header(
bits, cursor, sectorData->logicalTrack, sectorData->logicalSector);
bits, cursor, sectorData->logicalTrack, sectorData->physicalSector);
fillBitmapTo(bits, cursor, dataCursor, {true, false});
write_sector_data(bits, cursor, sectorData->data);

View File

@@ -72,7 +72,7 @@ public:
const auto& bytes = decode(bits).slice(0, 5);
uint8_t checksum = bytes[0];
_sector->logicalSector = bytes[1];
_sector->physicalSector = bytes[1];
_sector->logicalSide = 0;
_sector->logicalTrack = bytes[2] - 1;
if (checksum == xorBytes(bytes.slice(1, 4)))

View File

@@ -270,7 +270,7 @@ private:
* 06-07 - $0F ("off" bytes)
*/
uint8_t encodedTrack = ((sector->logicalTrack) + 1); // C64 track numbering starts with 1. Fluxengine with 0.
uint8_t encodedSector = sector->logicalSector;
uint8_t encodedSector = sector->physicalSector;
// uint8_t formatByte1 = C64_FORMAT_ID_BYTE1;
// uint8_t formatByte2 = C64_FORMAT_ID_BYTE2;
uint8_t headerChecksum = (encodedTrack ^ encodedSector ^ _formatByte1 ^ _formatByte2);

View File

@@ -74,7 +74,7 @@ public:
const auto& bytes = decode(readRawBits(6*10));
_sector->logicalSector = bytes[2];
_sector->physicalSector = bytes[2];
_sector->logicalSide = 0;
_sector->logicalTrack = bytes[0];

View File

@@ -129,7 +129,7 @@ public:
uint8_t abssector = id[2];
_sector->logicalTrack = abssector >> 1;
_sector->logicalSide = 0;
_sector->logicalSector = abssector & 1;
_sector->physicalSector = abssector & 1;
_sector->data.writer().append(id.slice(5, 12)).append(payload);
_sector->status = (wantPayloadCrc == gotPayloadCrc) ? Sector::OK : Sector::BAD_CHECKSUM;

View File

@@ -144,7 +144,7 @@ public:
_sector->logicalTrack = br.read_8();
_sector->logicalSide = br.read_8();
_sector->logicalSector = br.read_8();
_sector->physicalSector = br.read_8();
_currentSectorSize = 1 << (br.read_8() + 7);
uint16_t gotCrc = crc16(CCITT_POLY, bytes.slice(0, br.pos));
uint16_t wantCrc = br.read_be16();
@@ -159,7 +159,7 @@ public:
_sector->logicalTrack = _sector->physicalTrack;
for (int sector : trackdata.ignore_sector())
if (_sector->logicalSector == sector)
if (_sector->physicalSector == sector)
{
_sector->status = Sector::MISSING;
break;

View File

@@ -226,7 +226,7 @@ public:
bw.write_8(idamUnencoded);
bw.write_8(sectorData->logicalTrack);
bw.write_8(sectorData->logicalSide);
bw.write_8(sectorData->logicalSector);
bw.write_8(sectorData->physicalSector);
bw.write_8(sectorSize);
uint16_t crc = crc16(CCITT_POLY, header);
bw.write_be16(crc);

View File

@@ -157,7 +157,7 @@ public:
_sector->logicalTrack = _sector->physicalTrack;
_sector->logicalSide = decode_side(encodedSide);
_sector->logicalSector = encodedSector;
_sector->physicalSector = encodedSector;
uint8_t gotsum = (encodedTrack ^ encodedSector ^ encodedSide ^ formatByte) & 0x3f;
if (wantedsum == gotsum)
_sector->status = Sector::DATA_MISSING; /* unintuitive but correct */

View File

@@ -182,7 +182,7 @@ static void write_sector(std::vector<bool>& bits,
write_bits(bits, cursor, MAC_SECTOR_RECORD, 3 * 8);
uint8_t encodedTrack = sector->logicalTrack & 0x3f;
uint8_t encodedSector = sector->logicalSector;
uint8_t encodedSector = sector->physicalSector;
uint8_t encodedSide =
encode_side(sector->logicalTrack, sector->logicalSide);
uint8_t formatByte = MAC_FORMAT_BYTE;
@@ -198,7 +198,7 @@ static void write_sector(std::vector<bool>& bits,
write_bits(bits, cursor, 0xdeaaff, 3 * 8);
write_bits(bits, cursor, 0xff3fcff3fcffLL, 6 * 8); /* sync */
write_bits(bits, cursor, MAC_DATA_RECORD, 3 * 8);
write_bits(bits, cursor, encode_data_gcr(sector->logicalSector), 1 * 8);
write_bits(bits, cursor, encode_data_gcr(sector->physicalSector), 1 * 8);
Bytes wireData;
wireData.writer()

View File

@@ -128,8 +128,8 @@ public:
_sector->logicalTrack = br.read_8();
_sector->logicalSide = _sector->physicalHead;
_sector->logicalSector = br.read_8();
if (_sector->logicalSector > 15)
_sector->physicalSector = br.read_8();
if (_sector->physicalSector > 15)
return;
if (_sector->logicalTrack > 76)
return;

View File

@@ -32,7 +32,7 @@ static void write_sector(std::vector<bool>& bits,
micropolisChecksum(sector->data.slice(1, 2 + 266));
if (wantChecksum != gotChecksum)
std::cerr << "Warning: checksum incorrect. Sector: "
<< sector->logicalSector << std::endl;
<< sector->physicalSector << std::endl;
sectorData = sector->data;
}
else
@@ -40,7 +40,7 @@ static void write_sector(std::vector<bool>& bits,
ByteWriter writer(sectorData);
writer.write_8(0xff); /* Sync */
writer.write_8(sector->logicalTrack);
writer.write_8(sector->logicalSector);
writer.write_8(sector->physicalSector);
for (int i = 0; i < 10; i++)
writer.write_8(0); /* Padding */
writer += sector->data;

View File

@@ -67,7 +67,7 @@ public:
_sector->logicalTrack = _sector->physicalTrack;
_sector->logicalSide = _sector->physicalHead;
_sector->logicalSector = _currentSector;
_sector->physicalSector = _currentSector;
_sector->data = bytes.slice(0, SECTOR_SIZE).swab();
_sector->status = (gotChecksum == wantChecksum) ? Sector::OK : Sector::BAD_CHECKSUM;
_currentSector++;

View File

@@ -151,7 +151,7 @@ public:
ByteReader br(bytes);
_sector->logicalSide = _sector->physicalHead;
_sector->logicalSector = _hardSectorId;
_sector->physicalSector = _hardSectorId;
_sector->logicalTrack = _sector->physicalTrack;
if (headerSize == NORTHSTAR_HEADER_SIZE_DD) {

View File

@@ -90,7 +90,7 @@ static void write_sector(std::vector<bool>& bits,
for (uint8_t b : sectorData)
fullSector->push_back(b);
if (sector->logicalSector != 9)
if (sector->physicalSector != 9)
{
/* sector postamble */
for (int i = 0; i < gapFillSize; i++)

View File

@@ -66,7 +66,7 @@ public:
_sector->logicalSide = br.read_8() >> 3;
_sector->logicalTrack = br.read_8();
br.read_8(); /* number of sectors per track */
_sector->logicalSector = br.read_8();
_sector->physicalSector = br.read_8();
br.read_be16(); /* sector size */
uint16_t wantChecksum = br.read_be16();

View File

@@ -117,7 +117,7 @@ public:
bw.write_8(sectorData->logicalSide << 3);
bw.write_8(sectorData->logicalTrack);
bw.write_8(_config.sector_count());
bw.write_8(sectorData->logicalSector);
bw.write_8(sectorData->physicalSector);
bw.write_be16(sectorData->data.size());
uint16_t crc = crc16(CCITT_POLY, header);
bw.write_be16(crc);

View File

@@ -76,13 +76,13 @@ public:
auto bytes = decode(readRawBits(3*10)).slice(0, 3);
uint8_t rawTrack = bytes[0];
_sector->logicalSector = bytes[1];
_sector->physicalSector = bytes[1];
uint8_t gotChecksum = bytes[2];
_sector->logicalTrack = rawTrack & 0x7f;
_sector->logicalSide = rawTrack >> 7;
uint8_t wantChecksum = bytes[0] + bytes[1];
if ((_sector->logicalSector > 20) || (_sector->logicalTrack > 85) || (_sector->logicalSide > 1))
if ((_sector->physicalSector > 20) || (_sector->logicalTrack > 85) || (_sector->logicalSide > 1))
return;
if (wantChecksum == gotChecksum)

View File

@@ -113,7 +113,7 @@ static void write_sector(std::vector<bool>& bits,
write_bits(bits, cursor, VICTOR9K_SECTOR_RECORD, 10);
uint8_t encodedTrack = sector.logicalTrack | (sector.logicalSide << 7);
uint8_t encodedSector = sector.logicalSector;
uint8_t encodedSector = sector.physicalSector;
write_bytes(bits,
cursor,
Bytes{

View File

@@ -34,10 +34,10 @@ public:
auto bytes = decodeFmMfm(rawbits).slice(0, 140);
ByteReader br(bytes);
_sector->logicalSector = br.read_8() & 0x1f;
_sector->physicalSector = br.read_8() & 0x1f;
_sector->logicalSide = 0;
_sector->logicalTrack = br.read_8() & 0x7f;
if (_sector->logicalSector > 31)
if (_sector->physicalSector > 31)
return;
if (_sector->logicalTrack > 80)
return;

View File

@@ -10,7 +10,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->logicalSector);
sector->logicalTrack, sector->logicalSide, sector->physicalSector);
_sectors[key] = sector;
}
calculateSize();
@@ -66,7 +66,7 @@ std::shared_ptr<Sector> Image::put(
std::shared_ptr<Sector> sector = std::make_shared<Sector>();
sector->logicalTrack = track;
sector->logicalSide = side;
sector->logicalSector = sectorid;
sector->physicalSector = sectorid;
_sectors[key] = sector;
return sector;
}
@@ -100,8 +100,8 @@ void Image::calculateSize()
_geometry.numSides =
std::max(_geometry.numSides, (unsigned)sector->logicalSide + 1);
_geometry.firstSector = std::min(
_geometry.firstSector, (unsigned)sector->logicalSector);
maxSector = std::max(maxSector, (unsigned)sector->logicalSector);
_geometry.firstSector, (unsigned)sector->physicalSector);
maxSector = std::max(maxSector, (unsigned)sector->physicalSector);
_geometry.sectorSize =
std::max(_geometry.sectorSize, (unsigned)sector->data.size());
}

View File

@@ -72,7 +72,7 @@ public:
sector->logicalTrack = track;
sector->physicalTrack = physicalTrack;
sector->logicalSide = sector->physicalHead = head;
sector->logicalSector = sectorId;
sector->physicalSector = sectorId;
sector->data.writer().append(payload);
}
else
@@ -82,7 +82,7 @@ public:
sector->logicalTrack = track;
sector->physicalTrack = physicalTrack;
sector->logicalSide = sector->physicalHead = head;
sector->logicalSector = sectorId;
sector->physicalSector = sectorId;
}
}
}

View File

@@ -200,7 +200,7 @@ public:
sector->logicalTrack = track;
sector->physicalTrack = Mapper::remapTrackLogicalToPhysical(track);
sector->logicalSide = sector->physicalHead = head;
sector->logicalSector = sectorId;
sector->physicalSector = sectorId;
sector->data = data;
physical->add_sector(sectorId);

View File

@@ -89,7 +89,7 @@ public:
sector->logicalTrack = track;
sector->physicalTrack = Mapper::remapTrackLogicalToPhysical(track);
sector->logicalSide = sector->physicalHead = side;
sector->logicalSector = sectorId;
sector->physicalSector = sectorId;
sector->data = data;
}
}

View File

@@ -113,7 +113,7 @@ public:
sector->logicalTrack = track;
sector->physicalTrack = Mapper::remapTrackLogicalToPhysical(track);
sector->logicalSide = sector->physicalHead = head;
sector->logicalSector = sectorId;
sector->physicalSector = sectorId;
sector->data.writer().append(payload).append(tag);
}
}

View File

@@ -69,7 +69,7 @@ public:
sector->logicalTrack = track;
sector->physicalTrack = Mapper::remapTrackLogicalToPhysical(track);
sector->logicalSide = sector->physicalHead = side;
sector->logicalSector = sectorId;
sector->physicalSector = sectorId;
sector->data = data;
}
}

View File

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

View File

@@ -52,7 +52,7 @@ public:
sector->physicalTrack =
Mapper::remapTrackLogicalToPhysical(track);
sector->logicalSide = sector->physicalHead = side;
sector->logicalSector = sectorId;
sector->physicalSector = sectorId;
sector->data = data;
}
}

View File

@@ -127,7 +127,7 @@ public:
sector->logicalTrack = header.track;
sector->physicalTrack = Mapper::remapTrackLogicalToPhysical(header.track);
sector->logicalSide = sector->physicalHead = head;
sector->logicalSector = header.sector;
sector->physicalSector = header.sector;
sector->data = data;
}

View File

@@ -150,7 +150,7 @@ public:
sector->logicalTrack = track;
sector->physicalTrack = Mapper::remapTrackLogicalToPhysical(track);
sector->logicalSide = sector->physicalHead = head;
sector->logicalSector = sectorId;
sector->physicalSector = sectorId;
sector->data = data;
physical->add_sector(sectorId);

View File

@@ -103,7 +103,7 @@ public:
sector->logicalTrack = track;
sector->physicalTrack = Mapper::remapTrackLogicalToPhysical(track);
sector->logicalSide = sector->physicalHead = head;
sector->logicalSector = sectorId;
sector->physicalSector = sectorId;
sector->data = data;
}
}

View File

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

View File

@@ -109,7 +109,7 @@ void ImageWriter::writeCsv(const Image& image, const std::string& filename)
sector->physicalHead,
sector->logicalTrack,
sector->logicalSide,
sector->logicalSector,
sector->physicalSector,
sector->clock,
sector->headerStartTime,
sector->headerEndTime,

View File

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

View File

@@ -65,15 +65,15 @@ static std::unique_ptr<Image> remapImpl(const Image& source,
destSectors.insert(sector);
else
{
auto it = trackdata.find(sector->logicalSector);
auto it = trackdata.find(sector->physicalSector);
if (it == trackdata.end())
Error() << fmt::format(
"mapping requested but mapping table has no entry for "
"sector {}",
sector->logicalSector);
sector->physicalSector);
auto newSector = std::make_shared<Sector>(*sector);
newSector->logicalSector = it->second;
newSector->physicalSector = it->second;
destSectors.insert(newSector);
}
}

View File

@@ -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->logicalSector};
sector->logicalTrack, sector->logicalSide, sector->physicalSector};
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->logicalSector = logical_sector;
sector->physicalSector = 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->logicalSector)
sector->physicalSector)
->data = sector->data;
for (const auto& sector : trackFlux->sectors)
{
const auto s = wanted.get(sector->logicalTrack,
sector->logicalSide,
sector->logicalSector);
sector->physicalSector);
if (!s)
{
Logger() << "spurious sector on verify";
@@ -364,7 +364,7 @@ void writeTracksAndVerify(FluxSink& fluxSink,
}
wanted.erase(sector->logicalTrack,
sector->logicalSide,
sector->logicalSector);
sector->physicalSector);
}
if (!wanted.empty())
{
@@ -533,7 +533,7 @@ std::shared_ptr<const DiskFlux> readDiskCommand(
"status {}\n",
sector->logicalTrack,
sector->logicalSide,
sector->logicalSector,
sector->physicalSector,
sector->headerStartTime / 1000.0,
sector->clock / 1000.0,
Sector::statusToString(sector->status));

View File

@@ -40,7 +40,7 @@ public:
unsigned physicalHead = 0;
unsigned logicalTrack = 0;
unsigned logicalSide = 0;
unsigned logicalSector = 0;
unsigned physicalSector = 0;
Bytes data;
std::vector<std::shared_ptr<Record>> records;
@@ -51,7 +51,7 @@ public:
std::tuple<int, int, int, Status> key() const
{
return std::make_tuple(
logicalTrack, logicalSide, logicalSector, status);
logicalTrack, logicalSide, physicalSector, status);
}
bool operator==(const Sector& rhs) const

View File

@@ -132,7 +132,7 @@ private:
auto trackdata = readAndDecodeTrack(*_fluxSource, *_decoder, location);
for (const auto& sector : trackdata->sectors)
*_loadedSectors.put(track, side, sector->logicalSector) = *sector;
*_loadedSectors.put(track, side, sector->physicalSector) = *sector;
_loadedTracks.insert(trackid_t(track, side));
}

View File

@@ -97,7 +97,7 @@ void visualiseSectorsToFile(const Image& image, const std::string& filename)
for (const auto& sector : image)
{
if ((sector->physicalHead == side) && (sector->physicalTrack == physicalTrack)
&& (sector->logicalSector == alignWithSector))
&& (sector->physicalSector == alignWithSector))
{
offset = sector->headerStartTime;
if (!offset)
@@ -196,7 +196,7 @@ static void readRow(const std::vector<std::string>& row, Image& image)
sector->physicalHead = std::stoi(row[1]);
sector->logicalTrack = logicalTrack;
sector->logicalSide = logicalSide;
sector->logicalSector = logicalSector;
sector->physicalSector = logicalSector;
sector->clock = std::stod(row[5]);
sector->headerStartTime = std::stod(row[6]);
sector->headerEndTime = std::stod(row[7]);

View File

@@ -237,7 +237,7 @@ void FluxViewerControl::OnPaint(wxPaintEvent&)
wxDCClipper clipper(dc, rect);
auto text = fmt::format("c{}.h{}.s{} {}",
sector->logicalTrack, sector->logicalSide, sector->logicalSector,
sector->logicalTrack, sector->logicalSide, sector->physicalSector,
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->logicalSector);
sector->logicalTrack, sector->logicalSide, sector->physicalSector);
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->logicalSector);
sector->logicalTrack, sector->logicalSide, sector->physicalSector);
s << title << '\n';
dumpSectorMetadata(s, sector);
s << fmt::format("Number of records: {}\n", sector->records.size());