]> git.armaanb.net Git - gen-shell.git/blobdiff - src/main.cpp
added argument parsing with Sarge
[gen-shell.git] / src / main.cpp
index 703f46ace9cfc527e844feb5023a160beacbfb9a..a7e95fe751bff9337248f4a3762fde2933c175f0 100644 (file)
@@ -26,6 +26,7 @@
 
 #include <cmake.h>
 #include <iostream>
+#include <Sarge/src/sarge.h>
 #include <stdlib.h>
 
 #ifdef HAVE_READLINE
@@ -33,6 +34,8 @@
 #include <readline/history.h>
 #endif
 
+////////////////////////////////////////////////////////////////////////////////
+
 using namespace std;
 std::string promptCompose();
 
@@ -67,44 +70,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];
-    root_cmd += " ";
-  }
+  // Command line arguments
+  Sarge sarge;
+
+       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>");
 
-  while (status == 0) {
+       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.
     auto command = getResponse(prompt);
 
-    int status = 0;
     if (command != "")
     {
       // Dispatch command.
-      if (command == "<EOF>")                      status = 1;
+      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;
   }
 }