openMSX
HDImageCLI.cc
Go to the documentation of this file.
1 #include "HDImageCLI.hh"
2 #include "CommandLineParser.hh"
3 #include "MSXException.hh"
4 #include "ranges.hh"
5 #include <utility>
6 #include <vector>
7 
8 namespace openmsx {
9 
10 namespace {
11  struct IdImage {
12  int id;
13  std::string image;
14  };
15 }
16 static std::vector<IdImage> images;
17 
19  : parser(parser_)
20 {
22  // TODO: offer more options in case you want to specify 2 hard disk images?
23 }
24 
25 void HDImageCLI::parseOption(const std::string& option, span<std::string>& cmdLine)
26 {
27  // Machine has not been loaded yet. Only remember the image.
28  int id = option[3] - 'a';
29  images.emplace_back(IdImage{id, getArgument(option, cmdLine)});
30 }
31 
32 std::string HDImageCLI::getImageForId(int id)
33 {
34  // HD queries image. Return (and clear) the remembered value, or return
35  // an empty string.
36  std::string result;
37  if (auto it = ranges::find(images, id, &IdImage::id);
38  it != end(images)) {
39  result = std::move(it->image);
40  images.erase(it);
41  }
42  return result;
43 }
44 
46 {
47  // After parsing all remembered values should be cleared. If not there
48  // was no hard disk as specified.
49  if (!images.empty()) {
50  char hd = char(::toupper('a' + images.front().id));
51  throw MSXException("No hard disk ", hd, " present.");
52  }
53 }
54 
55 std::string_view HDImageCLI::optionHelp() const
56 {
57  return "Use hard disk image in argument for the IDE or SCSI extensions";
58 }
59 
60 } // namespace openmsx
int id
Definition: HDImageCLI.cc:12
std::string image
Definition: HDImageCLI.cc:13
static std::string getArgument(const std::string &option, span< std::string > &cmdLine)
Definition: CLIOption.cc:9
void registerOption(const char *str, CLIOption &cliOption, ParsePhase phase=PHASE_LAST, unsigned length=2)
void parseDone() override
Definition: HDImageCLI.cc:45
void parseOption(const std::string &option, span< std::string > &cmdLine) override
Definition: HDImageCLI.cc:25
std::string_view optionHelp() const override
Definition: HDImageCLI.cc:55
HDImageCLI(CommandLineParser &parser)
Definition: HDImageCLI.cc:18
static std::string getImageForId(int id)
Definition: HDImageCLI.cc:32
Definition: span.hh:126
This file implemented 3 utility functions:
Definition: Autofire.cc:9
auto find(InputRange &&range, const T &value)
Definition: ranges.hh:130
constexpr auto end(const zstring_view &x)
Definition: zstring_view.hh:84