mirror of
				https://github.com/davidgiven/fluxengine.git
				synced 2025-10-24 11:11:02 -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