]> git.armaanb.net Git - gen-shell.git/blobdiff - src/main.cpp
combined files
[gen-shell.git] / src / main.cpp
index 5849c28dbd17cc8cf132fb8606cc412420e288da..3d0e2c65d6d3c9e5fed8eadc22a129743b3f9328 100644 (file)
 #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);
 
@@ -72,43 +102,54 @@ const std::string getResponse(const std::string & prompt) {
   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;
   }
 }