diff --git a/CMakeLists.txt b/CMakeLists.txt index 29a2773..af31c60 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ -cmake_minimum_required(VERSION 3.12 FATAL_ERROR) -project(tmx2gba) +cmake_minimum_required(VERSION "3.12" FATAL_ERROR) +project(tmx2gba VERSION "0.3") # Options option(TMX2GBA_DKP_INSTALL "Install into DEVKITPRO prefix" OFF) diff --git a/README.md b/README.md index e7c52ac..983e3e6 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ tmx2gba [-h] [-r offset] [-lyc name] [-p 0-15] <-i inpath> <-o outpath> | Command | Required | Notes | |--------------|----------|-----------------------------------------------------------------------| | -h | N/A | Display help & command info. | +| -v | No | Display version & quit. | | -l (name) | No | Name of layer to use (default first layer in TMX). | | -y (name) | No | Layer for palette mappings. | | -c (name) | No | Output a separate 8bit collision map of the specified layer. | diff --git a/src/tmx2gba.cpp b/src/tmx2gba.cpp index c583f83..2312b3f 100644 --- a/src/tmx2gba.cpp +++ b/src/tmx2gba.cpp @@ -11,9 +11,11 @@ #include +const std::string versionStr = "tmx2gba version 0.3, (c) 2015-2022 a dinosaur"; + struct Arguments { - bool help = false; + bool help = false, showVersion = false; std::string inPath, outPath; std::string layer, collisionlay, paletteLay; std::string flagFile; @@ -27,6 +29,7 @@ using ArgParse::Option; static const ArgParse::Options options = { Option::Optional('h', nullptr, "Display this help & command info"), + Option::Optional('v', nullptr, "Display version & quit"), Option::Optional('l', "name", "Name of layer to use (default first layer in TMX)"), Option::Optional('y', "name", "Layer for palette mappings"), Option::Optional('c', "name", "Output a separate 8bit collision map of the specified layer"), @@ -50,6 +53,7 @@ bool ParseArgs(int argc, char** argv, Arguments& params) switch (opt) { case 'h': params.help = true; return ParseCtrl::QUIT_EARLY; + case 'v': params.showVersion = true; return ParseCtrl::QUIT_EARLY; case 'l': params.layer = arg; return ParseCtrl::CONTINUE; case 'c': params.collisionlay = arg; return ParseCtrl::CONTINUE; case 'y': params.paletteLay = arg; return ParseCtrl::CONTINUE; @@ -70,7 +74,7 @@ bool ParseArgs(int argc, char** argv, Arguments& params) if (!parser.Parse(std::span(argv + 1, argc - 1))) return false; - if (params.help) + if (params.help || params.showVersion) return true; if (!params.flagFile.empty()) @@ -113,6 +117,7 @@ bool ParseArgs(int argc, char** argv, Arguments& params) return true; } + template constexpr const char* DatType(); template <> constexpr const char* DatType() { return ".byte"; } template <> constexpr const char* DatType() { return ".hword"; } @@ -161,6 +166,11 @@ int main(int argc, char** argv) options.ShowHelpUsage(argv[0], std::cout); return 0; } + if (p.showVersion) + { + std::cout << versionStr << std::endl; + return 0; + } // Object mappings std::map objMapping;