added missing files (part 2)
This commit is contained in:
parent
6cb5ca653d
commit
2bc539fae9
46
src/util/command_line.cpp
Normal file
46
src/util/command_line.cpp
Normal 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
41
src/util/command_line.h
Normal 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_
|
||||
Loading…
x
Reference in New Issue
Block a user