]> git.armaanb.net Git - gen-shell.git/blobdiff - src/main.cpp
Major restructuring
[gen-shell.git] / src / main.cpp
index 516f22396109081ec12a451262bf87c3d5d99e01..ae69ebb6f09f1e6ea52e4d6a5a6a9eb1ff542b97 100644 (file)
@@ -1,74 +1,59 @@
-// gen-shell - the generic shell
+// gen-shell - the generic REPL
 // Copyright (c) 2021, Armaan Bhojwani <me@armaanb.net>
 
-#include <cmake.h>
 #include <iostream>
-#include <../Sarge/src/sarge.h>
+#include "sarge.h"
+
 #include <vector>
 #include <string>
 
-#ifdef HAVE_READLINE
 #include <readline/readline.h>
 #include <readline/history.h>
-#endif
 
 ////////////////////////////////////////////////////////////////////////////////
 
 using namespace std;
 
-const std::string getResponse(const std::string & prompt) {
+const std::string
+getResponse(const std::string & prompt) {
   std::string response {
     ""
   };
 
   // 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
-    if ( * line_read)
+    if (*line_read) {
       add_history(line_read);
+    }
 
     response = std::string(line_read);
     free(line_read);
   }
-#else
-  std::cout << prompt;
-  std::getline(std::cin, response);
-  if (std::cin.eof() == 1) {
-    std::cout << "\n";
-    response = "<EOF>";
-  }
-#endif
 
   return response;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 
-int main(int argc, char** argv)
+int
+main(int argc, char** argv)
 {
-
   // Command line arguments
   Sarge sarge;
 
-  sarge.setArgument("a", "after",
-      "Command to execute before leaving the shell", true);
-  sarge.setArgument("b", "before",
-      "Command to execute before entering the shell", true);
-  sarge.setArgument("c", "command", "Command to convert to shell", true);
-  sarge.setArgument("h", "help", "Get help.", false);
+  sarge.setArgument("c", "command", "Command to convert to REPL", true);
+  sarge.setArgument("h", "help", "Show this message.", false);
   sarge.setArgument("p", "prompt", "Define a custom prompt", true);
-  sarge.setArgument("", "no-space",
-      "Dont automatically add spaces after custom prompt and command", true);
-  sarge.setDescription("Make a shell from any executable");
+  sarge.setArgument("q", "quotes", "Treat whole input as argv[1]", false);
+  sarge.setDescription("Make a REPL from any executable");
   sarge.setUsage("gen-shell <options>");
 
   if (!sarge.parseArguments(argc, argv)) {
-    std::cerr << "Couldn't parse arguments..." << std::endl;
+    std::cerr << "Could not parse command line arguments" << std::endl;
     return 1;
   }
 
@@ -77,47 +62,29 @@ int main(int argc, char** argv)
     return 0;
   }
 
-  bool space = true;
-  if (sarge.exists("no-space")) {
-    space = false;
-  }
-
-  // Define input command
   string arg_cmd;
   sarge.getFlag("command", arg_cmd);
-  if ( space )
-    arg_cmd += " ";
 
-  // Define prompt
   string prompt = "";
   sarge.getFlag("prompt", prompt);
-  if ( prompt == "" )
-  {
+  if (prompt == "") {
     prompt = "% ";
-  } else if ( space ) {
-    prompt += " ";
   }
 
-  // Execute before-command
-  string before_command;
-  sarge.getFlag("before", before_command);
-  system (before_command.c_str ());
-
-  // Execute after-command
-  string after_command;
-  sarge.getFlag("after", after_command);
-
   // Do the stuffs!
   while (true) {
     auto command = getResponse(prompt);
 
-    if (command == "<EOF>" || command == "exit" || command == "quit" )
-    {
-      system (after_command.c_str ());
+    if (command == "<EOF>" || command == "exit" || command == "quit" ) {
       return 0;
     } else {
-      string whole_command = arg_cmd + command;
-      system (whole_command.c_str ());
+      string whole_command = arg_cmd + " ";
+      if (sarge.exists("quotes")) {
+        whole_command = whole_command + "\"" + command + "\"";
+      } else {
+        whole_command += command;
+      }
+      system(whole_command.c_str());
     }
   }
 }