#include <iostream>
#include <vector>
#include <string>
-#include <cstring>
-#include <cstdio>
+#include <../Sarge/src/sarge.h>
#include <stdlib.h>
-#include <unistd.h>
#ifdef HAVE_READLINE
#include <readline/readline.h>
#include <readline/history.h>
#endif
+////////////////////////////////////////////////////////////////////////////////
+
using namespace std;
std::string promptCompose();
+static std::vector <std::string> contexts;
+std::string composeContexts (bool pretty = false);
+
+int promptClear ()
+{
+ contexts.clear ();
+ return 0;
+}
+
+int promptRemove ()
+{
+ if (contexts.size ())
+ contexts.pop_back ();
+
+ return 0;
+}
+
+int promptAdd (const std::string& context)
+{
+ contexts.push_back (context);
+ return 0;
+}
+
+std::string promptCompose ()
+{
+ return "% ";
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
const std::string getResponse(const std::string & prompt) {
std::string response {
""
};
- // Display prompt, get input.
+ // Display prompt, get input
#ifdef HAVE_READLINE
char * line_read = readline(prompt.c_str());
if (!line_read) {
std::cout << "\n";
response = "<EOF>";
} else {
- // Save history.
+ // Save history
if ( * line_read)
add_history(line_read);
return response;
}
+////////////////////////////////////////////////////////////////////////////////
+
int main(int argc, char** argv)
{
- int status = 0;
- string root_cmd;
- for (int i = 1; i < argc; ++i) {
- root_cmd +=argv[i];
- }
+ // Command line arguments
+ Sarge sarge;
- while (status == 0) {
- // Compose the prompt.
+ sarge.setArgument("h", "help", "Get help.", false);
+ sarge.setArgument("c", "cmd", "Command to execute before entering the shell", true);
+ sarge.setDescription("Make a shell from any command");
+ sarge.setUsage("gen-shell <options> <command>");
+
+ if (!sarge.parseArguments(argc, argv)) {
+ std::cerr << "Couldn't parse arguments..." << std::endl;
+ return 1;
+ }
+
+ if (sarge.exists("help")) {
+ sarge.printHelp();
+ return 0;
+ }
+
+ string arg_cmd;
+ sarge.getFlag("cmd", arg_cmd);
+ arg_cmd += " ";
+
+ // Main program
+ while (true) {
+ // Compose the prompt
auto prompt = promptCompose();
- // Display prompt, get input.
+ // Display prompt, get input
auto command = getResponse(prompt);
- int status = 0;
if (command != "")
{
- // Dispatch command.
- if (command == "<EOF>") status = 1;
+ // Dispatch command
+ if (command == "<EOF>")
+ {
+ return 0;
+ }
else if (command != "")
{
- if (argc == 0) {
- string whole_command=command;
- std::cout << "[" << command << "]\n";
- system (command.c_str ());
- }
- else {
- string whole_command = root_cmd + " " + command;
- std::cout << "[" << whole_command << "]\n";
- system (whole_command.c_str ());
- }
+ string whole_command = arg_cmd + command;
+ system (whole_command.c_str ());
}
}
- if (status == 1)
- return 0;
}
}