/* This file is part of Jellyfish.
Jellyfish is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Jellyfish is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Jellyfish. If not, see .
*/
#include
#include
#include
#include
#include
typedef int (main_func_t)(int argc, char *argv[]);
main_func_t count_main;
main_func_t bc_main;
main_func_t info_main;
main_func_t stats_main;
main_func_t merge_main;
main_func_t histo_main;
main_func_t query_main;
main_func_t dump_main;
main_func_t cite_main;
main_func_t mem_main;
// main_func_t dump_fastq_main;
// main_func_t histo_fastq_main;
// main_func_t hash_fastq_merge_main;
main_func_t sos;
main_func_t version;
main_func_t jf_main;
struct cmd_func {
const char *cmd;
// std::string cmd;
main_func_t *func;
};
cmd_func cmd_list[] = {
{"count", &count_main},
{"bc", &bc_main},
{"info", &info_main},
{"stats", &stats_main},
{"histo", &histo_main},
{"dump", &dump_main},
{"merge", &merge_main},
{"query", &query_main},
{"cite", &cite_main},
{"mem", &mem_main},
// {"qhisto", &histo_fastq_main},
// {"qdump", &dump_fastq_main},
// {"qmerge", &hash_fastq_merge_main},
{"jf", &jf_main},
/* help in all its form. Must be first non-command */
{"help", &sos},
{"-h", &sos},
{"-help", &sos},
{"--help", &sos},
{"-?", &sos},
{"--version", &version},
{"-V", &version},
{"", 0}
};
void __sos(std::ostream *os)
{
*os << "Usage: jellyfish [options] arg..." << std::endl <<
"Where is one of: ";
bool comma = false;
for(cmd_func *ccmd = cmd_list; ccmd->func != sos; ccmd++) {
*os << (comma ? ", " : "") << ccmd->cmd;
comma = true;
}
*os << "." << std::endl;
*os << "Options:" << std::endl <<
" --version Display version" << std::endl <<
" --help Display this message" << std::endl;
}
int jf_main(int argc, char* argv[]) {
const char* aa =
" .......\n"
" .......... .....\n"
" .... ....\n"
" .. /-+ +---\\ ...\n"
" . /--| +----\\ ...\n"
" .. ...\n"
" . .\n"
" .. +----------------+ .\n"
" . |. AAGATGGAGCGC .| ..\n"
" . |---. .--/ .\n"
" .. \\--------/ . .\n"
" . . .. .. .\n"
" . ... ..... ..... .. ..\n"
" . .. . . . .. . .... .\n"
" . .. . .. . . .. . . .\n"
" . .. . . ... . .. .. .\n"
" .... . .. .. ... .. .\n"
" .. . ... . .. .. .\n"
" . .. . . . ... ..\n"
" ... . . .. ... .\n"
" . .. . .. .....\n"
" ____ ____ ._ __ _ _ ____ ____ ___ _ _\n"
" (_ _)( ___)( ) ( ) ( \\/ )( ___)(_ _)/ __)( )_( )\n"
".-_)( )__) )(__ )(__ \\ / )__) _)(_ \\__ \\ ) _ ( \n"
"\\____) (____)(____)(____)(__) (__) (____)(___/(_) (_)\n";
std::cout << aa;
return 0;
}
int sos(int argc, char *argv[])
{
__sos(&std::cout);
return 0;
}
int version(int argc, char *argv[])
{
#ifdef PACKAGE_STRING
std::cout << PACKAGE_STRING << std::endl;
#else
std::cout << "no version" << std::endl;
#endif
return 0;
}
int main(int argc, char *argv[])
{
std::string error;
if(argc < 2) {
error = "Too few arguments";
} else {
for(cmd_func *ccmd = cmd_list; ccmd->func != 0; ccmd++) {
if(!strcmp(ccmd->cmd, argv[1]))
// if(!ccmd->cmd.compare(argv[1]))
return ccmd->func(argc - 1, argv + 1);
}
error = "Unknown command '";
error += argv[1];
error += "'\n";
}
std::cerr << error << std::endl;
__sos(&std::cerr);
return 1;
}