Frontends: Add shared command line interface

Also provides batch mode and automatic fullscreen switching.

  -help: Displays this information and exits.
  -version: Displays version information and exits.
  -batch: Enables batch mode (exits after powering off)
  -fastboot: Force fast boot for provided filename
  -slowboot: Force slow boot for provided filename
  -resume: Load resume save state. If a boot filename is provided,
    that game's resume state will be loaded, otherwise the most
    recent resume save state will be loaded.
  -state <index>: Loads specified save state by index. If a boot
    filename is provided, a per-game state will be loaded, otherwise
    a global state will be loaded.
  -statefile <filename>: Loads state from the specified filename.
    No boot filename is required with this option.
  -fullscreen: Enters fullscreen mode immediately after starting.
  -nofullscreen: Prevents fullscreen mode from triggering if enabled.
  -portable: Forces "portable mode", data in same directory.
  --: Signals that no more arguments will follow and the remaining
    parameters make up the filename. Use when the filename contains
    spaces or starts with a dash.
This commit is contained in:
Connor McLaughlin
2020-04-13 22:13:46 +10:00
parent 6a03bb2d15
commit 81cf4b469f
12 changed files with 365 additions and 80 deletions

View File

@ -61,6 +61,14 @@ void HostInterface::CreateAudioStream()
bool HostInterface::BootSystem(const SystemBootParameters& parameters)
{
if (parameters.filename.empty())
Log_InfoPrintf("Boot Filename: <BIOS/Shell>");
else
Log_InfoPrintf("Boot Filename: %s", parameters.filename.c_str());
if (!parameters.state_filename.empty())
Log_InfoPrintf("Save State Filename: %s", parameters.filename.c_str());
if (!AcquireHostDisplay())
{
ReportFormattedError("Failed to acquire host display");
@ -81,6 +89,9 @@ bool HostInterface::BootSystem(const SystemBootParameters& parameters)
return false;
}
if (!parameters.state_filename.empty())
LoadState(parameters.state_filename.c_str());
OnSystemCreated();
m_paused = m_settings.start_paused;
@ -611,6 +622,9 @@ void HostInterface::OnControllerTypeChanged(u32 slot) {}
void HostInterface::SetUserDirectory()
{
if (!m_user_directory.empty())
return;
const std::string program_path = FileSystem::GetProgramPath();
const std::string program_directory = FileSystem::GetPathDirectory(program_path.c_str());
Log_InfoPrintf("Program path: \"%s\" (directory \"%s\")", program_path.c_str(), program_directory.c_str());
@ -653,6 +667,13 @@ void HostInterface::SetUserDirectory()
}
}
void HostInterface::SetUserDirectoryToProgramDirectory()
{
const std::string program_path = FileSystem::GetProgramPath();
const std::string program_directory = FileSystem::GetPathDirectory(program_path.c_str());
m_user_directory = program_directory;
}
void HostInterface::InitializeUserDirectory()
{
Log_InfoPrintf("User directory: \"%s\"", m_user_directory.c_str());