#include #include #include #include #include #include static const char* VERSION_STRING = "1.1.1"; typedef std::map CommandMap_t; CommandMap_t g_command_map; class HelpCommand : public ja2xp::IExporterBase { public: typedef ja2xp::IExporterBase::param_list_t param_list_t; static const wchar_t* commandString;// = L"help"; virtual void handleCommand(param_list_t const& params) { param_list_t::const_iterator cit = params.begin(); for(; cit != params.end(); ++cit) { CommandMap_t::const_iterator comm_it = g_command_map.find(*cit); if(comm_it != g_command_map.end()) { this->printBasicUsage(); comm_it->second->printHelp(); return; } } this->printBasicUsage(); this->printHelp(); } void printBasicUsage() { std::wcout << L"*** ja2export : version " << VERSION_STRING << " ***" << std::endl << std::endl << L"Usage : ja2export command [OPTIONS] source destination" << std::endl << std::endl << L" converts file(s) specified by \"source\" and outputs according to filename" << std::endl << L" specified by \"destination\"" << std::endl << std::endl; } virtual void printHelp() { std::wcout << L" * if \"source\" is a file pattern with the wildcard *, then all files that" << std::endl << L" match this pattern will be converted" << std::endl << L" * if \"destination\" is a file name, the converted file will take exactly " << std::endl << L" this name" << std::endl << L" * if \"destination\" is a directory name, then the converted file will be" << std::endl << L" written in this directory and its extension will be modified according" << std::endl << L" to the command specification" << std::endl << std::endl << L" commands :" << std::endl << L" help : print this message, use help [command] to print specific help message" << std::endl << L" sti : convert STI image file(s) to a series of png images in a 7z archive" << std::endl << L" slf : convert SLF archive(s) to uncompressed 7z archive(s)" << std::endl << L" jsd : convert JSD file(s) to XML file(s)" << std::endl << std::endl << L" options :" << std::endl << L" -create_dst : creates destination directory if it doesn't exist" << std::endl << L" -lib : when set, the next two paramers are treated as" << std::endl << L" 'source path' and 'source file pattern'" << std::endl; } }; const wchar_t* HelpCommand::commandString = L"help"; int wmain(int argc, wchar_t **argv) { std::list param_list; argv++; while(*argv) { param_list.push_back(*argv++); }; auto cmd_help{ std::make_unique() }; g_command_map[HelpCommand::commandString] = cmd_help.get(); auto cmd_sti{ std::make_unique() }; g_command_map[ja2xp::CExportSTI::commandString] = cmd_sti.get(); auto cmd_slf{ std::make_unique() }; g_command_map[ja2xp::CExportSLF::commandString] = cmd_slf.get(); auto cmd_jsd{ std::make_unique() }; g_command_map[ja2xp::CExportJSD::commandString] = cmd_jsd.get(); if(!param_list.empty()) { ja2xp::IExporterBase* command = g_command_map[param_list.front()]; if(command) { std::list command_params(++param_list.begin(), param_list.end()); command->handleCommand(command_params); return 1; } else { std::wcout << L"Unknown command \"" << param_list.front() << "\""; return 0; } } cmd_help->printBasicUsage(); cmd_help->printHelp(); return 1; }