From d48d63b1fa708a466bba6d3d3165f14a881e0984 Mon Sep 17 00:00:00 2001 From: Mark Vejvoda Date: Thu, 14 Nov 2013 12:54:05 +0000 Subject: [PATCH] a bit more refactoring for command line parameters --- source/glest_game/main/main.cpp | 912 +++++++++++++++++--------------- 1 file changed, 474 insertions(+), 438 deletions(-) diff --git a/source/glest_game/main/main.cpp b/source/glest_game/main/main.cpp index 8366a289..e2c1719d 100644 --- a/source/glest_game/main/main.cpp +++ b/source/glest_game/main/main.cpp @@ -3488,7 +3488,6 @@ void CheckForDuplicateData() { } } - int handleCreateDataArchivesCommand(int argc, char** argv) { int return_value = 1; if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_CREATE_DATA_ARCHIVES]) == true) { @@ -3631,6 +3630,468 @@ int handleCreateDataArchivesCommand(int argc, char** argv) { return return_value; } +int handleShowCRCValuesCommand(int argc, char** argv) { + int return_value = 1; + if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_SHOW_MAP_CRC]) == true) { + int foundParamIndIndex = -1; + hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_SHOW_MAP_CRC]) + string("="),&foundParamIndIndex); + if(foundParamIndIndex < 0) { + hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_SHOW_MAP_CRC]),&foundParamIndIndex); + } + string paramValue = argv[foundParamIndIndex]; + vector paramPartTokens; + Tokenize(paramValue,paramPartTokens,"="); + if(paramPartTokens.size() >= 2 && paramPartTokens[1].length() > 0) { + string itemName = paramPartTokens[1]; + + string file = Map::getMapPath(itemName,"",false); + if(file != "") { + Checksum checksum; + checksum.addFile(file); + uint32 crcValue = checksum.getSum(); + + printf("CRC value for map [%s] file [%s] is [%u]\n",itemName.c_str(),file.c_str(),crcValue); + + return_value = 0; + } + else { + printf("Map [%s] was NOT FOUND\n",itemName.c_str()); + return_value = 1; + } + } + else { + printf("\nInvalid missing map specified on commandline [%s] value [%s]\n\n",argv[foundParamIndIndex],(paramPartTokens.size() >= 2 ? paramPartTokens[1].c_str() : NULL)); + //printParameterHelp(argv[0],false); + + return_value = 1; + } + } + + else if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_SHOW_TILESET_CRC]) == true) { + int foundParamIndIndex = -1; + hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_SHOW_TILESET_CRC]) + string("="),&foundParamIndIndex); + if(foundParamIndIndex < 0) { + hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_SHOW_TILESET_CRC]),&foundParamIndIndex); + } + string paramValue = argv[foundParamIndIndex]; + vector paramPartTokens; + Tokenize(paramValue,paramPartTokens,"="); + if(paramPartTokens.size() >= 2 && paramPartTokens[1].length() > 0) { + string itemName = paramPartTokens[1]; + + Config &config = Config::getInstance(); + uint32 crcValue = getFolderTreeContentsCheckSumRecursively(config.getPathListForType(ptTilesets,""), string("/") + itemName + string("/*"), ".xml", NULL, true); + if(crcValue != 0) { + printf("CRC value for tileset [%s] is [%u]\n",itemName.c_str(),crcValue); + + return_value = 0; + } + else { + printf("Tileset [%s] was NOT FOUND\n",itemName.c_str()); + return_value = 1; + } + } + else { + printf("\nInvalid missing tileset specified on commandline [%s] value [%s]\n\n",argv[foundParamIndIndex],(paramPartTokens.size() >= 2 ? paramPartTokens[1].c_str() : NULL)); + //printParameterHelp(argv[0],false); + + return_value = 1; + } + } + + else if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_SHOW_TECHTREE_CRC]) == true) { + int foundParamIndIndex = -1; + hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_SHOW_TECHTREE_CRC]) + string("="),&foundParamIndIndex); + if(foundParamIndIndex < 0) { + hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_SHOW_TECHTREE_CRC]),&foundParamIndIndex); + } + string paramValue = argv[foundParamIndIndex]; + vector paramPartTokens; + Tokenize(paramValue,paramPartTokens,"="); + if(paramPartTokens.size() >= 2 && paramPartTokens[1].length() > 0) { + string itemName = paramPartTokens[1]; + + Config &config = Config::getInstance(); + uint32 crcValue = getFolderTreeContentsCheckSumRecursively(config.getPathListForType(ptTechs,""), "/" + itemName + "/*", ".xml", NULL, true); + if(crcValue != 0) { + printf("CRC value for techtree [%s] is [%u]\n",itemName.c_str(),crcValue); + + return_value = 0; + } + else { + printf("Techtree [%s] was NOT FOUND\n",itemName.c_str()); + + return_value = 1; + } + } + else { + printf("\nInvalid missing techtree specified on commandline [%s] value [%s]\n\n",argv[foundParamIndIndex],(paramPartTokens.size() >= 2 ? paramPartTokens[1].c_str() : NULL)); + //printParameterHelp(argv[0],false); + + return_value = 1; + } + } + + else if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_SHOW_SCENARIO_CRC]) == true) { + int foundParamIndIndex = -1; + hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_SHOW_SCENARIO_CRC]) + string("="),&foundParamIndIndex); + if(foundParamIndIndex < 0) { + hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_SHOW_SCENARIO_CRC]),&foundParamIndIndex); + } + string paramValue = argv[foundParamIndIndex]; + vector paramPartTokens; + Tokenize(paramValue,paramPartTokens,"="); + if(paramPartTokens.size() >= 2 && paramPartTokens[1].length() > 0) { + string itemName = paramPartTokens[1]; + + Config &config = Config::getInstance(); + uint32 crcValue = getFolderTreeContentsCheckSumRecursively(config.getPathListForType(ptScenarios,""), "/" + itemName + "/*", ".xml", NULL, true); + if(crcValue != 0) { + printf("CRC value for scenario [%s] is [%u]\n",itemName.c_str(),crcValue); + + return_value = 0; + } + else { + printf("Scenario [%s] was NOT FOUND\n",itemName.c_str()); + return_value = 1; + } + } + else { + printf("\nInvalid missing scenario specified on commandline [%s] value [%s]\n\n",argv[foundParamIndIndex],(paramPartTokens.size() >= 2 ? paramPartTokens[1].c_str() : NULL)); + //printParameterHelp(argv[0],false); + + return_value = 0; + } + } + + else if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_SHOW_PATH_CRC]) == true) { + int foundParamIndIndex = -1; + hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_SHOW_PATH_CRC]) + string("="),&foundParamIndIndex); + if(foundParamIndIndex < 0) { + hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_SHOW_PATH_CRC]),&foundParamIndIndex); + } + + string paramValue = argv[foundParamIndIndex]; + vector paramPartTokens; + Tokenize(paramValue,paramPartTokens,"="); + if(paramPartTokens.size() >= 3 && paramPartTokens[1].length() > 0) { + string itemName = paramPartTokens[1]; + string itemNameFilter = paramPartTokens[2]; + //printf("\n\nitemName [%s] itemNameFilter [%s]\n",itemName.c_str(),itemNameFilter.c_str()); + uint32 crcValue = getFolderTreeContentsCheckSumRecursively(itemName, itemNameFilter, NULL, true); + + printf("CRC value for path [%s] filter [%s] is [%u]\n",itemName.c_str(),itemNameFilter.c_str(),crcValue); + + return_value = 0; + } + else { + if(paramPartTokens.size() < 2) { + printf("\nInvalid missing path and filter specified on commandline [%s] value [%s]\n\n",argv[foundParamIndIndex],(paramPartTokens.size() >= 2 ? paramPartTokens[1].c_str() : NULL)); + } + if(paramPartTokens.size() < 3) { + printf("\nInvalid missing filter specified on commandline [%s] value [%s]\n\n",argv[foundParamIndIndex],(paramPartTokens.size() >= 3 ? paramPartTokens[2].c_str() : NULL)); + } + + //printParameterHelp(argv[0],false); + + return_value = 1; + } + } + + return return_value; +} + +int handleListDataCommand(int argc, char** argv) { + int return_value = 1; + if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_LIST_MAPS]) == true) { + int foundParamIndIndex = -1; + hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_LIST_MAPS]) + string("="),&foundParamIndIndex); + if(foundParamIndIndex < 0) { + hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_LIST_MAPS]),&foundParamIndIndex); + } + + Config &config = Config::getInstance(); + vector pathList = config.getPathListForType(ptMaps,""); + vector maps = MapPreview::findAllValidMaps(pathList,"",false,true); + std::sort(maps.begin(),maps.end()); + + string paramValue = argv[foundParamIndIndex]; + vector paramPartTokens; + Tokenize(paramValue,paramPartTokens,"="); + if(paramPartTokens.size() >= 2 && paramPartTokens[1].length() > 0) { + string itemNameFilter = paramPartTokens[1]; + printf("Using filter for maps list [%s]\n",itemNameFilter.c_str()); + + vector filteredMaps; + for(unsigned int i = 0; i < maps.size(); ++i) { + string mapName = maps[i]; + if(itemNameFilter.find("*") != itemNameFilter.npos) { + if(StartsWith(mapName, itemNameFilter.substr(0,itemNameFilter.find("*"))) == true) { + filteredMaps.push_back(mapName); + } + } + else if(mapName == itemNameFilter) { + filteredMaps.push_back(mapName); + } + } + maps = filteredMaps; + } + + printf("Maps found:\n===========================================\n"); + for(unsigned int i = 0; i < maps.size(); ++i) { + string mapName = maps[i]; + printf("%s\n",mapName.c_str()); + } + printf("===========================================\nTotal: " MG_SIZE_T_SPECIFIER "\n",maps.size()); + + return_value = 0; + } + + else if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_LIST_TECHTRESS]) == true) { + int foundParamIndIndex = -1; + hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_LIST_TECHTRESS]) + string("="),&foundParamIndIndex); + if(foundParamIndIndex < 0) { + hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_LIST_TECHTRESS]),&foundParamIndIndex); + } + + Config &config = Config::getInstance(); + vector pathList = config.getPathListForType(ptTechs,""); + vector results; + findDirs(pathList, results); + + bool showfactions=false; + string paramValue = argv[foundParamIndIndex]; + vector paramPartTokens; + Tokenize(paramValue,paramPartTokens,"="); + if(paramPartTokens.size() >= 2 && paramPartTokens[1].length() > 0) { + string cmd = paramPartTokens[1]; + if(cmd == "showfactions") { + showfactions = true; + } + else { + throw megaglest_runtime_error("unknown command for techtreelist [" + cmd + "]"); + } + printf("Using special command for techtree list [%s]\n",cmd.c_str()); + } + + printf("Techtrees found:\n===========================================\n"); + for(unsigned int i = 0; i < results.size(); ++i) { + string name = results[i]; + + for(unsigned int j = 0; j < pathList.size(); ++j) { + string techPath = pathList[j]; + if(techPath != "") { + endPathWithSlash(techPath); + } + vector results2; + findDirs(techPath + name + "/factions", results2, false,true); + if(results2.empty() == false) { + string downloadArchive = techPath + name + ".7z"; + //printf("dl [%s] [%s]\n",name.c_str(),downloadArchive.c_str()); + if(fileExists(downloadArchive) == true) { + off_t fileSize = getFileSize(downloadArchive); + // convert to MB + double megaBytes = ((double)fileSize / 1048576.0); + printf("%s [download archive %.2fMB]\n",name.c_str(),megaBytes); + } + else { + printf("%s\n",name.c_str()); + } + + if(showfactions == true) { + printf("--> Factions:\n"); + for(unsigned int k = 0; k < results2.size(); ++k) { + string name2 = results2[k]; + printf("--> %s\n",name2.c_str()); + } + printf("--> Total Factions: " MG_SIZE_T_SPECIFIER "\n",results2.size()); + break; + } + } + } + } + printf("===========================================\nTotal Techtrees: " MG_SIZE_T_SPECIFIER "\n",results.size()); + + return_value = 0; + } + + else if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_LIST_SCENARIOS]) == true) { + int foundParamIndIndex = -1; + hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_LIST_SCENARIOS]) + string("="),&foundParamIndIndex); + if(foundParamIndIndex < 0) { + hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_LIST_SCENARIOS]),&foundParamIndIndex); + } + + Config &config = Config::getInstance(); + vector pathList = config.getPathListForType(ptScenarios,""); + vector results; + findDirs(pathList, results); + + string paramValue = argv[foundParamIndIndex]; + vector paramPartTokens; + Tokenize(paramValue,paramPartTokens,"="); + if(paramPartTokens.size() >= 2 && paramPartTokens[1].length() > 0) { + string itemNameFilter = paramPartTokens[1]; + printf("Using filter for scenarios list [%s]\n",itemNameFilter.c_str()); + + vector filtered; + for(unsigned int i = 0; i < results.size(); ++i) { + string name = results[i]; + if(itemNameFilter.find("*") != itemNameFilter.npos) { + if(StartsWith(name, itemNameFilter.substr(0,itemNameFilter.find("*"))) == true) { + filtered.push_back(name); + } + } + else if(name == itemNameFilter) { + filtered.push_back(name); + } + } + results = filtered; + } + + printf("Scenarios found:\n===========================================\n"); + for(unsigned int i = 0; i < results.size(); ++i) { + string name = results[i]; + printf("%s\n",name.c_str()); + } + printf("===========================================\nTotal: " MG_SIZE_T_SPECIFIER "\n",results.size()); + + return_value = 0; + } + + else if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_LIST_TILESETS]) == true) { + int foundParamIndIndex = -1; + hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_LIST_TILESETS]) + string("="),&foundParamIndIndex); + if(foundParamIndIndex < 0) { + hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_LIST_TILESETS]),&foundParamIndIndex); + } + + Config &config = Config::getInstance(); + vector pathList = config.getPathListForType(ptTilesets,""); + vector results; + findDirs(pathList, results); + + string paramValue = argv[foundParamIndIndex]; + vector paramPartTokens; + Tokenize(paramValue,paramPartTokens,"="); + if(paramPartTokens.size() >= 2 && paramPartTokens[1].length() > 0) { + string itemNameFilter = paramPartTokens[1]; + printf("Using filter for tilesets list [%s]\n",itemNameFilter.c_str()); + + vector filtered; + for(unsigned int i = 0; i < results.size(); ++i) { + string name = results[i]; + if(itemNameFilter.find("*") != itemNameFilter.npos) { + if(StartsWith(name, itemNameFilter.substr(0,itemNameFilter.find("*"))) == true) { + filtered.push_back(name); + } + } + else if(name == itemNameFilter) { + filtered.push_back(name); + } + } + results = filtered; + } + + printf("Tilesets found:\n===========================================\n"); + for(unsigned int i = 0; i < results.size(); ++i) { + string name = results[i]; + + for(unsigned int j = 0; j < pathList.size(); ++j) { + string tilesetPath = pathList[j]; + if(tilesetPath != "") { + endPathWithSlash(tilesetPath); + } + if(fileExists(tilesetPath + name + "/" + name + ".xml") == true) { + string downloadArchive = tilesetPath + name + ".7z"; + //printf("dl [%s] [%s]\n",name.c_str(),downloadArchive.c_str()); + if(fileExists(downloadArchive) == true) { + off_t fileSize = getFileSize(downloadArchive); + // convert to MB + double megaBytes = ((double)fileSize / 1048576.0); + printf("%s [download archive %.2fMB]\n",name.c_str(),megaBytes); + } + else { + printf("%s\n",name.c_str()); + } + + break; + } + } + } + printf("===========================================\nTotal: " MG_SIZE_T_SPECIFIER "\n",results.size()); + + return_value = 0; + } + + else if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_LIST_TUTORIALS]) == true) { + int foundParamIndIndex = -1; + hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_LIST_TUTORIALS]) + string("="),&foundParamIndIndex); + if(foundParamIndIndex < 0) { + hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_LIST_TUTORIALS]),&foundParamIndIndex); + } + + Config &config = Config::getInstance(); + vector pathList = config.getPathListForType(ptTutorials,""); + vector results; + findDirs(pathList, results); + + string paramValue = argv[foundParamIndIndex]; + vector paramPartTokens; + Tokenize(paramValue,paramPartTokens,"="); + if(paramPartTokens.size() >= 2 && paramPartTokens[1].length() > 0) { + string itemNameFilter = paramPartTokens[1]; + printf("Using filter for tutorials list [%s]\n",itemNameFilter.c_str()); + + vector filtered; + for(unsigned int i = 0; i < results.size(); ++i) { + string name = results[i]; + if(itemNameFilter.find("*") != itemNameFilter.npos) { + if(StartsWith(name, itemNameFilter.substr(0,itemNameFilter.find("*"))) == true) { + filtered.push_back(name); + } + } + else if(name == itemNameFilter) { + filtered.push_back(name); + } + } + results = filtered; + } + + printf("Tutorials found:\n===========================================\n"); + for(unsigned int i = 0; i < results.size(); ++i) { + string name = results[i]; + + for(unsigned int j = 0; j < pathList.size(); ++j) { + string tutorialsPath = pathList[j]; + if(tutorialsPath != "") { + endPathWithSlash(tutorialsPath); + } + if(fileExists(tutorialsPath + name + "/" + name + ".xml") == true) { + string downloadArchive = tutorialsPath + name + ".7z"; + //printf("dl [%s] [%s]\n",name.c_str(),downloadArchive.c_str()); + if(fileExists(downloadArchive) == true) { + off_t fileSize = getFileSize(downloadArchive); + // convert to MB + double megaBytes = ((double)fileSize / 1048576.0); + printf("%s [download archive %.2fMB]\n",name.c_str(),megaBytes); + } + else { + printf("%s\n",name.c_str()); + } + + break; + } + } + } + printf("===========================================\nTotal: " MG_SIZE_T_SPECIFIER "\n",results.size()); + + return_value = 0; + } + + return return_value; +} + int glestMain(int argc, char** argv) { #ifdef SL_LEAK_DUMP //AllocInfo::set_application_binary(executable_path(argv[0],true)); @@ -4561,446 +5022,21 @@ int glestMain(int argc, char** argv) { return handleCreateDataArchivesCommand(argc, argv); } - SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); - - if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_SHOW_MAP_CRC]) == true) { - int foundParamIndIndex = -1; - hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_SHOW_MAP_CRC]) + string("="),&foundParamIndIndex); - if(foundParamIndIndex < 0) { - hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_SHOW_MAP_CRC]),&foundParamIndIndex); - } - string paramValue = argv[foundParamIndIndex]; - vector paramPartTokens; - Tokenize(paramValue,paramPartTokens,"="); - if(paramPartTokens.size() >= 2 && paramPartTokens[1].length() > 0) { - string itemName = paramPartTokens[1]; - - string file = Map::getMapPath(itemName,"",false); - if(file != "") { - Checksum checksum; - checksum.addFile(file); - uint32 crcValue = checksum.getSum(); - - printf("CRC value for map [%s] file [%s] is [%u]\n",itemName.c_str(),file.c_str(),crcValue); - } - else { - printf("Map [%s] was NOT FOUND\n",itemName.c_str()); - return 1; - } - - return 0; - } - else { - printf("\nInvalid missing map specified on commandline [%s] value [%s]\n\n",argv[foundParamIndIndex],(paramPartTokens.size() >= 2 ? paramPartTokens[1].c_str() : NULL)); - //printParameterHelp(argv[0],false); - - return 1; - } + if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_SHOW_MAP_CRC]) == true || + hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_SHOW_TILESET_CRC]) == true || + hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_SHOW_TECHTREE_CRC]) == true || + hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_SHOW_SCENARIO_CRC]) == true || + hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_SHOW_PATH_CRC]) == true) { + return handleShowCRCValuesCommand(argc, argv); } - if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_SHOW_TILESET_CRC]) == true) { - int foundParamIndIndex = -1; - hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_SHOW_TILESET_CRC]) + string("="),&foundParamIndIndex); - if(foundParamIndIndex < 0) { - hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_SHOW_TILESET_CRC]),&foundParamIndIndex); - } - string paramValue = argv[foundParamIndIndex]; - vector paramPartTokens; - Tokenize(paramValue,paramPartTokens,"="); - if(paramPartTokens.size() >= 2 && paramPartTokens[1].length() > 0) { - string itemName = paramPartTokens[1]; - uint32 crcValue = getFolderTreeContentsCheckSumRecursively(config.getPathListForType(ptTilesets,""), string("/") + itemName + string("/*"), ".xml", NULL, true); - if(crcValue != 0) { - printf("CRC value for tileset [%s] is [%u]\n",itemName.c_str(),crcValue); - } - else { - printf("Tileset [%s] was NOT FOUND\n",itemName.c_str()); - return 1; - } + if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_LIST_MAPS]) == true || + hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_LIST_TECHTRESS]) == true || + hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_LIST_SCENARIOS]) == true || + hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_LIST_TILESETS]) == true || + hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_LIST_TUTORIALS]) == true) { + return handleListDataCommand(argc, argv); - return 0; - } - else { - printf("\nInvalid missing tileset specified on commandline [%s] value [%s]\n\n",argv[foundParamIndIndex],(paramPartTokens.size() >= 2 ? paramPartTokens[1].c_str() : NULL)); - //printParameterHelp(argv[0],false); - - return 0; - } - } - - if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_SHOW_TECHTREE_CRC]) == true) { - int foundParamIndIndex = -1; - hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_SHOW_TECHTREE_CRC]) + string("="),&foundParamIndIndex); - if(foundParamIndIndex < 0) { - hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_SHOW_TECHTREE_CRC]),&foundParamIndIndex); - } - string paramValue = argv[foundParamIndIndex]; - vector paramPartTokens; - Tokenize(paramValue,paramPartTokens,"="); - if(paramPartTokens.size() >= 2 && paramPartTokens[1].length() > 0) { - string itemName = paramPartTokens[1]; - uint32 crcValue = getFolderTreeContentsCheckSumRecursively(config.getPathListForType(ptTechs,""), "/" + itemName + "/*", ".xml", NULL, true); - if(crcValue != 0) { - printf("CRC value for techtree [%s] is [%u]\n",itemName.c_str(),crcValue); - } - else { - printf("Techtree [%s] was NOT FOUND\n",itemName.c_str()); - return 1; - } - - return 0; - } - else { - printf("\nInvalid missing techtree specified on commandline [%s] value [%s]\n\n",argv[foundParamIndIndex],(paramPartTokens.size() >= 2 ? paramPartTokens[1].c_str() : NULL)); - //printParameterHelp(argv[0],false); - - return 0; - } - } - - if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_SHOW_SCENARIO_CRC]) == true) { - int foundParamIndIndex = -1; - hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_SHOW_SCENARIO_CRC]) + string("="),&foundParamIndIndex); - if(foundParamIndIndex < 0) { - hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_SHOW_SCENARIO_CRC]),&foundParamIndIndex); - } - string paramValue = argv[foundParamIndIndex]; - vector paramPartTokens; - Tokenize(paramValue,paramPartTokens,"="); - if(paramPartTokens.size() >= 2 && paramPartTokens[1].length() > 0) { - string itemName = paramPartTokens[1]; - uint32 crcValue = getFolderTreeContentsCheckSumRecursively(config.getPathListForType(ptScenarios,""), "/" + itemName + "/*", ".xml", NULL, true); - if(crcValue != 0) { - printf("CRC value for scenario [%s] is [%u]\n",itemName.c_str(),crcValue); - } - else { - printf("Scenario [%s] was NOT FOUND\n",itemName.c_str()); - return 1; - } - - return 0; - } - else { - printf("\nInvalid missing scenario specified on commandline [%s] value [%s]\n\n",argv[foundParamIndIndex],(paramPartTokens.size() >= 2 ? paramPartTokens[1].c_str() : NULL)); - //printParameterHelp(argv[0],false); - - return 0; - } - } - - if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_SHOW_PATH_CRC]) == true) { - int foundParamIndIndex = -1; - hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_SHOW_PATH_CRC]) + string("="),&foundParamIndIndex); - if(foundParamIndIndex < 0) { - hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_SHOW_PATH_CRC]),&foundParamIndIndex); - } - - string paramValue = argv[foundParamIndIndex]; - vector paramPartTokens; - Tokenize(paramValue,paramPartTokens,"="); - if(paramPartTokens.size() >= 3 && paramPartTokens[1].length() > 0) { - string itemName = paramPartTokens[1]; - string itemNameFilter = paramPartTokens[2]; - //printf("\n\nitemName [%s] itemNameFilter [%s]\n",itemName.c_str(),itemNameFilter.c_str()); - uint32 crcValue = getFolderTreeContentsCheckSumRecursively(itemName, itemNameFilter, NULL, true); - - printf("CRC value for path [%s] filter [%s] is [%u]\n",itemName.c_str(),itemNameFilter.c_str(),crcValue); - - return 0; - } - else { - if(paramPartTokens.size() < 2) { - printf("\nInvalid missing path and filter specified on commandline [%s] value [%s]\n\n",argv[foundParamIndIndex],(paramPartTokens.size() >= 2 ? paramPartTokens[1].c_str() : NULL)); - } - if(paramPartTokens.size() < 3) { - printf("\nInvalid missing filter specified on commandline [%s] value [%s]\n\n",argv[foundParamIndIndex],(paramPartTokens.size() >= 3 ? paramPartTokens[2].c_str() : NULL)); - } - - //printParameterHelp(argv[0],false); - - return 1; - } - } - - if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_LIST_MAPS]) == true) { - int foundParamIndIndex = -1; - hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_LIST_MAPS]) + string("="),&foundParamIndIndex); - if(foundParamIndIndex < 0) { - hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_LIST_MAPS]),&foundParamIndIndex); - } - - vector pathList = config.getPathListForType(ptMaps,""); - vector maps = MapPreview::findAllValidMaps(pathList,"",false,true); - std::sort(maps.begin(),maps.end()); - - string paramValue = argv[foundParamIndIndex]; - vector paramPartTokens; - Tokenize(paramValue,paramPartTokens,"="); - if(paramPartTokens.size() >= 2 && paramPartTokens[1].length() > 0) { - string itemNameFilter = paramPartTokens[1]; - printf("Using filter for maps list [%s]\n",itemNameFilter.c_str()); - - vector filteredMaps; - for(unsigned int i = 0; i < maps.size(); ++i) { - string mapName = maps[i]; - if(itemNameFilter.find("*") != itemNameFilter.npos) { - if(StartsWith(mapName, itemNameFilter.substr(0,itemNameFilter.find("*"))) == true) { - filteredMaps.push_back(mapName); - } - } - else if(mapName == itemNameFilter) { - filteredMaps.push_back(mapName); - } - } - maps = filteredMaps; - } - - printf("Maps found:\n===========================================\n"); - for(unsigned int i = 0; i < maps.size(); ++i) { - string mapName = maps[i]; - printf("%s\n",mapName.c_str()); - } - printf("===========================================\nTotal: " MG_SIZE_T_SPECIFIER "\n",maps.size()); - - return 0; - } - - if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_LIST_TECHTRESS]) == true) { - int foundParamIndIndex = -1; - hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_LIST_TECHTRESS]) + string("="),&foundParamIndIndex); - if(foundParamIndIndex < 0) { - hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_LIST_TECHTRESS]),&foundParamIndIndex); - } - - vector pathList = config.getPathListForType(ptTechs,""); - vector results; - findDirs(pathList, results); - - bool showfactions=false; - string paramValue = argv[foundParamIndIndex]; - vector paramPartTokens; - Tokenize(paramValue,paramPartTokens,"="); - if(paramPartTokens.size() >= 2 && paramPartTokens[1].length() > 0) { - string cmd = paramPartTokens[1]; - if(cmd == "showfactions") { - showfactions = true; - } - else { - throw megaglest_runtime_error("unknown command for techtreelist [" + cmd + "]"); - } - printf("Using special command for techtree list [%s]\n",cmd.c_str()); - } - - printf("Techtrees found:\n===========================================\n"); - for(unsigned int i = 0; i < results.size(); ++i) { - string name = results[i]; - - for(unsigned int j = 0; j < pathList.size(); ++j) { - string techPath = pathList[j]; - if(techPath != "") { - endPathWithSlash(techPath); - } - vector results2; - findDirs(techPath + name + "/factions", results2, false,true); - if(results2.empty() == false) { - string downloadArchive = techPath + name + ".7z"; - //printf("dl [%s] [%s]\n",name.c_str(),downloadArchive.c_str()); - if(fileExists(downloadArchive) == true) { - off_t fileSize = getFileSize(downloadArchive); - // convert to MB - double megaBytes = ((double)fileSize / 1048576.0); - printf("%s [download archive %.2fMB]\n",name.c_str(),megaBytes); - } - else { - printf("%s\n",name.c_str()); - } - - if(showfactions == true) { - printf("--> Factions:\n"); - for(unsigned int k = 0; k < results2.size(); ++k) { - string name2 = results2[k]; - printf("--> %s\n",name2.c_str()); - } - printf("--> Total Factions: " MG_SIZE_T_SPECIFIER "\n",results2.size()); - break; - } - } - } - } - printf("===========================================\nTotal Techtrees: " MG_SIZE_T_SPECIFIER "\n",results.size()); - - return 0; - } - - if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_LIST_SCENARIOS]) == true) { - int foundParamIndIndex = -1; - hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_LIST_SCENARIOS]) + string("="),&foundParamIndIndex); - if(foundParamIndIndex < 0) { - hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_LIST_SCENARIOS]),&foundParamIndIndex); - } - - vector pathList = config.getPathListForType(ptScenarios,""); - vector results; - findDirs(pathList, results); - - string paramValue = argv[foundParamIndIndex]; - vector paramPartTokens; - Tokenize(paramValue,paramPartTokens,"="); - if(paramPartTokens.size() >= 2 && paramPartTokens[1].length() > 0) { - string itemNameFilter = paramPartTokens[1]; - printf("Using filter for scenarios list [%s]\n",itemNameFilter.c_str()); - - vector filtered; - for(unsigned int i = 0; i < results.size(); ++i) { - string name = results[i]; - if(itemNameFilter.find("*") != itemNameFilter.npos) { - if(StartsWith(name, itemNameFilter.substr(0,itemNameFilter.find("*"))) == true) { - filtered.push_back(name); - } - } - else if(name == itemNameFilter) { - filtered.push_back(name); - } - } - results = filtered; - } - - printf("Scenarios found:\n===========================================\n"); - for(unsigned int i = 0; i < results.size(); ++i) { - string name = results[i]; - printf("%s\n",name.c_str()); - } - printf("===========================================\nTotal: " MG_SIZE_T_SPECIFIER "\n",results.size()); - - return 0; - } - - if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_LIST_TILESETS]) == true) { - int foundParamIndIndex = -1; - hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_LIST_TILESETS]) + string("="),&foundParamIndIndex); - if(foundParamIndIndex < 0) { - hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_LIST_TILESETS]),&foundParamIndIndex); - } - - vector pathList = config.getPathListForType(ptTilesets,""); - vector results; - findDirs(pathList, results); - - string paramValue = argv[foundParamIndIndex]; - vector paramPartTokens; - Tokenize(paramValue,paramPartTokens,"="); - if(paramPartTokens.size() >= 2 && paramPartTokens[1].length() > 0) { - string itemNameFilter = paramPartTokens[1]; - printf("Using filter for tilesets list [%s]\n",itemNameFilter.c_str()); - - vector filtered; - for(unsigned int i = 0; i < results.size(); ++i) { - string name = results[i]; - if(itemNameFilter.find("*") != itemNameFilter.npos) { - if(StartsWith(name, itemNameFilter.substr(0,itemNameFilter.find("*"))) == true) { - filtered.push_back(name); - } - } - else if(name == itemNameFilter) { - filtered.push_back(name); - } - } - results = filtered; - } - - printf("Tilesets found:\n===========================================\n"); - for(unsigned int i = 0; i < results.size(); ++i) { - string name = results[i]; - - for(unsigned int j = 0; j < pathList.size(); ++j) { - string tilesetPath = pathList[j]; - if(tilesetPath != "") { - endPathWithSlash(tilesetPath); - } - if(fileExists(tilesetPath + name + "/" + name + ".xml") == true) { - string downloadArchive = tilesetPath + name + ".7z"; - //printf("dl [%s] [%s]\n",name.c_str(),downloadArchive.c_str()); - if(fileExists(downloadArchive) == true) { - off_t fileSize = getFileSize(downloadArchive); - // convert to MB - double megaBytes = ((double)fileSize / 1048576.0); - printf("%s [download archive %.2fMB]\n",name.c_str(),megaBytes); - } - else { - printf("%s\n",name.c_str()); - } - - break; - } - } - } - printf("===========================================\nTotal: " MG_SIZE_T_SPECIFIER "\n",results.size()); - - return 0; - } - - if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_LIST_TUTORIALS]) == true) { - int foundParamIndIndex = -1; - hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_LIST_TUTORIALS]) + string("="),&foundParamIndIndex); - if(foundParamIndIndex < 0) { - hasCommandArgument(argc, argv,string(GAME_ARGS[GAME_ARG_LIST_TUTORIALS]),&foundParamIndIndex); - } - - vector pathList = config.getPathListForType(ptTutorials,""); - vector results; - findDirs(pathList, results); - - string paramValue = argv[foundParamIndIndex]; - vector paramPartTokens; - Tokenize(paramValue,paramPartTokens,"="); - if(paramPartTokens.size() >= 2 && paramPartTokens[1].length() > 0) { - string itemNameFilter = paramPartTokens[1]; - printf("Using filter for tutorials list [%s]\n",itemNameFilter.c_str()); - - vector filtered; - for(unsigned int i = 0; i < results.size(); ++i) { - string name = results[i]; - if(itemNameFilter.find("*") != itemNameFilter.npos) { - if(StartsWith(name, itemNameFilter.substr(0,itemNameFilter.find("*"))) == true) { - filtered.push_back(name); - } - } - else if(name == itemNameFilter) { - filtered.push_back(name); - } - } - results = filtered; - } - - printf("Tutorials found:\n===========================================\n"); - for(unsigned int i = 0; i < results.size(); ++i) { - string name = results[i]; - - for(unsigned int j = 0; j < pathList.size(); ++j) { - string tutorialsPath = pathList[j]; - if(tutorialsPath != "") { - endPathWithSlash(tutorialsPath); - } - if(fileExists(tutorialsPath + name + "/" + name + ".xml") == true) { - string downloadArchive = tutorialsPath + name + ".7z"; - //printf("dl [%s] [%s]\n",name.c_str(),downloadArchive.c_str()); - if(fileExists(downloadArchive) == true) { - off_t fileSize = getFileSize(downloadArchive); - // convert to MB - double megaBytes = ((double)fileSize / 1048576.0); - printf("%s [download archive %.2fMB]\n",name.c_str(),megaBytes); - } - else { - printf("%s\n",name.c_str()); - } - - break; - } - } - } - printf("===========================================\nTotal: " MG_SIZE_T_SPECIFIER "\n",results.size()); - - return 0; } program= new Program();