metaforce/hecl/driver/ToolHelp.hpp

82 lines
4.1 KiB
C++
Raw Normal View History

2018-10-07 03:38:44 +00:00
#pragma once
2015-06-10 02:40:03 +00:00
#include "ToolBase.hpp"
2017-12-29 07:56:31 +00:00
#include <cstdio>
2015-06-10 02:40:03 +00:00
#include <functional>
2018-12-08 05:18:42 +00:00
class ToolHelp final : public ToolBase {
2015-06-10 02:40:03 +00:00
public:
explicit ToolHelp(const ToolPassInfo& info) : ToolBase(info) {
2018-12-08 05:18:42 +00:00
if (m_info.args.empty()) {
2019-07-20 04:22:58 +00:00
LogModule.report(logvisor::Error, fmt("help requires a tool name argument"));
2018-12-08 05:18:42 +00:00
return;
2015-06-10 02:40:03 +00:00
}
2018-12-08 05:18:42 +00:00
m_good = true;
}
2015-06-10 02:40:03 +00:00
~ToolHelp() override = default;
2015-06-10 02:40:03 +00:00
2018-12-08 05:18:42 +00:00
static void Help(HelpOutput& help) {
help.printBold(
_SYS_STR(" ___________ \n") _SYS_STR(
" ,.-'\"...........``~., \n") _SYS_STR(" "
",.-\".......................\"-., \n")
_SYS_STR(" ,/..................................\":, \n") _SYS_STR(
" .,?........................................, \n")
_SYS_STR(" /...........................................,}\n") _SYS_STR(
" ./........................................,:`^`..}\n")
_SYS_STR(" ./.......................................,:\"...../\n") _SYS_STR(
" ?.....__..................................:`...../\n")
_SYS_STR(" /__.(...\"~-,_...........................,:`....../\n") _SYS_STR(
" /(_....\"~,_....\"~,_.....................,:`...._/ \n")
_SYS_STR(" {.._$;_....\"=,_.....\"-,_......,.-~-,},.~\";/....} \n") _SYS_STR(
" ((...*~_......\"=-._...\";,,./`........../\"..../ \n")
_SYS_STR(" ,,,___.`~,......\"~.,....................`......}....../ \n") _SYS_STR(
"............(....`=-,,...`.........................(...;_,,-\" \n")
_SYS_STR("............/.`~,......`-.................................../ \n")
_SYS_STR(".............`~.*-,.....................................|,./...,__ "
"\n") _SYS_STR(",,_..........}.>-._..................................."
"|.......`=~-, \n") _SYS_STR(
".....`=~-,__......`,................................. \n")
_SYS_STR("...................`=~-,,.,........................... \n")
_SYS_STR(".........................`:,,..........................`\n")
_SYS_STR(
"...........................`=-,...............,%%`>--==`` \n")
_SYS_STR(
".................................._.........._,-%%...` \n")
_SYS_STR("...................................,\n"));
}
2015-06-10 02:40:03 +00:00
2018-12-08 05:18:42 +00:00
static void ShowHelp(const hecl::SystemString& toolName) {
/* Select tool's help-text streamer */
HelpOutput::HelpFunc helpFunc = nullptr;
2018-12-08 05:18:42 +00:00
if (toolName == _SYS_STR("init"))
helpFunc = ToolInit::Help;
else if (toolName == _SYS_STR("spec"))
helpFunc = ToolSpec::Help;
else if (toolName == _SYS_STR("extract"))
helpFunc = ToolExtract::Help;
else if (toolName == _SYS_STR("cook"))
helpFunc = ToolCook::Help;
else if (toolName == _SYS_STR("package") || toolName == _SYS_STR("pack"))
helpFunc = ToolPackage::Help;
else if (toolName == _SYS_STR("help"))
helpFunc = ToolHelp::Help;
else {
2019-07-20 04:22:58 +00:00
LogModule.report(logvisor::Error, fmt(_SYS_STR("unrecognized tool '{}' - can't help")), toolName);
2018-12-08 05:18:42 +00:00
return;
2015-06-10 02:40:03 +00:00
}
2018-12-08 05:18:42 +00:00
HelpOutput ho(helpFunc);
ho.go();
}
2015-06-10 02:40:03 +00:00
hecl::SystemString toolName() const override { return _SYS_STR("help"); }
2015-06-10 02:40:03 +00:00
int run() override {
2018-12-08 05:18:42 +00:00
ShowHelp(m_info.args.front());
return 0;
}
2015-06-10 02:40:03 +00:00
};