main: Add a working directory option.

This is an alternative method for specifying the working directory.
Normally, the user would change the directory before executing dingusppc to set the working directory.
The working directory is the default location for files and sockets used by dingusppc (the bootrom file, symbols file, nvram, pram, serial port sockets, logs, etc.)
This commit is contained in:
joevt 2024-05-02 01:06:02 -07:00 committed by dingusdev
parent d48eefceb0
commit 210199db1c

View File

@ -39,6 +39,11 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
#include <iostream>
#include <CLI11.hpp>
#include <loguru.hpp>
#ifdef _WIN32
#include <direct.h>
#else
#include <unistd.h>
#endif
using namespace std;
@ -64,6 +69,21 @@ static string appDescription = string(
"\n"
);
/// Check for an existing directory (returns error message if check fails)
class WorkingDirectoryValidator : public CLI::detail::ExistingDirectoryValidator {
public:
WorkingDirectoryValidator() {
func_ = [](std::string &filename) {
std::string result = CLI::ExistingDirectory.operator()(filename);
if (result.empty())
_chdir(filename.c_str());
return result;
};
}
};
const WorkingDirectoryValidator WorkingDirectory;
void run_machine(std::string machine_str, std::string bootrom_path, uint32_t execution_mode, uint32_t profiling_interval_ms);
int main(int argc, char** argv) {
@ -77,11 +97,14 @@ int main(int argc, char** argv) {
bool realtime_enabled = false;
bool debugger_enabled = false;
string bootrom_path("bootrom.bin");
string working_directory_path(".");
app.add_flag("-r,--realtime", realtime_enabled,
"Run the emulator in real-time");
app.add_flag("-d,--debugger", debugger_enabled,
"Enter the built-in debugger");
app.add_option("-w,--workingdir", working_directory_path, "Specifies working directory")
->check(WorkingDirectory);
app.add_option("-b,--bootrom", bootrom_path, "Specifies BootROM path")
->check(CLI::ExistingFile);
app.add_flag("--deterministic", is_deterministic,