// $Id: CommandLineParser.hh 5993 2007-01-12 22:12:12Z m9710797 $ #ifndef COMMANDLINEPARSER_HH #define COMMANDLINEPARSER_HH #include "StringOp.hh" #include "noncopyable.hh" #include #include #include #include #include namespace openmsx { class CLIOption; class CLIFileType; class SettingsConfig; class CliComm; class HelpOption; class VersionOption; class ControlOption; class ScriptOption; class MachineOption; class SettingOption; class NoMMXOption; class NoMMXEXTOption; class TestConfigOption; class MSXRomCLI; class CliExtension; class CassettePlayerCLI; class DiskImageCLI; class HDImageCLI; class CDImageCLI; class Reactor; class MSXMotherBoard; class MSXEventRecorderReplayerCLI; class CommandLineParser : private noncopyable { public: enum ParseStatus { UNPARSED, RUN, CONTROL, TEST, EXIT }; explicit CommandLineParser(Reactor& reactor); ~CommandLineParser(); void registerOption(const std::string& str, CLIOption& cliOption, unsigned prio = 8, unsigned length = 2); void registerFileClass(const std::string& str, CLIFileType& cliFileType); void parse(int argc, char** argv); ParseStatus getParseStatus() const; typedef std::vector Scripts; const Scripts& getStartupScripts() const; Reactor& getReactor() const; MSXMotherBoard* getMotherBoard() const; /** Need to suppress renderer window on startup? */ bool isHiddenStartup() const; private: struct OptionData { CLIOption* option; unsigned prio; unsigned length; // length in parameters }; bool parseFileName(const std::string& arg, std::list& cmdLine); bool parseOption(const std::string& arg, std::list& cmdLine, unsigned prio); void registerFileTypes(); void createMachineSetting(); std::map optionMap; typedef std::map FileTypeMap; FileTypeMap fileTypeMap; typedef std::map FileClassMap; FileClassMap fileClassMap; bool haveConfig; bool haveSettings; ParseStatus parseStatus; Reactor& reactor; SettingsConfig& settingsConfig; CliComm& output; const std::auto_ptr helpOption; const std::auto_ptr versionOption; const std::auto_ptr controlOption; const std::auto_ptr scriptOption; const std::auto_ptr machineOption; const std::auto_ptr settingOption; const std::auto_ptr noMMXOption; const std::auto_ptr noMMXEXTOption; const std::auto_ptr testConfigOption; const std::auto_ptr msxRomCLI; const std::auto_ptr cliExtension; const std::auto_ptr cassettePlayerCLI; const std::auto_ptr diskImageCLI; const std::auto_ptr hdImageCLI; const std::auto_ptr cdImageCLI; const std::auto_ptr eventRecorderReplayerCLI; bool hiddenStartup; friend class ControlOption; friend class HelpOption; friend class VersionOption; friend class MachineOption; friend class SettingOption; friend class TestConfigOption; }; } // namespace openmsx #endif