Distinguish between filesystem track ordering and image track ordering

(although currently only the filesystem ordering is used).
This commit is contained in:
David Given
2024-11-29 22:07:58 +01:00
parent e878c6eef6
commit 2bda78fb40
27 changed files with 61 additions and 49 deletions

View File

@@ -2,6 +2,7 @@
#include "lib/data/sector.h"
#include "lib/data/image.h"
#include "lib/data/layout.h"
#include "lib/config/config.h"
Image::Image() {}
@@ -25,7 +26,8 @@ void Image::clear()
void Image::createBlankImage()
{
clear();
for (const auto& trackAndHead : Layout::getTrackOrdering())
for (const auto& trackAndHead : Layout::getTrackOrdering(
globalConfig()->layout().filesystem_track_order()))
{
unsigned track = trackAndHead.first;
unsigned side = trackAndHead.second;

View File

@@ -108,21 +108,21 @@ void Layout::getBounds(
}
std::vector<std::pair<int, int>> Layout::getTrackOrdering(
unsigned guessedTracks, unsigned guessedSides)
LayoutProto::Order ordering, unsigned guessedTracks, unsigned guessedSides)
{
auto layout = globalConfig()->layout();
int tracks = layout.has_tracks() ? layout.tracks() : guessedTracks;
int sides = layout.has_sides() ? layout.sides() : guessedSides;
std::vector<std::pair<int, int>> ordering;
switch (layout.order())
std::vector<std::pair<int, int>> trackList;
switch (ordering)
{
case LayoutProto::CHS:
{
for (int track = 0; track < tracks; track++)
{
for (int side = 0; side < sides; side++)
ordering.push_back(std::make_pair(track, side));
trackList.push_back(std::make_pair(track, side));
}
break;
}
@@ -132,16 +132,16 @@ std::vector<std::pair<int, int>> Layout::getTrackOrdering(
for (int side = 0; side < sides; side++)
{
for (int track = 0; track < tracks; track++)
ordering.push_back(std::make_pair(track, side));
trackList.push_back(std::make_pair(track, side));
}
break;
}
default:
error("LAYOUT: invalid track ordering");
error("LAYOUT: invalid track trackList");
}
return ordering;
return trackList;
}
std::vector<unsigned> Layout::expandSectorList(

View File

@@ -2,6 +2,7 @@
#define LAYOUT_H
#include "lib/data/flux.h"
#include "lib/config/layout.pb.h"
class SectorListProto;
class TrackInfo;
@@ -39,7 +40,9 @@ public:
/* Returns a series of <track, side> pairs representing the filesystem
* ordering of the disk, in logical numbers. */
static std::vector<std::pair<int, int>> getTrackOrdering(
unsigned guessedTracks = 0, unsigned guessedSides = 0);
LayoutProto::Order ordering,
unsigned guessedTracks = 0,
unsigned guessedSides = 0);
/* Returns the layout of a given track. */
static std::shared_ptr<const TrackInfo> getLayoutOfTrack(