From 06f587714bfef58adc608f72662bf5ea2df00ee8 Mon Sep 17 00:00:00 2001 From: Björn Steinbrink Date: Fri, 19 Aug 2005 13:46:58 +0000 Subject: 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. --- src/log.cpp | 18 ++++++++--------- src/log.h | 8 ++++---- src/main.cpp | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 77 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/log.cpp b/src/log.cpp index 07c12516..3222c856 100644 --- a/src/log.cpp +++ b/src/log.cpp @@ -29,22 +29,22 @@ #include -Logger::Logger(const std::string &logFilename) +Logger::~Logger() { - logFile.open(logFilename.c_str(), std::ios_base::trunc); - - if (!logFile.is_open()) + if (logFile.is_open()) { - std::cout << "Warning: error while opening " << logFilename << - " for writing.\n"; + logFile.close(); } } -Logger::~Logger() +void Logger::setLogFile(const std::string &logFilename) { - if (logFile.is_open()) + logFile.open(logFilename.c_str(), std::ios_base::trunc); + + if (!logFile.is_open()) { - logFile.close(); + std::cout << "Warning: error while opening " << logFilename << + " for writing.\n"; } } diff --git a/src/log.h b/src/log.h index 9f6988c0..297df88f 100644 --- a/src/log.h +++ b/src/log.h @@ -32,14 +32,14 @@ class Logger { public: /** - * Constructor, opens log file for writing. + * Destructor, closes log file. */ - Logger(const std::string &logFilename); + ~Logger(); /** - * Destructor, closes log file. + * Sets the file to log to and opens it */ - ~Logger(); + void setLogFile(const std::string &logFilename); /** * Enters a message in the log. The message will be timestamped. 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 #include #include +#include #include #include @@ -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 -- cgit v1.2.3-70-g09d2