#include "globals.h" #include "flags.h" #include "sector.h" #include "imagereader/imagereader.h" #include "utils.h" #include "proto.h" #include "image.h" #include "lib/layout.h" #include "lib/config.pb.h" #include "lib/logger.h" #include #include std::unique_ptr ImageReader::create(const ImageReaderProto& config) { switch (config.type()) { case IMAGETYPE_DIM: return ImageReader::createDimImageReader(config); case IMAGETYPE_D88: return ImageReader::createD88ImageReader(config); case IMAGETYPE_FDI: return ImageReader::createFdiImageReader(config); case IMAGETYPE_IMD: return ImageReader::createIMDImageReader(config); case IMAGETYPE_IMG: return ImageReader::createImgImageReader(config); case IMAGETYPE_DISKCOPY: return ImageReader::createDiskCopyImageReader(config); case IMAGETYPE_JV3: return ImageReader::createJv3ImageReader(config); case IMAGETYPE_D64: return ImageReader::createD64ImageReader(config); case IMAGETYPE_NFD: return ImageReader::createNFDImageReader(config); case IMAGETYPE_NSI: return ImageReader::createNsiImageReader(config); case IMAGETYPE_TD0: return ImageReader::createTd0ImageReader(config); default: error("bad input file config"); return std::unique_ptr(); } } ImageReader::ImageReader(const ImageReaderProto& config): _config(config) {} std::unique_ptr ImageReader::readMappedImage() { auto rawImage = readImage(); if (!_config.filesystem_sector_order()) return rawImage; log("READER: converting from filesystem sector order to disk order"); std::set> sectors; for (const auto& e : *rawImage) { auto trackLayout = Layout::getLayoutOfTrack(e->logicalTrack, e->logicalSide); auto newSector = std::make_shared(); *newSector = *e; newSector->logicalSector = trackLayout->filesystemToNaturalSectorMap.at(e->logicalSector); sectors.insert(newSector); } return std::make_unique(sectors); }