nod/driver/main.cpp

76 lines
1.7 KiB
C++
Raw Normal View History

2015-06-29 23:46:19 -07:00
#include <stdio.h>
#include <string.h>
#include <LogVisor/LogVisor.hpp>
2015-07-02 11:33:55 -07:00
#include "NOD/NOD.hpp"
2015-06-29 23:46:19 -07:00
static void printHelp()
{
fprintf(stderr, "Usage:\n"
" nodlib extract [-f] <image-in> [<dir-out>]\n"
" nodlib make <dir-in> [<image-out>]\n");
}
2015-07-02 13:37:07 -07:00
#if NOD_UCS2
#ifdef strcasecmp
#undef strcasecmp
#endif
#define strcasecmp _wcsicmp
int wmain(int argc, wchar_t* argv[])
#else
2015-06-29 23:46:19 -07:00
int main(int argc, char* argv[])
2015-07-02 13:37:07 -07:00
#endif
2015-06-29 23:46:19 -07:00
{
if (argc < 3)
2015-06-29 23:46:19 -07:00
{
printHelp();
2015-06-29 23:46:19 -07:00
return -1;
}
/* Enable logging to console */
LogVisor::RegisterConsoleLogger();
2015-09-27 18:55:59 -07:00
NOD::ExtractionContext ctx = { true, true, [&](const std::string& str){
fprintf(stderr, "%s\n", str.c_str());
}};
2015-07-02 13:37:07 -07:00
const NOD::SystemChar* inDir = nullptr;
const NOD::SystemChar* outDir = _S(".");
2015-09-27 18:55:59 -07:00
for (int a=2 ; a<argc ; ++a)
{
if (argv[a][0] == '-' && argv[a][1] == 'f')
2015-09-27 18:55:59 -07:00
ctx.force = true;
else if (argv[a][0] == '-' && argv[a][1] == 'v')
ctx.verbose = true;
else if (!inDir)
inDir = argv[a];
else
outDir = argv[a];
}
2015-06-29 23:46:19 -07:00
2015-07-02 13:37:07 -07:00
if (!strcasecmp(argv[1], _S("extract")))
{
std::unique_ptr<NOD::DiscBase> disc = NOD::OpenDiscFromImage(inDir);
if (!disc)
return -1;
NOD::Partition* dataPart = disc->getDataPartition();
if (!dataPart)
return -1;
2015-06-29 23:46:19 -07:00
2015-09-27 18:55:59 -07:00
if (!dataPart->extractToDirectory(outDir, ctx))
2015-07-25 19:44:44 -07:00
return -1;
}
2015-07-02 13:37:07 -07:00
else if (!strcasecmp(argv[1], _S("make")))
2015-06-29 23:46:19 -07:00
{
}
else
{
printHelp();
return -1;
2015-06-29 23:46:19 -07:00
}
return 0;
}