diff --git a/Machines/Utility/MachineForTarget.cpp b/Machines/Utility/MachineForTarget.cpp index 721ea68e8..73db40743 100644 --- a/Machines/Utility/MachineForTarget.cpp +++ b/Machines/Utility/MachineForTarget.cpp @@ -150,6 +150,31 @@ std::string Machine::LongNameForTargetMachine(Analyser::Machine machine) { } } +std::vector Machine::AllMachines(bool meaningful_without_media_only, bool long_names) { + std::vector result; + +#define AddName(x) result.push_back(long_names ? LongNameForTargetMachine(Analyser::Machine::x) : ShortNameForTargetMachine(Analyser::Machine::x)) +#define AddConditionalName(x) if(!meaningful_without_media_only) result.push_back(long_names ? LongNameForTargetMachine(Analyser::Machine::x) : ShortNameForTargetMachine(Analyser::Machine::x)) + + AddName(AmstradCPC); + AddName(AppleII); + AddConditionalName(Atari2600); + AddName(AtariST); + AddConditionalName(ColecoVision); + AddName(Electron); + AddName(Macintosh); + AddConditionalName(MasterSystem); + AddName(MSX); + AddName(Oric); + AddName(Vic20); + AddName(ZX8081); + +#undef AddConditionalName +#undef AddName + + return result; +} + std::map>> Machine::AllOptionsByMachineName() { std::map>> options; @@ -171,19 +196,22 @@ std::map>> Machin std::map> Machine::ConstructionOptionsByMachineName() { std::map> options; -#define Add(Name) \ - options.emplace(std::make_pair(LongNameForTargetMachine(Analyser::Machine::Name), new Analyser::Static::Name::Target)); +#define AddMapped(Name, TargetNamespace) \ + options.emplace(std::make_pair(LongNameForTargetMachine(Analyser::Machine::Name), new Analyser::Static::TargetNamespace::Target)); +#define Add(Name) AddMapped(Name, Name) Add(AmstradCPC); Add(AppleII); -// Add(AtariST); -// Add(Electron); -// options.emplace(std::make_pair(LongNameForTargetMachine(Analyser::Machine::Electron), Electron::get_options())); -// options.emplace(std::make_pair(LongNameForTargetMachine(Analyser::Machine::Macintosh), Apple::Macintosh::get_options())); + Add(AtariST); + AddMapped(Electron, Acorn); + Add(Macintosh); Add(MSX); Add(Oric); -// options.emplace(std::make_pair(LongNameForTargetMachine(Analyser::Machine::Vic20), Commodore::Vic20::get_options())); + AddMapped(Vic20, Commodore); Add(ZX8081); +#undef Add +#undef AddTwo + return options; } diff --git a/Machines/Utility/MachineForTarget.hpp b/Machines/Utility/MachineForTarget.hpp index 6cc29bcae..15fd27bf9 100644 --- a/Machines/Utility/MachineForTarget.hpp +++ b/Machines/Utility/MachineForTarget.hpp @@ -49,6 +49,11 @@ std::string ShortNameForTargetMachine(const Analyser::Machine target); */ std::string LongNameForTargetMachine(const Analyser::Machine target); +/*! + @returns A list of all available machines. +*/ +std::vector AllMachines(bool meaningful_without_media_only, bool long_names); + /*! Returns a map from machine name to the list of options that machine exposes, for all machines.