added missing files (part 2)

This commit is contained in:
MihailRis 2023-11-26 14:12:12 +03:00
parent 6cb5ca653d
commit 2bc539fae9
2 changed files with 87 additions and 0 deletions

46
src/util/command_line.cpp Normal file
View File

@ -0,0 +1,46 @@
#include "command_line.h"
#include <filesystem>
namespace fs = std::filesystem;
using std::filesystem::path;
using std::string;
using std::cout;
using std::cerr;
using std::endl;
bool parse_cmdline(int argc, char** argv, EnginePaths& paths) {
ArgsReader reader(argc, argv);
reader.skip();
while (reader.hasNext()) {
string token = reader.next();
if (reader.isKeywordArg()) {
if (token == "--res") {
token = reader.next();
if (!fs::is_directory(path(token))) {
throw std::runtime_error(token+" is not a directory");
}
paths.setResources(path(token));
cout << "resources folder: " << token << std::endl;
} else if (token == "--dir") {
token = reader.next();
if (!fs::is_directory(path(token))) {
fs::create_directories(path(token));
}
paths.setUserfiles(path(token));
cout << "userfiles folder: " << token << endl;
} else if (token == "--help" || token == "-h") {
cout << "VoxelEngine command-line arguments:" << endl;
cout << " --res [path] - set resources directory" << endl;
cout << " --dir [path] - set userfiles directory" << endl;
return false;
} else {
cerr << "unknown argument " << token << endl;
}
} else {
cerr << "unexpected token" << endl;
}
}
return true;
}

41
src/util/command_line.h Normal file
View File

@ -0,0 +1,41 @@
#ifndef UTIL_COMMAND_LINE_H_
#define UTIL_COMMAND_LINE_H_
#include <string>
#include <iostream>
#include <stdexcept>
#include "../files/engine_paths.h"
class ArgsReader {
int argc;
char** argv;
int pos = 0;
const char* last = "";
public:
ArgsReader(int argc, char** argv) : argc(argc), argv(argv) {}
void skip() {
pos++;
}
bool hasNext() const {
return pos < argc;
}
bool isKeywordArg() const {
return last[0] == '-';
}
std::string next() {
if (pos >= argc) {
throw std::runtime_error("unexpected end");
}
last = argv[pos];
return argv[pos++];
}
};
/* @return false if engine start can*/
extern bool parse_cmdline(int argc, char** argv, EnginePaths& paths);
#endif // UTIL_COMMAND_LINE_H_