help and version commands, tclap dependency introduced here
This commit is contained in:
parent
207599eab1
commit
7f5e6088cf
@ -16,6 +16,9 @@ if test "$COG" == "not found" ; then
|
|||||||
AC_SUBST(COG)
|
AC_SUBST(COG)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
AX_CXX_HAVE_SSTREAM
|
||||||
|
PKG_CHECK_MODULES([TCLAP], [tclap >= 1.2.1])
|
||||||
|
|
||||||
AX_BOOST_BASE([1.63], , [AC_MSG_ERROR([boost 1.63 required])])
|
AX_BOOST_BASE([1.63], , [AC_MSG_ERROR([boost 1.63 required])])
|
||||||
AX_BOOST_SYSTEM
|
AX_BOOST_SYSTEM
|
||||||
AX_BOOST_FILESYSTEM
|
AX_BOOST_FILESYSTEM
|
||||||
|
@ -1,11 +1,15 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include <sstream>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#include "tclap/CmdLine.h"
|
||||||
#include "json.hpp"
|
#include "json.hpp"
|
||||||
|
|
||||||
#include "bottles.hpp"
|
#include "bottles.hpp"
|
||||||
|
#include "cellar.hpp"
|
||||||
#include "commands.hpp"
|
#include "commands.hpp"
|
||||||
#include "version.hpp"
|
#include "version.hpp"
|
||||||
|
|
||||||
@ -13,12 +17,36 @@ using namespace std;
|
|||||||
using namespace cellar;
|
using namespace cellar;
|
||||||
using json = nlohmann::json;
|
using json = nlohmann::json;
|
||||||
|
|
||||||
int main(int argc, char* argv[]) {
|
void cellar::print_header() {
|
||||||
vector<string> commands = commands::list_commands();
|
|
||||||
cout << "cellar - bottle management tool for WINE connoisseurs" << std::endl;
|
cout << "cellar - bottle management tool for WINE connoisseurs" << std::endl;
|
||||||
cout << version::short_version() << std::endl;
|
cout << version::short_version() << std::endl;
|
||||||
for (string item : commands) {
|
}
|
||||||
cout << item << " has loaded" << endl;
|
|
||||||
}
|
int main(int argc, char* argv[]) {
|
||||||
return 0;
|
if (argc == 1) {
|
||||||
|
print_header();
|
||||||
|
cout << "\n(try \"cellar help\" if you're confused)" << endl;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const string desc = "bottle management tool for WINE connoisseurs";
|
||||||
|
const string versionstr = version::short_version();
|
||||||
|
TCLAP::CmdLine cmdparse(desc, ' ', versionstr, false);
|
||||||
|
TCLAP::UnlabeledValueArg<string> command("command", "Specific command to run.", true, "help", "command");
|
||||||
|
cmdparse.add(command);
|
||||||
|
|
||||||
|
cmdparse.parse(argc, argv);
|
||||||
|
|
||||||
|
string usercmd = command.getValue();
|
||||||
|
if (commands::command_map.count(usercmd) > 0) {
|
||||||
|
commands::command_map[usercmd](argc, argv);
|
||||||
|
} else {
|
||||||
|
cerr << "invalid command: " << usercmd << endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
} catch (TCLAP::ArgException &exc) {
|
||||||
|
cerr << "Invalid argument. (" << exc.argId() << ": " << exc.error() << ")" << endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
9
src/cellar.hpp
Normal file
9
src/cellar.hpp
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#ifndef __CELLAR_HPP
|
||||||
|
#define __CELLAR_HPP
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace cellar {
|
||||||
|
void print_header();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __CELLAR_HPP
|
@ -1,15 +1,13 @@
|
|||||||
|
#include <iostream>
|
||||||
|
|
||||||
#include "commands.hpp"
|
#include "commands.hpp"
|
||||||
|
#include "cellar.hpp"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace cellar::commands;
|
using namespace cellar::commands;
|
||||||
|
|
||||||
map<string, CommandFunction> cellar::commands::command_map;
|
map<string, CommandFunction> cellar::commands::command_map;
|
||||||
|
|
||||||
bool cellar::commands::add_command(string name, CommandFunction func) {
|
|
||||||
command_map[name] = func;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
vector<string> cellar::commands::list_commands() {
|
vector<string> cellar::commands::list_commands() {
|
||||||
vector<string> result;
|
vector<string> result;
|
||||||
for (auto& item : command_map) {
|
for (auto& item : command_map) {
|
||||||
@ -17,3 +15,24 @@ vector<string> cellar::commands::list_commands() {
|
|||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void help_command(int argc, char** argv) {
|
||||||
|
vector<string> commands = list_commands();
|
||||||
|
cellar::print_header();
|
||||||
|
|
||||||
|
cout << "You have these commands:\n" << endl;
|
||||||
|
|
||||||
|
int num_columns = 4;
|
||||||
|
int cur_column = 1;
|
||||||
|
for (string command : commands) {
|
||||||
|
cout << "\t" << command;
|
||||||
|
if (cur_column == num_columns) {
|
||||||
|
cout << endl;
|
||||||
|
cur_column = 1;
|
||||||
|
} else {
|
||||||
|
cur_column++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout << endl;
|
||||||
|
}
|
||||||
|
CommandFunction helpcmd = command_map["help"] = &help_command;
|
||||||
|
@ -12,7 +12,7 @@ namespace cellar {
|
|||||||
typedef void (*CommandFunction)(int, char*[]);
|
typedef void (*CommandFunction)(int, char*[]);
|
||||||
extern map<string, CommandFunction> command_map;
|
extern map<string, CommandFunction> command_map;
|
||||||
|
|
||||||
bool add_command(string, CommandFunction);
|
void add_command(string, CommandFunction);
|
||||||
vector<string> list_commands();
|
vector<string> list_commands();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,7 @@ string cellar::version::short_version() {
|
|||||||
outstring = "exception raised when trying to read git data at precompile time"
|
outstring = "exception raised when trying to read git data at precompile time"
|
||||||
raise
|
raise
|
||||||
|
|
||||||
cog.outl("return \"{0}\";".format(outstring))
|
cog.outl("return string(\"{0}\");".format(outstring))
|
||||||
]]]*/
|
]]]*/
|
||||||
//[[[end]]]
|
//[[[end]]]
|
||||||
}
|
}
|
||||||
@ -41,4 +41,4 @@ string cellar::version::short_version() {
|
|||||||
void print_version(int argc, char** argv) {
|
void print_version(int argc, char** argv) {
|
||||||
cout << short_version() << endl;
|
cout << short_version() << endl;
|
||||||
}
|
}
|
||||||
bool _ = cellar::commands::add_command("version", &print_version);
|
cellar::commands::CommandFunction versioncmd = cellar::commands::command_map["version"] = &print_version;
|
||||||
|
Loading…
Reference in New Issue
Block a user