diff options
author | Björn Steinbrink <B.Steinbrink@gmx.de> | 2005-08-19 13:46:58 +0000 |
---|---|---|
committer | Björn Steinbrink <B.Steinbrink@gmx.de> | 2005-08-19 13:46:58 +0000 |
commit | 06f587714bfef58adc608f72662bf5ea2df00ee8 (patch) | |
tree | a69a2f0411def5fb90b21e4daa689b5ee1ee0c5c /src/main.cpp | |
parent | 44cf0fd601f9f3f0bb51871dfe7b5645090f41e0 (diff) | |
download | mana-06f587714bfef58adc608f72662bf5ea2df00ee8.tar.gz mana-06f587714bfef58adc608f72662bf5ea2df00ee8.tar.bz2 mana-06f587714bfef58adc608f72662bf5ea2df00ee8.tar.xz mana-06f587714bfef58adc608f72662bf5ea2df00ee8.zip |
Added support for parsing command line options. Added option to skip the update process. Made the logger being created immediately after start, because some destructors use it.
Diffstat (limited to 'src/main.cpp')
-rw-r--r-- | src/main.cpp | 66 |
1 files changed, 64 insertions, 2 deletions
diff --git a/src/main.cpp b/src/main.cpp index 42212b25..d2a8d964 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -23,8 +23,10 @@ #include "main.h" +#include <getopt.h> #include <iostream> #include <physfs.h> +#include <unistd.h> #include <SDL_image.h> #include <guichan/sdl/sdlinput.hpp> @@ -153,8 +155,8 @@ void init_engine() } #endif - // Initialize logger - logger = new Logger(homeDir + std::string("/tmw.log")); + // Set log file + logger->setLogFile(homeDir + std::string("/tmw.log")); ResourceManager *resman = ResourceManager::getInstance(); @@ -331,9 +333,65 @@ int exists(const std::string &file) } } +struct Options +{ + Options():printHelp(false),skipUpdate(false) {}; + + bool printHelp; + bool skipUpdate; +}; + +void printHelp() +{ + std::cout << "tmw" << std::endl << std::endl; + std::cout << "Options: " << std::endl; + std::cout << " -h --help : Display this help" << std::endl; + std::cout << " --skipupdate : Skip the update process" << std::endl; +} + +void parseOptions(int argc, char *argv[], Options &options) +{ + const char *optstring = "h"; + + const struct option long_options[] = { + { "help", no_argument, 0, 'h' }, + { "skipupdate", no_argument, 0, 'u' }, + 0 + }; + + while (optind < argc) { + int result = getopt_long(argc, argv, optstring, long_options, NULL); + + if (result == -1) { + break; + } + + switch (result) { + default: // Unknown option + case 'h': + options.printHelp = true; + break; + case 'u': + options.skipUpdate = true; + break; + } + } +} + /** Main */ int main(int argc, char *argv[]) { + logger = new Logger(); + + Options options; + + parseOptions(argc, argv, options); + + if (options.printHelp) { + printHelp(); + return 0; + } + UpdaterWindow *uw; // Initialize libxml2 and check for potential ABI mismatches between @@ -352,6 +410,10 @@ int main(int argc, char *argv[]) SDL_Event event; + if (options.skipUpdate && state != ERROR) { + state = LOGIN; + } + while (state != EXIT) { // Handle SDL events |